2016-06-17 23 views
8

Mam następujące zadania w playbook piszę (wyniki podane obok rachunku debugowania w <>):ansibl „gdy zmienna == true” nie zachowuje się zgodnie z oczekiwaniami

- debug: var=nrpe_installed.stat.exists <true> 
    - debug: var=force_install <true> 
    - debug: var=plugins_installed.stat.exists <true> 

    - name: Run the prep 
    include: prep.yml 
    when: (nrpe_installed.stat.exists == false or plugins_installed.stat.exists == true or force_install == true) 
    tags: ['prep'] 

    - debug: var=nrpe_installed.stat.exists <true> 
    - debug: var=force_install <true> 
    - debug: var=force_nrpe_install <false> 

    - name: Install NRPE 
    include: install-nrpe.yml 
    when: (nrpe_installed.stat.exists == false or force_install == true or force_nrpe_install == true) 
    tags: ['install_nrpe'] 
    vars: 
     nrpe_url: 'http://url.goes.here' 
     nrpe_md5: 3921ddc598312983f604541784b35a50 
     nrpe_version: 2.15 
     nrpe_artifact: nrpe-{{ nrpe_version }}.tar.gz 
     nagios_ip: {{ nagios_ip }} 
     config_dir: /home/ansible/config/ 

I” m działa to polecenia:

ansible-playbook install.yml -i $invFile --extra-vars="hosts=webservers force_install=True" 

pierwszy to działa, ale drugi przeskakuje z tym wyjściowych:

skipping: [server1] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true} 

Mam wrażenie, że kontrola warunkowa powinna przejść dla nich wszystkich jako force_install == true ocenia się na true, co powinno sprawić, że cały when zostanie oceniony jako prawdziwy (ponieważ jest to seria "OR").

Jak uzyskać czas do uruchomienia, gdy zmienne są odpowiednio ustawione?


Edit:

Zmiana sekundy kiedy na Install NRPE należą do następujących prac, ale nie wyjaśnia, dlaczego ten drugi, Run the prep biegnie odpowiednio:

robocza:

when: (not nrpe_installed.stat.exists or force_install or force_nrpe_install) 

Działa również:

when: (nrpe_installed.stat.exists == false or plugins_installed.stat.exists == true or force_install == true) 

Nie działa:

when: (nrpe_installed.stat.exists == false or force_install == true or force_nrpe_install == true) 

obcięty (duplikaty usunięty) wyjście z danej sekcji spektaklu jest:

TASK [debug] ******************************************************************* 
ok: [server2] => { 
    "nrpe_installed.stat.exists": true 
} 

TASK [debug] ******************************************************************* 
ok: [server2] => { 
    "plugins_installed.stat.exists": true 
} 

TASK [debug] ******************************************************************* 
ok: [server2] => { 
    "force_install": true 
} 

TASK [Run the prep] ************************************************************ 
included: /tasks/nrpe-install/prep.yml for server2, server3, server4, server5, server6, server7 

TASK [Prep and configure for installation | Install yum packages] ************** 
ok: [server6] => (item=[u'gcc', u'glibc', u'glibc-common', u'gd', u'gd-devel', u'make', u'net-snmp', u'openssl-devel', u'unzip', u'tar', u'gzip', u'xinetd']) => {"changed": false, "item": ["gcc", "glibc", "glibc-common", "gd", "gd-devel", "make", "net-snmp", "openssl-devel", "unzip", "tar", "gzip", "xinetd"], "msg": "", "rc": 0, "results": ["gcc-4.1.2-55.el5.x86_64 providing gcc is already installed", "glibc-2.5-123.el5_11.3.i686 providing glibc is already installed", "glibc-common-2.5-123.el5_11.3.x86_64 providing glibc-common is already installed", "gd-2.0.33-9.4.el5_4.2.x86_64 providing gd is already installed", "gd-devel-2.0.33-9.4.el5_4.2.i386 providing gd-devel is already installed", "make-3.81-3.el5.x86_64 providing make is already installed", "net-snmp-5.3.2.2-20.el5.x86_64 providing net-snmp is already installed", "openssl-devel-0.9.8e-40.el5_11.x86_64 providing openssl-devel is already installed", "unzip-5.52-3.el5.x86_64 providing unzip is already installed", "tar-1.15.1-32.el5_8.x86_64 providing tar is already installed", "gzip-1.3.5-13.el5.centos.x86_64 providing gzip is already installed", "xinetd-2.3.14-20.el5_10.x86_64 providing xinetd is already installed"]} 

TASK [Prep and configure for installation | Make nagios group] ***************** 
ok: [server2] => {"changed": false, "gid": 20002, "name": "nagios", "state": "present", "system": false} 

TASK [Prep and configure for installation | Make nagios user] ****************** 
ok: [server6] => {"append": false, "changed": false, "comment": "User for Nagios NRPE", "group": 20002, "home": "/home/nagios", "move_home": false, "name": "nagios", "shell": "/bin/bash", "state": "present", "uid": 20002} 

TASK [debug] ******************************************************************* 
ok: [server2] => { 
    "nrpe_installed.stat.exists": true 
} 

TASK [debug] ******************************************************************* 
ok: [server2] => { 
    "force_install": true 
} 

TASK [debug] ******************************************************************* 
ok: [server2] => { 
    "force_nrpe_install": false 
} 

TASK [Install NRPE] ************************************************************ 
skipping: [server2] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true} 

Odpowiedz

30

trzeba konwertować zmienną do wartości logicznej:

force_install|bool == true 

Nie twierdzę, że rozumiem Logika za tym. W pythonie każdy niepusty łańcuch powinien być zgodny z prawdą. Ale kiedy jest bezpośrednio używany w warunku, ocenia jako fałszywy.

Filtr boolowy ponownie interpretuje ciągi "true" i "yes" (bez rozróżniania wielkości liter) jako prawdziwe. Każdy inny ciąg jest fałszywy.

Czasami warto również ustawić wartość domyślną w przypadku force_install nie jest zdefiniowana, ponieważ prowadziłoby to do niezdefiniowanej zmiennej o błędu:

force_install|default(false)|bool == true 
+4

nie jest '== TRUE redundantny? –

+4

Oczywiście, możesz to pominąć. 'force_install | default (false) | bool' – udondan

+0

A ponieważ' None', 'False',' 0' i '" "' (pusty łańcuch) są wartościami fałszywymi, a niepuste łańcuchy są wartościami rzeczywistymi, zazwyczaj można pominąć konwersja 'bool' i powiedz np. 'force_install | default (False)'. – akaihola