How to convert csv into yaml?
I used to use Python script to archive this,actually Ansible can do this natively.
Given this csv file for AWS EC2 instances
$ cat vars/aws/ec2data.csv name,ip,zone,group,env splunk01,10.1.1.1,2a,splunk,prod splunk02,10.1.1.2,2b,splunk,prod
The playbook
--- - hosts: localhost connection: local gather_facts: no vars: ec2data_file: vars/aws/ec2data.csv tasks: - name: reading {{ec2data_file}} command: /usr/bin/awk -F',' '!/^#/ && !/^$/ && NR!=1 { print $1,$2,$4,$5}' {{ec2data_file}} register: csvout #turn ec2_host into list with default filter and append list of dictionary in each loop. #split is Python function to split string,default delimeter is space - name: turn csv output to list of dict set_fact: ec2_host: "{{ ec2_host|default([]) + [ { \ 'name': item.split().0, \ 'ip': item.split().1, \ 'group':item.split().2, \ 'env': item.split().3 } ] }}" with_items: "{{csvout.stdout_lines}}" - debug: msg="{{item.name}},{{item.ip}}" verbosity=1 with_items: "{{ ec2_host }}"
The result
skipping: [localhost] => (item={'ip': u'10.1.1.1', 'group': u'splunk', 'name': u'splunk01', 'env': u'prod'}) skipping: [localhost] => (item={'ip': u'10.1.1.2', 'group': u'splunk', 'name': u'splunk02', 'env': u'prod'})
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.