ansible:在一个循环中注册查找模块的返回值,并在另一个循环中提取.path属性 [英] ansible: register find module return values in a loop and extract the .path property in another loop

查看:73
本文介绍了ansible:在一个循环中注册查找模块的返回值,并在另一个循环中提取.path属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正尝试在其主目录中查找用户列表中的所有'.vim *'文件,并在以后将其删除.

I am trying to find all '.vim*' files for a list of users in their home directory and remove them later on.

我做什么:

vars:
  vim_users:
    - user1
    - user2

tasks:
- name: finding old vim configs in ~/ for all users
  find:
    file_type: any
    paths: ~/
    patterns: '.vim*'
    hidden: yes
  register: user_vim_config_files
  become: yes
  become_user: "{{ item }}"
  with_items: "{{ vim_users }}"

- debug:
    msg: "{{ item.files.path }}"
  with_items:
    - "{{ user_vim_config_files.results}}"

但是获取调试模块失败:

But getting Debug module failed:

TASK [debug] *******************************************************************************************************************************
fatal: [rpi]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined.
The error was: 'list object' has no attribute 'path'\n\nThe error appears to have been in '/Users/drew/CloudStation/rpi-scripts/minibian_start/ansible/test.yml': line 51, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n    - debug:\n      ^ here\n"}
to retry, use: --limit @/Users/drew/CloudStation/rpi-scripts/minibian_start/ansible/test.retry

尽管如果我删除.path" (路径-这是以后我需要使用文件模块删除文件的路径),并执行相同的操作,但是使用:

Although if I remove ".path" ( path - this is what I need later for removing files with file module) and do the same but with:

...
- debug:
    msg: "{{ item.files }}"
  with_items:
    - "{{ user_vim_config_files.results}}"

然后我得到了:

