Ansible 回答:APT模块:如何获得标准输出?
使用下面的答案 我正在尝试从ansible apt模块获取标准输出 使用这个非常简单的测试剧本:Ansible 回答:APT模块:如何获得标准输出?,ansible,aptitude,Ansible,Aptitude,使用下面的答案 我正在尝试从ansible apt模块获取标准输出 使用这个非常简单的测试剧本: - hosts: localhost sudo: true tasks: - name: 'apt: update & upgrade' apt: update_cache: yes cache_valid_time: 3600 register: apt - debug: msg={{ apt.stdout.s
- hosts: localhost
sudo: true
tasks:
- name: 'apt: update & upgrade'
apt:
update_cache: yes
cache_valid_time: 3600
register: apt
- debug: msg={{ apt.stdout.split('\n')[:-1] }}
我始终会收到以下错误消息:
致命:[localhost]:失败!=>{“msg”:“该任务包含一个选项
使用未定义的变量。错误为:“dict对象”没有
属性“stdout”
我尝试了很多方法(安装软件包,删除,…),但总是有相同的错误消息
使用debug:msg=apt
我能得到的唯一输出消息是{“cache\u update\u time”:1531941358,“cache\u updated”:true,“changed”:true}
即使我安装或删除了一个软件包,在我看来这是一个没有任何明确含义的输出消息,因为cache\u updated:true,“changed”“:true
并不意味着已安装或删除软件包
在Ansible APT模块文档中
返回值部分,在需要时返回一个stdoutsuccess
是否有人知道如何从Ansible APT模块中获得真正明确的退出,或者如何强制Ansible返回标准输出(Ansible配置,…),以及什么才是真正意义上的“成功,*”
,因为我在任何情况下都无法获得标准输出
好心的方面看起来,对于某些操作,命令的实际输出并不像我们希望的那样 因此,
在需要时
与执行的操作相关
非常感谢techraf
Kr如果需要apt的详细实际标准输出,可以使用命令模块运行apt get更新 运行以下命令:
- hosts: target
tasks:
- name: 'apt test'
command: apt-get update
register: hello
- debug: msg="{{ hello.stdout }}"
Ansible将警告您使用apt模块,因为它具有某些类似Ansible的功能。由于此处的文档(“需要时”)不太清楚,请查看apt
Ansible模块的源代码
我的理解是:apt update
的输出将被完全丢弃,除非命令失败,在这种情况下,它将在错误消息中结束
也就是说,您最好使用。@techraf ansible apt模块似乎获得了智能二进制'aptitude\u CMD=module.get\u bin\u path(“智能”,False)`但我不是python专家!@techraf,你的意思是说,对于像aptitude update、install、purge这样的方法,python apt被使用了……所以没有输出或输出不好,对于像safe upgrade或dist upgrade这样的方法,有一个输出,因为使用了aptitude或apt get?坦白地说,我不知道。看起来或多或少是这样,其他一些模块也工作了,w是的,但是你需要准确地追踪这个模块和库是如何工作的。然后你只会得到解释为什么。我认为这里没有问题要解决。