2

使用以下答案stackoverflow.com/questions/34026875/ 我正在尝试从 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] }}

我总是有这个错误信息:

致命的:[本地主机]:失败!=> {“msg”:“任务包含一个带有未定义变量的选项。错误是:'dict object'没有属性'stdout'

我尝试了很多方法(安装包,删除,...)并且总是有相同的错误消息。

使用debug: msg=apt我可以拥有的唯一输出消息是,{"cache_update_time": 1531941358, "cache_updated": true, "changed": true}即使我安装或删除了一个包,在我看来这对我来说是一个输出消息,这意味着什么都不清楚,因为"cache_updated": true, "changed": true并不意味着已经安装或删除了包。

在 Ansible APT 模块文档Ansible APT 模块文档 返回值部分,有一个标准输出返回success, when needed

有谁知道如何从 Ansible APT 模块中获得真实而清晰的退出,或者如何强制 Ansible 返回一个标准输出(ansible 配置,...)以及真正的含义"success, * when needed *",因为我在任何情况下都没有设法获得标准输出输出。

亲切的问候

4

4 回答 4

1

如果需要 apt 的详细实际标准输出,您可以使用命令模块运行 apt-get 更新。

运行这个:

   -  hosts: target
      tasks:
      - name: 'apt test'
        command: apt-get update
        register: hello

      - debug: msg="{{ hello.stdout }}"

Ansible 会警告您使用 apt 模块,因为它具有某些类似 ansible 的功能。

于 2018-07-20T15:18:20.377 回答
0

对于某些操作,似乎没有我们希望的命令的真正输出。

所以when needed与执行的操作有关。

非常感谢techraf。

于 2018-07-20T11:51:50.693 回答
0

由于文档(“何时需要”)在这里不是很清楚,请查看ansible 模块源代码中的这些行。apt

我的理解: 的输出apt update被完全丢弃,除非命令失败,在这种情况下,它会出现在错误消息中。

即,迈克尔·阿巴比奥的回答最好。

于 2021-02-03T12:04:25.503 回答
0

您可以直接使用stdout_lines,但您必须确保apt确实输出了一些东西,例如,它安装了一些东西,否则该元素未定义。这是一个可能的例子:

- name: Install Gnome Packages
  become: yes
  apt:
    update_cache: yes
    state: latest
    pkg:
    - gnome-tweaks
    - dconf-editor
    - guake
  register: aptout

- debug: msg="{{ aptout.stdout_lines }}"
  when: aptout.stdout_lines is defined
于 2021-10-26T13:03:12.337 回答