--- #################################################################### # WARNING: These are designed specifically for Ansible tests # # and should not be used as examples of how to write Ansible roles # #################################################################### # Copyright (c) Ansible Project # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later # Create basic CSV file - name: Create unique CSV file copy: content: &users_content | name,uid,gid,gecos dag,500,500,Dag Wieërs jeroen,501,500,Jeroen Hoekx dest: "{{ remote_tmp_dir }}/users_unique.csv" # Read a CSV file and access user 'dag' - name: Read users from CSV file and return a dictionary read_csv: path: "{{ remote_tmp_dir }}/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: "{{ remote_tmp_dir }}/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: "{{ remote_tmp_dir }}/users_nonunique.csv" # Read a CSV file and access user 'dag' - name: Read users from CSV file and return a dictionary read_csv: path: "{{ remote_tmp_dir }}/users_nonunique.csv" key: name unique: false 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: "{{ remote_tmp_dir }}/users_nonunique.csv" dialect: placebo register: users_placebo ignore_errors: true - 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: "{{ remote_tmp_dir }}/users_noheader.csv" # Read a CSV file and access user 'dag' - name: Read users from CSV file and return a dictionary read_csv: path: "{{ remote_tmp_dir }}/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: "{{ remote_tmp_dir }}/users_broken.csv" # Read a broken CSV file using strict - name: Read users from a broken CSV file read_csv: path: "{{ remote_tmp_dir }}/users_broken.csv" key: name strict: true register: users_broken ignore_errors: true - assert: that: - users_broken is failed - "'Unable to process file' in users_broken.msg" # Create basic CSV file with BOM - name: Create unique CSV file with BOM copy: content: "{{ bom + content }}" dest: "{{ remote_tmp_dir }}/users_bom.csv" vars: content: *users_content bom: "{{ '\ufeff' }}" # Read a CSV file and access the first item - name: Read users from CSV file and return a list read_csv: path: "{{ remote_tmp_dir }}/users_bom.csv" register: users_bom - assert: that: - users_bom.list.0.name == 'dag' - users_bom.list.0.gecos == 'Dag Wieërs' - users_bom.list.0.uid == '500' - users_bom.list.0.gid == '500' - users_bom.list.1.name == 'jeroen' - users_bom.list.1.gecos == 'Jeroen Hoekx' - users_bom.list.1.uid == '501' - users_bom.list.1.gid == '500'