Ansible:APT模块:如何获取stdout?

时间:2018-07-18 20:44:12

标签: ansible aptitude

使用以下答案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的真正含义,因为我从未设法在任何情况下都可以输出标准输出。

亲切问候

3 个答案:

答案 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