mirror of
https://github.com/dubyatp/k8s-helper-scripts.git
synced 2026-04-17 02:00:59 +00:00
+ get-backed-up-volumes
This commit is contained in:
@@ -21,3 +21,4 @@ I do try to include a final confirmation prompt with proposed changes (especiall
|
|||||||
| Script | Description | Notes
|
| Script | Description | Notes
|
||||||
| ------ | ----------- | -----
|
| ------ | ----------- | -----
|
||||||
| [cleanup-velero-resource-labels.py](./cleanup-velero-restore-labels.py) | Cleans up the `velero.io/backup-name` and `velero.io/restore-name` labels given to resources restored by Velero. | Built to work cluster-wide but not difficult to have it scoped to a specific namespace.
|
| [cleanup-velero-resource-labels.py](./cleanup-velero-restore-labels.py) | Cleans up the `velero.io/backup-name` and `velero.io/restore-name` labels given to resources restored by Velero. | Built to work cluster-wide but not difficult to have it scoped to a specific namespace.
|
||||||
|
| [get-backed-up-volumes.py](./get-backed-up-volumes.py) | Lists pods which have `backup.velero.io/backup-volumes` annotations and which volumes are backed up by Velero |
|
||||||
39
get-backed-up-volumes.py
Normal file
39
get-backed-up-volumes.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
from kubernetes import client, config
|
||||||
|
from helper import identifyVolume
|
||||||
|
|
||||||
|
config.load_kube_config()
|
||||||
|
|
||||||
|
api_client = client.ApiClient()
|
||||||
|
core_api = client.CoreV1Api(api_client)
|
||||||
|
|
||||||
|
pods = []
|
||||||
|
|
||||||
|
ret = core_api.list_pod_for_all_namespaces(watch=False)
|
||||||
|
for i in ret.items:
|
||||||
|
pod_volumes = i.spec.volumes
|
||||||
|
backed_up_volumes = []
|
||||||
|
if "backup.velero.io/backup-volumes" in (i.metadata.annotations or {}):
|
||||||
|
vol_type = ""
|
||||||
|
data = (i.metadata.annotations.get("backup.velero.io/backup-volumes")).split(",")
|
||||||
|
for vol in data:
|
||||||
|
for podvol in pod_volumes:
|
||||||
|
if podvol.name == vol:
|
||||||
|
vol_type = identifyVolume(podvol)
|
||||||
|
backed_up_volumes.append(f"{vol} ({vol_type})")
|
||||||
|
pods.append({
|
||||||
|
"namespace": i.metadata.namespace,
|
||||||
|
"name": i.metadata.name,
|
||||||
|
"volumes": backed_up_volumes,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
col_ns = max(len(p["namespace"]) for p in pods) if pods else 9
|
||||||
|
col_name = max(len(p["name"]) for p in pods) if pods else 4
|
||||||
|
|
||||||
|
print(f"{'Namespace':<{col_ns}} {'Name':<{col_name}} Backed Up Volumes")
|
||||||
|
for p in pods:
|
||||||
|
volumes = p["volumes"]
|
||||||
|
first = volumes[0] if volumes else "<none>"
|
||||||
|
print(f"{p['namespace']:<{col_ns}} {p['name']:<{col_name}} {first}")
|
||||||
|
for vol in volumes[1:]:
|
||||||
|
print(f"{'':<{col_ns}} {'':<{col_name}} {vol}")
|
||||||
62
helper.py
Normal file
62
helper.py
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
def identifyVolume(vol):
|
||||||
|
if vol.aws_elastic_block_store is not None:
|
||||||
|
return "awsElasticBlockStore"
|
||||||
|
if vol.azure_disk is not None:
|
||||||
|
return "azureDisk"
|
||||||
|
if vol.azure_file is not None:
|
||||||
|
return "azureFile"
|
||||||
|
if vol.cephfs is not None:
|
||||||
|
return "cephfs"
|
||||||
|
if vol.cinder is not None:
|
||||||
|
return "cinder"
|
||||||
|
if vol.config_map is not None:
|
||||||
|
return "configMap"
|
||||||
|
if vol.csi is not None:
|
||||||
|
return "csi"
|
||||||
|
if vol.downward_api is not None:
|
||||||
|
return "downwardAPI"
|
||||||
|
if vol.empty_dir is not None:
|
||||||
|
return "emptyDir"
|
||||||
|
if vol.ephemeral is not None:
|
||||||
|
return "ephemeral"
|
||||||
|
if vol.fc is not None:
|
||||||
|
return "fc"
|
||||||
|
if vol.flex_volume is not None:
|
||||||
|
return "flexVolume"
|
||||||
|
if vol.flocker is not None:
|
||||||
|
return "flocker"
|
||||||
|
if vol.gce_persistent_disk is not None:
|
||||||
|
return "gcePersistentDisk"
|
||||||
|
if vol.git_repo is not None:
|
||||||
|
return "gitRepo"
|
||||||
|
if vol.glusterfs is not None:
|
||||||
|
return "glusterfs"
|
||||||
|
if vol.host_path is not None:
|
||||||
|
return "hostPath"
|
||||||
|
if vol.image is not None:
|
||||||
|
return "image"
|
||||||
|
if vol.iscsi is not None:
|
||||||
|
return "iscsi"
|
||||||
|
if vol.nfs is not None:
|
||||||
|
return "nfs"
|
||||||
|
if vol.persistent_volume_claim is not None:
|
||||||
|
return "persistentVolumeClaim"
|
||||||
|
if vol.photon_persistent_disk is not None:
|
||||||
|
return "photonPersistentDisk"
|
||||||
|
if vol.portworx_volume is not None:
|
||||||
|
return "portworxVolume"
|
||||||
|
if vol.projected is not None:
|
||||||
|
return "projected"
|
||||||
|
if vol.quobyte is not None:
|
||||||
|
return "quobyte"
|
||||||
|
if vol.rbd is not None:
|
||||||
|
return "rbd"
|
||||||
|
if vol.scale_io is not None:
|
||||||
|
return "scaleIO"
|
||||||
|
if vol.secret is not None:
|
||||||
|
return "secret"
|
||||||
|
if vol.storageos is not None:
|
||||||
|
return "storageos"
|
||||||
|
if vol.vsphere_volume is not None:
|
||||||
|
return "vsphereVolume"
|
||||||
|
return vol.name
|
||||||
Reference in New Issue
Block a user