2016-11-10 1 views
0

Je suis en train d'utiliser Ansible pour vérifier si SELinux est activé (réglé sur Enforcing), et sinon, activez-le. Le play pour activer SELinux doit être appelé uniquement si SELinux est désactivé.invoquons une autre « jeu » basé sur la sortie d'un autre jeu - Ansible

Le playbook ressemble à ceci:

- hosts: all 

    # root should execute this. 
    remote_user: root 
    become: yes 

    tasks: 

    # Check if SELinux is enabled. 
    - name: check if selinux is enabled 
     tags: selinuxCheck 
     register: selinuxCheckOut 
     command: getenforce 
    - debug: var=selinuxCheckOut.stdout_lines 

    - name: enable selinux if not enabled already 
     tags: enableSELinux 
     selinux: policy=targeted state=enforcing 
     when: selinuxCheckOut.stdout_lines == "Enforcing" 
    - debug: var=enableSELinuxOut.stdout_lines 

Quand je lance cela, la tâche enableSELinux échoue avec la raison, « vérification conditionnelle a échoué ». La sortie est:

TASK [debug] ******************************************************************* 
task path: /root/ansible/playbooks/selinuxConfig.yml:24 
ok: [localhost] => { 
    "selinuxCheckOut.stdout_lines": [ 
     "Enforcing" 
    ] 
} 

TASK [enable selinux if not enabled already] *********************************** 
task path: /root/ansible/playbooks/selinuxConfig.yml:26 
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true} 

Mes questions:
1. Est-ce la bonne façon d'obtenir un jeu pour exécuter en fonction de la sortie d'un autre jeu?
2. Comment puis-je faire fonctionner cela?

Répondre

1

Votre manuel est correct. Mais stdout_lines est une liste. Vous devez comparer le premier élément de cette liste. Essayez ceci:

when: selinuxCheckOut.stdout_lines[0] == "Enforcing"