2017-05-18 1 views
2

Je suis en cours d'exécution pour copier et exécuter le script côté distant si le script n'est pas trouvé. mais je reçois cette erreur.Ansible: exécuter plusieurs actions

ERREUR! instructions d'action conflictuelles: copie, commande

Comment puis-je utiliser plusieurs actions dans une seule tâche.

--- 
- name: Check if the bb.sh exists 
    stat: 
    path: /tmp/bb.sh 
    register: stat_result 

- name: Copy and execute script 
    copy: src=sync/bb.sh dest=/tmp/sync/ mode=0755 
    command: sh -c "/bin/sh /tmp/bb.sh" 
    when: stat_result.stat.exists == False 

Répondre

0

Vous devriez le faire comme ceci. Vous ne pouvez pas utiliser plusieurs actions dans une tâche. plutôt les distribuer sur l'énoncé de la condition. Vous pouvez également utiliser block avec une tâche.

Note: Ici, je suppose que tout fonctionne bien, avec tous vos trucs, comme les chemins vous sont accessibles et disponibles lors de la copie src à dest

--- 
- name: Check if the bb.sh exists 
    stat: 
    path: /tmp/bb.sh 
    register: stat_result 

- name: Copy script if it doesnot exist 
    copy: src=sync/bb.sh dest=/tmp/sync/ mode=0755 
    when: stat_result.stat.exists == False 

- name: "Run script" 
    command: sh -c "/bin/sh /tmp/bb.sh" 
    when: stat_result.stat.exists == False 
+0

mais ma condition est d'exécuter le script une seule fois. Si le script est déjà présent, n'effectuez aucune action. Si le script n'est pas présent, exécutez la copie et l'exécution. – Deven

+0

Donc, comme dans mon article ci-dessus si vous changez «stat_result.stat.exists == True» à «false» alors j'espère que ce sera votre sortie attendue. droite ?, donc il va aimer si le script n'est pas présent alors exécuter la première section et la deuxième section –

+0

Sahil, ça marche bien pour moi maintenant. Merci beaucoup. – Deven

0

La meilleure façon de fonctionner plusieurs actions dans ansible (2.x) utilise block:

--- 
- name: Check if the bb.sh exists 
    stat: 
    path: /tmp/bb.sh 
    register: stat_result 

- block: 
    - name: Copy script if it doesnot exist 
     copy: 
     src: sync/bb.sh 
     dest: /tmp/sync/ 
     mode: 0755 

    - name: "Run script" 
     command: sh -c "/bin/sh /tmp/bb.sh" 

    when: stat_result.stat.exists == False 

Espoir qui pourraient vous aider à

1

Une autre façon est d'utiliser le module script:

- name: Copy script and execute 
    script: sync/bb.sh 

du script copie encore et exécute.

Si vous voulez seulement exécuter le script si elle n'y est pas déjà: Avec

- name: Copy file over 
    copy: 
     src: sync/bb.sh 
     dest: /tmp/bb.sh 
     mode: 0755 
    register: copy_result 

    - name: Run script if changed 
    shell: /tmp/bb.sh 
    when: copy_result.changed == true 

cela, il copie le fichier et l'exécuter si le fichier est pas sur l'hôte distant, et si les Le fichier source est différent de la "copie" sur l'hôte distant. Donc, si vous changez le script, il va le copier et l'exécuter même si une version plus ancienne est déjà sur l'hôte distant.