清单中的 Ansible 嵌套变量
Ansible nested variables in inventory
我使用 Ansible 已经有一段时间了,一般来说,清单中的变量没有问题。然而,这是我第一次必须覆盖清单中的 nested 变量,而我希望它能工作......没有。
角色的default/main.yml
是这样的:
archiver_config:
archiver_folder: "/opt/archiver"
source_folder: "/var/tmp/images"
archive_folder: "/var/tmp/imagearchive"
min_diskspace: 1e6
logfile: "/var/log/archiver.log"
我需要覆盖一些主机的默认存档文件夹,因为其中一些主机为此目的附加了一个外部文件系统,所以我在清单中这样做了:
[tdevices]
10.8.0.38 adeploy_name=16014c archiver_config.archive_folder=/media/ext
我也试过将值放在双引号和单引号中,例如
archiver_config.archive_folder='/media/ext'
但是没用。 Ansible 不会抛出任何错误,但不会覆盖默认值。执行此操作的正确语法是什么?
您的示例中没有 "nested variables"。只有一个变量 archiver_config
是 dictionary (hash).
您不能为清单文件中的字典键赋值。
你可以做的是在 defaults/main.yml
中添加一个变量,将其用作键的值(现在,这可以称为嵌套变量):
archive_folder: "/var/tmp/imagearchive"
archiver_config:
archiver_folder: "/opt/archiver"
source_folder: "/var/tmp/images"
archive_folder: "{{archive_folder}}"
min_diskspace: 1e6
logfile: "/var/log/archiver.log"
并在库存文件中为其赋值:
[tdevices]
10.8.0.38 adeploy_name=16014c archive_folder=/media/ext
我使用 Ansible 已经有一段时间了,一般来说,清单中的变量没有问题。然而,这是我第一次必须覆盖清单中的 nested 变量,而我希望它能工作......没有。
角色的default/main.yml
是这样的:
archiver_config:
archiver_folder: "/opt/archiver"
source_folder: "/var/tmp/images"
archive_folder: "/var/tmp/imagearchive"
min_diskspace: 1e6
logfile: "/var/log/archiver.log"
我需要覆盖一些主机的默认存档文件夹,因为其中一些主机为此目的附加了一个外部文件系统,所以我在清单中这样做了:
[tdevices]
10.8.0.38 adeploy_name=16014c archiver_config.archive_folder=/media/ext
我也试过将值放在双引号和单引号中,例如
archiver_config.archive_folder='/media/ext'
但是没用。 Ansible 不会抛出任何错误,但不会覆盖默认值。执行此操作的正确语法是什么?
您的示例中没有 "nested variables"。只有一个变量 archiver_config
是 dictionary (hash).
您不能为清单文件中的字典键赋值。
你可以做的是在 defaults/main.yml
中添加一个变量,将其用作键的值(现在,这可以称为嵌套变量):
archive_folder: "/var/tmp/imagearchive"
archiver_config:
archiver_folder: "/opt/archiver"
source_folder: "/var/tmp/images"
archive_folder: "{{archive_folder}}"
min_diskspace: 1e6
logfile: "/var/log/archiver.log"
并在库存文件中为其赋值:
[tdevices]
10.8.0.38 adeploy_name=16014c archive_folder=/media/ext