On Mon, 6 Mar 2023 19:09:21 +0000 Aharonu <aharon...@gmail.com> wrote:
> "csv": [ > "cluster1,virtual_clu1,log_vol1,online,used", > "cluster1,virtual_clu1,log_vol2,offline,not_used", > "cluster1,virtual_clu1,log_vol3_Test,online,not_used", > "cluster1,virtual_clu1,log_vol4,offline,not_used", > "cluster2,virtual_clu2,log_vol6,online,used", > "cluster2,virtual_clu2,log_vol1,offline,not_used", > "cluster2,virtual_clu2,log_vol3,online,not_used" > "cluster2,virtual_clu2,log_vol4,online,used" > ] > > *Looking for:* > The header must be: cluster_name,log_cluster,vol_name,status,work_status > > not working: > (it has to give here when status=online and work_status=not_used ) > exclude: > (it has go give here when status=offline and vol_name=<name contacts > 'Test'>) > working: > (it has to give here when status=online and work_status=used > [other then not working & exclude list] ) > > *example: file1.csv* > > not working: > cluster_name,log_cluster,vol_name,status,work_status > cluster2,virtual_clu2,log_vol3,online,not_used > > exclude: > cluster_name,log_cluster,vol_name,status,work_status > cluster1,virtual_clu1,log_vol3_Test,online,not_used > cluster1,virtual_clu1,log_vol2,offline,not_used > cluster1,virtual_clu1,log_vol4,offline,not_used > cluster2,virtual_clu2,log_vol1,offline,not_used > > working: > cluster_name,log_cluster,vol_name,status,work_status > cluster1,virtual_clu1,log_vol1,online,used > cluster2,virtual_clu2,log_vol6,online,used > cluster2,virtual_clu2,log_vol4,online,used Put the header into the list header: [cluster_name, log_cluster, vol_name, status, work_status] and use the filter *community.general.dict* to create the dictionary csv_dict: "{{ csv| map('split', ',')| map('zip', header)| map('map', 'reverse')| map('community.general.dict') }}" gives csv_dict: - cluster_name: cluster1 log_cluster: virtual_clu1 status: online vol_name: log_vol1 work_status: used - cluster_name: cluster1 ... Select the subsets notworking: "{{ csv_dict| selectattr('status', '==', 'online')| selectattr('work_status', '==', 'not_used') }}" exclude: "{{ csv_dict| selectattr('status', '==', 'offline')| selectattr('vol_name', 'regex', '^log_vol[1-4]$') }}" working: "{{ csv_dict| selectattr('status', '==', 'online')| difference(notworking)| difference(exclude) }}" and write them to the files. Test it first - debug: msg: | dest: {{ item.1 }} {{ item.0 }}: {{ header|join(',') }} {% for l in lookup('vars', item.0) %} {{ l.values()|join(',') }} {% endfor %} loop: - [notworking, fiel1.csv] - [exclude, fiel2.csv] - [working, fiel3.csv] gives (abridged) msg: |- dest: fiel1.csv notworking: cluster_name,log_cluster,vol_name,status,work_status cluster1,virtual_clu1,log_vol3_Test,online,not_used cluster2,virtual_clu2,log_vol3,online,not_used msg: |- dest: fiel2.csv exclude: cluster_name,log_cluster,vol_name,status,work_status cluster1,virtual_clu1,log_vol2,offline,not_used cluster1,virtual_clu1,log_vol4,offline,not_used cluster2,virtual_clu2,log_vol1,offline,not_used msg: |- dest: fiel3.csv working: cluster_name,log_cluster,vol_name,status,work_status cluster1,virtual_clu1,log_vol1,online,used cluster2,virtual_clu2,log_vol6,online,used cluster2,virtual_clu2,log_vol4,online,used Notes: * There are two items in *notworking* not only one * The line where vol_name='log_vol3_Test' shouldn't be in the set *exclude* because of the condition status=='offline'. Fit the regex to your needs. cluster1,virtual_clu1,log_vol3_Test,online,not_used -- Vladimir Botka -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/20230307101422.2ce5d380%40gmail.com.
pgpuWsCqpWct5.pgp
Description: OpenPGP digital signature