Я интегрирую Ansible с Python и MySQL DB. Часть моего варианта использования заключается в том, что, учитывая имя группы для Ansible, отправьте это имя группы на python, который читает db, и возвращает список IP-адресов, соответствующих этому имени группы. Для теста я хочу выполнить ping возвращенные IP-адреса.Динамическое присвоение атрибута hosts в Ansible from Python
Вот мой сборник пьесы для достижения того же:
name: run a cmd
hosts: localhost
connection: local
tasks:
name: runs a python script with a parameter
shell: python /pythonScripts/AnsibleDBRead.py <someGroupName>
register: py_ret
- set_fact:
ip_list: "{{py_ret.stdout}}"
- debug: var=hostvars['localhost']['ip_list'] # option to set messages here as well but not both together
name: png the hosts returned
hosts: hostvars['localhost']['ip_list'] #this does not work
#hosts: [ "127.0.0.1", "54.147.177.9"] #this works same value but hardcoded
tasks:
- debug: var=hostvars['localhost']['ip_list'] # able to print the value
Я пытаюсь установить значение, хранящееся в ip_list
как hosts:
для второй игры, но без какого-либо успеха. Ошибка, которую я получаю, не соответствует хостам. Вот результат, который прогоняется с компиляцией с жесткой кодировкой. Игнорируйте форматирование скрипта.
PLAY [run a cmd] ***************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [runs a python script with a parameter] ***********************************
changed: [localhost]
TASK [set_fact] ****************************************************************
ok: [localhost]
TASK [debug] *******************************************************************
ok: [localhost] => {
"hostvars['localhost']['ip_list']": [
"127.0.0.1",
"54.147.177.9"
]
}
PLAY [png the hosts returned] **************************************************
skipping: no hosts matched
PLAY RECAP *********************************************************************
localhost : ok=4 changed=1 unreachable=0 failed=0
от того, что я прочитал, я должен быть в состоянии получить доступ к переменной, объявленной в одной игре в другой игре, используя hostvars
. Любая помощь приветствуется.
Спасибо! это сработало для меня. Не могли бы вы объяснить значение «join», поскольку значение, возвращаемое с python, уже было разделено запятой? – shshnk
Вход 'ip_list' был разделен запятой, но был преобразован в объект списка, поэтому' ip_list' является объектом списка, 'ip_list ' join (',') 'преобразует его в строку. – techraf