我已经在CentOS 7上被Ansible(2.0.0.2)弄湿了。我试图从已安装的rpm / yum软件包中获取版本,但是在运行脚本时遇到警告消息。
Ansible脚本:
---
- name: Get version of RPM
shell: yum list installed custom-rpm | grep custom-rpm | awk '{print $2}' | cut -d'-' -f1
register: version
changed_when: False
- name: Update some file with version
lineinfile:
dest: /opt/version.xml
regexp: "<version>"
line: " <version>{{ version.stdout }}</version>"
Run Code Online (Sandbox Code Playgroud)
运行此命令可以正常工作,并且可以完成预期的操作,但是执行后会返回警告:
好的:[默认] => {“已更改”:false,“ cmd”:“安装了yum列表custom-rpm | grep custom-rpm | awk'{print $ 2}'| cut -d'-'-f1”,“ delta“:” 0:00:00.255406“,” end“:” 2016-05-17 23:11:54.998838“,” rc“:0,” start“:” 2016-05-17 23:11:54.743432“ ,“ stderr”:“”,“ stdout”:“ 3.10.2”,“ stdout_lines”:[“ 3.10.2”],“警告”:[“考虑使用yum模块而不是运行yum”]}
[警告]:考虑使用yum模块而不是运行yum
我在Ansible网站上查找了yum模块的信息,但是我真的不想安装/更新/删除任何内容。
我可以简单地忽略它或抑制它,但是我很好奇是否有更好的方法?
我认为更原生的解决方法是:
- name: get package version
yum:
list: package_name
register: package_name_version
- name: set package version
set_fact:
package_name_version: "{{ package_name_version.results|selectattr('yumstate','equalto','installed')|map(attribute='version')|list|first }}"
Run Code Online (Sandbox Code Playgroud)
我只想更新这个旧的讨论,以指出现在有一个软件包模块,可以使此操作更加简单
- name: get the rpm or apt package facts
package_facts:
manager: "auto"
- name: show apache2 version
debug: var=ansible_facts.packages.apache2[0].version
Run Code Online (Sandbox Code Playgroud)
你这样做的方式完全没问题。导致警告的检查非常简单,只需根据预定义列表检查第一个单词。它忽略进一步的选项,并经常导致警告,这些警告无法用相应的模块解决,就像在yum例一样。
要消除警告,您只需执行以下操作which:
shell: `which yum` list installed custom-rpm | grep custom-rpm | awk '{print $2}' | cut -d'-' -f1
Run Code Online (Sandbox Code Playgroud)
which查找 的完整路径yum,然后执行。这是完全相同的事情,但从 Ansible 的角度来看,它调用which,而不是yum避免警告。
如果您想在全球范围内停用此类警告,您可以command_warnings = False在您的ansible.cfg. (参见文档)
根据文档,您还可以warn=no在命令末尾添加,但这对我来说确实看起来很奇怪,因为它似乎是命令的一部分。
| 归档时间: |
|
| 查看次数: |
35149 次 |
| 最近记录: |