使用以下答案stackoverflow.com/questions/34026875/ 我正在尝试从apt模块获取标准输出。
使用这个非常简单的测试手册:
- 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_update_time": 1531941358, "cache_updated": true, "changed": true}
,即使我安装或删除了一个我认为不起眼的输出消息,因为{{{ 1}}并不意味着已安装或删除软件包。
在Ansible APT模块文档Ansible APT Module Documentation中
返回值部分,返回了一个标准输出"cache_updated": true, "changed": true
。
是否有人知道如何从Ansible APT模块获得真实而清晰的退出,或者如何强制Ansible返回stdout(ansible config,...),以及success, when needed
的真正含义,因为我从未设法在任何情况下都可以输出标准输出。
亲切问候
答案 0 :(得分:0)
似乎某些命令没有我们希望的真正输出。
因此when needed
与执行的操作有关。
非常感谢techraf。
K
答案 1 :(得分:0)
如果需要apt的详细真实标准输出,则可以使用命令模块运行apt-get更新。
运行此:
- hosts: target
tasks:
- name: 'apt test'
command: apt-get update
register: hello
- debug: msg="{{ hello.stdout }}"
Ansible将警告您使用apt模块,因为它具有某些类似于ansible的功能。
答案 2 :(得分:0)
由于此处的文档(“需要时”)不是很清楚,请查看 apt
ansible 模块的源代码中的 these lines。
我的理解:除非命令失败,否则 apt update
的输出将被完全丢弃,在这种情况下,它会以错误消息结束。
即您最好使用Michael Ababio's answer。