# 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 - 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 # 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"