пожалуйста, во-первых, извините мой вопрос. Я искал и потратил время на просмотр Как перебирать группу инвентаря в доступном ? и Ansible перебирают хосты в инвентаре группа задается переменной стиля вопросов.
Поэтому постараюсь, чтобы вопрос оставался простым.
Инвентарь выглядит так: (это все примеры, адаптированные для лучшего объяснения ..)
[GroupA]
host1 country=USA
host2 country=USA
host3 country=UK
Поэтому я хочу передать группу только без хостов, чтобы playbook выполнялся на каждом хосте. Однако как часть playbook, во-первых, мне нужно запустить скрипт на другом сервере (в зависимости от страны) и передать имя хоста этому скрипту.
В ходе тестирования я обнаружил «inventory_hostname», так что даже если я не передал хост, а передал группу, я мог поместить имя хоста в переменную.
Когда я собрал все это вместе и начал с import_playbook (потому что этот playbook предназначен для другого сервера), я увидел:
Error was a <class 'ansible.errors.AnsibleError'>, original message: An unhandled exception occurred while templating '{{ runninghost }}'. Error was a <class 'ansible.errors.AnsibleError'>, original message: An unhandled exception occurred while templating '{{ v_host_name }}'. Error was a <class 'ansible.errors.AnsibleError'>, original message: recursive loop detected in template string: {{ v_host_name }}
У меня есть сценарий, в котором есть несколько условных обозначений, основанных на "стране".
- hosts: "{{ v_world }}"
vars:
v_world: "{{ v_world }}"
hostvalue : "{{ inventory_hostname }}"
- import_playbook: country-stuff-USA.yml
vars:
v_host_name: "{{ hostvalue }}"
when: hostvars[groups[v_world][0]]['country'] == "USA"
- import_playbook: country-stuff-UK.yml
vars:
v_host_name: "{{ hostvalue }}"
when: hostvars[groups[v_world][0]]['country'] == "UK"
country-stuff-USA.yml
---
- hosts: "world-server-usa.world"
vars:
runninghost: "{{ v_host_name }}"
roles:
- role: world_peace-usa
poll: 0
vars:
hostvalue: "{{ runninghost }}"
country-stuff-UK.yml
---
- hosts: "world-server-usa.world"
vars:
runninghost: "{{ v_host_name }}"
roles:
- role: world_peace-uk
poll: 0
vars:
hostvalue: "{{ runninghost }}"
world_peace-uk ( main.yml )
- name: world_peace-uk
shell: ksh /mountA/scriptuk.sh -host={{hostvalue}}
world_peace-uk ( main.yml )
- name: world_peace-usa
shell: ksh /mountA/scriptusa.sh -host={{hostvalue}}
Есть предположения ? Я уверен, что делаю что-то очень неправильное с этой комбинацией ... но я не мог придумать лучшего способа использовать группы, кроме как передать имя хоста в скрипт в другом поле.
Большое спасибо за чтение!