数组中不可能有 Ansible 断言?
Ansible assertion not possible in an array?
我有一个相对简单的指令失败了。下面安装一个服务。我想断言结果文本。那里有正确的文本,但断言失败。怎么可能??
这是带有断言的代码:
- 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"
此处的结果包含 stdout_lines 中断言的文本 'has been installed'。
"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."
]
}
}
这里是错误信息:
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
请问问题会不会是结果实际上是一个数组?
这个条件
'has been installed' in cmd_result_tomcat_service_install.stdout_lines
当字符串列表中有 exact 文字字符串 has been installed
时为真(在本例中为 stdout_lines
)。
但是这个
'has been installed' in cmd_result_tomcat_service_install.stdout
当字符串 has been installed
是一个长字符串(在本例中为 stdout
)的子字符串时为真。
如果你想独立解析行,你可以使用:
cmd_result_tomcat_service_install.stdout_lines | select('search','has been installed') | list | count > 0
我有一个相对简单的指令失败了。下面安装一个服务。我想断言结果文本。那里有正确的文本,但断言失败。怎么可能??
这是带有断言的代码:
- 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"
此处的结果包含 stdout_lines 中断言的文本 'has been installed'。
"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."
]
}
}
这里是错误信息:
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
请问问题会不会是结果实际上是一个数组?
这个条件
'has been installed' in cmd_result_tomcat_service_install.stdout_lines
当字符串列表中有 exact 文字字符串 has been installed
时为真(在本例中为 stdout_lines
)。
但是这个
'has been installed' in cmd_result_tomcat_service_install.stdout
当字符串 has been installed
是一个长字符串(在本例中为 stdout
)的子字符串时为真。
如果你想独立解析行,你可以使用:
cmd_result_tomcat_service_install.stdout_lines | select('search','has been installed') | list | count > 0