Назад | Перейти на главную страницу

Ansible: извлеките значение из переменных регистра, чтобы использовать его в других играх в той же книге.

Я настраиваю полную среду с помощью Ansible. По какой-то причине Ansible не принимает значения переменных.

Я использую Ansible 2.1.1.0.

Вот пример того, что я пытаюсь сделать:

Я зарегистрировал свой vpc в register: ec2_vpc.

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

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

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

Результат вышеуказанной полосы:

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 зарегистрированной переменной. Но я хочу, чтобы он работал для моего 1-го синтаксиса, что означает, что я хочу добавить переменные хоста в динамический инвентарь. Чтобы я мог повторно использовать его в другой пьесе

add_host модуль создает хост в динамическом списке хостов. Затем вы запускаете другую игру (в той же книге) против этой группы хостов, и внутри этой игры вы сможете получить доступ к установленным вами переменным.

Например, со следующим синтаксисом:

- hosts: all
  # ...
  tasks:
    - name: Add to host vars
        add_host:
          name: host_1
          groups: dynamic_hosts
          vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
          vpcid: "{{ ec2_vpc.vpc_id }}"

- hosts: dynamic_hosts
  # ...
  tasks:
    - debug: var=vpc_subnet_id
    - debug: var=vpcid

В add_host в приведенном выше примере создается файл инвентаризации в памяти со следующим содержимым:

[dynamic_hosts]
host_1 vpc_subnet_id="{{ ec2_vpc.subnets[0].id }}" vpcid="{{ ec2_vpc.vpc_id }}"