0

Я настраиваю полную среду с использованием доступной. По какой-то причине невозможно исключить значения переменных.ansible: Извлечь значение из регистровых переменных, чтобы использовать его в других играх в одном и том же playbook

Я использую анзибль 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_id или vpcid. вы должны это получить, тогда вам нужно сделать это:

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

Надеюсь, что вам помогут.

+0

Я пытаюсь сохранить мои результаты в переменных 'vpc_subnet_id' или' vpcid'. Чтобы я мог использовать его в другой игре. –

+0

Другое, что я могу предложить вам сохранить значения в файле, а затем включить его динамически –