2013-06-14 5 views
2

Salut, je suis nouveau dans Ansible et j'ai quelques problèmes en utilisant des variables enregistrées.Enregistrer la variable dans Ansible

Le problème est que j'ai plusieurs serveurs avec différents systèmes d'exploitation.

J'utilise des rôles pour les séparer, mais dans le cas où il n'y a aucun serveur d'un type un conditionnel me donne une erreur disant que je dois mettre une expression qui évalue à Vrai ou Faux.

Ceci est le code du problème.

- name: Checking if Sources are Available 
    action: shell echo a$(cat /etc/apt/sources.list | grep $(echo 'http://url/${ansible_distribution}/stable' | tr "[:upper:]" "[:lower:]" )) 
    register: sources 
    ignore_errors: True 

- name: Adding source. 
    action: shell echo "deb http://url/${ansible_distribution}/stable  ${ansible_lsb.codename} main" | tr "[:upper:]" "[:lower:]" >> /etc/apt/sources.list 
    when: "ansible_os_family == 'RedHat' and sources.stdout == 'a'" 

L'erreur qui me donne est celle-ci:

fatal: [192.168.1.114] => Conditional expression must evaluate to True or False: ({% if  ansible_os_family == 'RedHat' and sources.stdout == 'a' %} True {% else %} False {% endif %}) and ({% if ansible_os_family == 'Debian' %} True {% else %} False {% endif %}) 
fatal: [192.168.1.141] => Conditional expression must evaluate to True or False: ({% if ansible_os_family == 'RedHat' and sources.stdout == 'a' %} True {% else %} False {% endif %}) and ({% if ansible_os_family == 'Debian' %} True {% else %} False {% endif %}) 

FATAL: all hosts have already failed -- aborting 

Je l'ai déjà essayé ceux-ci: quand : sources.stdout est défini et source.stdout == un only_if: sources.stdout est défini et source.stdout == a

Et cela me donne la même erreur.

J'utilise Ansible 1.3 dans Ubuntu 13.04 Pour vérifier cela je ansible --version

espère que vous pouvez me aider. Salutations

Répondre

0

Je teste l'utilisation de code ansible 1.2 sur mon MBP, il fonctionne très bien:

--- 
- hosts: local 
    tasks: 
    - name: Checking if Sources are Available 
     action: shell echo a$(cat /etc/apt/sources.list | grep $(echo 'http://url/${ansible_distribution}/stable' | tr "[:upper:]" "[:lower:]" )) 
     register: sources 
     ignore_errors: True 

    - debug: msg="sources value is ${sources.stdout} " 
    - name: Adding source. 
     action: shell echo "deb http://url/${ansible_distribution}/stable  ${ansible_lsb.codename} main" | tr "[:upper:]" "[:lower:]" >> /etc/apt/sources.list 
     when: "ansible_os_family == 'RedHat' and sources.stdout == 'a'" 

Résultat:

ansible-playbook test.yml 

PLAY [local] ****************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [localhost] 

TASK: [Checking if Sources are Available] ************************************* 
changed: [localhost] 

TASK: [debug msg="sources value is ${sources.stdout} "] *********************** 
ok: [localhost] => {"msg": "sources value is a "} 

TASK: [Adding source.] ******************************************************** 
skipping: [localhost] 

PLAY RECAP ******************************************************************** 
localhost     : ok=4 changed=1 unreachable=0 failed=0 

vous pouvez consulter official example:register_logic

-2

pourrait-il que vous avez:

gather_facts: false 

dans votre playbook?

Questions connexes