add 'list_ingressroute_for_all_namespaces' method

This commit is contained in:
Priyanka Saggu 2021-05-03 17:05:14 +05:30
parent def8b28f0a
commit eb952e70f1

View File

@ -21,10 +21,44 @@ This example demonstrates the following:
"""
from kubernetes import config, dynamic
from kubernetes import client as k8s_client
from kubernetes.dynamic.exceptions import ResourceNotFoundError
from kubernetes.client import api_client
import time
def list_ingressroute_for_all_namespaces(group, version, plural):
custom_object_api = k8s_client.CustomObjectsApi()
list_of_ingress_routes = custom_object_api.list_cluster_custom_object(
group, version, plural
)
print(
"%s\t\t\t%s\t\t\t%s\t\t%s\t\t\t\t%s"
% ("NAME", "NAMESPACE", "FQDN", "TLS", "STRATEGY")
)
for item in list_of_ingress_routes["items"]:
print(
"%s\t%s\t\t%s\t%s\t%s"
% (
item["metadata"]["name"],
item["metadata"]["namespace"],
item["spec"]["virtualhost"]["fqdn"],
item["spec"]["virtualhost"]["tls"],
item["spec"]["strategy"]
)
)
def create_namespace(namespace_api, name):
namespace_manifest = {
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {"name": name, "resourceversion": "v1"},
}
namespace_api.create(body=namespace_manifest)
def delete_namespace(namespace_api, name):
namespace_api.delete(name=name)
def main():
# Creating a dynamic client
@ -37,6 +71,8 @@ def main():
api_version="apiextensions.k8s.io/v1", kind="CustomResourceDefinition"
)
namespace_api = client.resources.get(api_version="v1", kind="Namespace")
# Creating a Namespaced CRD named "ingressroutes.apps.example.com"
name = "ingressroutes.apps.example.com"
@ -115,12 +151,18 @@ def main():
# Creating a custom resource (CR) `ingress-route-*`, using the above CRD `ingressroutes.apps.example.com`
namespace_first = "test-namespace-first"
namespace_second = "test-namespace-second"
create_namespace(namespace_api, namespace_first)
create_namespace(namespace_api, namespace_second)
ingressroute_manifest_first = {
"apiVersion": "apps.example.com/v1",
"kind": "IngressRoute",
"metadata": {
"name": "ingress-route-first",
"namespace": "default",
"namespace": namespace_first,
},
"spec": {
"virtualhost": {
@ -136,7 +178,7 @@ def main():
"kind": "IngressRoute",
"metadata": {
"name": "ingress-route-second",
"namespace": "default",
"namespace": namespace_second,
},
"spec": {
"virtualhost": {
@ -147,28 +189,15 @@ def main():
},
}
ingressroute_api.create(body=ingressroute_manifest_first, namespace="default")
ingressroute_api.create(body=ingressroute_manifest_second, namespace="default")
ingressroute_api.create(body=ingressroute_manifest_first, namespace=namespace_first)
ingressroute_api.create(body=ingressroute_manifest_second, namespace=namespace_second)
print("\n[INFO] custom resources `ingress-route-*` created\n")
# Listing the `ingress-route-*` custom resources
ingress_routes_list = ingressroute_api.get()
print(
"%s\t\t\t%s\t%s\t\t%s\t\t\t\t%s"
% ("NAME", "NAMESPACE", "FQDN", "TLS", "STRATEGY")
list_ingressroute_for_all_namespaces(
group="apps.example.com", version="v1", plural="ingressroutes"
)
for item in ingress_routes_list.items:
print(
"%s\t%s\t\t%s\t%s\t%s"
% (
item.metadata.name,
item.metadata.namespace,
item.spec.virtualhost.fqdn,
item.spec.virtualhost.tls,
item.spec.strategy,
)
)
# Patching the ingressroutes custom resources
@ -185,34 +214,30 @@ def main():
print(
"\n[INFO] custom resources `ingress-route-*` patched to update the strategy\n"
)
ingress_routes_list = ingressroute_api.get()
print(
"%s\t\t\t%s\t%s\t\t%s\t\t\t\t%s"
% ("NAME", "NAMESPACE", "FQDN", "TLS", "STRATEGY")
list_ingressroute_for_all_namespaces(
group="apps.example.com", version="v1", plural="ingressroutes"
)
for item in ingress_routes_list.items:
print(
"%s\t%s\t\t%s\t%s\t%s"
% (
item.metadata.name,
item.metadata.namespace,
item.spec.virtualhost.fqdn,
item.spec.virtualhost.tls,
item.spec.strategy,
)
)
# Deleting the ingressroutes custom resources
delete_ingressroute_first = ingressroute_api.delete(
name="ingress-route-first", namespace="default"
name="ingress-route-first", namespace=namespace_first
)
delete_ingressroute_second = ingressroute_api.delete(
name="ingress-route-second", namespace="default"
name="ingress-route-second", namespace=namespace_second
)
print("\n[INFO] custom resources `ingress-route-*` deleted")
# Deleting the namespaces
delete_namespace(namespace_api, namespace_first)
time.sleep(4)
delete_namespace(namespace_api, namespace_second)
time.sleep(4)
print("\n[INFO] test namespaces deleted")
# Deleting the ingressroutes.apps.example.com custom resource definition
crd_api.delete(name=name)