2017-09-17 1 views
1

Tout d'abord, je suis encore un débutant ansible, alors s'il vous plaît excusez mon ignorance.Comment exécuter un script shell et utiliser le résultat en ansible

Je ne sais pas si cela est encore possible, mais je suis en train d'obtenir l'URL produit par cette commande:

curl -s https://api.github.com/repos/Radarr/Radarr/releases | grep linux.tar.gz | grep browser_download_url | head -1 | cut -d \" -f 4 

et de l'utiliser dans le jeu pour télécharger le package:

ici est mon jeu:

- name: download Radarr 
    get_url: 
     url: "{{ Radarr_exe_url }}" #should be the url from above 
     dest: "{{ Radarr_data_path }}" 
    become: true 
    become_user: "{{ Radarr_user_name }}" 
    notify: 
     - Restart Radarr service 

Répondre

2
- name:    Get Radar exe url 
    shell:    curl -s https://api.github.com/repos/Radarr/Radarr/releases | grep linux.tar.gz | grep browser_download_url | head -1 | cut -d \" -f 4 
    register:   shell_output 
- set_fact: 
    Radarr_exe_url : "{{ shell_output.stdout }}" 
+1

Mes yeux saigne quand je vois des objets JSON avec 'analysables grep' et' cut' ... –

+0

@KonstantinSuvorov tout des conseils sur la bonne façon d'analyser en bash? – Mohamed

+0

Je pense que j'aurais pu mieux utiliser 'jq'? mais ce n'est pas portable – Mohamed

1

est ici solution Ansible pur, comme appeler shell commandes lorsque ther e est le module disponible considéré comme une mauvaise pratique:

- hosts: localhost 
    gather_facts: no 
    tasks: 
    - uri: 
     url: https://api.github.com/repos/Radarr/Radarr/releases 
     return_content: yes 
     body_format: json 
     changed_when: no 
     register: radarr_releases 

    - set_fact: 
     Radarr_exe_url: "{{ radarr_releases.json | json_query('[0].assets[].browser_download_url') | select('search','linux.tar.gz') | first }}"