我有一个使用Packer构建VM的工具,而Packer又调用Ansible(在本地模式下)来完成繁重的工作。
我希望能够将参数传递给Packer(得到那个),这个参数作为额外的vars传递给Ansible。
我可以传递外部变量文件以及一个简单的变量,例如下面的例子。
ansible-playbook -v -c local something.yml --extra-vars "deploy_loc=custom"
好吧,但我确实需要传递更复杂的变量数组,例如下面的例子 我尝试过多种格式,例如下面的格式,通常会出现某种分隔符错误。
ansible-playbook -v -c local something.yml --extra-vars 'deploy_loc=custom deploy_scen: [custom][ip=1.2.34]}'
角色变量文件
# Which location
deploy_loc: 'external-dhcp'
# location defaults
deploy_scen:
custom:
ipv4: yes
net_type: dhcp
ip: '1.1.1.1'
prefix: '24'
gw: '1.1.1.1.254'
host: 'custom'
domain: 'domain.com'
dns1: '1.1.1.2'
standard-eng:
ipv4: yes
net_type: none
ip: '12.12.12.5'
prefix: '24'
external-dhcp:
ipv4: yes
net_type: dhcp
答案 0 :(得分:2)
我认为生成yaml文件并将其与vars_files
一起使用会更加健壮和可读。
或者,您可以生成一个json文件,并使用文件lookup
和from_json
过滤器对其进行读取和解析。像这样:
- name: Read objects
set_fact: deploy_scen={{lookup('file', 'deploy_scen.json') | from_json}}
但是,如果你真的想要--extra-var,你可以使用dict()函数:
-e 'var={{dict(key1=dict(subkey1="value"),key2=dict(subkey1="value2"))}}'
答案 1 :(得分:0)
您可以通过extra-vars参数将json结构传递给ansible。你必须要小心一点,以确保它已正确设置。您希望参数看起来像这样:
--extra-vars {"param1":"foo","param2":"bar","file_list":[ "file1", "file2", "file3" ]}
当我做这样的事情时,我通常会编写一个小的bash包装器脚本,以确保正确设置额外的vars,然后调用ansible。