2016-08-09 67 views
0

我使用ansible來設置完整環境。出於某種原因,ansible不會選擇變量值。ansible:從寄存器變量中提取值以在同一劇本中的其他劇本中使用它

我使用ansible 2.1.1.0

這裏是我想要做一個帶例子: 我已經註冊了我的VPC與register: ec2_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結果中篩選出值。但我希望它適用於我的第一個語法,這意味着我想將主機變量添加到動態庫存。以便我可以在其他遊戲中重複使用它

+0

第一種語法不起作用,因爲您將變量添加到名爲「vpc subnets」和組名稱爲「vpc_vars」(用於什麼?)的新主機中...如果您針對'vpc_vars'組運行後續遊戲,您的變量將可見。我無法理解你用這一切努力達到什麼目的。 –

回答

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 
+0

是的,我想動態地將主機添加到庫存。這樣我可以在另一場戲中重複使用它。 'set_fact'不會保存在我分配的變量中。如果我將它保存在動態主機庫存中將會很好 –

+1

你最好在問題本身中描述你的任務。 'set_fact'和'add_host'是出於不同的目的。你總是可以通過'hostvars'變量訪問其他主機的變量。 –

+0

'hostvars'以我想要的方式幫助我。謝謝 –

1

就像你說的,你必須註冊您的返回值/導致ec2_vpc那麼你如何才能得到它vpc_subnet_idvpcid。你想得到它,然後你必須這樣做:

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

希望能幫助你。

+0

我試圖將結果存儲在變量'vpc_subnet_id'或'vpcid'中。這樣我可以在其他遊戲中重複使用。 –

+0

另一件我可以建議你保存文件中的值,然後動態地包含它 –