如何在Ansible中读取多行参数

问题描述 投票:0回答:2

我从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( ) 

但是它们都不起作用。

请求建议。

ansible arguments multiline
2个回答
0
投票

警告:这绝对很难看,应该用其他任何正确的方法来实现结果(并非详尽无遗,包括:在清单中的组中定义主机列表,包括一个包含列表定义的文件在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 

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'] }}"
© www.soinside.com 2019 - 2024. All rights reserved.