如何在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...