我从Jenkins传递了一个名为host_list的多行变量到ansible,其中包含主机列表。
我需要逐行读取每个主机,并将其添加到ansible的add_host模块中。
下面是我的多行参数的样子。
ansible-playbook /app/upgrade_tomcat.yml -i /tmp/inventory1775725953939119720.ini -t validate -f 5 -e tomcat_home=/app/tomcat -e host_list='10.9.9.19
10.9.55.16
10.9.44.26
' -e USER=user1
我尝试了以下操作,但不起作用。
---
- name: "Find the details here"
hosts: localhost
tasks:
- add_host: name={{ item }}
groups=dest_nodes
ansible_user={{ USER }}
with_items: "{{ host_list.split('\n') }}"
我什至尝试了以下方法:
host_list.splitlines()
host_list.split( )
但是它们都不起作用。
请求建议。
警告:这绝对很难看,应该用其他任何正确的方法来实现结果(并非详尽无遗,包括:在清单中的组中定义主机列表,包括一个包含列表定义的文件在yaml / json中,将var作为额外的var直接传递到yaml / json中。...]
此警告后,这是针对您当前情况的可行解决方案。只需正确引用值即可。
命令
ansible-playbook playbook.yml -e 'my_list="toto
pipo
bingo"'
剧本
---
- name: Passing abolutely ugly vars on command line
hosts: localhost
gather_facts: false
tasks:
- name: Split ugly extra var
debug:
msg: "{{ my_list.splitlines() }}"
结果:
PLAY [Passing abolutely ugly vars on command line] ***********************************************************
TASK [Split ugly extra var] **************************************************************************************
ok: [localhost] => {
"msg": [
"toto",
"pipo",
"bingo"
]
}
PLAY RECAP ***************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
您可以通过数组在Extra-vars中进行传递,如下所示
-e '{"host_list": [10.9.9.19,10.9.55.16,10.9.44.26]}'
但是最好将它们作为一个组添加到清单中,并在剧本中使用组名
Inventory:
[host_list]
10.9.9.19
10.9.55.16
10.9.44.26
在下面使用以遍历每个主机
with_items: "{{ groups['host_list'] }}"