Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelogs/fragments/877_tags_info.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- purefa_info - Added version check to ensure tags are only used in appropriate Purity versions
274 changes: 148 additions & 126 deletions plugins/modules/purefa_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
DSROLE_POLICY_API_VERSION = "2.36"
CONTEXT_API_VERSION = "2.38"
QUOTA_API_VERSION = "2.42"
TAGS_API_VERSION = "2.39"


def _is_cbs(array):
Expand Down Expand Up @@ -1584,16 +1585,19 @@ def generate_snap_dict(array):
except KeyError:
snap_info[remote_snap_name] = {"remote": []}
snap_info[remote_snap_name]["remote"].append(remote_dict)
snaps_tags = list(array.get_volume_snapshots_tags(resource_destroyed=False).items)
for tag in range(len(snaps_tags)):
snap_info[snaps_tags[tag].resource.name]["tags"].append(
{
"key": snaps_tags[tag].key,
"value": snaps_tags[tag].value,
"copyable": snaps_tags[tag].copyable,
"namespace": snaps_tags[tag].namespace,
}
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
snaps_tags = list(
array.get_volume_snapshots_tags(resource_destroyed=False).items
)
for tag in range(len(snaps_tags)):
snap_info[snaps_tags[tag].resource.name]["tags"].append(
{
"key": snaps_tags[tag].key,
"value": snaps_tags[tag].value,
"copyable": snaps_tags[tag].copyable,
"namespace": snaps_tags[tag].namespace,
}
)
return snap_info


Expand Down Expand Up @@ -1661,16 +1665,19 @@ def generate_del_snap_dict(array):
except KeyError:
snap_info[remote_snap_name] = {"remote": []}
snap_info[remote_snap_name]["remote"].append(remote_dict)
snaps_tags = list(array.get_volume_snapshots_tags(resource_destroyed=True).items)
for tag in range(len(snaps_tags)):
snap_info[snaps_tags[tag].resource.name]["tags"].append(
{
"key": snaps_tags[tag].key,
"value": snaps_tags[tag].value,
"copyable": snaps_tags[tag].copyable,
"namespace": snaps_tags[tag].namespace,
}
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
snaps_tags = list(
array.get_volume_snapshots_tags(resource_destroyed=True).items
)
for tag in range(len(snaps_tags)):
snap_info[snaps_tags[tag].resource.name]["tags"].append(
{
"key": snaps_tags[tag].key,
"value": snaps_tags[tag].value,
"copyable": snaps_tags[tag].copyable,
"namespace": snaps_tags[tag].namespace,
}
)
return snap_info


Expand Down Expand Up @@ -1737,16 +1744,17 @@ def generate_del_vol_dict(array):
)
if LooseVersion(SUBS_API_VERSION) <= LooseVersion(array.get_rest_version()):
volume_info[volume]["total_used"] = vols[vol].space.total_used
volume_tags = list(array.get_volumes_tags(resource_destroyed=True).items)
for tag in range(len(volume_tags)):
volume_info[volume_tags[tag].resource.name]["tags"].append(
{
"key": volume_tags[tag].key,
"value": volume_tags[tag].value,
"copyable": volume_tags[tag].copyable,
"namespace": volume_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
volume_tags = list(array.get_volumes_tags(resource_destroyed=True).items)
for tag in range(len(volume_tags)):
volume_info[volume_tags[tag].resource.name]["tags"].append(
{
"key": volume_tags[tag].key,
"value": volume_tags[tag].value,
"copyable": volume_tags[tag].copyable,
"namespace": volume_tags[tag].namespace,
}
)
return volume_info


Expand Down Expand Up @@ -1838,16 +1846,17 @@ def generate_vol_dict(array, performance):
dict(t)
for t in set(tuple(d.items()) for d in volume_info[volume]["host_groups"])
]
volume_tags = list(array.get_volumes_tags(resource_destroyed=False).items)
for tag in range(len(volume_tags)):
volume_info[volume_tags[tag].resource.name]["tags"].append(
{
"key": volume_tags[tag].key,
"value": volume_tags[tag].value,
"copyable": volume_tags[tag].copyable,
"namespace": volume_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
volume_tags = list(array.get_volumes_tags(resource_destroyed=False).items)
for tag in range(len(volume_tags)):
volume_info[volume_tags[tag].resource.name]["tags"].append(
{
"key": volume_tags[tag].key,
"value": volume_tags[tag].value,
"copyable": volume_tags[tag].copyable,
"namespace": volume_tags[tag].namespace,
}
)
if performance:
vols_performance = list(array.get_volumes_performance(destroyed=False).items)
for perf in range(0, len(vols_performance)):
Expand Down Expand Up @@ -1976,16 +1985,17 @@ def generate_host_dict(array, performance):
host_info[hosts[host]["name"]]["performance_balance"].append(
host_perf_balance
)
host_tags = list(array.get_hosts_tags(resource_destroyed=False).items)
for tag in range(len(host_tags)):
host_info[host_tags[tag].resource.name]["tags"].append(
{
"key": host_tags[tag].key,
"value": host_tags[tag].value,
"copyable": host_tags[tag].copyable,
"namespace": host_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
host_tags = list(array.get_hosts_tags(resource_destroyed=False).items)
for tag in range(len(host_tags)):
host_info[host_tags[tag].resource.name]["tags"].append(
{
"key": host_tags[tag].key,
"value": host_tags[tag].value,
"copyable": host_tags[tag].copyable,
"namespace": host_tags[tag].namespace,
}
)
if performance:
for perf in range(0, len(hosts_performance)):
if ":" not in hosts_performance[perf].name:
Expand Down Expand Up @@ -2181,16 +2191,19 @@ def generate_del_pgroups_dict(array):
pgroups_info[protgroup]["manual_eradication"] = getattr(
pg_info.eradication_config, "manual_eradication", None
)
pgroup_tags = list(array.get_protection_groups_tags(resource_destroyed=True).items)
for tag in range(len(pgroup_tags)):
pgroups_info[pgroup_tags[tag].resource.name]["tags"].append(
{
"key": pgroup_tags[tag].key,
"value": pgroup_tags[tag].value,
"copyable": pgroup_tags[tag].copyable,
"namespace": pgroup_tags[tag].namespace,
}
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
pgroup_tags = list(
array.get_protection_groups_tags(resource_destroyed=True).items
)
for tag in range(len(pgroup_tags)):
pgroups_info[pgroup_tags[tag].resource.name]["tags"].append(
{
"key": pgroup_tags[tag].key,
"value": pgroup_tags[tag].value,
"copyable": pgroup_tags[tag].copyable,
"namespace": pgroup_tags[tag].namespace,
}
)
return pgroups_info


Expand Down Expand Up @@ -2322,16 +2335,19 @@ def generate_pgroups_dict(array):
pgroups_info[protgroup]["manual_eradication"] = getattr(
pg_info.eradication_config, "manual_eradication", None
)
pgroup_tags = list(array.get_protection_groups_tags(resource_destroyed=False).items)
for tag in range(len(pgroup_tags)):
pgroups_info[pgroup_tags[tag].resource.name]["tags"].append(
{
"key": pgroup_tags[tag].key,
"value": pgroup_tags[tag].value,
"copyable": pgroup_tags[tag].copyable,
"namespace": pgroup_tags[tag].namespace,
}
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
pgroup_tags = list(
array.get_protection_groups_tags(resource_destroyed=False).items
)
for tag in range(len(pgroup_tags)):
pgroups_info[pgroup_tags[tag].resource.name]["tags"].append(
{
"key": pgroup_tags[tag].key,
"value": pgroup_tags[tag].value,
"copyable": pgroup_tags[tag].copyable,
"namespace": pgroup_tags[tag].namespace,
}
)
return pgroups_info


Expand Down Expand Up @@ -2414,16 +2430,17 @@ def generate_del_pods_dict(array):
"status": getattr(pods[pod].arrays[pod_array], "status", None),
}
)
pods_tags = list(array.get_pods_tags(resource_destroyed=True).items)
for tag in range(len(pods_tags)):
pods_info[pods_tags[tag].resource.name]["tags"].append(
{
"key": pods_tags[tag].key,
"value": pods_tags[tag].value,
"copyable": pods_tags[tag].copyable,
"namespace": pods_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
pods_tags = list(array.get_pods_tags(resource_destroyed=True).items)
for tag in range(len(pods_tags)):
pods_info[pods_tags[tag].resource.name]["tags"].append(
{
"key": pods_tags[tag].key,
"value": pods_tags[tag].value,
"copyable": pods_tags[tag].copyable,
"namespace": pods_tags[tag].namespace,
}
)
return pods_info


Expand Down Expand Up @@ -2484,16 +2501,17 @@ def generate_pods_dict(array, performance):
"status": getattr(pods[pod].arrays[pod_array], "status", None),
}
)
pods_tags = list(array.get_pods_tags(resource_destroyed=False).items)
for tag in range(len(pods_tags)):
pods_info[pods_tags[tag].resource.name]["tags"].append(
{
"key": pods_tags[tag].key,
"value": pods_tags[tag].value,
"copyable": pods_tags[tag].copyable,
"namespace": pods_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
pods_tags = list(array.get_pods_tags(resource_destroyed=False).items)
for tag in range(len(pods_tags)):
pods_info[pods_tags[tag].resource.name]["tags"].append(
{
"key": pods_tags[tag].key,
"value": pods_tags[tag].value,
"copyable": pods_tags[tag].copyable,
"namespace": pods_tags[tag].namespace,
}
)
if performance:
pods_performance = list(array.get_pods_performance().items)
for perf in range(0, len(pods_performance)):
Expand Down Expand Up @@ -2640,16 +2658,17 @@ def generate_vgroups_dict(array, performance):
].priority_adjustment.priority_adjustment_operator + str(
vgroups[vgroup].priority_adjustment.priority_adjustment_value
)
vgroup_tags = list(array.get_volume_groups_tags(resource_destroyed=False).items)
for tag in range(len(vgroup_tags)):
vgroups_info[vgroup_tags[tag].resource.name]["tags"].append(
{
"key": vgroup_tags[tag].key,
"value": vgroup_tags[tag].value,
"copyable": vgroup_tags[tag].copyable,
"namespace": vgroup_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
vgroup_tags = list(array.get_volume_groups_tags(resource_destroyed=False).items)
for tag in range(len(vgroup_tags)):
vgroups_info[vgroup_tags[tag].resource.name]["tags"].append(
{
"key": vgroup_tags[tag].key,
"value": vgroup_tags[tag].value,
"copyable": vgroup_tags[tag].copyable,
"namespace": vgroup_tags[tag].namespace,
}
)
if performance:
vgs_performance = list(array.get_volume_groups_performance().items)
for perf in range(0, len(vgs_performance)):
Expand Down Expand Up @@ -2750,16 +2769,17 @@ def generate_del_vgroups_dict(array):
group_name = vg_volumes[vg_vol].group.name
if group_name in vgroups_info:
vgroups_info[group_name]["volumes"].append(vg_volumes[vg_vol].member.name)
vgroup_tags = list(array.get_volume_groups_tags(resource_destroyed=True).items)
for tag in range(len(vgroup_tags)):
vgroups_info[vgroup_tags[tag].resource.name]["tags"].append(
{
"key": vgroup_tags[tag].key,
"value": vgroup_tags[tag].value,
"copyable": vgroup_tags[tag].copyable,
"namespace": vgroup_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
vgroup_tags = list(array.get_volume_groups_tags(resource_destroyed=True).items)
for tag in range(len(vgroup_tags)):
vgroups_info[vgroup_tags[tag].resource.name]["tags"].append(
{
"key": vgroup_tags[tag].key,
"value": vgroup_tags[tag].value,
"copyable": vgroup_tags[tag].copyable,
"namespace": vgroup_tags[tag].namespace,
}
)
return vgroups_info


Expand Down Expand Up @@ -3027,16 +3047,17 @@ def generate_hgroups_dict(array, performance):
"destroyed": getattr(hgroups[hgroup], "destroyed", False),
"time_remaining": getattr(hgroups[hgroup], "time_remaining", None),
}
hgroup_tags = list(array.get_host_groups_tags(resource_destroyed=False).items)
for tag in range(len(hgroup_tags)):
hgroups_info[hgroup_tags[tag].resource.name]["tags"].append(
{
"key": hgroup_tags[tag].key,
"value": hgroup_tags[tag].value,
"copyable": hgroup_tags[tag].copyable,
"namespace": hgroup_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
hgroup_tags = list(array.get_host_groups_tags(resource_destroyed=False).items)
for tag in range(len(hgroup_tags)):
hgroups_info[hgroup_tags[tag].resource.name]["tags"].append(
{
"key": hgroup_tags[tag].key,
"value": hgroup_tags[tag].value,
"copyable": hgroup_tags[tag].copyable,
"namespace": hgroup_tags[tag].namespace,
}
)
if performance:
hgs_performance = list(array.get_host_groups_performance().items)
for perf in range(0, len(hgs_performance)):
Expand Down Expand Up @@ -3395,16 +3416,17 @@ def generate_realms_dict(array, performance):
}
if realms_info[name]["destroyed"]:
realms_info[name]["time_remaining"] = realms[realm].time_remaining
realms_tags = list(array.get_realms_tags(resource_destroyed=False).items)
for tag in range(len(realms_tags)):
realms_info[realms_tags[tag].resource.name]["tags"].append(
{
"key": realms_tags[tag].key,
"value": realms_tags[tag].value,
"copyable": realms_tags[tag].copyable,
"namespace": realms_tags[tag].namespace,
}
)
if LooseVersion(TAGS_API_VERSION) <= LooseVersion(array.get_rest_version()):
realms_tags = list(array.get_realms_tags(resource_destroyed=False).items)
for tag in range(len(realms_tags)):
realms_info[realms_tags[tag].resource.name]["tags"].append(
{
"key": realms_tags[tag].key,
"value": realms_tags[tag].value,
"copyable": realms_tags[tag].copyable,
"namespace": realms_tags[tag].namespace,
}
)
if performance:
r_perfs = list(array.get_realms_performance().items)
for perf in range(0, len(r_perfs)):
Expand Down