web-dev-qa-db-fra.com

exécution d'une tâche locale ansible dans un playbook distant

J'essaie de faire exécuter cette tâche localement (sur la machine qui exécute le playbook):

- name: get the local repo's branch name
  local_action: git branch | awk '/^\*/{print $2}'
  register: branchName

J'ai essayé plein de variantes sans succès

toutes les autres tâches sont censées s'exécuter sur l'hôte cible, c'est pourquoi l'exécution de l'ensemble du playbook local n'est pas une option

TASK: [get the local repo's branch name] ************************************** 
<127.0.0.1> REMOTE_MODULE git branch | awk '/^\*/{print $2}'
<127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1407258765.57-75899426008172 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1407258765.57-75899426008172 && echo $HOME/.ansible/tmp/ansible-tmp-1407258765.57-75899426008172']
<127.0.0.1> PUT /tmp/tmpQVocvw TO /home/max/.ansible/tmp/ansible-tmp-1407258765.57-75899426008172/git
<127.0.0.1> EXEC ['/bin/sh', '-c', '/usr/bin/python /home/max/.ansible/tmp/ansible-tmp-1407258765.57-75899426008172/git; rm -rf /home/max/.ansible/tmp/ansible-tmp-1407258765.57-75899426008172/ >/dev/null 2>&1']
failed: [portal-dev] => {"failed": true}
msg: this module requires key=value arguments (['branch', '|', 'awk', '/^\\*/{print $2}'])

FATAL: all hosts have already failed -- aborting

mise à jour:

J'ai suivi la suggestion de bkan (ci-dessous), et je suis allé un peu plus loin, mais

  - name: get the local repo's branch name
    local_action: command git branch | (awk '/^\*/{print $2}')
    Sudo: no
    register: branchName

maintenant la commande git est lancée mais pas correctement (voir erreur ci-dessous).

notez que cette commande fonctionne parfaitement comme un "Shell" mais malheureusement il n'y a pas d'équivalent local_Shell de local_action ...

failed: [portal-dev] => {"changed": true, "cmd": ["git", "branch", "|", "(awk", "/^\\*/{print $2})"], "delta": "0:00:00.002980", "end": "2014-08-05 18:00:01.293632", "rc": 129, "start": "2014-08-05 18:00:01.290652"}
stderr: usage: git branch [options] [-r | -a] [--merged | --no-merged]
   or: git branch [options] [-l] [-f] <branchname> [<start-point>]
   or: git branch [options] [-r] (-d | -D) <branchname>...
   or: git branch [options] (-m | -M) [<oldbranch>] <newbranch>

...
19
Max L.

Le format de local_action est:

local_action: <module_name> <arguments>

Dans votre exemple, Ansible pense que vous essayez d'utiliser le module git et renvoie une erreur car vous n'avez pas les bons arguments pour le module git. Voici à quoi cela devrait ressembler:

local_action: Shell git branch | awk '/^\*/{print $2}'

Source: http://docs.ansible.com/playbooks_delegation.html#delegation

43
bkan