ansible:从寄存器变量中提取值,以便在同一个剧本中的其他剧本中使用它

时间:2016-08-09 05:59:33

标签: amazon-web-services ansible ansible-playbook amazon-vpc

我正在使用ansible建立完整的环境。出于某种原因,ansible没有获取变量值。

我正在使用ansible 2.1.1.0

这是我正在尝试做的一个例子: 我已经用register: ec2_vpc注册了我的vpc。

1. #This didn't works
    - name: Add to host vars
      add_host:
            name: vpc_vars
            groups: vpc_subnets
            vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
            vpcid: "{{ ec2_vpc.vpc_id }}"
    - debug: var=vpc_subnet_id
    - debug: var=vpcid

2. These works
    - name: Record vpc id
      debug: var=ec2_vpc.vpc_id

    - name: Record subnet id
      debug: var=ec2_vpc.subnets[0].id

导致我上面的条带的json:

TASK [debug] *******************************************************************
ok: [localhost] => {
    "vpc_subnet_id": "VARIABLE IS NOT DEFINED!"
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "vpcid": "VARIABLE IS NOT DEFINED!"
}

TASK [Record vpc id] ***********************************************************
ok: [localhost] => {
    "ec2_vpc.vpc_id": "vpc-4sdh3832f"
}

TASK [Record subnet id] ********************************************************
ok: [localhost] => {
    "ec2_vpc.subnets[0].id": "subnet-edfjdh3482"
}

为什么我的第一个语法不是选择值而是给它VARIABLE IS NOT DEFINED!

更新:这里我的第二个语法描述我正在从注册变量的JSON结果中整理出值。但我希望它适用于我的第一种语法,这意味着我想将主机变量添加到动态库存中。这样我就可以在另一个游戏中重复使用

2 个答案:

答案 0 :(得分:1)

add_host动态地将主机添加到您的广告资源中 我想你只需要set_fact

- name: Add to host vars
  set_fact:
        vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
        vpcid: "{{ ec2_vpc.vpc_id }}"
- debug: var=vpc_subnet_id
- debug: var=vpcid

答案 1 :(得分:1)

正如您所说,您已在ec2_vpc中注册了返回值/结果,那么您将如何获得vpc_subnet_idvpcid。你想通过这个,你必须这样做:

- set_fact:
    vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
    vpcid: "{{ ec2_vpc.vpc_id }}"

希望能帮助你。