使用 find (ansible) 模块读取多数组

Posted

技术标签:

【中文标题】使用 find (ansible) 模块读取多数组【英文标题】:read multiarray with find (ansible) module 【发布时间】:2019-08-15 10:48:06 【问题描述】:

我有以下情况,有一些目录通过列表接收,例如:

目录: - /path/to/dir1 - /path/to/dir2 - /path/to/dir3

我的目标是使用 find 模块获取这些目录的扩展名为 .sh 的文件并设置 +x 权限,当我注册 find 命令时,会收到如下输出:

[查看代码]

正如所见,文件是一个元组,然后为了加入第一个索引,我可以使用这个变量:

item.files.0.path

但是有可能为了目录的大小更大,我如何使用 with_items 加入所有索引?

非常感谢。 最好的问候

"results": [
            
                "ansible_loop_var": "item",
                "changed": false,
                "examined": 2,
                "failed": false,
                "files": [
                    

                        ..
                        "path": "/path/to/dir1/ficheros20.txt",
                        ..                    
                    ,
                    

                        ..
                        "path": "/path/to/dir1/ficheros20.txt",
                        ..                    
                    
                ],
                "invocation": 
                    "module_args": 
                        "age": null,
                        "age_stamp": "mtime",
                        "contains": null,
                        "depth": null,
                        "excludes": null,
                        "file_type": "file",
                        "follow": false,
                        "get_checksum": false,
                        "hidden": false,
                        "path": "/path/to/dir1/",
                        "paths": [
                            "/path/to/dir1/"
                        ],
                        "patterns": [
                            "*"
                        ],
                        "recurse": false,
                        "size": null,
                        "use_regex": false
                    
                ,
                "item": "/path/to/dir1/",
                "matched": 2,
                "msg": ""
            ,
            
                "ansible_loop_var": "item",
                "changed": false,
                "examined": 2,
                "failed": false,
                "files": [
                    
                        ..
                        "path": "/path/to/dir2/ficheros20.txt",
                        ..
                    ,
                    

                        ..
                        "path": "/path/to/dir2/ficheros20.txt",
                        ..                    
                    
                ],
                "invocation": 
                    "module_args": 
                        "age": null,
                        "age_stamp": "mtime",
                        "contains": null,
                        "depth": null,
                        "excludes": null,
                        "file_type": "file",
                        "follow": false,
                        "get_checksum": false,
                        "hidden": false,
                        "path": "/path/to/dir2/",
                        "paths": [
                            "/path/to/dir2/"
                        ],
                        "patterns": [
                            "*"
                        ],
                        "recurse": false,
                        "size": null,
                        "use_regex": false
                    
                ,
                "item": "/path/to/dir2/",
                "matched": 2,
                "msg": ""
            
        ]

【问题讨论】:

【参考方案1】:

问:如何使用 with_items 加入所有索引?

答:试试 json_query

loop: " results|json_query('[].files[].path')|flatten "

(未测试)

【讨论】:

以上是关于使用 find (ansible) 模块读取多数组的主要内容,如果未能解决你的问题,请参考以下文章

ansible-group模块使用方法

ansible学习三(命令和模块)

ansible批量部署模块

为 Windows 10 安装 numpy:导入多数组 numpy 扩展模块失败

ansible软件模块参数

Ansible 常用模块GroupUserFileMountScript