Encontre um programa que possa estar em vários lugares diferentes com o Ansible

1

Estou ansibilizando alguns servidores para uma aplicação python, alguns dos quais são CentOS, outros são debian.

Existe uma maneira conveniente de localizar um programa que possa ser instalado em vários lugares, sem recorrer ao exemplo abaixo, e sem repetir o mesmo comando várias vezes (com diferentes cláusulas when: )?

Por exemplo, no CentOS é /sbin/nologin , no debian é /usr/sbin/nologin . Eu tenho tentado encontrar e registrar o caminho em uma variável, mas parece bobo:

- name: Find nologin
  command: ls -1 /usr/sbin/nologin
  ignore_errors: yes
  register: nologin_command

- name: Find nologin 
  command: ls -1 /sbin/nologin
  register: nologin_command
  when: nologin_command.stdout == ""

# nologin_command.stdout will be the path to one or the other

No meu caso particular, estou realmente tentando encontrar o virtualenv_command correto para o módulo pip . Eu tenho que ser específico ou eu vou ter o errado (ou seja, para o Python 2) ou um caminho que não existe.

Meus sistemas terão um de pyvenv, pyvenv-3.4, virtualenv ou virtualenv-3.4. Pelo menos um estará presente, mas, dependendo do sistema operacional e de como o python foi instalado, eles estão em lugares diferentes ou não existem.

    
por Seth 02.12.2015 / 23:23

1 resposta

0

Se você soubesse as regras que você pode usar para inferir o local, seria melhor usá-las (o CentOS com python2.7 deveria ter isso ...)

Bem, você provavelmente poderia fazer algo como

- name: Find nologin
  command: ls -1 /usr/sbin/nologin /sbin/nologin /usr/local/sbin/nologin
  ignore_errors: yes
  register: nologin_command

IMHO um loop usando with_items , embora mais legível, tornaria o resultado mais difícil de usar. Ou talvez use find nos diretórios possíveis:

 - name: Find venv
   command: find /usr/bin /usr/local/bin /opt -executable -type f -name pyvenv -o -name pyvenv-3.4 -o -name virtualenv -o name virtualenv-3.4
   ignore_errors: yes
   register: nologin_command

Depois de encontrá-lo, em vez de registrar a variável, não será difícil armazená-la como um fato personalizado, para que fique disponível na próxima vez: link

    
por 14.12.2015 / 15:44

Tags