From b5d72bd91c8685e3551d6e796ca8559304b45785 Mon Sep 17 00:00:00 2001
From: Lee Yarwood <lyarwood@redhat.com>
Date: Mon, 24 Dec 2018 10:03:59 +0000
Subject: [PATCH] [openstack] Extract Placement plugin from Nova
The OpenStack Placement service is being extracted from Nova [1]
duringthe Stein development cycle [2]. This change extracts the
required plugin logic from the original Nova plugin into a new
Placement plugin ahead of this extraction.
[1] https://docs.openstack.org/placement/latest/
[2] https://releases.openstack.org/stein/schedule.html
Co-Authored-by: Piotr Kopec <pkopec@redhat.com>
Resolves: #1676
Signed-off-by: Lee Yarwood <lyarwood@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
sos/plugins/openstack_placement.py | 112 +++++++++++++++++++++++++++++
1 file changed, 112 insertions(+)
create mode 100644 sos/plugins/openstack_placement.py
diff --git a/sos/plugins/openstack_placement.py b/sos/plugins/openstack_placement.py
new file mode 100644
index 00000000..26b1a520
--- /dev/null
+++ b/sos/plugins/openstack_placement.py
@@ -0,0 +1,112 @@
+# Copyright (C) 2019 Red Hat, Inc., Lee Yarwood <lyarwood@redhat.com>
+
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+
+from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class OpenStackPlacement(Plugin):
+ """OpenStack Placement
+ """
+ plugin_name = "openstack_placement"
+ profiles = ('openstack', 'openstack_controller')
+
+ var_puppet_gen = "/var/lib/config-data/puppet-generated/placement"
+
+ def setup(self):
+
+ # collect commands output only if the openstack-placement-api service
+ # is running
+
+ in_container = self.running_in_container()
+
+ if self.service_is_running('openstack-placement-api') or in_container:
+ placement_config = ""
+ # if containerized we need to pass the config to the cont.
+ if in_container:
+ placement_config = "--config-dir " + self.var_puppet_gen + \
+ "/etc/placement/"
+ self.add_cmd_output(
+ "placement-manage " + placement_config + " db version",
+ suggest_filename="placement-manage_db_version"
+ )
+
+ if self.get_option("all_logs"):
+ self.add_copy_spec([
+ "/var/log/placement/",
+ "/var/log/containers/placement/",
+ "/var/log/containers/httpd/placement-api/"
+ ])
+ else:
+ self.add_copy_spec([
+ "/var/log/placement/*.log",
+ "/var/log/containers/placement/*.log",
+ "/var/log/containers/httpd/placement-api/*log",
+ ])
+
+ self.add_copy_spec([
+ "/etc/placement/",
+ self.var_puppet_gen + "/etc/placement/",
+ self.var_puppet_gen + "/etc/my.cnf.d/tripleo.cnf",
+ self.var_puppet_gen + "/etc/httpd/conf/",
+ self.var_puppet_gen + "/etc/httpd/conf.d/",
+ self.var_puppet_gen + "/etc/httpd/conf.modules.d/*.conf",
+ ])
+
+ def running_in_container(self):
+ for runtime in ["docker", "podman"]:
+ container_status = self.get_command_output(runtime + " ps")
+ if container_status['status'] == 0:
+ for line in container_status['output'].splitlines():
+ if line.endswith("placement_api"):
+ return True
+ return False
+
+ def apply_regex_sub(self, regexp, subst):
+ self.do_path_regex_sub("/etc/placement/*", regexp, subst)
+ self.do_path_regex_sub(
+ self.var_puppet_gen + "/etc/placement/*",
+ regexp, subst
+ )
+
+ def postproc(self):
+ protect_keys = ["password"]
+ connection_keys = ["database_connection", "slave_connection"]
+
+ self.apply_regex_sub(
+ r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys),
+ r"\1*********"
+ )
+ self.apply_regex_sub(
+ r"((?m)^\s*(%s)\s*=\s*(.*)://(\w*):)(.*)(@(.*))" %
+ "|".join(connection_keys),
+ r"\1*********\6"
+ )
+
+
+class DebianPlacement(OpenStackPlacement, DebianPlugin, UbuntuPlugin):
+
+ packages = ('placement')
+
+ def setup(self):
+ super(DebianPlacement, self).setup()
+
+
+class RedHatPlacement(OpenStackPlacement, RedHatPlugin):
+
+ packages = ('openstack-selinux')
+
+ def setup(self):
+ super(RedHatPlacement, self).setup()
+ if self.get_option("all_logs"):
+ self.add_copy_spec("/var/log/httpd/placement*")
+ else:
+ self.add_copy_spec("/var/log/httpd/placement*.log")
+
+# vim: set et ts=4 sw=4 :
--
2.21.0