2015-04-09 5 views
0

Я использую доступные серверы предоставления EC2, используя динамический инвентарь и точный_касс. Это позволяет мне масштабироваться вверх/вниз, когда мне нужно, что приятно.Ansible EC2 со статическим инвентарем

Теперь мне нужно добавить уникальную переменную в среду на каждом сервере, когда я их создаю. Один из способов я думал сделать это с помощью файла инвентаризации, как это:

[ec2-servers] 
host1 myvar=abc 
host2 myvar=def 
... 

где host1 (2) каким-то образом относятся к соответствующему примеру EC2, через tag_SomeName_host1 или аналогичный.

Но это не связано с тем, как я в настоящее время предоставляет серверы. Динамическая инвентаризация с помощью точного_колла дает мне набор идентичных серверов клонов.

Есть ли способ, которым я могу определить серверы в моем файле инвентаризации, и иметь его в ec2, если он не существует, и удалить его, если сервер существует в ec2, но не в инвентаре?

например.

Я бег моего сборника пьес в первый раз с инвентарем:

[ec2-servers] 
host1 myvar=1 

Позже мне нужно масштабировать так, редактировать инвентарь:

[ec2-servers] 
host1 myvar=1 
host2 myvar=2 

и анзибль игнорируют host1, как это уже существует , то предписывает экземпляр для host2.

Тогда позже я больше не нужен дополнительный сервер, так изменить инвентарь:

[ec2-servers] 
host1 myvar=1 

и анзибль удаляет host2 из EC2.

ответ

0

No. анзибль не [помощи]:

  • сохранить историю изменений файла инвентаризация
  • сравнить каждый раз, когда есть изменение
  • выполнить playbooks/играет/задачу условно основанную по обнаруженным изменениям.

Вам необходимо самостоятельно построить логику в учебнике.

Что-то подобное, my_playbook.yml:

- hosts: to_be_provisioned 
    tasks: 
    - include: provision_ec2_host.yml 

- hosts: to_be_unprovisioned 
    tasks: 
    - include: unprovision_ec2_host.yml 

как unprovision_ec2_host.yml & provision_ec2_host.yml должны быть идемпотентна конечно.

Теперь необходимо убедиться, что в вашем инвентаре установлен правильный набор хостов под группами-хозяевами to_be_provisioned & to_be_unprovisioned и запустите my_playbook.yml.

$ cat inventory.ini 
[to_be_provisioned] 
host1 myvar=1 

[to_be_unprovisioned] 
host2 myvar=2 

$ ansible-playbook -i inventory.ini my_playbook.yml 
$ # modify inventory 
$ cat inventory.ini 
[to_be_provisioned] 
host1 myvar=1 
host2 myvar=2 

# [to_be_unprovisioned] -- no hosts 

$ ansible-playbook -i inventory.ini my_playbook.yml 
$ # modify inventory 
$ cat inventory.ini 
[to_be_provisioned] 
host1 myvar=1 

[to_be_unprovisioned] 
host2 myvar=2 

$ ansible-playbook -i inventory.ini my_playbook.yml 

Наконец, чтобы сделать все это дело автоматически, вы можете использовать dynamic inventory. Я рекомендую просто сделать копию существующего ec2.py и изменить его, чтобы он возвращал группы по своему желанию.

+0

Спасибо! Я понял, как много. Моя альтернатива выглядит несколько похожей на ваше предложение, так что это на правильном пути. – tommclaughlan