Ansible:在不同的子网中创建实例

时间:2016-05-28 18:29:03

标签: amazon-web-services dynamic tags ansible inventory

我正在尝试使用Ansible创建两个实例,使用下面的播放分别在两个子网中创建一个实例。我正在使用带有标签名称的exact_count来跟踪实例。这里有两个问题:

  1. Ansible最终在第一个子网中创建两个实例,并为第二个子网报告[ok]。
  2. Ansible似乎并不关心已停止的实例。它创建新实例,而不是启动现有实例,或至少将它们视为实例组的一部分。
  3.   - name: Create kafka instances
        with_items:
          - "{{ vpc_pvt_subnet_2 }}"
          - "{{ vpc_pvt_subnet_1 }}"
        ec2:    
          group: "{{ kafka_sg }}"  
          key_name: "{{ ec2_keypair }}"  
          region: "{{ region }}"  
          image: "{{ ami_id }}"  
          wait: true   
          instance_type: "{{ kafka_inst_type }}"  
          vpc_subnet_id: "{{ item }}"  
          instance_tags:  
            Name: "kafka-instance"          
            Owner: data  
          exact_count: 2   
          count_tag:  
            Name: "kafka-instance"  
        register: ec2
    

    有人可以告诉我这里的剧本有什么问题吗?

1 个答案:

答案 0 :(得分:2)

假设您要在每个子网中创建1个EC2实例,则您提供的代码段中的一个可见错误是with_items的值应设置为1(而非2),因为ec2将循环以在您的剧本中运行zone模块两次。您希望每次迭代都创建一个实例。

接下来,我将根据您的问题回答 -

1]您还需要为ec2模块指定zone参数。由于vpc_subnet_id根据subnets: - { zone: "us-east-1a", vpc_pvt_subnet: "subnet-abcdafa5"} - { zone: "us-east-1b", vpc_pvt_subnet: "subnet-zyxwvb51"} 是动态的,我建议使用以下结构 -

在你的变种中 -

ec2

- name: "Create kafka instances" with_items: "{{ subnets }}" ec2: group: "{{ kafka_sg }}" key_name: "{{ ec2_keypair }}" region: "{{ region }}" image: "{{ ami_id }}" wait: true instance_type: "{{ kafka_inst_type }}" vpc_subnet_id: "{{ item.vpc_pvt_subnet }}" zone: "{{ item.zone }}" instance_tags: Name: "kafka-instance" Owner: "data" exact_count: 1 count_tag: Name: "kafka-instance" register: ec2 任务 -

state

2]是的,即使一个实例已存在于具有“已停止”状态的子网中,上述方法也将始终创建新实例,就好像此实例从未存在过一样。如果您希望按标记显式启动“已停止”实例,则可以通过将ec2参数传递给新的state任务来实现此目的 - 您无法使用exact_count和{{1} }参数在同一任务中一起。

希望这有帮助!