ansible/test/integration/targets/read_csv/tasks/main.yml
Dag Wieers 23ae3aa32a read_csv: new module to read CSV files (#49578)
* read_csv: new module to read CSV files

* Add a doc reference to the csvfile lookup plugin

* Enable the use of custom dialect options

* Improve error handling

* Fix PEP8

* Fix more PEP8

* Simplify custom dialect code

* Add integration tests

* Fixes for CI

* Fix for python 2.6
2018-12-10 11:42:47 +00:00

142 lines
3.8 KiB
YAML

# Create basic CSV file
- name: Create unique CSV file
copy:
content: |
name,uid,gid,gecos
dag,500,500,Dag Wieërs
jeroen,501,500,Jeroen Hoekx
dest: users_unique.csv
# Read a CSV file and access user 'dag'
- name: Read users from CSV file and return a dictionary
read_csv:
path: users_unique.csv
key: name
register: users_unique
- assert:
that:
- users_unique.dict.dag.name == 'dag'
- users_unique.dict.dag.gecos == 'Dag Wieërs'
- users_unique.dict.dag.uid == '500'
- users_unique.dict.dag.gid == '500'
- users_unique.dict.jeroen.name == 'jeroen'
- users_unique.dict.jeroen.gecos == 'Jeroen Hoekx'
- users_unique.dict.jeroen.uid == '501'
- users_unique.dict.jeroen.gid == '500'
# Read a CSV file and access the first item
- name: Read users from CSV file and return a list
read_csv:
path: users_unique.csv
register: users_unique
- assert:
that:
- users_unique.list.0.name == 'dag'
- users_unique.list.0.gecos == 'Dag Wieërs'
- users_unique.list.0.uid == '500'
- users_unique.list.0.gid == '500'
- users_unique.list.1.name == 'jeroen'
- users_unique.list.1.gecos == 'Jeroen Hoekx'
- users_unique.list.1.uid == '501'
- users_unique.list.1.gid == '500'
# Create basic CSV file using semi-colon
- name: Create non-unique CSV file using semi-colon
copy:
content: |
name;uid;gid;gecos
dag;500;500;Dag Wieërs
jeroen;501;500;Jeroen Hoekx
dag;502;500;Dag Wieers
dest: users_nonunique.csv
# Read a CSV file and access user 'dag'
- name: Read users from CSV file and return a dictionary
read_csv:
path: users_nonunique.csv
key: name
unique: no
delimiter: ';'
register: users_nonunique
delegate_to: localhost
- assert:
that:
- users_nonunique.dict.dag.name == 'dag'
- users_nonunique.dict.dag.gecos == 'Dag Wieers'
- users_nonunique.dict.dag.uid == '502'
- users_nonunique.dict.dag.gid == '500'
- users_nonunique.dict.jeroen.name == 'jeroen'
- users_nonunique.dict.jeroen.gecos == 'Jeroen Hoekx'
- users_nonunique.dict.jeroen.uid == '501'
- users_nonunique.dict.jeroen.gid == '500'
# Read a CSV file using an non-existing dialect
- name: Read users from CSV file and return a dictionary
read_csv:
path: users_nonunique.csv
dialect: placebo
register: users_placebo
ignore_errors: yes
- assert:
that:
- users_placebo is failed
- users_placebo.msg == "Dialect 'placebo' is not supported by your version of python."
# Create basic CSV file without header
- name: Create unique CSV file without header
copy:
content: |
dag,500,500,Dag Wieërs
jeroen,501,500,Jeroen Hoekx
dest: users_noheader.csv
delegate_to: localhost
# Read a CSV file and access user 'dag'
- name: Read users from CSV file and return a dictionary
read_csv:
path: users_noheader.csv
key: name
fieldnames: name,uid,gid,gecos
register: users_noheader
- assert:
that:
- users_noheader.dict.dag.name == 'dag'
- users_noheader.dict.dag.gecos == 'Dag Wieërs'
- users_noheader.dict.dag.uid == '500'
- users_noheader.dict.dag.gid == '500'
- users_noheader.dict.jeroen.name == 'jeroen'
- users_noheader.dict.jeroen.gecos == 'Jeroen Hoekx'
- users_noheader.dict.jeroen.uid == '501'
- users_noheader.dict.jeroen.gid == '500'
# Create broken file
- name: Create unique CSV file
copy:
content: |
name,uid,gid,gecos
dag,500,500,Dag Wieërs
jeroen,501,500,"Jeroen"Hoekx"
dest: users_broken.csv
# Read a broken CSV file using strict
- name: Read users from a broken CSV file
read_csv:
path: users_broken.csv
key: name
strict: yes
register: users_broken
ignore_errors: yes
- assert:
that:
- users_broken is failed
- "'Unable to process file' in users_broken.msg"