diff --git a/roles/mtv_management/README.md b/roles/mtv_management/README.md index c8b91f7..8e4ee15 100644 --- a/roles/mtv_management/README.md +++ b/roles/mtv_management/README.md @@ -197,6 +197,8 @@ Description: Management of the Migration Toolkit for Virtualization (MTV). | _mtv_storage_map ¦ Determine Destination Storage Class | `ansible.builtin.set_fact` | True | | _mtv_storage_map ¦ Query for Datastores from Destination Provider | `ansible.builtin.include_tasks` | True | | _mtv_storage_map ¦ Query for Datastores from Destination Provider | `ansible.builtin.include_tasks` | True | +| _mtv_storage_map ¦ Extract included datastore IDs from overrides | `ansible.builtin.set_fact` | True | +| _mtv_storage_map ¦ Extract excluded datastore IDs from overrides | `ansible.builtin.set_fact` | True | | _mtv_storage_map ¦ Process VMware Datastores | `ansible.builtin.include_tasks` | True | | _mtv_storage_map ¦ Process Ovirt Datastores | `ansible.builtin.include_tasks` | True | | _mtv_storage_map ¦ Template StorageMap Map | `ansible.builtin.set_fact` | False | @@ -406,11 +408,13 @@ classDef rescue stroke:#665352,stroke-width:2px; _mtv_storage_map___Query_for_Storage_Classes_from_Destination_Provider_mtv_query_inventory_yml_2-->|Task| _mtv_storage_map___Determine_Destination_Storage_Class3[ mtv storage map determine destination storage
class
When: **mtv management default storage class is not
defined or mtv management default storage class
default true trim length 0 and item
object metadata annotations is defined and item
object metadata annotations storageclass
kubernetes io is default class default false
string lower true**]:::task _mtv_storage_map___Determine_Destination_Storage_Class3-->|Include task| _mtv_storage_map___Query_for_Datastores_from_Destination_Provider_mtv_query_inventory_yml_4[ mtv storage map query for datastores from
destination provider
When: **ovirt in provider**
include_task: mtv query inventory yml]:::includeTasks _mtv_storage_map___Query_for_Datastores_from_Destination_Provider_mtv_query_inventory_yml_4-->|Include task| _mtv_storage_map___Query_for_Datastores_from_Destination_Provider_mtv_query_inventory_yml_5[ mtv storage map query for datastores from
destination provider
When: **vsphere in provider**
include_task: mtv query inventory yml]:::includeTasks - _mtv_storage_map___Query_for_Datastores_from_Destination_Provider_mtv_query_inventory_yml_5-->|Include task| _mtv_storage_map___Process_VMware_Datastores__mtv_storage_map_process_datastore_yml_6[ mtv storage map process vmware datastores
When: **vsphere in provider and mtv destination
datastores is defined and mtv destination
datastores length 0**
include_task: mtv storage map process datastore yml]:::includeTasks - _mtv_storage_map___Process_VMware_Datastores__mtv_storage_map_process_datastore_yml_6-->|Include task| _mtv_storage_map___Process_Ovirt_Datastores__mtv_storage_map_process_datastore_yml_7[ mtv storage map process ovirt datastores
When: **ovirt in provider and mtv destination datastores
is defined and mtv destination datastores length
0**
include_task: mtv storage map process datastore yml]:::includeTasks - _mtv_storage_map___Process_Ovirt_Datastores__mtv_storage_map_process_datastore_yml_7-->|Task| _mtv_storage_map___Template_StorageMap_Map8[ mtv storage map template storagemap map]:::task - _mtv_storage_map___Template_StorageMap_Map8-->|Task| _mtv_storage_map___Create_Storage_Map9[ mtv storage map create storage map]:::task - _mtv_storage_map___Create_Storage_Map9-->End + _mtv_storage_map___Query_for_Datastores_from_Destination_Provider_mtv_query_inventory_yml_5-->|Task| _mtv_storage_map___Extract_included_datastore_IDs_from_overrides6[ mtv storage map extract included datastore ids
from overrides
When: **mtv management storage map overrides is defined
and mtv management storage map overrides length
0 and mtv management storage map overrides
selectattr include defined list length
0**]:::task + _mtv_storage_map___Extract_included_datastore_IDs_from_overrides6-->|Task| _mtv_storage_map___Extract_excluded_datastore_IDs_from_overrides7[ mtv storage map extract excluded datastore ids
from overrides
When: **mtv management storage map overrides is defined
and mtv management storage map overrides length
0 and mtv management storage map overrides
selectattr exclude defined list length
0**]:::task + _mtv_storage_map___Extract_excluded_datastore_IDs_from_overrides7-->|Include task| _mtv_storage_map___Process_VMware_Datastores__mtv_storage_map_process_datastore_yml_8[ mtv storage map process vmware datastores
When: **vsphere in provider and mtv destination
datastores is defined and mtv destination
datastores length 0**
include_task: mtv storage map process datastore yml]:::includeTasks + _mtv_storage_map___Process_VMware_Datastores__mtv_storage_map_process_datastore_yml_8-->|Include task| _mtv_storage_map___Process_Ovirt_Datastores__mtv_storage_map_process_datastore_yml_9[ mtv storage map process ovirt datastores
When: **ovirt in provider and mtv destination datastores
is defined and mtv destination datastores length
0**
include_task: mtv storage map process datastore yml]:::includeTasks + _mtv_storage_map___Process_Ovirt_Datastores__mtv_storage_map_process_datastore_yml_9-->|Task| _mtv_storage_map___Template_StorageMap_Map10[ mtv storage map template storagemap map]:::task + _mtv_storage_map___Template_StorageMap_Map10-->|Task| _mtv_storage_map___Create_Storage_Map11[ mtv storage map create storage map]:::task + _mtv_storage_map___Create_Storage_Map11-->End ``` ### Graph for _mtv_storage_map_process_datastore.yml @@ -434,8 +438,8 @@ classDef rescue stroke:#665352,stroke-width:2px; _mtv_storage_map_process_datastore___Set_Ovirt_StorageMap_StorageClass_from_Overrides3-->|Task| _mtv_storage_map_process_datastore___Verify_VMWare_Destination_Storage_Class4[ mtv storage map process datastore verify vmware
destination storage class
When: **mtv vmware datastore is defined**]:::task _mtv_storage_map_process_datastore___Verify_VMWare_Destination_Storage_Class4-->|Task| _mtv_storage_map_process_datastore___Verify_Ovirt_Destination_Storage_Class5[ mtv storage map process datastore verify ovirt
destination storage class
When: **mtv ovirt datastore is defined**]:::task _mtv_storage_map_process_datastore___Verify_Ovirt_Destination_Storage_Class5-->|Task| _mtv_storage_map_process_datastore___Template_StorageMap_Map6[ mtv storage map process datastore template
storagemap map]:::task - _mtv_storage_map_process_datastore___Template_StorageMap_Map6-->|Task| _mtv_storage_map_process_datastore___Add_VMware_StorageMap_Map_to_Dict7[ mtv storage map process datastore add vmware
storagemap map to dict
When: **mtv vmware datastore is defined and include in
mtv management mtv vmware datastore overrides and
mtv management storage map overrides selectattr
include defined list length 0 or mtv
management storage map overrides selectattr
include defined list length 0 and mtv
management storage map overrides selectattr
exclude defined list length 0 or
exclude not in mtv management mtv vmware
datastore overrides and mtv management storage map
overrides selectattr exclude defined
list length 0**]:::task - _mtv_storage_map_process_datastore___Add_VMware_StorageMap_Map_to_Dict7-->|Task| _mtv_storage_map_process_datastore___Add_Ovirt_StorageMap_Map_to_Dict8[ mtv storage map process datastore add ovirt
storagemap map to dict
When: **mtv ovirt datastore is defined and include in
mtv management mtv ovirt datastore overrides and
mtv management storage map overrides selectattr
include defined list length 0 or mtv
management storage map overrides selectattr
include defined list length 0 and mtv
management storage map overrides selectattr
exclude defined list length 0 or
exclude not in mtv management mtv ovirt datastore
overrides and mtv management storage map overrides
selectattr exclude defined list length
0**]:::task + _mtv_storage_map_process_datastore___Template_StorageMap_Map6-->|Task| _mtv_storage_map_process_datastore___Add_VMware_StorageMap_Map_to_Dict7[ mtv storage map process datastore add vmware
storagemap map to dict
When: **mtv vmware datastore is defined**]:::task + _mtv_storage_map_process_datastore___Add_VMware_StorageMap_Map_to_Dict7-->|Task| _mtv_storage_map_process_datastore___Add_Ovirt_StorageMap_Map_to_Dict8[ mtv storage map process datastore add ovirt
storagemap map to dict
When: **mtv ovirt datastore is defined**]:::task _mtv_storage_map_process_datastore___Add_Ovirt_StorageMap_Map_to_Dict8-->End ``` diff --git a/roles/mtv_management/tasks/_mtv_storage_map.yml b/roles/mtv_management/tasks/_mtv_storage_map.yml index ab05c6c..175bc14 100644 --- a/roles/mtv_management/tasks/_mtv_storage_map.yml +++ b/roles/mtv_management/tasks/_mtv_storage_map.yml @@ -2,7 +2,7 @@ - name: _mtv_storage_map | Initialize data structures ansible.builtin.set_fact: - mtv_management_mtv_storagemaps: {} + mtv_management_mtv_storagemap_maps: {} - name: _mtv_storage_map | Verify Storage Map Overrides do not contain both includes and excludes ansible.builtin.fail: @@ -41,9 +41,48 @@ mtv_management_inventory_query_result_var: mtv_destination_datastores when: "'vsphere' in provider" +- name: _mtv_storage_map | Extract included datastore IDs from overrides + ansible.builtin.set_fact: + mtv_management_mtv_allowed_datastore_ids: >- + {{ + mtv_management_storage_map_overrides + | selectattr('include', 'defined') + | selectattr('include', 'equalto', true) + | map(attribute='id') + | list + }} + when: + - mtv_management_storage_map_overrides is defined + - mtv_management_storage_map_overrides | length > 0 + - mtv_management_storage_map_overrides | selectattr('include', 'defined') | list | length > 0 + +- name: _mtv_storage_map | Extract excluded datastore IDs from overrides + ansible.builtin.set_fact: + mtv_management_mtv_excluded_datastore_ids: >- + {{ + mtv_management_storage_map_overrides + | selectattr('exclude', 'defined') + | selectattr('exclude', 'equalto', true) + | map(attribute='id') + | list + }} + when: + - mtv_management_storage_map_overrides is defined + - mtv_management_storage_map_overrides | length > 0 + - mtv_management_storage_map_overrides | selectattr('exclude', 'defined') | list | length > 0 + - name: _mtv_storage_map | Process VMware Datastores ansible.builtin.include_tasks: _mtv_storage_map_process_datastore.yml - loop: "{{ mtv_destination_datastores }}" + loop: >- + {{ + (mtv_destination_datastores | selectattr('id', 'in', mtv_management_mtv_allowed_datastore_ids) | list) + if (mtv_management_mtv_allowed_datastore_ids | default([]) | length > 0) + else (mtv_destination_datastores + | rejectattr('id', 'in', mtv_management_mtv_excluded_datastore_ids | default([])) + | list) + if (mtv_management_mtv_excluded_datastore_ids | default([]) | length > 0) + else mtv_destination_datastores + }} loop_control: loop_var: mtv_vmware_datastore when: @@ -53,7 +92,16 @@ - name: _mtv_storage_map | Process Ovirt Datastores ansible.builtin.include_tasks: _mtv_storage_map_process_datastore.yml - loop: "{{ mtv_destination_datastores }}" + loop: >- + {{ + (mtv_destination_datastores | selectattr('id', 'in', mtv_management_mtv_allowed_datastore_ids) | list) + if (mtv_management_mtv_allowed_datastore_ids | default([]) | length > 0) + else (mtv_destination_datastores + | rejectattr('id', 'in', mtv_management_mtv_excluded_datastore_ids | default([])) + | list) + if (mtv_management_mtv_excluded_datastore_ids | default([]) | length > 0) + else mtv_destination_datastores + }} loop_control: loop_var: mtv_ovirt_datastore when: diff --git a/roles/mtv_management/tasks/_mtv_storage_map_process_datastore.yml b/roles/mtv_management/tasks/_mtv_storage_map_process_datastore.yml index 453da6d..a74f877 100644 --- a/roles/mtv_management/tasks/_mtv_storage_map_process_datastore.yml +++ b/roles/mtv_management/tasks/_mtv_storage_map_process_datastore.yml @@ -54,15 +54,13 @@ - name: _mtv_storage_map_process_datastore | Add VMware StorageMap Map to Dict ansible.builtin.set_fact: - mtv_management_mtv_storagemap_maps: "{{ mtv_management_mtv_storagemap_maps | default({}) | ansible.builtin.combine({mtv_vmware_datastore.selfLink: mtv_management_storage_map_map}, recursive=true) }}" # noqa: yaml[line-length] + mtv_management_mtv_storagemap_maps: "{{ mtv_management_mtv_storagemap_maps | default({}) | ansible.builtin.combine({(mtv_vmware_datastore.selfLink + '-' + _mtv_management_storage_map_storage_class): mtv_management_storage_map_map}, recursive=true) }}" # noqa: yaml[line-length] when: - mtv_vmware_datastore is defined - - "(('include' in mtv_management_mtv_vmware_datastore_overrides and mtv_management_storage_map_overrides | selectattr('include', 'defined') | list | length > 0) or (mtv_management_storage_map_overrides | selectattr('include', 'defined') | list | length == 0 and mtv_management_storage_map_overrides | selectattr('exclude', 'defined') | list | length == 0)) or ('exclude' not in mtv_management_mtv_vmware_datastore_overrides and mtv_management_storage_map_overrides | selectattr('exclude', 'defined') | list | length > 0)" # noqa: yaml[line-length] - name: _mtv_storage_map_process_datastore | Add Ovirt StorageMap Map to Dict ansible.builtin.set_fact: - mtv_management_mtv_storagemap_maps: "{{ mtv_management_mtv_storagemap_maps | default({}) | ansible.builtin.combine({mtv_ovirt_datastore.selfLink: mtv_management_storage_map_map}, recursive=true) }}" # noqa: yaml[line-length] + mtv_management_mtv_storagemap_maps: "{{ mtv_management_mtv_storagemap_maps | default({}) | ansible.builtin.combine({(mtv_ovirt_datastore.selfLink + '-' + _mtv_management_storage_map_storage_class): mtv_management_storage_map_map}, recursive=true) }}" # noqa: yaml[line-length] when: - mtv_ovirt_datastore is defined - - "(('include' in mtv_management_mtv_ovirt_datastore_overrides and mtv_management_storage_map_overrides | selectattr('include', 'defined') | list | length > 0) or (mtv_management_storage_map_overrides | selectattr('include', 'defined') | list | length == 0 and mtv_management_storage_map_overrides | selectattr('exclude', 'defined') | list | length == 0)) or ('exclude' not in mtv_management_mtv_ovirt_datastore_overrides and mtv_management_storage_map_overrides | selectattr('exclude', 'defined') | list | length > 0)" # noqa: yaml[line-length] ...