Blame SOURCES/bz2000954-3-fence_kubevirt-get-namespace-from-context.patch

cbc3ed
From 647841dea9d93922779a4aa7d0b5f52f5bc2b4e9 Mon Sep 17 00:00:00 2001
cbc3ed
From: Dan Kenigsberg <danken@redhat.com>
cbc3ed
Date: Thu, 13 Jan 2022 14:57:26 +0200
cbc3ed
Subject: [PATCH] fence_kubevirt: take default namespace from context
cbc3ed
cbc3ed
If --namespace is not provided to kubectl, a default one is taken from
cbc3ed
kubeconfig context. Let fence_kubevirt behave similarly.
cbc3ed
cbc3ed
Signed-off-by: Dan Kenigsberg <danken@redhat.com>
cbc3ed
---
cbc3ed
 agents/kubevirt/fence_kubevirt.py      | 24 +++++++++++++-----------
cbc3ed
 tests/data/metadata/fence_kubevirt.xml |  2 +-
cbc3ed
 2 files changed, 14 insertions(+), 12 deletions(-)
cbc3ed
cbc3ed
diff --git a/agents/kubevirt/fence_kubevirt.py b/agents/kubevirt/fence_kubevirt.py
cbc3ed
index 8392b75a0..8c27a0334 100755
cbc3ed
--- a/agents/kubevirt/fence_kubevirt.py
cbc3ed
+++ b/agents/kubevirt/fence_kubevirt.py
cbc3ed
@@ -12,12 +12,21 @@
cbc3ed
 except ImportError:
cbc3ed
     logging.error("Couldn\'t import kubernetes.client.exceptions.ApiException - not found or not accessible")
cbc3ed
 
cbc3ed
+def _get_namespace(options):
cbc3ed
+    from kubernetes import config
cbc3ed
+
cbc3ed
+    ns = options.get("--namespace")
cbc3ed
+    if ns is None:
cbc3ed
+        ns = config.kube_config.list_kube_config_contexts()[1]['context']['namespace']
cbc3ed
+
cbc3ed
+    return ns
cbc3ed
+
cbc3ed
 def get_nodes_list(conn, options):
cbc3ed
     logging.debug("Starting list/monitor operation")
cbc3ed
     result = {}
cbc3ed
     try:
cbc3ed
         apiversion = options.get("--apiversion")
cbc3ed
-        namespace = options.get("--namespace")
cbc3ed
+        namespace = _get_namespace(options)
cbc3ed
         include_uninitialized = True
cbc3ed
         vm_api = conn.resources.get(api_version=apiversion, kind='VirtualMachine')
cbc3ed
         vm_list = vm_api.get(namespace=namespace)
cbc3ed
@@ -31,7 +40,7 @@ def get_power_status(conn, options):
cbc3ed
     logging.debug("Starting get status operation")
cbc3ed
     try:
cbc3ed
         apiversion = options.get("--apiversion")
cbc3ed
-        namespace = options.get("--namespace")
cbc3ed
+        namespace = _get_namespace(options)
cbc3ed
         name = options.get("--plug")
cbc3ed
         vmi_api = conn.resources.get(api_version=apiversion,
cbc3ed
                                               kind='VirtualMachineInstance')
cbc3ed
@@ -61,7 +70,7 @@ def set_power_status(conn, options):
cbc3ed
     logging.debug("Starting set status operation")
cbc3ed
     try:
cbc3ed
         apiversion= options.get("--apiversion")
cbc3ed
-        namespace = options.get("--namespace")
cbc3ed
+        namespace = _get_namespace(options)
cbc3ed
         name = options.get("--plug")
cbc3ed
         action = 'start' if options["--action"] == "on" else 'stop'
cbc3ed
         virtctl_vm_action(conn, action, namespace, name, apiversion)
cbc3ed
@@ -75,7 +84,7 @@ def define_new_opts():
cbc3ed
         "longopt" : "namespace",
cbc3ed
         "help" : "--namespace=[namespace]        Namespace of the KubeVirt machine",
cbc3ed
         "shortdesc" : "Namespace of the KubeVirt machine.",
cbc3ed
-        "required" : "1",
cbc3ed
+        "required" : "0",
cbc3ed
         "order" : 2
cbc3ed
     }
cbc3ed
     all_opt["kubeconfig"] = {
cbc3ed
@@ -101,11 +110,6 @@ def virtctl_vm_action(conn, action, namespace, name, apiversion):
cbc3ed
     path = path.format(api_version=apiversion, namespace=namespace, name=name, action=action)
cbc3ed
     return conn.request('put', path, header_params={'accept': '*/*'})
cbc3ed
 
cbc3ed
-def validate_options(required_options_list, options):
cbc3ed
-    for required_option in required_options_list:
cbc3ed
-        if required_option not in options:
cbc3ed
-            fail_usage("Failed: %s option must be provided" % required_option)
cbc3ed
-
cbc3ed
 # Main agent method
cbc3ed
 def main():
cbc3ed
     conn = None
cbc3ed
@@ -127,8 +131,6 @@ def main():
cbc3ed
 
cbc3ed
     run_delay(options)
cbc3ed
 
cbc3ed
-    validate_options(['--namespace'], options)
cbc3ed
-
cbc3ed
     # Disable insecure-certificate-warning message
cbc3ed
     if "--ssl-insecure" in options:
cbc3ed
         import urllib3
cbc3ed
diff --git a/tests/data/metadata/fence_kubevirt.xml b/tests/data/metadata/fence_kubevirt.xml
cbc3ed
index 24e975587..ccb20c224 100644
cbc3ed
--- a/tests/data/metadata/fence_kubevirt.xml
cbc3ed
+++ b/tests/data/metadata/fence_kubevirt.xml
cbc3ed
@@ -23,7 +23,7 @@
cbc3ed
 		<content type="boolean"  />
cbc3ed
 		<shortdesc lang="en">Use SSL connection without verifying certificate</shortdesc>
cbc3ed
 	</parameter>
cbc3ed
-	<parameter name="namespace" unique="0" required="1">
cbc3ed
+	<parameter name="namespace" unique="0" required="0">
cbc3ed
 		<getopt mixed="--namespace=[namespace]" />
cbc3ed
 		<content type="string"  />
cbc3ed
 		<shortdesc lang="en">Namespace of the KubeVirt machine.</shortdesc>