Como posso definir um fato baseado na existência de um arquivo usando um parâmetro para o nome do arquivo?

1

Isso é o que eu criei para um único host

- name: Check for Let's Encrypt certificate
  block:
    - name: Set default for variable
      set_fact:
        use_letsencrypt: false

    - name: Get stat for cert file
      stat:
        path: /etc/letsencrypt/live/{{ hostname }}/cert.pem
      register: certificate_file

    - name: Set letsencrypt to true if certificate exists
      set_fact:
        use_letsencrypt: true
      when: certificate_file.stat.exists

Como posso fazer isso mais seco? Passe um nome de host e ele retorna um verdadeiro ou falso para a variável.

Editar: mais informações para torná-lo mais claro. Já funciona bem como é.

Eu quero usar o snippet acima para mais de um host em diferentes playbooks sem copiar e colar o snippet todas as vezes.

Eu uso a variável use_letsencrypt em diferentes arquivos de configuração de email e web e gostaria de dizer que estou ocupado configurando um config para example.com, tenho um certificado para ele.

    
por Dax 05.11.2017 / 10:37

2 respostas

3

OK. Então, brincando e lendo mais alguns documentos, encontrei a resposta.

Você pode colocar o snippet acima em sua própria função e incluí-lo toda vez que precisar.

- name: Set use_letsencrypt
  include_role:
    name: has_letsencrypt
  vars:
    hostname: example.com

Então ele age como um módulo e você passa um var. Eu posso usar esse snippet várias vezes em diferentes playbooks agora.

    
por 05.11.2017 / 14:57
0

Não tenho certeza se entendi direito.

Espero que o código postado seja apenas um recorte de um manual completo.

Para passar a variável apenas temporariamente, você pode usar o parâmetro -e do ansible-playbook:

  -e EXTRA_VARS, --extra-vars=EXTRA_VARS
                        set additional variables as key=value or 
                        YAML/JSON, if filename prepend with @

Então, você executaria o "ansible-playbook" como:

ansible-playbook -e "hostname=YourHostname" your.yaml

E se você não quiser rodar em todos os nós especificados no playbook / role, você pode limitá-lo a partir da linha de comando também. Use o parâmetro -l:

  -l SUBSET, --limit=SUBSET
                        further limit selected hosts to an additional 
                        pattern

O comando seria então:

ansible-playbook -e "hostname=YourHostname" -l YourHostname your.yaml

Se você quiser ansible para obter o hosname local, está disponível via módulo de configuração. Bandeja para usar {{ansible_hostname}} em vez de seu {{hostname}}.

Se você quiser ver a lista completa de variáveis fornecidas pelo módulo setup, apenas execute:

ansible -m setup <your host>
    
por 05.11.2017 / 13:40

Tags