ansible como obter host do inventário na tarefa

2

Eu tenho dois estoques, encenação e produção.
conteúdo de teste:

[webserver]
192.168.56.101  #server 1
192.168.56.103  #server 2

conteúdo de produção:

[webserver]
192.168.56.108  #server test

Eu pego um arquivo do servidor 1 e quero entregá-lo ao teste do servidor e descompactá-lo.
meu ansible script é como:

- name: fetch archived file to local machine
  fetch:
    src: /tmp/code_release_version_{{ release_version }}.tar.gz
    dest: /tmp/code_release_version_{{ release_version }}.tar.gz
    flat: yes
  tags: test

- name: copy archived file to another remote server on /tmp directory
  copy:
    src: /tmp/code_release_version_{{ release_version }}.tar.gz
    dest: /tmp/code_release_version_{{ release_version }}.tar.gz
  delegate_to: 192.168.56.108
  tags: test

- name: extract files
  unarchive:
    src: /tmp/code_release_version_{{ release_version }}.tar.gz
    dest: /var/www
    copy: no
  delegate_to: 192.168.56.108
  tags: test

Eu jogo:

ansible-playbook -i staging --extra-vars "host=webserver[0] user=emma release_version=1" --ask-sudo-pass playbook.yml --tags "test"

como obter o host do inventário em vez de gravar o host manualmente, como eu faço delegate_to: 192.168.56.108 ?

Obrigado antes.

    
por Fatimah Wulandari 29.10.2015 / 21:08

1 resposta

0

Eu não acho que você pode usar o mesmo nome de grupo para diferentes grupos de servidores (seja em diferentes ambientes ou não).

você está usando o arquivo de inventário de um ambiente ao executar o manual:

ansible-playbook -i staging ... --extra-vars "host=webserver[0]" playbook.yml 

Em vez disso, você pode tentar ter um terceiro arquivo de inventário para esse tipo de tarefa, no qual todos os servidores estão incluídos.

Eu estou supondo que você playbook.yml é algo como:

hosts: "{{ host }}"
tasks:
- name: fetch archived file to local machine
  fetch:
...

- name: copy archived file to another remote server on /tmp directory
  copy:
..
  delegate_to: 192.168.56.108

para uma solução alternativa para evitar que o delegado_ use o arquivo de inventário incluído (vamos identificá-lo: all):

[webserverdev]
192.168.56.101  #server 1
192.168.56.103  #server 2

[webserverprod]
192.168.56.108  #server test

então, um livro de exercícios como o seguinte:

hosts: webserverdev[0]
tasks:
- name: fetch archived file to local machine
  fetch:
...

hosts: webserverprod[0]
- name: copy archived file to another remote server on /tmp directory
  copy:
..

executando o playbook usando o novo inventário:

ansible-playbook -i all ... playbook.yml 
    
por 04.11.2015 / 15:10

Tags