TASK [debug] *******************************************************************************************************************************
ok: [rpi] => (item={u'files': [{u'uid': 1000, u'woth': False, u'mtime': 1506392506.3046005, u'inode': 9017, u'isgid': False, u'size': 951, u'roth': False, u'isuid': False, u'isreg': True, u'gid': 1000, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': False, u'path': u'/home/drew/.viminfo', u'xusr': False, u'atime': 1506392506.3046005, u'isdir': False, u'ctime': 1506392506.3046005, u'wgrp': False, u'xgrp': False, u'dev': 45826, u'isblk': False, u'isfifo': False, u'mode': u'0600', u'islnk': False}, {u'uid': 0, u'woth': False, u'mtime': 1506872972.448914, u'inode': 118, u'isgid': False, u'size': 0, u'roth': True, 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': True, u'path': u'/home/drew/.vimrc', u'xusr': False, u'atime': 1506872972.448914, u'isdir': False, u'ctime': 1506872972.448914, u'wgrp': False, u'xgrp': False, u'dev': 45826, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}, {u'uid': 0, u'woth': False, u'mtime': 1506872982.078843, u'inode': 140, u'isgid': False, u'size': 4096, u'roth': True, u'isuid': False, u'isreg': False, u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': True, u'rusr': True, u'nlink': 2, u'issock': False, u'rgrp': True, u'path': u'/home/drew/.vim', u'xusr': True, u'atime': 1506872982.078843, u'isdir': True, u'ctime': 1506872982.078843, u'wgrp': False, u'xgrp': True, u'dev': 45826, u'isblk': False, u'isfifo': False, u'mode': u'0755', u'islnk': False}], '_ansible_parsed': True, u'changed': False, '_ansible_no_log': False, '_ansible_item_result': True, 'item': u'drew', u'examined': 9, u'msg': u'', u'invocation': {u'module_args': {u'paths': [u'~/'], u'file_type': u'any', u'age': None, u'contains': None, u'recurse': False, u'age_stamp': u'mtime', u'patterns': [u'.vim*'], u'get_checksum': False, u'use_regex': False, u'follow': False, u'hidden': True, u'size': None}}, u'matched': 3}) => {
"item": {
    "changed": false,
    "examined": 9,
    "files": [
        {
            "atime": 1506392506.3046005,
            "ctime": 1506392506.3046005,
            "dev": 45826,
            "gid": 1000,
            "inode": 9017,
            "isblk": false,
            "ischr": false,
            "isdir": false,
            "isfifo": false,
            "isgid": false,
            "islnk": false,
            "isreg": true,
            "issock": false,
            "isuid": false,
            "mode": "0600",
            "mtime": 1506392506.3046005,
            "nlink": 1,
            "path": "/home/user1/.viminfo",
            "rgrp": false,
            "roth": false,
            "rusr": true,
            "size": 951,
            "uid": 1000,
            "wgrp": false,
            "woth": false,
            "wusr": true,
            "xgrp": false,
            "xoth": false,
            "xusr": false
        },
        {
            "atime": 1506872972.448914,
            "ctime": 1506872972.448914,
            "dev": 45826,
            "gid": 0,
            "inode": 118,
            "isblk": false,
            "ischr": false,
            "isdir": false,
            "isfifo": false,
            "isgid": false,
            "islnk": false,
            "isreg": true,
            "issock": false,
            "isuid": false,
            "mode": "0644",
            "mtime": 1506872972.448914,
            "nlink": 1,
            "path": "/home/user1/.vimrc",
            "rgrp": true,
            "roth": true,
            "rusr": true,
            "size": 0,
            "uid": 0,
            "wgrp": false,
            "woth": false,
            "wusr": true,
            "xgrp": false,
            "xoth": false,
            "xusr": false
        },
        {
            "atime": 1506872982.078843,
            "ctime": 1506872982.078843,
            "dev": 45826,
            "gid": 0,
            "inode": 140,
            "isblk": false,
            "ischr": false,
            "isdir": true,
            "isfifo": false,
            "isgid": false,
            "islnk": false,
            "isreg": false,
            "issock": false,
            "isuid": false,
            "mode": "0755",
            "mtime": 1506872982.078843,
            "nlink": 2,
            "path": "/home/user1/.vim",
            "rgrp": true,
            "roth": true,
            "rusr": true,
            "size": 4096,
            "uid": 0,
            "wgrp": false,
            "woth": false,
            "wusr": true,
            "xgrp": true,
            "xoth": true,
            "xusr": true
        }
    ],
    "invocation": {
        "module_args": {
            "age": null,
            "age_stamp": "mtime",
            "contains": null,
            "file_type": "any",
            "follow": false,
            "get_checksum": false,
            "hidden": true,
            "paths": [
                "~/"
            ],
            "patterns": [
                ".vim*"
            ],
            "recurse": false,
            "size": null,
            "use_regex": false
        }
    },
    "item": "user1",
    "matched": 3,
    "msg": ""
},
"msg": [
    {
        "atime": 1506392506.3046005,
        "ctime": 1506392506.3046005,
        "dev": 45826,
        "gid": 1000,
        "inode": 9017,
        "isblk": false,
        "ischr": false,
        "isdir": false,
        "isfifo": false,
        "isgid": false,
        "islnk": false,
        "isreg": true,
        "issock": false,
        "isuid": false,
        "mode": "0600",
        "mtime": 1506392506.3046005,
        "nlink": 1,
        "path": "/home/user1/.viminfo",
        "rgrp": false,
        "roth": false,
        "rusr": true,
        "size": 951,
        "uid": 1000,
        "wgrp": false,
        "woth": false,
        "wusr": true,
        "xgrp": false,
        "xoth": false,
        "xusr": false
    },
    {
        "atime": 1506872972.448914,
        "ctime": 1506872972.448914,
        "dev": 45826,
        "gid": 0,
        "inode": 118,
        "isblk": false,
        "ischr": false,
        "isdir": false,
        "isfifo": false,
        "isgid": false,
        "islnk": false,
        "isreg": true,
        "issock": false,
        "isuid": false,
        "mode": "0644",
        "mtime": 1506872972.448914,
        "nlink": 1,
        "path": "/home/user1/.vimrc",
        "rgrp": true,
        "roth": true,
        "rusr": true,
        "size": 0,
        "uid": 0,
        "wgrp": false,
        "woth": false,
        "wusr": true,
        "xgrp": false,
        "xoth": false,
        "xusr": false
    },
    {
        "atime": 1506872982.078843,
        "ctime": 1506872982.078843,
        "dev": 45826,
        "gid": 0,
        "inode": 140,
        "isblk": false,
        "ischr": false,
        "isdir": true,
        "isfifo": false,
        "isgid": false,
        "islnk": false,
        "isreg": false,
        "issock": false,
        "isuid": false,
        "mode": "0755",
        "mtime": 1506872982.078843,
        "nlink": 2,
        "path": "/home/user1/.vim",
        "rgrp": true,
        "roth": true,
        "rusr": true,
        "size": 4096,
        "uid": 0,
        "wgrp": false,
        "woth": false,
        "wusr": true,
        "xgrp": true,
        "xoth": true,
        "xusr": true
    }
]
}

ok: [rpi] => (item={u'files': [{u'uid': 0, u'woth': False, u'mtime': 1506876109.5467849, u'inode': 20, u'isgid': False, u'size': 0, u'roth': True, 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': True, u'path': u'/home/pi/.vimrc', u'xusr': False, u'atime': 1506876109.5467849, u'isdir': False, u'ctime': 1506876109.5467849, u'wgrp': False, u'xgrp': False, u'dev': 45826, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}, {u'uid': 0, u'woth': False, u'mtime': 1506876112.2067666, u'inode': 145, u'isgid': False, u'size': 0, u'roth': True, 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': True, u'path': u'/home/pi/.vimrca', u'xusr': False, u'atime': 1506876112.2067666, u'isdir': False, u'ctime': 1506876112.2067666, u'wgrp': False, u'xgrp': False, u'dev': 45826, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}, {u'uid': 0, u'woth': False, u'mtime': 1506876114.9767478, u'inode': 146, u'isgid': False, u'size': 0, u'roth': True, 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': True, u'path': u'/home/pi/.vim', u'xusr': False, u'atime': 1506876114.9767478, u'isdir': False, u'ctime': 1506876114.9767478, u'wgrp': False, u'xgrp': False, u'dev': 45826, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}], '_ansible_parsed': True, u'changed': False, '_ansible_no_log': False, '_ansible_item_result': True, 'item': u'pi', u'examined': 8, u'msg': u'', u'invocation': {u'module_args': {u'paths': [u'~/'], u'file_type': u'any', u'age': None, u'contains': None, u'recurse': False, u'age_stamp': u'mtime', u'patterns': [u'.vim*'], u'get_checksum': False, u'use_regex': False, u'follow': False, u'hidden': True, u'size': None}}, u'matched': 3}) => {
"item": {
    "changed": false,
    "examined": 8,
    "files": [
        {
            "atime": 1506876109.5467849,
            "ctime": 1506876109.5467849,
            "dev": 45826,
            "gid": 0,
            "inode": 20,
            "isblk": false,
            "ischr": false,
            "isdir": false,
            "isfifo": false,
            "isgid": false,
            "islnk": false,
            "isreg": true,
            "issock": false,
            "isuid": false,
            "mode": "0644",
            "mtime": 1506876109.5467849,
            "nlink": 1,
            "path": "/home/user2/.vimrc",
            "rgrp": true,
            "roth": true,
            "rusr": true,
            "size": 0,
            "uid": 0,
            "wgrp": false,
            "woth": false,
            "wusr": true,
            "xgrp": false,
            "xoth": false,
            "xusr": false
        },
        {
            "atime": 1506876112.2067666,
            "ctime": 1506876112.2067666,
            "dev": 45826,
            "gid": 0,
            "inode": 145,
            "isblk": false,
            "ischr": false,
            "isdir": false,
            "isfifo": false,
            "isgid": false,
            "islnk": false,
            "isreg": true,
            "issock": false,
            "isuid": false,
            "mode": "0644",
            "mtime": 1506876112.2067666,
            "nlink": 1,
            "path": "/home/user2/.vimrca",
            "rgrp": true,
            "roth": true,
            "rusr": true,
            "size": 0,
            "uid": 0,
            "wgrp": false,
            "woth": false,
            "wusr": true,
            "xgrp": false,
            "xoth": false,
            "xusr": false
        },
        {
            "atime": 1506876114.9767478,
            "ctime": 1506876114.9767478,
            "dev": 45826,
            "gid": 0,
            "inode": 146,
            "isblk": false,
            "ischr": false,
            "isdir": false,
            "isfifo": false,
            "isgid": false,
            "islnk": false,
            "isreg": true,
            "issock": false,
            "isuid": false,
            "mode": "0644",
            "mtime": 1506876114.9767478,
            "nlink": 1,
            "path": "/home/user2/.vim",
            "rgrp": true,
            "roth": true,
            "rusr": true,
            "size": 0,
            "uid": 0,
            "wgrp": false,
            "woth": false,
            "wusr": true,
            "xgrp": false,
            "xoth": false,
            "xusr": false
        }
    ],
    "invocation": {
        "module_args": {
            "age": null,
            "age_stamp": "mtime",
            "contains": null,
            "file_type": "any",
            "follow": false,
            "get_checksum": false,
            "hidden": true,
            "paths": [
                "~/"
            ],
            "patterns": [
                ".vim*"
            ],
            "recurse": false,
            "size": null,
            "use_regex": false
        }
    },
    "item": "user2",
    "matched": 3,
    "msg": ""
},
"msg": [
    {
        "atime": 1506876109.5467849,
        "ctime": 1506876109.5467849,
        "dev": 45826,
        "gid": 0,
        "inode": 20,
        "isblk": false,
        "ischr": false,
        "isdir": false,
        "isfifo": false,
        "isgid": false,
        "islnk": false,
        "isreg": true,
        "issock": false,
        "isuid": false,
        "mode": "0644",
        "mtime": 1506876109.5467849,
        "nlink": 1,
        "path": "/home/user2/.vimrc",
        "rgrp": true,
        "roth": true,
        "rusr": true,
        "size": 0,
        "uid": 0,
        "wgrp": false,
        "woth": false,
        "wusr": true,
        "xgrp": false,
        "xoth": false,
        "xusr": false
    },
    {
        "atime": 1506876112.2067666,
        "ctime": 1506876112.2067666,
        "dev": 45826,
        "gid": 0,
        "inode": 145,
        "isblk": false,
        "ischr": false,
        "isdir": false,
        "isfifo": false,
        "isgid": false,
        "islnk": false,
        "isreg": true,
        "issock": false,
        "isuid": false,
        "mode": "0644",
        "mtime": 1506876112.2067666,
        "nlink": 1,
        "path": "/home/user2/.vimrca",
        "rgrp": true,
        "roth": true,
        "rusr": true,
        "size": 0,
        "uid": 0,
        "wgrp": false,
        "woth": false,
        "wusr": true,
        "xgrp": false,
        "xoth": false,
        "xusr": false
    },
    {
        "atime": 1506876114.9767478,
        "ctime": 1506876114.9767478,
        "dev": 45826,
        "gid": 0,
        "inode": 146,
        "isblk": false,
        "ischr": false,
        "isdir": false,
        "isfifo": false,
        "isgid": false,
        "islnk": false,
        "isreg": true,
        "issock": false,
        "isuid": false,
        "mode": "0644",
        "mtime": 1506876114.9767478,
        "nlink": 1,
        "path": "/home/user2/.vim",
        "rgrp": true,
        "roth": true,
        "rusr": true,
        "size": 0,
        "uid": 0,
        "wgrp": false,
        "woth": false,
        "wusr": true,
        "xgrp": false,
        "xoth": false,
            "xusr": false
        }
    ]
}

据我所知,我可以访问 {{item.files}} 并查看路径":"/home/user#/.vim" 列表中的所有用户,但无法访问 item.files.path 属性.为什么?您如何建议提取这些信息?也许有更好的方法可以做到这一点?

So as I understand I can access the {{ item.files }} and see the "path": "/home/user#/.vim" for all users in the list, but can not access item.files.path property. Why? How would you suggest to extract this information? Or maybe there is a better way to do it?

更新

尝试:

- name: removing old vim configuration
  file: path="{{ item.files | map(attribute='path') | list }}" state=absent
  become: yes
  with_items: "{{ user_vim_confg_files.results }}"

结果:文件仍然存在并且未被删除. 绿色输出(而不是预期的黄色变化)

Result: The files are still there and were not removed. Green output (instead of expected yellow changes)

我的猜测是路径现在是路径列表...所以在这种情况下我将如何组织某种嵌套循环?还是我错了?

My guess is that path now is a list of paths... so how would I organize some sort of nested loop in this case? Or am I wrong?

更新

尝试按建议展平:

- name: removing old vim configuration
  file:
    path: "{{ user_vim_config_files.results | sum(attribute='files', start=[]) | map(attribute='path') | list }}"
    state: absent
  become: yes

结果为绿色,而不是预期的黄色-不会删除任何匹配的文件.这里有什么问题吗?

Result is green instead of expected yellow - none of matching files is removed. What can be wrong here?

推荐答案

在此处发布应用的解决方案:

Posting the applied solution here:

vars:
  vim_users:
    - user1
    - user2

tasks:
- name: finding old vim configs in ~/ for all users
  find:
    file_type: any
    paths: ~/
    patterns: '.vim*'
    hidden: yes
  register: user_vim_config_files
  become: yes
  become_user: "{{ item }}"
  with_items: "{{ vim_users }}"

  - name: removing old vim configuration
    file:
      path: "{{ item }}"
      state: absent
    become: yes
    with_items:
      - "{{ user_vim_config_files.results | sum(attribute='files', start=[]) | map(attribute='path') | list }}"

我知道这是种丑陋的解决方案,但至少可以奏效...大声笑

I know it is kind of ugly solution, but at least it works... lol

说明:

"{{ user_vim_config_files.results | sum(attribute='files', start=[]) | map(attribute='path') | list }}"

返回从user_vim_config_files.results中提取的路径的列表.

returns the list of paths, extracted from user_vim_config_files.results

文件模块遍历每个路径并删除所有文件.

file module iterates over each path and removes all files.

这篇关于ansible:在一个循环中注册查找模块的返回值,并在另一个循环中提取.path属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