可见-需要在CSV中输出多列



我的剧本如下:

tasks:
- name: To Get list of all ACM 
aws_acm_info:
region: "{{ region }}"
register: acm

- name: Cname Names
set_fact:  
cname:  "{{ acm | json_query(jmesquery) }}"
vars:
jmesquery: 'certificates[*].domain_validation_options[].resource_record.name'

- name: Cname Values
set_fact:  
value:  "{{ acm | json_query(jmesquery) }}"
vars:
jmesquery: 'certificates[*].domain_validation_options[].resource_record.value'


- name: set file header
shell: echo 'cname, value'> {{ path }}
run_once: true


- name: CSV - Write information into .csv file
lineinfile:
insertafter: ','
dest: "{{ path }}"
line: "{{ item }}"
with_items: 
- "{{ cname }}" 
- "{{ value }}" 

我得到输出单列作为cname,但我需要值在第二列作为值。

要求的输出格式为

输入图片描述

我真的很感激你能提供的任何帮助。

给定下面的测试数据

acm:
certificates:
- domain_validation_options:
- resource_record: {name: aaa, value: 1}
- domain_validation_options:
- resource_record: {name: bbb, value: 2}
- domain_validation_options:
- resource_record: {name: ccc, value: 3}

在单个查询中获取名称/值对

_query: 'certificates[*].domain_validation_options[].[resource_record.name,
resource_record.value]'
csv: "{{ acm|json_query(_query)|map('join', ',')|list }}"

csv:
- aaa,1
- bbb,2
- ccc,3

您可以将这些行写入文件

- lineinfile:
dest: /tmp/cname.csv
line: "{{ item }}"
loop: "{{ csv }}"

shell> cat /tmp/cname.csv 
aaa,1
bbb,2
ccc,3

完整剧本示例

- hosts: localhost
vars:
acm:
certificates:
- domain_validation_options:
- resource_record: {name: aaa, value: 1}
- domain_validation_options:
- resource_record: {name: bbb, value: 2}
- domain_validation_options:
- resource_record: {name: ccc, value: 3}
_query: 'certificates[*].domain_validation_options[].[resource_record.name,
resource_record.value]'
csv: "{{ acm|json_query(_query)|map('join', ',')|list }}"
tasks:
- lineinfile:
dest: /tmp/cname.csv
line: "{{ item }}"
loop: "{{ csv }}"

读取文件

- hosts: localhost
tasks:
- community.general.read_csv:
path: /tmp/cname.csv
fieldnames: cname,value
delimiter: ','
register: cname
- debug:
var: cname.list

cname.list:
- {cname: aaa, value: '1'}
- {cname: bbb, value: '2'}
- {cname: ccc, value: '3'}

现在可以看到值是字符串。如果希望保持值为整数,则以YAML格式存储数据

- hosts: localhost
vars:
acm:
certificates:
- domain_validation_options:
- resource_record: {name: aaa, value: 1}
- domain_validation_options:
- resource_record: {name: bbb, value: 2}
- domain_validation_options:
- resource_record: {name: ccc, value: 3}
_query: 'certificates[*].domain_validation_options[].[resource_record.name,
resource_record.value]'
csv: "{{ acm|json_query(_query)|map('join', ': ')|list }}"
tasks:
- lineinfile:
dest: /tmp/cname.yml
line: "{{ item }}"
loop: "{{ csv }}"

shell> cat /tmp/cname.yml
aaa: 1
bbb: 2
ccc: 3

读取文件

- hosts: localhost
tasks:
- include_vars:
file: /tmp/cname.yml
name: cname_dict
- debug:
var: cname_dict

cname_dict:
aaa: 1
bbb: 2
ccc: 3