过滤lineinfile

时间:2019-01-08 23:51:08

标签: ansible

我正在尝试通过复制到单个主机的文件来审核系统。默认输出非常详细。我只想查看Ansible日志输出的相关字段;这样,超过1000个主机,我可以更快地解决问题。 。当我的游戏成功后,我只想看看:

ok: u'/mnt/inventory/hostname999'

我有一本类似的剧本:

- hosts: 'localhost'
  name: Playbook for the Audit for our infrastructure.
  gather_facts: False
  become: no
  connection: local
  roles:
    - { role: network, tags: network }

我的网络角色main.xml文件如下所示:

---
- name: find matching pattern files
  find:
    paths: "/mnt/inventory"
    patterns: "hostname*"
    file_type: directory
  register: subdirs

- name: check files for net.ipv4.ip_forward = 0
  no_log: False
  lineinfile:
    name: "{{ item.path }}/sysctl.conf"
    line: "net.ipv4.ip_forward = 0"
    state: present
  with_items: "{{ subdirs.files }}"
  register: conf
  check_mode: yes
  failed_when: (conf is changed) or (conf is failed)
- debug:
    msg: "CONF OUTPUT: {{ conf }}"

但是我得到这样的日志输出:

ok: [localhost] => (item={u'uid': 0, u'woth': False, u'mtime': 1546922126.0,
u'inode': 773404, u'isgid': False, u'size': 4096, u'roth': True, u'isuid': 
False, u'isreg': False, u'pw_name': u'root', u'gid': 0, u'ischr': False, 
u'wusr': False, u'xoth': True, u'rusr': True, u'nlink': 12, u'issock': 
False, u'rgrp': True, u'gr_name': u'root', u'path': 
u'/mnt/inventory/hostname999', u'xusr': True, u'atime': 1546930801.0, 
u'isdir': True, u'ctime': 1546922126.0, u'wgrp': False, u'xgrp': True, 
u'dev': 51, u'isblk': False, u'isfifo': False, u'mode': u'0555', u'islnk': 
False})

此外,我的CONF OUTPUT调试消息从不显示,我也不知道为什么不这样做。

我已经阅读了https://github.com/ansible/ansible/issues/5564和其他文章,但它们似乎只是指向诸如shell命令之类的东西,这些东西将东西发送到stdout,而lineinfile则没有。

1 个答案:

答案 0 :(得分:0)

  

但是我得到这样的日志输出:

那么您可能想将loop_control:与一个label: "{{ item.path }}"的孩子一起使用:

- lineinfile:
    # as before
  with_items: "{{ subdirs.files }}"
  loop_control:
     label: "{{ item.path }}"

这将使您更接近想要的东西:

ok: [localhost] => (item=/mnt/inventory/hostname999)

  

此外,我的CONF OUTPUT调试消息从不显示,我也不知道为什么不这样做。

我对此的最佳猜测是,可能需要调整详细程度:

- debug:
    msg: "CONF OUTPUT: {{ conf }}"
    verbosity: 0

但是它对我有用,所以也许您的ansible设置还有其他特别之处。我想尝试verbosity:看看是否有帮助。鉴于您实际使用的是msg:,将conf直接传递给debug可能会更快乐:

- debug:
    var: conf

因为它将使很多更好,因为ansible知道它是dict,而不是仅仅有效地调用str(conf)(如您在上面看到的那样),它的格式不太好