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

使用下面的答案 我正在尝试从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.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模块文档中 返回值部分,在需要时返回一个stdout
success

是否有人知道如何从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是的,但是你需要准确地追踪这个模块和库是如何工作的。然后你只会得到解释为什么。我认为这里没有问题要解决。