Ansible apt-get安装输出

myo*_*yol 6 vagrant ansible

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

config.vm.provision :ansible do |ansible|
  ansible.verbose = "vvv"
  ansible.playbook = "provisioning/playbook.yml"
end
Run Code Online (Sandbox Code Playgroud)

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

---
- hosts: all
  sudo: true
  tasks:
    - name: get vi
      apt: state=latest name=vim  
Run Code Online (Sandbox Code Playgroud)

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

TASK: [Install vim] *********************************************************** 
failed: [default] => {"failed": true}
...
Run Code Online (Sandbox Code Playgroud)

RuB*_*iCK 6

您可以将 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
Run Code Online (Sandbox Code Playgroud)


Ser*_*ndt 5

再现stdoutapt

下面是如何再现stdoutapt...

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

…有了不错的换行符,这要归功于.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..."
]
Run Code Online (Sandbox Code Playgroud)