[英]Ansible EC2 with a static inventory
我正在使用ansible通過動態庫存和exact_count在EC2上配置服務器。 這使我可以在需要時按比例放大/縮小,這很好。
現在,在設置服務器時,需要在每個服務器的環境中添加一個唯一變量。 我想到的一種方式是使用清單文件,如下所示:
[ec2-servers]
host1 myvar=abc
host2 myvar=def
...
其中主機1(2)以某種方式參考相關EC2實例,經由tag_SomeName_host1或相似。
但這與我當前配置服務器的方式不相關。 具有精確計數的動態清單為我提供了一組相同的克隆服務器。
有沒有一種方法,我可以定義在我的庫存文件服務器,並有ansible規定它在EC2上,如果它不存在,如果一台服務器在EC2存在,但不清單中移除?
例如
我第一次使用清單運行我的劇本:
[ec2-servers]
host1 myvar=1
然后,稍后我需要按比例放大,因此請編輯庫存:
[ec2-servers]
host1 myvar=1
host2 myvar=2
ansible會忽略host1(因為它已經存在),然后為host2設置一個實例。
然后,以后我不再需要額外的服務器,因此可以修改清單:
[ec2-servers]
host1 myvar=1
並且ansible從ec2中刪除host2。
不。Ansible不會[關心]:
您需要自己在劇本中構建邏輯。
類似於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
最后,要自動完成全部操作,您可以使用動態清單 。 我建議僅復制現有ec2.py
並對其進行修改,以便它根據需要返回組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.