Ansible在库存中嵌套变量

时间:2016-12-22 15:04:01

标签: ansible ansible-inventory

我现在已经使用Ansible了一段时间,并且通常在库存中的变量没有问题。但是,我第一次必须覆盖清单中的嵌套变量,并且我希望它能够正常工作......不会。

角色的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不会抛出任何错误,但默认值不会被覆盖。这样做的正确语法是什么?

1 个答案:

答案 0 :(得分:1)

您的示例中没有“嵌套变量”。只有一个变量archiver_configdictionary (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