Это невозможно сделать в файле инвентаря. Я думаю, что set_fact
- ваш лучший выбор, чтобы программно построить инвентарь, это просто.
---
- hosts: all
tasks:
- add_host:
name: "host{{ item }}"
ansible_ssh_host: "127.0.0.1"
ansible_connection: "local"
group: "new"
id: "{{ item }}"
with_sequence: count=3
delegate_to: localhost
run_once: yes
- hosts: new
tasks:
- debug:
msg: "{{ id }}"
Если я правильно помню, возможности дзиндзя были удалены из любого места, которое они не должны были быть, то есть за пределами кавычки, скобки, специальные случаи, как when:
в YML файлах.
Когда я говорю программно, мы говорим о Ansible .. одном из последних кандидатов на земле для сценариев общего назначения. Динамические сценарии инвентаризации - лучший подход к таким проблемам, если мы не говорим о трех серверах точно.
Самый простой инвентаризации сценарий для достижения этой цели будет (в вашем hosts
директории или на который указывает -i
переключатель:
#!/usr/bin/env python
import json
inv = {}
for i in range(3):
inv[i] = {"hosts":["host%s" % i],"vars":{"id":i,"ansible_ssh_host":"127.0.0.1", "ansible_connection":"local"}}
print json.dumps(inv)
Опять же, я боюсь, что нет ничего, как «довольно», как то, что вы» что вы ищете. Если ваш случай использования становится более сложным, то set_fact
, set_host
и group_by
может пригодиться, или сценарий инвентаризации, или group_vars
(я в настоящее время используют group_vars
файлы для номера сервера).
Итак, добавьте хост-инъекцию в игру, которая зависит от нее? Это похоже на ewww. Знаете ли вы хорошие ресурсы для динамических сценариев инвентаризации с образцами? – Shark
Документ на складе довольно хорош на эту тему: http://docs.ansible.com/developing_inventory.html и http://docs.ansible.com/intro_dynamic_inventory.html. Внесение изменений или деконструкция в _ec2_ является хорошим началом –
@Shark Я редактировал «мир привет» динамического инвентаря. –