如何让 changed_when 在 Ansible 中工作?
Posted
技术标签:
【中文标题】如何让 changed_when 在 Ansible 中工作?【英文标题】:How to make changed_when work in Ansible? 【发布时间】:2017-02-07 14:28:36 【问题描述】:我正在尝试使用 Jenkins 服务器上的命令模块运行脚本。该脚本的编写方式是,如果不进行任何配置更改并且不应更改 Ansible 任务,它应该返回 0。
代码如下:
- name: Script to run
command: java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080 groovy " jenkins_home /userContent/script.groovy"
register: return_code
changed_when: return_code.stdout != 0
但上述代码的行为总是显示为已更改。
Ansible 输出:
TASK [jenkins : 运行脚本] ************************************
更改:[测试] => “更改”:true,“cmd”:[“java”,“-jar”,“/var/cache/jenkins/war/WEB-INF/jenkins-cli.jar ", "-s", "http://localhost:8080", "groovy", "/var/lib/jenkins/userContent/script.groovy"], "delta": "0:00:01.547098", "end": " 2017-02-06 15:31:05.989134", "rc": 0, "start": "2017-02-06 15:31:04.442036", "stderr": "[WARN] 无法使用您的 SSH 密钥进行身份验证. 匿名处理", "stdout": "0", "stdout_lines": ["0"], "warnings": []
【问题讨论】:
“return 0”你的意思是它打印0
或者返回码是0?
试试 return_code.rc != 0.
我已经尝试过了,但它不起作用。
@techraf by return 0 意味着我在脚本中有实现,如果没有任何变化返回 0;
试试 return_code.stdout != '0'
【参考方案1】:
您需要将stdout
值与字符串而不是整数进行比较:
- name: Script to run
command: java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080 groovy " jenkins_home /userContent/script.groovy"
register: script_call
changed_when: script_call.stdout != "0"
【讨论】:
您能否详细说明为什么我需要将 0 放在引号中。这将是一个很大的帮助。 答案第一句已经写好了。哪个词你不清楚? 我理解你的回答我不清楚的是这个概念,因为它应该基于退出代码,即 0 而不是“0” 但是我特别问你你的意图是什么,你添加了一个清楚地显示"stdout": "0"
的日志,这不是退出代码,而是标准输出。如果你想检查返回码,你应该使用script_call.rc != 0
。以上是关于如何让 changed_when 在 Ansible 中工作?的主要内容,如果未能解决你的问题,请参考以下文章