Posso registrar diretamente a saída de um comando em ansible como booleano?

3

Eu tenho algum código para verificar a existência de algo. Se tiver duas linhas, significa que o post existe. Posso registrar a variável do cheque em um booleano imediatamente na primeira tarefa, em vez de precisar lançá-la no segundo? Minha solução atual:

- name: Check if home page has been created
  sudo_user: www-data
  shell: wp post list --post_type=page --post_title=Home --post_status=publish
    chdir={{wordpress_path}}
  register: is_homepage_created

- name: Booleanize homepage check
  set_fact:
    is_homepage_created={{is_homepage_created.stdout_lines|length >= 2}}
    
por Kit Sunde 25.08.2015 / 19:08

2 respostas

3

Eu não penso assim, já que você precisa usar set_fact para configurá-lo para algo diferente de sua saída real, e eu não acho que shell possa retornar um booleano diretamente.

Eu acredito que a maneira usual de fazer isso é replicar a condicional que você tem na tarefa "booleanize" em todos os lugares em que você usa o fato, o que é algo que você, compreensivelmente, deseja evitar. Infelizmente, a funcionalidade de registro é bastante simples.

Você provavelmente poderia usar uma combinação de failed_when e ignore_errors: yes para implementar tal funcionalidade, mas ao fazer isso falharia em executar o mapa de comandos do shell em um booleano ou outro, então eu não o recomendaria.

    
por 25.08.2015 / 19:42
0

Depois de algumas conversas com wp , não consegui filtrar a saída no título da postagem. Sempre exibia uma lista de todas as páginas. Isso pode não ser relevante para você, mas pode.

Dado esse aparente bug, eu reescrevi a peça da seguinte maneira:

Primeiro, tenha a saída wp no formato CSV, que será mais fácil de trabalhar. Em seguida, verifique se a saída desejada aparece dentro dela. No formato CSV, se uma página chamada Home existir, a string ,Home, estará na saída e não deverá corresponder a nada, então é isso que vamos procurar.

- name: Get list of WordPress pages
  sudo_user: www-data
  command: wp post list --post_type=page --post_title=Home --post_status=publish --format=csv
    chdir={{wordpress_path}}
  register: wordpress_pages

- name: Create the homepage if it doesn't exist
  sudo_user: www-data
  command: wp post create --post_type=page --post_title=Home --porcelain
    chdir={{wordpress_path}}
  when: "',Home,' not in wordpress_pages.stdout"

Por fim, é uma boa prática usar command em vez de shell , a menos que você realmente precise passar o comando por meio de um shell.

    
por 25.08.2015 / 20:44

Tags