2017-11-22 4 views
0

Ich habe eine relativ einfache Anweisung, die fehlschlägt. Folgendes installiert einen Dienst. Ich möchte den Ergebnistext bestätigen. Der richtige Text ist vorhanden, aber die Assertion schlägt fehl. Wie kann das sein?? Ansible Assertion nicht möglich in einem Array?

Dies ist der Code mit dem assert:

- name: Install the tomcat service on the remote machine 
    win_command: "{{ tomcat_install_folder }}{{ tomcat_service_installer }}" 
    register: cmd_result_tomcat_service_install 
- assert: 
    that: 
     - "'has been installed' in cmd_result_tomcat_service_install.stdout_lines" 

Hier ist das Ergebnis, das den geltend gemachten Text enthält in stdout_lines 'installiert wurde'.

"cmd_result_tomcat_service_install": { 

     "stdout": "\r\nC:\\Users\\service_ansible>SET JAVA_HOME=D:\\Products\\CPeRef\\java\\jdk1.8.0_51 \r\n\r\nC:\\Users\\service_ansible>cd /d D:\\Products\\CPeRef\\tomcat\\apache-tomcat-8.0.26\\bin \r\n\r\nD:\\Products\\CPeRef\\tomcat\\apache-tomcat-8.0.26\\bin>service.bat install CPeRef2 \r\nInstalling the service 'CPeRef2' ...\r\nUsing CATALINA_HOME: \"D:\\Products\\CPeRef\\tomcat\\apache-tomcat-8.0.26\"\r\nUsing CATALINA_BASE: \"D:\\Products\\CPeRef\\tomcat\\apache-tomcat-8.0.26\"\r\nUsing JAVA_HOME:  \"D:\\Products\\CPeRef\\java\\jdk1.8.0_51\"\r\nUsing JRE_HOME:   \"D:\\Products\\CPeRef\\java\\jdk1.8.0_51\\jre\"\r\nUsing JVM:    \"D:\\Products\\CPeRef\\java\\jdk1.8.0_51\\jre\\bin\\server\\jvm.dll\"\r\nThe service 'CPeRef2' has been installed.\r\n", 
     "stdout_lines": [ 
      "", 
      "C:\\Users\\service_ansible>SET JAVA_HOME=D:\\Products\\CPeRef\\java\\jdk1.8.0_51 ", 
      "", 
      "C:\\Users\\service_ansible>cd /d D:\\Products\\CPeRef\\tomcat\\apache-tomcat-8.0.26\\bin ", 
      "", 
      "D:\\Products\\CPeRef\\tomcat\\apache-tomcat-8.0.26\\bin>service.bat install CPeRef2 ", 
      "Installing the service 'CPeRef2' ...", 
      "Using CATALINA_HOME: \"D:\\Products\\CPeRef\\tomcat\\apache-tomcat-8.0.26\"", 
      "Using CATALINA_BASE: \"D:\\Products\\CPeRef\\tomcat\\apache-tomcat-8.0.26\"", 
      "Using JAVA_HOME:  \"D:\\Products\\CPeRef\\java\\jdk1.8.0_51\"", 
      "Using JRE_HOME:   \"D:\\Products\\CPeRef\\java\\jdk1.8.0_51\\jre\"", 
      "Using JVM:    \"D:\\Products\\CPeRef\\java\\jdk1.8.0_51\\jre\\bin\\server\\jvm.dll\"", 
      "The service 'CPeRef2' has been installed." 
     ] 
    } 
} 

Hier die Fehlermeldung:

TASK [tomcat : assert] 
fatal: [v-sax-769-e-a.develop.ebiz.grp]: FAILED! => { 
    "assertion": "'has been installed' in cmd_result_tomcat_service_install.stdout_lines", 
    "changed": false, 
    "evaluated_to": false, 
    "failed": true 

ich, wenn das Problem sich wundern, dass das Ergebnis tatsächlich ein Array sein kann?

Antwort

1

Diese Bedingung

'has been installed' in cmd_result_tomcat_service_install.stdout_lines 

gilt, wenn genaue Zeichenkette has been installed unter Liste von Strings (stdout_lines in diesem Fall) ist da.

Aber diese

'has been installed' in cmd_result_tomcat_service_install.stdout 

gilt, wenn Zeichenfolge has been installed ein Teil einer langen Schnur (stdout in diesem Fall) ist.

Wenn Sie Linien wollen unabhängig analysieren, können Sie verwenden:

cmd_result_tomcat_service_install.stdout_lines | select('search','has been installed') | list | count > 0 
+0

, die eine große Lösung zu filtern ist. Ich würde gerne mehr über die Suche ('xxx') lesen, aber ich habe keine Webseite gefunden, die diesen Code beschreibt. Haben Sie einen Link oder kommen gute Suchbegriffe? – MBushveld

+1

http://jinja.pocoo.org/docs/2.10/templates/#select und http://docs.ansible.com/ansible/latest/playbooks_tests.html#testing-strings –

Verwandte Themen