Ansible, AWS, outro host baseado na tag

2

Estou criando playbooks Ansible que criam a infraestrutura do nosso sistema na AWS. Obviamente, inventários dinâmicos usando ec2.py estão envolvidos.

Primeiro, criei um servidor de utilitários, depois um servidor da Web e tenho um manual separado para cada um deles. Eu tenho arquivos no servidor da web que precisam ter o ip privado do servidor de utilitários adicionado usando um modelo.

Qual é a melhor maneira de recuperar o ip privado do servidor utilitário para uso no playbook do servidor web?

    
por sheetzam 15.06.2016 / 20:59

2 respostas

0

Houve três problemas:

  1. Você precisa de informações de outro servidor para usar no atual servidor que você está configurando.
  2. O outro servidor do qual você precisa de informações está hospedado na AWS.
  3. O outro servidor para o qual você precisa acessar informações tem um nome de variável.

A solução para 3 é especificar a variável na linha de comando usando extra-vars como: ansible-playbook -i ./ec2.py --extra-vars "caos = teste "aws_playground.yaml

A solução para 2 é encontrar o nome do host que você precisa da variável de grupos hostvars. Quando combinado com 3 acima, você quer algo como: - debug: var = hostvars [grupos ['tag_Name _' + caos + '_ util'] [0]] ansible_all_ipv4_addresses [0]

A solução para 1 é coletar os dados do outro servidor antes de trabalhar no servidor que você está configurando. Abaixo está uma cartilha coletando tudo isso em um só lugar:

# Called like: ansible-playbook -i ./ec2.py --extra-vars "chaos=test" aws_playground.yaml
- name: Collect our facts on util
  hosts: "tag_Name_{{ chaos }}_util"
  tasks: [ ]

- name: Set up a web server
  hosts: "tag_Name_{{ chaos }}_web"
  tasks:
   - debug: var=hostvars[groups['tag_Name_'+chaos+'_util'][0]].ansible_all_ipv4_addresses[0]
    
por 22.06.2016 / 21:36
1

Os IPs dos servidores são parte dos fatos detectáveis sobre os hosts. Esses fatos são recuperados automaticamente quando você executa um playbook, a menos que você desabilite explicitamente gather_facts .

E, mesmo assim, você pode usar explicitamente o módulo setup para coletar os fatos.

Esses valores podem ser usados nas próximas tarefas.

Como exemplo:

$ ansible -c local -m setup -a 'filter=ansible_*address*' localhost                                                                              
127.0.0.1 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.17.0.1", 
            "192.168.122.1", 
            "192.168.0.12", 
            "172.18.0.1"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::e8b5:946f:410b:aff5"
        ]
    }, 
    "changed": false

}

    
por 16.06.2016 / 23:15