安装和重新加载AWS动态库存

Modified on: Mon, 04 Nov 2019 15:00:02 +0800

另请参阅:https://stackoverflow.com/questions/29003420/reload-ansibles-dynamic-资源

我的问题:有更好的方法可以做下面的事情吗?

我有一个ansible角色,可以配置AWS机器并正确运行(注意provision标签):

- name: AWS provision
  hosts: localhost
  gather_facts: no
  vars_files:
    - vars/dev.yml
  user: ec2-user
  roles:
    - provision
  tags:
    - provision

然后我有base角色,我希望能够独立运行(例如在开发期间,所以我不必等待重新配置(注意base tag)。我运行一个play find running instances,用于过滤并存储started组中的主机:

- name: find running instances
  hosts: localhost
  vars_files:
    - vars/dev.yml
  gather_facts: no
  tags:
    - base
  tasks:
    - name: gather remote facts
      ec2_remote_facts:
        region: "{{ target_aws_region }}"
        filters:
          instance-state-name: running
          "tag:Name": "{{ instance_name }}"
      register: ec2_facts

    - debug: var=ec2_facts

    - name: add hosts to groups
      add_host:
        name: "{{ item.id }}"
        ansible_ssh_host: "{{ item.public_dns_name }}"
        groups: started
      changed_when: false
      with_items: ec2_facts.instances

- name: base setup
  hosts: started
  gather_facts: no
  vars_files:
    - vars/dev.yml
  user: ec2-user
  roles:
    - base
  tags:
    - base

我的问题:这些游戏正在发挥作用,但还有更好的方法吗?例如,我有gather_facts: no后跟ec2_remote_factsfilters - 这一切看起来都很复杂。

澄清:感谢关于ec2.py的评论 - 我已经在我的第一次播放中使用它了(当我调用provision

但是出于测试目的,我想跳进后续播放而不重新进行(慢速)配置。那么如何重新填充我的主机数据? ec2_remote_facts后面跟add_host正确吗?或者我可以以某种方式使用gather_facts: yes

最佳答案

我可能会使用EC2动态库存脚本,您可以通过配置ec2.ini并将-i ec2.py传递给ansible-playbook

请参阅http://docs.ansible.com/ansible/ intro_dynamic_inventory.html#example-aws-ec2-external-inventory-script了解更多信息。

请注意ec2.ini中有很多选项。一定要看看那些,例如cache_max_age。您还可以通过过滤不必要的资源来更快地生成库存(例如,如果您只对EC2实例感兴趣,请设置rds = False。)

更新:使用Ansible 2.x +,你也可以使用- meta: refresh_inventory播放。

作者:,Jukka

相关问答

添加新评论