summaryrefslogtreecommitdiff
path: root/bz2041933-bz2041935-2-fence_openstack-clouds-openrc.patch
diff options
context:
space:
mode:
Diffstat (limited to 'bz2041933-bz2041935-2-fence_openstack-clouds-openrc.patch')
-rw-r--r--bz2041933-bz2041935-2-fence_openstack-clouds-openrc.patch171
1 files changed, 171 insertions, 0 deletions
diff --git a/bz2041933-bz2041935-2-fence_openstack-clouds-openrc.patch b/bz2041933-bz2041935-2-fence_openstack-clouds-openrc.patch
new file mode 100644
index 0000000..6daa2bb
--- /dev/null
+++ b/bz2041933-bz2041935-2-fence_openstack-clouds-openrc.patch
@@ -0,0 +1,171 @@
+From 7d9572ec947d23fa18ac530f07fe33ba148c9634 Mon Sep 17 00:00:00 2001
+From: Oyvind Albrigtsen <oalbrigt@redhat.com>
+Date: Mon, 17 Jan 2022 14:32:53 +0100
+Subject: [PATCH] fence_openstack: fix issues with new clouds.yaml/openrc
+ parameters - hardcoded clouds.yaml paths to work like the openstack cli
+ client (used by the resource agents)
+
+---
+ agents/openstack/fence_openstack.py | 55 +++++++++++--------------
+ tests/data/metadata/fence_openstack.xml | 10 -----
+ 2 files changed, 25 insertions(+), 40 deletions(-)
+
+diff --git a/agents/openstack/fence_openstack.py b/agents/openstack/fence_openstack.py
+index d3a4be3aa..666016d78 100644
+--- a/agents/openstack/fence_openstack.py
++++ b/agents/openstack/fence_openstack.py
+@@ -3,6 +3,7 @@
+ import atexit
+ import logging
+ import sys
++import os
+
+ import urllib3
+
+@@ -27,9 +28,15 @@ def translate_status(instance_status):
+ return "unknown"
+
+ def get_cloud(options):
+- import os, yaml
++ import yaml
+
+- clouds_yaml = os.path.expanduser("~/.config/openstack/clouds.yaml")
++ clouds_yaml = "~/.config/openstack/clouds.yaml"
++ if not os.path.exists(os.path.expanduser(clouds_yaml)):
++ clouds_yaml = "/etc/openstack/clouds.yaml"
++ if not os.path.exists(os.path.expanduser(clouds_yaml)):
++ fail_usage("Failed: ~/.config/openstack/clouds.yaml and /etc/openstack/clouds.yaml does not exist")
++
++ clouds_yaml = os.path.expanduser(clouds_yaml)
+ if os.path.exists(clouds_yaml):
+ with open(clouds_yaml, "r") as yaml_stream:
+ try:
+@@ -201,22 +208,13 @@ def define_new_opts():
+ "default": "Default",
+ "order": 5,
+ }
+- all_opt["clouds-yaml"] = {
+- "getopt": ":",
+- "longopt": "clouds-yaml",
+- "help": "--clouds-yaml=[clouds-yaml] Path to the clouds.yaml config file",
+- "required": "0",
+- "shortdesc": "clouds.yaml config file",
+- "default": "~/.config/openstack/clouds.yaml",
+- "order": 6,
+- }
+ all_opt["cloud"] = {
+ "getopt": ":",
+ "longopt": "cloud",
+- "help": "--cloud=[cloud] Openstack cloud (from clouds.yaml).",
++ "help": "--cloud=[cloud] Openstack cloud (from ~/.config/openstack/clouds.yaml or /etc/openstack/clouds.yaml).",
+ "required": "0",
+ "shortdesc": "Cloud from clouds.yaml",
+- "order": 7,
++ "order": 6,
+ }
+ all_opt["openrc"] = {
+ "getopt": ":",
+@@ -224,7 +222,7 @@ def define_new_opts():
+ "help": "--openrc=[openrc] Path to the openrc config file",
+ "required": "0",
+ "shortdesc": "openrc config file",
+- "order": 8,
++ "order": 7,
+ }
+ all_opt["uuid"] = {
+ "getopt": ":",
+@@ -232,7 +230,7 @@ def define_new_opts():
+ "help": "--uuid=[uuid] Replaced by -n, --plug",
+ "required": "0",
+ "shortdesc": "Replaced by port/-n/--plug",
+- "order": 9,
++ "order": 8,
+ }
+ all_opt["cacert"] = {
+ "getopt": ":",
+@@ -241,7 +239,7 @@ def define_new_opts():
+ "required": "0",
+ "shortdesc": "SSL X.509 certificates file",
+ "default": "",
+- "order": 10,
++ "order": 9,
+ }
+ all_opt["apitimeout"] = {
+ "getopt": ":",
+@@ -251,7 +249,7 @@ def define_new_opts():
+ "shortdesc": "Timeout in seconds to use for API calls, default is 60.",
+ "required": "0",
+ "default": 60,
+- "order": 11,
++ "order": 10,
+ }
+
+
+@@ -267,7 +265,6 @@ def main():
+ "project-name",
+ "user-domain-name",
+ "project-domain-name",
+- "clouds-yaml",
+ "cloud",
+ "openrc",
+ "port",
+@@ -312,28 +309,26 @@ def main():
+
+ run_delay(options)
+
+- if options.get("--clouds-yaml"):
+- if not os.path.exists(os.path.expanduser(options["--clouds-yaml"])):
+- fail_usage("Failed: {} does not exist".format(options.get("--clouds-yaml")))
+- if not options.get("--cloud"):
+- fail_usage("Failed: \"cloud\" not specified")
++ if options.get("--cloud"):
+ cloud = get_cloud(options)
+- username = cloud.get("username")
+- password = cloud.get("password")
+- projectname = cloud.get("project_name")
++ username = cloud.get("auth").get("username")
++ password = cloud.get("auth").get("password")
++ projectname = cloud.get("auth").get("project_name")
+ auth_url = None
+ try:
+- auth_url = cloud.get("auth_url")
++ auth_url = cloud.get("auth").get("auth_url")
+ except KeyError:
+ fail_usage("Failed: You have to set the Keystone service endpoint for authorization")
+- user_domain_name = cloud.get("user_domain_name")
+- project_domain_name = cloud.get("project_domain_name")
++ user_domain_name = cloud.get("auth").get("user_domain_name")
++ project_domain_name = cloud.get("auth").get("project_domain_name")
+ caverify = cloud.get("verify")
+ if caverify in [True, False]:
+ options["--ssl-insecure"] = caverify
+ else:
+ options["--cacert"] = caverify
+- if options.get("--openrc") and os.path.exists(os.path.expanduser(options["--openrc"])):
++ elif options.get("--openrc"):
++ if not os.path.exists(os.path.expanduser(options["--openrc"])):
++ fail_usage("Failed: {} does not exist".format(options.get("--openrc")))
+ source_env(options["--openrc"])
+ env = os.environ
+ username = env.get("OS_USERNAME")
+diff --git a/tests/data/metadata/fence_openstack.xml b/tests/data/metadata/fence_openstack.xml
+index 55a57b4d7..67b2191b7 100644
+--- a/tests/data/metadata/fence_openstack.xml
++++ b/tests/data/metadata/fence_openstack.xml
+@@ -93,16 +93,6 @@
+ <content type="string" default="Default" />
+ <shortdesc lang="en">Keystone Project Domain Name</shortdesc>
+ </parameter>
+- <parameter name="clouds-yaml" unique="0" required="0" deprecated="1">
+- <getopt mixed="--clouds-yaml=[clouds-yaml]" />
+- <content type="string" default="~/.config/openstack/clouds.yaml" />
+- <shortdesc lang="en">clouds.yaml config file</shortdesc>
+- </parameter>
+- <parameter name="clouds_yaml" unique="0" required="0" obsoletes="clouds-yaml">
+- <getopt mixed="--clouds-yaml=[clouds-yaml]" />
+- <content type="string" default="~/.config/openstack/clouds.yaml" />
+- <shortdesc lang="en">clouds.yaml config file</shortdesc>
+- </parameter>
+ <parameter name="cloud" unique="0" required="0">
+ <getopt mixed="--cloud=[cloud]" />
+ <content type="string" />