从 csv 文件中读取和使用值
Read and use values from csv file
我正在努力为我目前正在进行的 LAB 项目寻找解决方案。在配置 Cisco ACI 时,我想使用 csv 文件填充我的剧本中的变量。我正在使用 read_csv 模块和最新的 Ansible 2.9
Sample CSV:
tenant1;tenant1-vrf;tenant1-app
tenant1;tenant1-vrf2;tenant1-app2
tenant2;;tenant2-vrf2;tenant2-app2
更新 - 根据 Sai 的代码,我离 objective 不远了。这是完整的任务代码。
UPDATE2 - 最后我回到了 read_csv 模块。即使对于复杂的事情,它也能很好地工作。希望它可以帮助某人作为一个例子。
tasks:
- name: Read tenant from CSV file and return a list
read_csv:
path: "{{ filename }}"
delimiter: ;
register: tenantconfig
- name: TASK 1 - BUILD tenant
aci_tenant:
<<: *aci_login
validate_certs: no
use_ssl: yes
tenant: "{{ item.tenant }}"
description: "{{ item.tenant }} creation as per {{ filename }} source file"
state: present
with_items: "{{ tenantconfig.list }}"
- name: TASK 2 - BUILD Routing {{ vrf }} for {{ tenant }} on {{ apic_host }}
aci_vrf:
<<: *aci_login
state: present
validate_certs: no
use_ssl: yes
tenant: "{{ item.tenant }}"
vrf: "{{ item.vrf }}"
description: "{{ item.vrf }}"
with_items: "{{ tenantconfig.list }}"
我已经更改了答案以动态处理您的输入文件并在您想要调用的任何地方分配租户、vrf 字段。
tasks:
- name: split fields
command: /usr/bin/awk -F';' '!/^#/ && !/^$/ { print }' tenant1.csv
register: tenants_out
#- debug:
# msg: "{{ lookup('csvfile', item + ' file=tenant1.csv delimiter=; col=0') }}"
# with_items: "{{ tenants_out.stdout_lines }}"
- name: TASK 1 - BUILD tenant
aci_tenant:
state: present
tenant: "{{ lookup('csvfile', item + ' file=tenant1.csv delimiter=; col=0') }}"
vrf: "{{ lookup('csvfile', item + ' file=tenant1.csv delimiter=; col=1') }}"
with_items: "{{ tenants_out.stdout_lines }}"
输入文件行使用初始任务吐出,您可以使用 "with_items" 循环直接指定所需的租户、vrf 值。如果您的输入文件也有多行,这将很有用。
我正在努力为我目前正在进行的 LAB 项目寻找解决方案。在配置 Cisco ACI 时,我想使用 csv 文件填充我的剧本中的变量。我正在使用 read_csv 模块和最新的 Ansible 2.9
Sample CSV:
tenant1;tenant1-vrf;tenant1-app
tenant1;tenant1-vrf2;tenant1-app2
tenant2;;tenant2-vrf2;tenant2-app2
更新 - 根据 Sai 的代码,我离 objective 不远了。这是完整的任务代码。
UPDATE2 - 最后我回到了 read_csv 模块。即使对于复杂的事情,它也能很好地工作。希望它可以帮助某人作为一个例子。
tasks:
- name: Read tenant from CSV file and return a list
read_csv:
path: "{{ filename }}"
delimiter: ;
register: tenantconfig
- name: TASK 1 - BUILD tenant
aci_tenant:
<<: *aci_login
validate_certs: no
use_ssl: yes
tenant: "{{ item.tenant }}"
description: "{{ item.tenant }} creation as per {{ filename }} source file"
state: present
with_items: "{{ tenantconfig.list }}"
- name: TASK 2 - BUILD Routing {{ vrf }} for {{ tenant }} on {{ apic_host }}
aci_vrf:
<<: *aci_login
state: present
validate_certs: no
use_ssl: yes
tenant: "{{ item.tenant }}"
vrf: "{{ item.vrf }}"
description: "{{ item.vrf }}"
with_items: "{{ tenantconfig.list }}"
我已经更改了答案以动态处理您的输入文件并在您想要调用的任何地方分配租户、vrf 字段。
tasks:
- name: split fields
command: /usr/bin/awk -F';' '!/^#/ && !/^$/ { print }' tenant1.csv
register: tenants_out
#- debug:
# msg: "{{ lookup('csvfile', item + ' file=tenant1.csv delimiter=; col=0') }}"
# with_items: "{{ tenants_out.stdout_lines }}"
- name: TASK 1 - BUILD tenant
aci_tenant:
state: present
tenant: "{{ lookup('csvfile', item + ' file=tenant1.csv delimiter=; col=0') }}"
vrf: "{{ lookup('csvfile', item + ' file=tenant1.csv delimiter=; col=1') }}"
with_items: "{{ tenants_out.stdout_lines }}"
输入文件行使用初始任务吐出,您可以使用 "with_items" 循环直接指定所需的租户、vrf 值。如果您的输入文件也有多行,这将很有用。