Ansible: compartilha variáveis de inventário entre grupos

4

Eu tenho uma cartilha com duas jogadas, uma local e outra remota. Eu tenho dois inventários, um para teste e outro para produção. Cada inventário define uma variável para o grupo remoto, mas eu gostaria de usar a variável na reprodução local sem usar delegação. Isso é possìvel e como eu faria isso?

Exemplo de Manual:

- hosts: local
  tasks:
    # ... lots of local build steps here
    - command: tar -czf {{ archive_name }} /build_dir
- hosts: remote
  tasks:
    - unarchive: src={{ archive_name }} dest=/deploy_dir

Inventário de teste:

[local]
127.0.0.1

[remote]
test.example.com

[remote:vars]
archive_name=/tmp/test-build.tgz

Inventário de produção:

[local]
127.0.0.1

[remote]
www.example.com

[remote:vars]
archive_name=/tmp/production-build.tgz

Este exemplo falha porque {{ archive_name }} não está definido para o grupo local .

Uma solução para isso teria as seguintes restrições:

  • Não posso colocar em um arquivo em group_vars porque tenho inventários diferentes com os mesmos nomes de grupo.
  • Prefiro não delegar as tarefas do processo de construção em vez de usar uma peça separada.
  • Eu gostaria de manter a variável no arquivo de inventário e não carregar dinamicamente outros arquivos.

A única opção que vejo no momento é definir {{ archive_name }} novamente para o grupo local , mas isso é propenso a erros.

    
por chiborg 09.08.2016 / 16:06

1 resposta

2

Você deve conseguir acessar o valor de archive_name a hostvars :

- hosts: local
  tasks:
    # ... lots of local build steps here
    - command: tar -czf {{ hostvars[groups['remote'][0]]['archive_name'] }} /build_dir
- hosts: remote
  tasks:
    - unarchive: src={{ hostvars[groups['remote'][0]]['archive_name'] }} dest=/deploy_dir
    
por 09.08.2016 / 16:33