【问题标题】:Ansible apt-get install outputAnsible apt-get 安装输出
【发布时间】:2021-10-26 21:08:34
【问题描述】:

我正在使用 vagrant 和 ansible playbook 来自动在 ubuntu 映像上安装一堆程序。一个程序无法在 vagrant VM 上安装。在Vagrant 文件中我有

config.vm.provision :ansible do |ansible|
  ansible.verbose = "vvv"
  ansible.playbook = "provisioning/playbook.yml"
end

但详细输出不包括apt-get 输出。我的 playbook.yml 看起来像

---
- hosts: all
  sudo: true
  tasks:
    - name: get vi
      apt: state=latest name=vim  

我如何在 VM 上查看单个(或全部)apt-get install 的控制台输出,因为 ansible 会以格式输出每个安装

TASK: [Install vim] *********************************************************** 
failed: [default] => {"failed": true}
...

【问题讨论】:

    标签: vagrant ansible


    【解决方案1】:

    复制aptstdout

    这里是如何重现stdoutapt...

    ---
    - name: 'apt: update & upgrade'
      apt:
        update_cache: yes
        cache_valid_time: 3600
        upgrade: safe
      register: apt
    - debug: msg={{ apt.stdout.split('\n')[:-1] }}
    

    ...感谢.split('\n'),带有漂亮的换行符,并用[:-1]省略了最后一个空字符串,当然,所有这些都是Python字符串操作。

    "msg": [
        "Reading package lists...", 
        "Building dependency tree...", 
        "Reading state information...", 
        "Reading extended state information...", 
        "Initializing package states...", 
        "Building tag database...", 
        "No packages will be installed, upgraded, or removed.", 
        "0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.", 
        "Need to get 0 B of archives. After unpacking 0 B will be used.", 
        "Reading package lists...", 
        "Building dependency tree...", 
        "Reading state information...", 
        "Reading extended state information...", 
        "Initializing package states...", 
        "Building tag database..."
    ]
    

    【讨论】:

      【解决方案2】:

      您可以将 apt 模块执行的输出注册到一个变量中,然后打印出来。

      - hosts: localhost
        sudo: true
        tasks:
          - name: get vi
            apt: state=latest name=vim
            register: aptout
      
          # show the content of aptout var
          - debug: var=aptout
      

      【讨论】:

        【解决方案3】:

        在我目前使用的 ansible 版本中,ansible-playbook -v 似乎足以获得恰当的输出。诚然,我没有测试过失败。输出是 JSON 的形式,这使得它有点难以阅读(因为其他答案可以解决)。

        我测试的 Ansible 版本是 2.3.2.0。

        【讨论】:

          【解决方案4】:

          您可以直接使用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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-07-28
            • 2011-09-08
            • 2020-12-22
            • 2021-10-28
            • 2018-03-01
            • 1970-01-01
            相关资源
            最近更新 更多