2015-02-10 2 views
2

У меня есть хост-файл, который выглядит какИспользование шаблонов для заполнения свойств хоста в файле инвентаризации анзибль

[foo] 
foox 192.168.0.1 id=1 
fooy 192.168.0.1 id=2 
fooz 192.168.0.1 id=3 

Однако, я хотел бы более сжатой форме написать это с помощью шаблонов, как:

[foo] 
foo[x:z] 192.168.0.1 id=[1:3] 

Но это интерпретируется как идентификатор, равный исходному тексту «[1: 3]», а не 1, 2 или 3. Есть ли способ достичь этого в файле инвентаризации, или мне нужно что-то сделать через хост вары и/или групповые вары?

ответ

5

Это невозможно сделать в файле инвентаря. Я думаю, что 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 файлы для номера сервера).

+0

Итак, добавьте хост-инъекцию в игру, которая зависит от нее? Это похоже на ewww. Знаете ли вы хорошие ресурсы для динамических сценариев инвентаризации с образцами? – Shark

+0

Документ на складе довольно хорош на эту тему: http://docs.ansible.com/developing_inventory.html и http://docs.ansible.com/intro_dynamic_inventory.html. Внесение изменений или деконструкция в _ec2_ является хорошим началом –

+0

@Shark Я редактировал «мир привет» динамического инвентаря. –

Смежные вопросы