簡體   English   中英

具有靜態清單的Ansible EC2

[英]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.ymlprovision_ec2_host.yml都應是冪等的。

現在,您需要確保清單在to_be_provisionedto_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM