Ansible: Extrai o valor das variáveis de registro para usá-lo em outras jogadas dentro do mesmo manual.

1

Estou configurando um ambiente completo usando o Ansible. Por alguma razão, a Ansible não está captando valores variáveis.

Estou usando o Ansible 2.1.1.0.

Aqui está um exemplo do que estou tentando fazer:

Eu registrei meu vpc com 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

Resultado da faixa acima:

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"
}

Por que minha primeira sintaxe não está escolhendo o valor, ela está retornando VARIABLE IS NOT DEFINED!

Atualizado : Aqui, minha segunda sintaxe descreve que estou classificando corretamente o valor do resultado JSON da variável registrada. Mas quero que funcione para a minha primeira sintaxe, o que significa que quero adicionar variáveis de hosts ao inventário dinâmico. Para que eu possa reutilizá-lo em outra peça

    
por Nagarjuna D N 09.08.2016 / 08:15

1 resposta

2

add_host module cria um host na lista dinâmica de hosts. Você então executa outra jogada (no mesmo livro de jogadas) contra este grupo de hosts e de dentro dessa jogada você poderá acessar as variáveis que você definiu.

Por exemplo, com a seguinte sintaxe:

- 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

O add_host no exemplo acima cria um arquivo de inventário na memória com o seguinte conteúdo:

[dynamic_hosts]
host_1 vpc_subnet_id="{{ ec2_vpc.subnets[0].id }}" vpcid="{{ ec2_vpc.vpc_id }}"
    
por 09.08.2016 / 09:15