Как читать многострочный аргумент в Ansible - PullRequest
0 голосов
/ 01 ноября 2019

Я передаю многострочную переменную host_list из Jenkins в ansible, которая содержит список хостов.

Мне нужно построчно прочитать каждый хост и добавить его в модуль add_host от ansible.

Ниже показано, как выглядит мой многострочный аргумент.

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

Но ни один из них не работает.

Запрос предложений.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Вы можете передать в виде массива в дополнительных переменных, как показано ниже

-e '{"host_list": [10.9.9.19,10.9.55.16,10.9.44.26]}'

Но всегда полезно добавить их в инвентарь в качестве группы и использовать имя группы в playbook

Inventory:
[host_list]
10.9.9.19
10.9.55.16
10.9.44.26

Используйте ниже для просмотра каждого хоста

with_items: "{{ groups['host_list'] }}"
0 голосов
/ 01 ноября 2019

Предупреждение : это абсолютно некрасиво и должно быть заменено любым другим правильным способом достижения вашего результата (не исчерпывающим, в том числе: определение списка хостов в группе в вашем инвентаре, включая файл, содержащий определениевашего списка в yaml / json, передавая var как extra 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 
...