Detectando uma rede do ansible playbook usando o nslookup

2

Estou trabalhando em uma configuração do Vagrant + Ansible para minha equipe que configura uma VM de desenvolvedor. Alguns dos artefatos necessários estão disponíveis somente na minha rede corporativa, seja fisicamente ligado ou conectado por VPN.

Se estivermos provisionando em uma máquina que não esteja na rede corporativa, eu gostaria de me conectar automaticamente à nossa VPN (usando o cliente OpenConnect), copiar o arquivo e depois desconectar, tudo da Ansible.

No passado, eu detectei a rede em scripts bash usando algo como: if nslookup hostname | grep 'can't find'; then ...

Minha pergunta: é que existe uma maneira limpa de fazer essa verificação em uma declaração "when" ou algo parecido.

FWIW: Sou relativamente novo no Ansible, por isso, se estiver na documentação deles e eu estiver com saudades, sinta-se à vontade para me apontar e me mostrar de acordo.

    
por Eric Smalling 19.12.2014 / 00:20

1 resposta

3

Sem ficar muito chique, você pode apenas querer usar o módulo de comando e registrar a saída, como segue:

---
 - name: Register nslookup hostname result
   command: nslookup hostname
   register: ns

 - name: Some other task with conditional
   copy: <params go here>
   when: "'server can\'t find' in ns.stdout"

Se você quiser saber um pouco mais sobre as variáveis de registro no Ansible, confira os documentos aqui

Além disso, para referência futura, se você quiser ver o JSON disponível ao registrar um var, poderá fazer algo como o seguinte:

---
 - name: Register nslookup hostname result
   command: nslookup hostname
   register: ns

 - debug: var=ns

E então isso deve mostrar algo como abaixo:

ok: [HOST] => {
    "var": {
        "ns": {
            "changed": true,
            "cmd": [
                "nslookup",
                "hostname"
            ],
            "delta": "0:00:00.054897",
            "end": "2014-12-18 18:51:15.598652",
            "invocation": {
                "module_args": "nslookup hostname",
                "module_name": "command"
            },
            "rc": 0,
            "start": "2014-12-18 18:51:15.543755",
            "stderr": "",
            "stdout": "Server:\t\t192.168.1.1\nAddress:\t192.168.1.1#53\n\n** server can't find hostname: HOSTNAME",
            "stdout_lines": [
                "Server:\t\t192.168.1.1",
                "Address:\t192.168.1.1#53",
                "",
                "** server can't find hostname: HOSTNAME"
            ],
            "warnings": []
        }
    }
}

Depois de ser registrado, você pode acessar qualquer um desses atributos com a notação de ponto em partes posteriores da execução do livro.

Felicidades!

    
por 19.12.2014 / 00:53