首页 文章

Ansible EC2带有静态库存

提问于
浏览
0

我正在使用ansible在EC2上配置服务器,使用动态库存和exact_count . 这让我可以在需要时放大/缩小,这很好 .

现在我需要在配置它们时为每个服务器上的环境添加一个唯一变量 . 我想到这样做的一种方法是使用像这样的库存文件:

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

其中host1(2)通过tag_SomeName_host1或类似方式以某种方式引用相关的EC2实例 .

但这与我目前配置服务器的方式无关 . 使用exact_count的动态库存为我提供了一组相同的克隆服务器 .

Is there a way I can define servers in my inventory file, and have ansible provision it in ec2 if it doesn't exist, and remove it if a server exists in ec2 but not the inventory?

例如

我第一次使用库存运行我的剧本:

[ec2-servers]
host1 myvar=1

然后我需要扩展以便编辑库存:

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

和ansible忽略host1,因为它已经存在,然后为host2配置一个实例 .

然后我不再需要额外的服务器,所以修改库存:

[ec2-servers]
host1 myvar=1

和ansible从ec2中删除host2 .

1 回答

  • 0

    没有.Ansible不[关注]:

    • 维护库存文件的修订历史记录
      每次发生变化时都会进行

    • 比较

    • 根据检测到的变化有条件地执行playbooks / plays / tasks .

    您需要在剧本中自己构建逻辑 .

    像, 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
    

    最后,要自动完成这一切,您可以使用dynamic inventory . 我建议只复制现有的 ec2.py 并进行修改,以便根据需要返回组 .

相关问题