从csv文件读取和使用值

时间:2019-11-07 14:39:28

标签: csv ansible cisco

我正在努力为目前正在研究的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

UPDATE -基于Sai的代码,我离目标不远。这是完整的任务代码。
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 }}"

1 个答案:

答案 0 :(得分:0)

我已更改答案,以动态处理您的输入文件,并在要调用的任何地方分配承租人,vrf字段。

tasks:

    - name: split fields
      command: /usr/bin/awk -F';' '!/^#/ && !/^$/ { print $1 }' 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”循环直接指定所需的tenent,vrf值。如果您的输入文件也包含多行,这将很有用。