AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 757461
Accepted
Zulakis
Zulakis
Asked: 2016-02-17 01:39:11 +0800 CST2016-02-17 01:39:11 +0800 CST 2016-02-17 01:39:11 +0800 CST

Ansible with_items 不打印整个项目?

  • 772

我会像这样自动保护 SSL 密钥:

- name: Find ssl keys
  find: paths="/etc/ssl/" patterns="*.key" recurse=yes
  register: secure_ssl_keys_result

- name: Secure ssl keys
  file: path={{ item.path }} user=root group=root mode=600
  with_items: secure_ssl_keys_result.files

现在,对于每个项目,都有一个包含项目全部内容的巨大日志消息:

ok: [127.0.0.1] => (item={u'uid': 0, u'woth': False, u'mtime': 1454939377.264, u'inode': 400377, u'isgid': False, u' size': 3243, u'roth': False, u'isuid': False, u'isreg': True, u'gid': 0, u'ischr': False, u'wusr': True, u'xoth ': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': False, u'path': u'/etc/ssl/foo.key', u 'xusr':假,u'atime':1454939377.264,u'isdir':假,u'ctime':1454939657.116,u'isblk':假,u'xgrp':假,u'dev':65025,u' wgrp':假,u'isfifo':假,u'mode':u'0600',u'islnk':假})

这是难以置信的不可读,因为我只想知道正在处理(并且可能更改)的项目的路径。使用大量键,这很快就会失控。

如何以仅item.path打印每个项目的方式来更改此播放?

我已经尝试过no_log: True了,但这当然完全忽略了输出。

ansible
  • 3 3 个回答
  • 14175 Views

3 个回答

  • Voted
  1. Best Answer
    sourcejedi
    2017-03-17T05:26:02+08:002017-03-17T05:26:02+08:00

    Ansible 2.2 可以做到loop_control.label这一点。

    - name: Secure ssl keys
      file: path={{ item.path }} user=root group=root mode=600
      with_items: secure_ssl_keys_result.files
      loop_control:
        label: "{{ item.path }}"
    
    • 通过以下方式找到:https ://stackoverflow.com/a/42832731/799204
    • 文档:http ://docs.ansible.com/ansible/playbooks_loops.html#loop-control
    • 28
  2. Zulakis
    2016-03-01T04:46:49+08:002016-03-01T04:46:49+08:00

    方法一

    利用

    secure_ssl_keys_result.files|map(attribute='path')|list
    

    它将返回路径列表:

    ['/etc/ssl../', '/etc/ssl/.../']
    

    你的整个任务将变成:

    - name: Secure ssl keys
      file: path={{ item }} user=root group=root mode=600
      with_items: secure_ssl_keys_result.files|map(attribute='path')|list
    

    请注意,您只能选择单个属性,不能使用attribute=['path', 'mode']或类似。

    方法二

    我想使用extract来获取多个键(因为有​​时需要为when条件提供第二个键),但没有设法做到这一点,因为我需要映射字典列表,然后映射特定 dict 上的键列表,这似乎是不可能的,因为 map 只接受函数名,但不接受函数定义/链接函数。我将不胜感激这里的建议!

    评论中的一个好主意(谢谢,Uditha Desilva!):

    - name: Secure ssl keys file: path={{ item.0 }} mode=600 owner={{ item.1 }}
      with_together: 
      - secure_ssl_keys_result.files|map(attribute='path')|list 
      - secure_ssl_keys_result.files|map(attribute='uid')|list 
    

    方法三

    或者,可以使用这样的自定义过滤器(这就是我在发现之前所做的map):

    from ansible import errors
    import re
    
    def cleandict(items, keepkeys):
        try:
            newitems = []
            if not isinstance(items, list):
              items = [items]
            if not isinstance(keepkeys, list):
              keepkeys = [keepkeys]
            for dictionary in items:
              newdictionary = {}
              for keepkey in keepkeys:
                newdictionary[keepkey] = dictionary.get(keepkey)
              newitems.append(newdictionary)  
            return newitems
        except Exception, e:
            raise errors.AnsibleFilterError('split plugin error: %s' % str(e) )
            #raise errors.AnsibleFilterError('split plugin error: %s, string=%s' % str(e),str(items) )
    
    class FilterModule(object):
        ''' A filter to split a string into a list. '''
        def filters(self):
            return {
                'cleandict' : cleandict
            }
    

    ansible.cfg:

    filter_plugins = ~/.ansible/plugins/filter_plugins/:/usr/share/ansible_plugins/filter_plugins
    
    • 6
  3. udondan
    2016-02-17T01:58:16+08:002016-02-17T01:58:16+08:00

    你不能。要么全有,要么全无(通过no_log: True)

    • 1

相关问题

  • Ansible 剧本,使用选项 --disabled-login 创建用户

  • ansible playbook,操作系统不同的用户

  • ansible:为什么文件模块会跳过?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve