如何在Ansible中获得输出数组的所有索引

如何在Ansible中获得输出数组的所有索引,ansible,Ansible,我正在使用find模块收集服务器上SSL证书的信息(查找过期日期) - name: Find certs on server find: path: /etc/ssl/custom/certs file_type: file patterns: "*.crt" recurse: yes register: find_result - debug: var: find_result 结果是: ok: [server00] =&g

我正在使用
find
模块收集服务器上SSL证书的信息(查找过期日期)

- name: Find certs on server
  find:
    path: /etc/ssl/custom/certs
    file_type: file
    patterns: "*.crt"
    recurse: yes
  register: find_result
- debug:
    var: find_result
结果是:

ok: [server00] => {
    "find_result": {
        "changed": false,
        "examined": 5,
        "failed": false,
        "files": [
            {
                "atime": 1622749788.1552677,
                "ctime": 1622744497.4393551,
                "dev": 2050,
                "gid": 0,
                "gr_name": "root",
                "inode": 19531534,
                "isblk": false,
                "ischr": false,
                "isdir": false,
                "isfifo": false,
                "isgid": false,
                "islnk": false,
                "isreg": true,
                "issock": false,
                "isuid": false,
                "mode": "0644",
                "mtime": 1622744497.4393551,
                "nlink": 1,
                "path": "/etc/ssl/custom/certs/somewebsite0.com.crt",
                "pw_name": "root",
                "rgrp": true,
                "roth": true,
                "rusr": true,
                "size": 1879,
                "uid": 0,
                "wgrp": false,
                "woth": false,
                "wusr": true,
                "xgrp": false,
                "xoth": false,
                "xusr": false
            },
            {
                "atime": 1622719627.2477663,
                "ctime": 1616545902.3681087,
                "dev": 2050,
                "gid": 0,
                "gr_name": "root",
                "inode": 19531253,
                "isblk": false,
                "ischr": false,
                "isdir": false,
                "isfifo": false,
                "isgid": false,
                "islnk": false,
                "isreg": true,
                "issock": false,
                "isuid": false,
                "mode": "0644",
                "mtime": 1613754568.0,
                "nlink": 1,
                "path": "/etc/ssl/custom/certs/somewebsite1.com.crt",
                "pw_name": "root",
                "rgrp": true,
                "roth": true,
                "rusr": true,
                "size": 2081,
                "uid": 0,
                "wgrp": false,
                "woth": false,
                "wusr": true,
                "xgrp": false,
                "xoth": false,
                "xusr": false
            },
            {
                "atime": 1622719627.2197664,
                "ctime": 1616545902.3721087,
                "dev": 2050,
                "gid": 0,
                "gr_name": "root",
                "inode": 19535012,
                "isblk": false,
                "ischr": false,
                "isdir": false,
                "isfifo": false,
                "isgid": false,
                "islnk": false,
                "isreg": true,
                "issock": false,
                "isuid": false,
                "mode": "0644",
                "mtime": 1601653231.0,
                "nlink": 1,
                "path": "/etc/ssl/custom/certs/somewebsite2.com.crt",
                "pw_name": "root",
                "rgrp": true,
                "roth": true,
                "rusr": true,
                "size": 2269,
                "uid": 0,
                "wgrp": false,
                "woth": false,
                "wusr": true,
                "xgrp": false,
                "xoth": false,
                "xusr": false
            }
        ],
        "matched": 3,
        "msg": ""
    }
}
我需要输出的
路径部分(
“路径”:“/etc/ssl/custom/certs/somewebsite1.com.crt”
),如果我使用
find_result.files[0]。path
它只为每个主机提供一个结果,而我需要每个
*.crt
文件

如何访问每个索引?我尝试使用
shell
模块对
.crt
文件执行操作,但由于
[0]
索引,它只抓取第一个文件,如下所示:

- name: Check expiration
  shell: "cat {{ find_result.files[0].path }} | openssl x509 -noout -enddate"
  register: date
- debug:
    var: date.stdout_lines

ok: [server00] => {
    "date.stdout_lines": [
        "notAfter=Apr  2 19:50:38 2018 GMT"
    ]
}

下面是一个基于此的示例剧本:

- hosts: localhost
  tasks:
    - name: Find certs on server
      find:
       path: /etc/ssl/custom/certs
       file_type: file
       patterns: "*.crt"
       recurse: yes
      register: find_result
    - debug:
       var: find_result

    - name: Play with the data just to demonstrate
      set_fact: 
        IRGeekSauce_list: "{{ (IRGeekSauce_list|default([])) + [item.path] }}"# <-- add each list item to a custom list
      with_items: '{{ find_result.files }}' # <-- here we get the files as a list.
    
    - name: your list
      debug:
       msg: '{{ IRGeekSauce_list }}'

    - include_tasks: anothertasklist.yml
      loop: '{{ IRGeekSauce_list }}'
      loop_control:
        loop_var: singlepathvariable

您应该能够将整个和include find_result.files作为循环,然后使用loopvar singlepathvariable(或者重命名它),并将路径作为{{singlepathvariable.path}}

您需要一个,更具体地说,是关于
查找结果.files
。我不理解循环我需要的内容的语法。这非常有帮助,但是
默认([])
部分是指连接
项.path
?这并不能完全回答我的问题,因为我不想要另一个剧本,它没有告诉我如何在过期检查中访问列表。例如,openssl_证书使用
路径
,但我不知道如何定义路径,因为将有多个路径(需要一个循环)。那么路径的占位符是什么呢?@IRGreekSause 1.)defaul([])将变量定义为一个列表-如果之前没有定义。2.)包括_任务(因此列出要执行的其他任务),我认为如果你打算用它做很多事情,这是最简单的方法。我不确定我是否理解正确,但您只想找到所有的.crt文件,并运行一个shell脚本来检查它们的过期日期,您只想打印出来。您应该能够使用
shell:openssl mumbojumbo{{{item.path}}-enddate
with_items:find_result.files
(请参阅my with_item)运行shell命令。但我想循环一下。
 - name: hello
   debug:
    msg: 'You are now in another playbook'

 - name:
   debug:
    msg: 'Woho: {{ singlepathvariable }}'

 - name:
   openssl_certificate_info:
    howeverthatmoduleworks...