2017-06-21 94 views
1

我有一个困难的时间引用我刚创建的EC2资源的实例ID。在创建它之后,我会立即想要终止它。我的代码如下:引用刚在Ansible中创建的EC2资源的实例ID

谢谢你,比尔

--- 
- name: Example of provisioning servers 
    hosts: 127.0.0.1 

    connection: local 
    tasks: 
    - name: set_fact1 
    set_fact: foo = 1 

    - name: Create security group 
    local_action: 
     module: ec2_group 
     name: ep2 
     description: Access to the Episode2 servers 
     region: us-east-1 
     rules: 
     - proto: tcp 
      from_port: 22 
      to_port: 22 
      cidr_ip: 0.0.0.0/0 

    - name: Launch instances 
    local_action: 
     module: ec2 
     instance_tags: 
     Name: server1 
     Env: myenv 
     region: us-east-1 
     keypair: ansiblekeypair 
     group: ep2 
     instance_type: m1.small 
     image: ami-1aae3a0c 
     count: 1 
     wait: yes 
    register: ec2 

    - name: Terminate instances that were previously launched 
    ec2: 
     state: absent 
     region: us-east-1 
     instance_ids: "{{ ec2.instance_id[0] }}" 
    with_items: ec2 
+0

请你分享你ansible任务? – tux

+0

哎呀..对不起,忘了分享堆栈。 – Backwardation25

+0

重新格式化它。 – Backwardation25

回答

2

您需要引用ec2.instances[0].id

使用- debug: var=ec2任务或使用-vv开关执行剧本可以查看已注册变量的详细值并检查可用的属性。

+0

谢谢。这正是我需要的。 – Backwardation25

0

如果你想终止刚刚推出的情况下(假设他们的标记是特定的),你也可以使用exact_count设施:

exact_count: 0 
    count_tag: 
    - Name: server1 
    - Env: myenv 

按照美国商务部(亮点矿):

exact_count

一个整数值,指示应该运行多少个与参数count_tag匹配的实例。根据此值创建实例或终止

count_tag

exact_count用于确定如何基于特定的标签标准,很多节点都必须运行。 [...]

它会看到这样的:

- name: Terminate instances 
    local_action: 
     module: ec2 
     instance_tags: 
     Name: server1 
     Env: myenv 
     region: us-east-1 
     keypair: ansiblekeypair 
     exact_count: 0 
     count_tag: 
     - Name: server1 
     - Env: myenv 
     wait: yes