From dda4e7261e77e92434294fe671a7310ab4fc79d2 Mon Sep 17 00:00:00 2001
From: "Bryn M. Reeves" <bmr@redhat.com>
Date: Thu, 11 Sep 2014 12:53:51 +0100
Subject: [PATCH] [openstack] backport OpenStack plugins from master
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
sos/plugins/openstack.py | 207 ------------------------------------
sos/plugins/openstack_ceilometer.py | 67 ++++++++++++
sos/plugins/openstack_cinder.py | 86 +++++++++++++++
sos/plugins/openstack_glance.py | 64 +++++++++++
sos/plugins/openstack_heat.py | 68 ++++++++++++
sos/plugins/openstack_horizon.py | 81 ++++++++++++++
sos/plugins/openstack_keystone.py | 79 ++++++++++++++
sos/plugins/openstack_neutron.py | 178 +++++++++++++++++++++++++++++++
sos/plugins/openstack_nova.py | 152 ++++++++++++++++++++++++++
sos/plugins/openstack_swift.py | 62 +++++++++++
10 files changed, 837 insertions(+), 207 deletions(-)
delete mode 100644 sos/plugins/openstack.py
create mode 100644 sos/plugins/openstack_ceilometer.py
create mode 100644 sos/plugins/openstack_cinder.py
create mode 100644 sos/plugins/openstack_glance.py
create mode 100644 sos/plugins/openstack_heat.py
create mode 100644 sos/plugins/openstack_horizon.py
create mode 100644 sos/plugins/openstack_keystone.py
create mode 100644 sos/plugins/openstack_neutron.py
create mode 100644 sos/plugins/openstack_nova.py
create mode 100644 sos/plugins/openstack_swift.py
diff --git a/sos/plugins/openstack.py b/sos/plugins/openstack.py
deleted file mode 100644
index 8c52136..0000000
--- a/sos/plugins/openstack.py
+++ /dev/null
@@ -1,207 +0,0 @@
-## Copyright (C) 2009 Red Hat, Inc., Joey Boggs <jboggs@redhat.com>
-## Copyright (C) 2012 Rackspace US, Inc., Justin Shepherd <jshepher@rackspace.com>
-
-### This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-## GNU General Public License for more details.
-
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-import os
-
-from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
-
-
-class OpenStack(Plugin):
- """openstack related information
- """
- plugin_name = "openstack"
-
- option_list = [("log", "gathers all openstack logs", "slow", False)]
-
-
-class DebianOpenStack(OpenStack, DebianPlugin, UbuntuPlugin):
- """OpenStack related information for Debian based distributions
- """
-
- packages = ('cinder-api',
- 'cinder-backup',
- 'cinder-common',
- 'cinder-scheduler',
- 'cinder-volume',
- 'glance',
- 'glance-api',
- 'glance-client',
- 'glance-common',
- 'glance-registry',
- 'keystone',
- 'melange',
- 'nova-api-ec2',
- 'nova-api-metadata',
- 'nova-api-os-compute',
- 'nova-api-os-volume',
- 'nova-common',
- 'nova-compute',
- 'nova-compute-kvm',
- 'nova-compute-lxc',
- 'nova-compute-qemu',
- 'nova-compute-uml',
- 'nova-compute-xcp',
- 'nova-compute-xen',
- 'nova-xcp-plugins',
- 'nova-consoleauth',
- 'nova-network',
- 'nova-scheduler',
- 'nova-volume',
- 'novnc',
- 'openstack-dashboard',
- 'quantum-common',
- 'quantum-plugin-cisco',
- 'quantum-plugin-linuxbridge-agent',
- 'quantum-plugin-nicira',
- 'quantum-plugin-openvswitch',
- 'quantum-plugin-openvswitch-agent',
- 'quantum-plugin-ryu',
- 'quantum-plugin-ryu-agent',
- 'quantum-server',
- 'swift',
- 'swift-account',
- 'swift-container',
- 'swift-object',
- 'swift-proxy',
- 'swauth',
- 'python-cinder',
- 'python-cinderclient',
- 'python-django-horizon',
- 'python-glance',
- 'python-keystone',
- 'python-keystoneclient',
- 'python-melange',
- 'python-nova',
- 'python-novaclient',
- 'python-novnc',
- 'python-quantum',
- 'python-quantumclient',
- 'python-swift',
- 'python-swauth')
-
- def setup(self):
- # Nova
- if os.path.exists("nova-manage"):
- self.add_cmd_output(
- "nova-manage config list 2>/dev/null | sort",
- suggest_filename="nova_config_list")
- self.add_cmd_output(
- "nova-manage service list 2>/dev/null",
- suggest_filename="nova_service_list")
- self.add_cmd_output(
- "nova-manage db version 2>/dev/null",
- suggest_filename="nova_db_version")
- self.add_cmd_output(
- "nova-manage fixed list 2>/dev/null",
- suggest_filename="nova_fixed_ip_list")
- self.add_cmd_output(
- "nova-manage floating list 2>/dev/null",
- suggest_filename="nova_floating_ip_list")
- self.add_cmd_output(
- "nova-manage flavor list 2>/dev/null",
- suggest_filename="nova_flavor_list")
- self.add_cmd_output(
- "nova-manage network list 2>/dev/null",
- suggest_filename="nova_network_list")
- self.add_cmd_output(
- "nova-manage vm list 2>/dev/null",
- suggest_filename="nova_vm_list")
- self.add_copy_specs(["/etc/nova/",
- "/var/log/nova/",
- "/etc/default/nova-volume",
- "/etc/sudoers.d/nova_sudoers",
- "/etc/logrotate.d/nova-*"])
- # Cinder
- if os.path.exists("/usr/bin/cinder-manage"):
- self.addCmdOutput(
- "/usr/bin/cinder-manage db version",
- suggest_filename="cinder_db_version")
- self.addCopySpecs(["/etc/cinder/",
- "/var/log/cinder/",
- "/etc/logrotate.d/cinder-*"])
- # Glance
- if os.path.exists("glance-manage"):
- self.add_cmd_output(
- "glance-manage db_version",
- suggest_filename="glance_db_version")
- self.add_copy_specs(["/etc/glance/",
- "/var/log/glance/",
- "/etc/logrotate.d/glance-*"])
- # Keystone
- self.add_copy_specs(["/etc/keystone/",
- "/var/log/keystone/",
- "/etc/logrotate.d/keystone"])
- # Swift
- self.add_copy_specs(["/etc/swift/"])
- # Quantum
- self.add_copy_specs(["/etc/quantum/",
- "/var/log/quantum/"])
-
-
-class RedHatOpenStack(OpenStack, RedHatPlugin):
- """OpenStack related information for Red Hat distributions
- """
-
- packages = ('openstack-nova',
- 'openstack-glance',
- 'openstack-dashboard',
- 'openstack-keystone',
- 'openstack-quantum',
- 'openstack-swift',
- 'openstack-swift-account',
- 'openstack-swift-container',
- 'openstack-swift-object',
- 'openstack-swift-proxy',
- 'swift',
- 'python-nova',
- 'python-glanceclient',
- 'python-keystoneclient',
- 'python-novaclient',
- 'python-openstackclient',
- 'python-quantumclient')
-
- def setup(self):
- # If RHEL or Fedora then invoke script for openstack-status
- if (os.path.isfile('/etc/redhat-release')
- or os.path.isfile('/etc/fedora-release')):
- self.add_cmd_output("openstack-status")
-
- # Nova
- self.add_copy_specs(["/etc/nova/",
- "/var/log/nova/",
- "/var/lib/nova/",
- "/etc/polkit-1/localauthority/50-local.d/50-nova.pkla",
- "/etc/sudoers.d/nova",
- "/etc/logrotate.d/openstack-nova"])
-
- # Glance
- self.add_copy_specs(["/etc/glance/",
- "/var/log/glance/",
- "/etc/logrotate.d/openstack-glance"])
-
- # Keystone
- self.add_copy_specs(["/etc/keystone/",
- "/var/log/keystone/"])
-
- # Quantum
- self.add_copy_specs(["/etc/quantum/",
- "/var/log/quantum/"])
-
- def postproc(self):
- self.do_file_sub('/etc/keystone/keystone.conf',
- r"(admin_password\s*=\s*)(.*)",
- r"\1******")
diff --git a/sos/plugins/openstack_ceilometer.py b/sos/plugins/openstack_ceilometer.py
new file mode 100644
--- /dev/null
+++ b/sos/plugins/openstack_ceilometer.py
@@ -0,0 +1,67 @@
+# Copyright (C) 2013 Red Hat, Inc., Eoghan Lynn <eglynn@redhat.com>
+# Copyright (C) 2012 Rackspace US, Inc.
+# 2012 Justin Shepherd <jshepher@rackspace.com>
+# Copyright (C) 2009 Red Hat, Inc.
+# 2009 Joey Boggs <jboggs@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class OpenStackCeilometer(Plugin):
+ """Openstack Ceilometer related information."""
+ plugin_name = "openstack_ceilometer"
+
+ option_list = [("log", "gathers openstack-ceilometer logs", "slow", False)]
+
+ def setup(self):
+ # Ceilometer
+ self.add_copy_specs([
+ "/etc/ceilometer/",
+ "/var/log/ceilometer"
+ ])
+
+
+class DebianOpenStackCeilometer(OpenStackCeilometer, DebianPlugin,
+ UbuntuPlugin):
+ """OpenStackCeilometer related information for Debian based distributions.
+ """
+
+ packages = (
+ 'ceilometer-api',
+ 'ceilometer-agent-central',
+ 'ceilometer-agent-compute',
+ 'ceilometer-collector',
+ 'ceilometer-common',
+ 'python-ceilometer',
+ 'python-ceilometerclient'
+ )
+
+
+class RedHatOpenStackCeilometer(OpenStackCeilometer, RedHatPlugin):
+ """OpenStackCeilometer related information for Red Hat distributions."""
+
+ packages = (
+ 'openstack-ceilometer',
+ 'openstack-ceilometer-api',
+ 'openstack-ceilometer-central',
+ 'openstack-ceilometer-collector',
+ 'openstack-ceilometer-common',
+ 'openstack-ceilometer-compute',
+ 'python-ceilometerclient'
+ )
+
+# vim: et ts=4 sw=4
diff --git a/sos/plugins/openstack_cinder.py b/sos/plugins/openstack_cinder.py
new file mode 100644
--- /dev/null
+++ b/sos/plugins/openstack_cinder.py
@@ -0,0 +1,86 @@
+# Copyright (C) 2009 Red Hat, Inc., Joey Boggs <jboggs@redhat.com>
+# Copyright (C) 2012 Rackspace US, Inc.,
+# Justin Shepherd <jshepher@rackspace.com>
+# Copyright (C) 2013 Red Hat, Inc., Flavio Percoco <fpercoco@redhat.com>
+# Copyright (C) 2013 Red Hat, Inc., Jeremy Agee <jagee@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class OpenStackCinder(Plugin):
+ """openstack cinder related information
+ """
+ plugin_name = "openstack_cinder"
+
+ option_list = [("log", "gathers openstack cinder logs", "slow", True),
+ ("db", "gathers openstack cinder db version", "slow",
+ False)]
+
+ def setup(self):
+ if self.get_option("db"):
+ self.add_cmd_output(
+ "cinder-manage db version",
+ suggest_filename="cinder_db_version")
+
+ self.add_copy_specs(["/etc/cinder/"])
+
+ if self.get_option("log"):
+ self.add_copy_specs(["/var/log/cinder/"])
+
+
+class DebianOpenStackCinder(OpenStackCinder, DebianPlugin, UbuntuPlugin):
+ """OpenStack Cinder related information for Debian based distributions
+ """
+
+ cinder = False
+ packages = (
+ 'cinder-api',
+ 'cinder-backup',
+ 'cinder-common',
+ 'cinder-scheduler',
+ 'cinder-volume',
+ 'python-cinder',
+ 'python-cinderclient'
+ )
+
+ def check_enabled(self):
+ self.cinder = self.is_installed("cinder-common")
+ return self.cinder
+
+ def setup(self):
+ super(DebianOpenStackCinder, self).setup()
+
+
+class RedHatOpenStackCinder(OpenStackCinder, RedHatPlugin):
+ """OpenStack related information for Red Hat distributions
+ """
+
+ cinder = False
+ packages = ('openstack-cinder',
+ 'python-cinder',
+ 'python-cinderclient')
+
+ def check_enabled(self):
+ self.cinder = self.is_installed("openstack-cinder")
+ return self.cinder
+
+ def setup(self):
+ super(RedHatOpenStackCinder, self).setup()
+ self.add_copy_specs(["/etc/sudoers.d/cinder"])
+
+
+# vim: et ts=4 sw=4
diff --git a/sos/plugins/openstack_glance.py b/sos/plugins/openstack_glance.py
new file mode 100644
--- /dev/null
+++ b/sos/plugins/openstack_glance.py
@@ -0,0 +1,64 @@
+# Copyright (C) 2013 Red Hat, Inc., Flavio Percoco <fpercoco@redhat.com>
+# Copyright (C) 2012 Rackspace US, Inc.,
+# Justin Shepherd <jshepher@rackspace.com>
+# Copyright (C) 2009 Red Hat, Inc., Joey Boggs <jboggs@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+from sos import plugins
+
+
+class OpenStackGlance(plugins.Plugin):
+ """OpenstackGlance related information."""
+ plugin_name = "openstack_glance"
+
+ option_list = [("log", "gathers openstack-glance logs", "slow", False)]
+
+ def setup(self):
+ # Glance
+ self.add_cmd_output(
+ "glance-manage db_version",
+ suggest_filename="glance_db_version"
+ )
+ self.add_copy_specs([
+ "/etc/glance/",
+ "/var/log/glance/"
+ ])
+
+
+class DebianOpenStackGlance(OpenStackGlance,
+ plugins.DebianPlugin,
+ plugins.UbuntuPlugin):
+ """OpenStackGlance related information for Debian based distributions."""
+
+ packages = (
+ 'glance',
+ 'glance-api',
+ 'glance-client',
+ 'glance-common',
+ 'glance-registry',
+ 'python-glance'
+ )
+
+
+class RedHatOpenStackGlance(OpenStackGlance, plugins.RedHatPlugin):
+ """OpenStackGlance related information for Red Hat distributions."""
+
+ packages = (
+ 'openstack-glance',
+ 'python-glanceclient'
+ )
+
+# vim: et ts=4 sw=4
diff --git a/sos/plugins/openstack_heat.py b/sos/plugins/openstack_heat.py
new file mode 100644
--- /dev/null
+++ b/sos/plugins/openstack_heat.py
@@ -0,0 +1,68 @@
+# Copyright (C) 2013 Red Hat, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+from sos import plugins
+
+
+class OpenStackHeat(plugins.Plugin):
+ """openstack related information
+ """
+ plugin_name = "openstack_heat"
+
+ option_list = [("log", "gathers openstack-heat logs", "slow", False)]
+
+ def setup(self):
+ # Heat
+ self.add_cmd_output(
+ "heat-manage db_version",
+ suggest_filename="heat_db_version"
+ )
+ self.add_copy_specs([
+ "/etc/heat/",
+ "/var/log/heat/"
+ ])
+
+
+class DebianOpenStack(OpenStackHeat,
+ plugins.DebianPlugin,
+ plugins.UbuntuPlugin):
+ """OpenStackHeat related information for Debian based distributions."""
+
+ packages = (
+ 'heat-api',
+ 'heat-api-cfn',
+ 'heat-api-cloudwatch',
+ 'heat-common',
+ 'heat-engine',
+ 'python-heat',
+ 'python-heatclient'
+ )
+
+
+class RedHatOpenStack(OpenStackHeat, plugins.RedHatPlugin):
+ """OpenStackHeat related information for Red Hat distributions."""
+
+ packages = (
+ 'openstack-heat-api',
+ 'openstack-heat-api-cfn',
+ 'openstack-heat-api-cloudwatch',
+ 'openstack-heat-cli',
+ 'openstack-heat-common',
+ 'openstack-heat-engine',
+ 'python-heatclient'
+ )
+
+# vim: et ts=4 sw=4
diff --git a/sos/plugins/openstack_horizon.py b/sos/plugins/openstack_horizon.py
new file mode 100644
--- /dev/null
+++ b/sos/plugins/openstack_horizon.py
@@ -0,0 +1,81 @@
+# Copyright (C) 2009 Red Hat, Inc., Joey Boggs <jboggs@redhat.com>
+# Copyright (C) 2012 Rackspace US, Inc.,
+# Justin Shepherd <jshepher@rackspace.com>
+# Copyright (C) 2013 Red Hat, Inc., Jeremy Agee <jagee@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class OpenStackHorizon(Plugin):
+ """openstack horizon related information
+ """
+
+ plugin_name = "openstack_horizon"
+ option_list = [("log", "gathers openstack horizon logs", "slow", True)]
+
+ def setup(self):
+ self.add_copy_spec("/etc/openstack-dashboard/")
+ if self.get_option("log"):
+ self.add_copy_spec("/var/log/horizon/")
+
+
+class DebianOpenStackHorizon(OpenStackHorizon, DebianPlugin):
+ """OpenStack Horizon related information for Debian based distributions
+ """
+
+ packages = (
+ 'python-django-horizon',
+ 'openstack-dashboard',
+ 'openstack-dashboard-apache'
+ )
+
+ def setup(self):
+ super(DebianOpenStackHorizon, self).setup()
+ self.add_copy_spec("/etc/apache2/sites-available/")
+
+
+class UbuntuOpenStackHorizon(OpenStackHorizon, UbuntuPlugin):
+ """OpenStack Horizon related information for Ubuntu based distributions
+ """
+
+ packages = (
+ 'python-django-horizon',
+ 'openstack-dashboard',
+ 'openstack-dashboard-ubuntu-theme'
+ )
+
+ def setup(self):
+ super(UbuntuOpenStackHorizon, self).setup()
+ self.add_copy_spec("/etc/apache2/conf.d/openstack-dashboard.conf")
+
+
+class RedHatOpenStackHorizon(OpenStackHorizon, RedHatPlugin):
+ """OpenStack Horizon related information for Red Hat distributions
+ """
+
+ packages = (
+ 'python-django-horizon',
+ 'openstack-dashboard'
+ )
+
+ def setup(self):
+ super(RedHatOpenStackHorizon, self).setup()
+ self.add_copy_spec("/etc/httpd/conf.d/openstack-dashboard.conf")
+ if self.get_option("log"):
+ self.add_copy_spec("/var/log/httpd/")
+
+# vim: et ts=4 sw=4
diff --git a/sos/plugins/openstack_keystone.py b/sos/plugins/openstack_keystone.py
new file mode 100644
--- /dev/null
+++ b/sos/plugins/openstack_keystone.py
@@ -0,0 +1,79 @@
+# Copyright (C) 2013 Red Hat, Inc., Jeremy Agee <jagee@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class OpenStackKeystone(Plugin):
+ """openstack keystone related information
+ """
+ plugin_name = "openstack_keystone"
+
+ option_list = [("log", "gathers openstack keystone logs", "slow", True),
+ ("nopw", "dont gathers keystone passwords", "slow", True)]
+
+ def setup(self):
+ self.add_copy_specs([
+ "/etc/keystone/default_catalog.templates",
+ "/etc/keystone/keystone.conf",
+ "/etc/keystone/logging.conf",
+ "/etc/keystone/policy.json"
+ ])
+
+ if self.get_option("log"):
+ self.add_copy_spec("/var/log/keystone/")
+
+ def postproc(self):
+ self.do_file_sub('/etc/keystone/keystone.conf',
+ r"(?m)^(admin_password.*=)(.*)",
+ r"\1 ******")
+ self.do_file_sub('/etc/keystone/keystone.conf',
+ r"(?m)^(admin_token.*=)(.*)",
+ r"\1 ******")
+ self.do_file_sub('/etc/keystone/keystone.conf',
+ r"(?m)^(connection.*=.*mysql://)(.*)(:)(.*)(@)(.*)",
+ r"\1\2:******@\6")
+ self.do_file_sub('/etc/keystone/keystone.conf',
+ r"(?m)^(password.*=)(.*)",
+ r"\1 ******")
+ self.do_file_sub('/etc/keystone/keystone.conf',
+ r"(?m)^(ca_password.*=)(.*)",
+ r"\1 ******")
+
+
+class DebianOpenStackKeystone(OpenStackKeystone, DebianPlugin, UbuntuPlugin):
+ """OpenStack Keystone related information for Debian based distributions
+ """
+
+ packages = (
+ 'keystone',
+ 'python-keystone',
+ 'python-keystoneclient'
+ )
+
+
+class RedHatOpenStackKeystone(OpenStackKeystone, RedHatPlugin):
+ """OpenStack Keystone related information for Red Hat distributions
+ """
+
+ packages = (
+ 'openstack-keystone',
+ 'python-keystone',
+ 'python-django-openstack-auth',
+ 'python-keystoneclient'
+ )
+
+# vim: et ts=4 sw=4
diff --git a/sos/plugins/openstack_neutron.py b/sos/plugins/openstack_neutron.py
new file mode 100644
--- /dev/null
+++ b/sos/plugins/openstack_neutron.py
@@ -0,0 +1,175 @@
+# Copyright (C) 2013 Red Hat, Inc., Brent Eagles <beagles@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+import os
+import re
+
+from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+# The Networking plugin includes most of what is needed from a snapshot
+# of the networking, so we only need to focus on the parts that are specific
+# to OpenStack Networking. The Process plugin should capture the dnsmasq
+# command line. The libvirt plugin grabs the instance's XML definition which
+# has the interface names for an instance. So what remains is relevant database
+# info...
+
+
+class Neutron(Plugin):
+ """OpenStack Networking (quantum/neutron) related information
+ """
+ plugin_name = "neutron"
+
+ option_list = [("log", "Gathers all Neutron logs", "slow", False),
+ ("quantum", "Overrides checks for newer Neutron components",
+ "fast", False)]
+
+ component_name = "neutron"
+
+ def setup(self):
+ if os.path.exists("/etc/neutron/") and not self.get_option("quantum"):
+ self.component_name = self.plugin_name
+ else:
+ self.component_name = "quantum"
+ self.add_copy_specs([
+ "/etc/%s/" % self.component_name,
+ "/var/log/%s/" % self.component_name
+ ])
+
+ self.netns_dumps()
+
+ def netns_dumps(self):
+ # It would've been beautiful if we could get parts of the networking
+ # plugin to run in different namespaces. There are a couple of options
+ # in the short term: create a local instance and "borrow" some of the
+ # functionality, or simply copy some of the functionality.
+ prefixes = ["qdhcp", "qrouter"]
+ ip_netns_result = self.call_ext_prog("ip netns")
+ if not (ip_netns_result[0] == 0):
+ return
+ nslist = ip_netns_result[1]
+ lease_directories = []
+ if nslist:
+ for nsname in nslist.splitlines():
+ prefix, netid = nsname.split('-', 1)
+ if len(netid) > 0 and prefix in prefixes:
+ self.ns_gather_data(nsname)
+ lease_directories.append(
+ "/var/lib/%s/dhcp/%s/" %
+ (self.component_name, netid))
+ self.add_copy_specs(lease_directories)
+
+ # TODO: Refactor! Copied from Networking plugin.
+ def get_interface_name(self, ip_addr_out):
+ """Return a dictionary for which key are interface name according to
+ the output of ifconifg-a stored in ifconfig_file.
+ """
+ out = {}
+ for line in ip_addr_out.splitlines():
+ match = re.match('.*link/ether', line)
+ if match:
+ int = match.string.split(':')[1].lstrip()
+ out[int] = True
+ return out
+
+ def ns_gather_data(self, nsname):
+ cmd_prefix = "ip netns exec %s " % nsname
+ self.add_cmd_outputs([
+ cmd_prefix + "iptables-save",
+ cmd_prefix + "ifconfig -a",
+ cmd_prefix + "route -n"
+ ])
+ # borrowed from networking plugin
+ ip_addr_result = self.call_ext_prog(cmd_prefix + "ip -o link")
+ if ip_addr_result[0] == 0:
+ for eth in self.get_interface_name(ip_addr_result[1]):
+ # Most, if not all, IFs in the namespaces are going to be
+ # virtual. The '-a', '-c' and '-g' options are not likely to be
+ # supported so these ops are not copied from the network
+ # plugin.
+ self.add_cmd_outputs([
+ cmd_prefix + "ethtool "+eth,
+ cmd_prefix + "ethtool -i "+eth,
+ cmd_prefix + "ethtool -k "+eth,
+ cmd_prefix + "ethtool -S "+eth
+ ])
+
+ # As all of the bridges are in the "global namespace", we do not need
+ # to gather info on them.
+
+ def gen_pkg_tuple(self, packages):
+ names = []
+ for p in packages:
+ names.append(p % {"comp": self.component_name})
+ return tuple(names)
+
+
+class DebianNeutron(Neutron, DebianPlugin, UbuntuPlugin):
+ """OpenStack Neutron related information for Debian based distributions
+ """
+ package_list_template = [
+ '%(comp)s-common',
+ '%(comp)s-plugin-cisco',
+ '%(comp)s-plugin-linuxbridge-agent',
+ '%(comp)s-plugin-nicira',
+ '%(comp)s-plugin-openvswitch',
+ '%(comp)s-plugin-openvswitch-agent',
+ '%(comp)s-plugin-ryu',
+ '%(comp)s-plugin-ryu-agent',
+ '%(comp)s-server',
+ 'python-%(comp)s',
+ 'python-%(comp)sclient'
+ ]
+
+ def check_enabled(self):
+ return self.is_installed("%s-common" % self.component_name)
+
+ def setup(self):
+ super(DebianNeutron, self).setup()
+ self.packages = self.gen_pkg_tuple(self.package_list_template)
+ self.add_copy_spec("/etc/sudoers.d/%s_sudoers" % self.component_name)
+
+
+class RedHatNeutron(Neutron, RedHatPlugin):
+ """OpenStack Neutron related information for Red Hat distributions
+ """
+
+ package_list_template = [
+ 'openstack-%(comp)s',
+ 'openstack-%(comp)s-linuxbridge'
+ 'openstack-%(comp)s-metaplugin',
+ 'openstack-%(comp)s-openvswitch',
+ 'openstack-%(comp)s-bigswitch',
+ 'openstack-%(comp)s-brocade',
+ 'openstack-%(comp)s-cisco',
+ 'openstack-%(comp)s-hyperv',
+ 'openstack-%(comp)s-midonet',
+ 'openstack-%(comp)s-nec'
+ 'openstack-%(comp)s-nicira',
+ 'openstack-%(comp)s-plumgrid',
+ 'openstack-%(comp)s-ryu',
+ 'python-%(comp)s',
+ 'python-%(comp)sclient'
+ ]
+
+ def check_enabled(self):
+ return self.is_installed("openstack-%s" % self.component_name)
+
+ def setup(self):
+ super(RedHatNeutron, self).setup()
+ self.packages = self.gen_pkg_tuple(self.package_list_template)
+ self.add_copy_spec("/etc/sudoers.d/%s-rootwrap" % self.component_name)
+
+# vim: et ts=4 sw=4
diff --git a/sos/plugins/openstack_nova.py b/sos/plugins/openstack_nova.py
new file mode 100644
index 0000000..a4186af
--- /dev/null
+++ b/sos/plugins/openstack_nova.py
@@ -0,0 +1,152 @@
+# Copyright (C) 2009 Red Hat, Inc., Joey Boggs <jboggs@redhat.com>
+# Copyright (C) 2012 Rackspace US, Inc.,
+# Justin Shepherd <jshepher@rackspace.com>
+# Copyright (C) 2013 Red Hat, Inc., Jeremy Agee <jagee@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class OpenStackNova(Plugin):
+ """openstack nova related information
+ """
+ plugin_name = "openstack_nova"
+
+ option_list = [("log", "gathers openstack nova logs", "slow", True),
+ ("cmds", "gathers openstack nova commands", "slow", False)]
+
+ def setup(self):
+ if self.get_option("cmds"):
+ self.add_cmd_output(
+ "nova-manage config list",
+ suggest_filename="nova_config_list")
+ self.add_cmd_output(
+ "nova-manage service list",
+ suggest_filename="nova_service_list")
+ self.add_cmd_output(
+ "nova-manage db version",
+ suggest_filename="nova_db_version")
+ self.add_cmd_output(
+ "nova-manage fixed list",
+ suggest_filename="nova_fixed_ip_list")
+ self.add_cmd_output(
+ "nova-manage floating list",
+ suggest_filename="nova_floating_ip_list")
+ self.add_cmd_output(
+ "nova-manage flavor list",
+ suggest_filename="nova_flavor_list")
+ self.add_cmd_output(
+ "nova-manage network list",
+ suggest_filename="nova_network_list")
+ self.add_cmd_output(
+ "nova-manage vm list",
+ suggest_filename="nova_vm_list")
+
+ if self.get_option("log"):
+ self.add_copy_spec("/var/log/nova/")
+
+ self.add_copy_spec("/etc/nova/")
+
+ def postproc(self):
+ protect_keys = [
+ "ldap_dns_password", "neutron_admin_password", "rabbit_password",
+ "qpid_password", "powervm_mgr_passwd", "virtual_power_host_pass",
+ "xenapi_connection_password", "password", "host_password",
+ "vnc_password", "connection", "sql_connection", "admin_password"
+ ]
+
+ regexp = r"((?m)^\s*#*(%s)\s*=\s*)(.*)" % "|".join(protect_keys)
+
+ for conf_file in ["/etc/nova/nova.conf", "/etc/nova/api-paste.ini"]:
+ self.do_file_sub(conf_file, regexp, r"\1*********")
+
+
+class DebianOpenStackNova(OpenStackNova, DebianPlugin, UbuntuPlugin):
+ """OpenStack nova related information for Debian based distributions
+ """
+
+ nova = False
+ packages = (
+ 'nova-api-ec2',
+ 'nova-api-metadata',
+ 'nova-api-os-compute',
+ 'nova-api-os-volume',
+ 'nova-common',
+ 'nova-compute',
+ 'nova-compute-kvm',
+ 'nova-compute-lxc',
+ 'nova-compute-qemu',
+ 'nova-compute-uml',
+ 'nova-compute-xcp',
+ 'nova-compute-xen',
+ 'nova-xcp-plugins',
+ 'nova-consoleauth',
+ 'nova-network',
+ 'nova-scheduler',
+ 'nova-volume',
+ 'novnc',
+ 'python-nova',
+ 'python-novaclient',
+ 'python-novnc'
+ )
+
+ def check_enabled(self):
+ self.nova = self.is_installed("nova-common")
+ return self.nova
+
+ def setup(self):
+ super(DebianOpenStackNova, self).setup()
+ self.add_copy_specs(["/etc/sudoers.d/nova_sudoers"])
+
+
+class RedHatOpenStackNova(OpenStackNova, RedHatPlugin):
+ """OpenStack nova related information for Red Hat distributions
+ """
+
+ nova = False
+ packages = (
+ 'openstack-nova-common',
+ 'openstack-nova-network',
+ 'openstack-nova-conductor',
+ 'openstack-nova-conductor',
+ 'openstack-nova-scheduler',
+ 'openstack-nova-console',
+ 'openstack-nova-novncproxy',
+ 'openstack-nova-compute',
+ 'openstack-nova-api',
+ 'openstack-nova-cert',
+ 'openstack-nova-cells',
+ 'openstack-nova-objectstore',
+ 'python-nova',
+ 'python-novaclient',
+ 'novnc'
+ )
+
+ def check_enabled(self):
+ self.nova = self.is_installed("openstack-nova-common")
+ return self.nova
+
+ def setup(self):
+ super(RedHatOpenStackNova, self).setup()
+ self.add_copy_specs([
+ "/etc/logrotate.d/openstack-nova",
+ "/etc/polkit-1/localauthority/50-local.d/50-nova.pkla",
+ "/etc/sudoers.d/nova",
+ "/etc/security/limits.d/91-nova.conf",
+ "/etc/sysconfig/openstack-nova-novncproxy"
+ ])
+
+# vim: et ts=4 sw=4
diff --git a/sos/plugins/openstack_swift.py b/sos/plugins/openstack_swift.py
new file mode 100644
--- /dev/null
+++ b/sos/plugins/openstack_swift.py
@@ -0,0 +1,62 @@
+# Copyright (C) 2013 Red Hat, Inc., Flavio Percoco <fpercoco@redhat.com>
+# Copyright (C) 2012 Rackspace US, Inc.,
+# Justin Shepherd <jshepher@rackspace.com>
+# Copyright (C) 2009 Red Hat, Inc., Joey Boggs <jboggs@redhat.com>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class OpenStackSwift(Plugin):
+ """OpenstackSwift related information."""
+ plugin_name = "openstack_swift"
+
+ option_list = [("log", "gathers openstack-swift logs", "slow", False)]
+
+ def setup(self):
+ # Swift
+ self.add_copy_spec("/etc/swift/")
+
+
+class DebianOpenStackSwift(OpenStackSwift, DebianPlugin, UbuntuPlugin):
+ """OpenStackSwift related information for Debian based distributions."""
+
+ packages = (
+ 'swift',
+ 'swift-account',
+ 'swift-container',
+ 'swift-object',
+ 'swift-proxy',
+ 'swauth',
+ 'python-swift',
+ 'python-swauth'
+ )
+
+
+class RedHatOpenStackSwift(OpenStackSwift, RedHatPlugin):
+ """OpenStackSwift related information for Red Hat distributions."""
+
+ packages = (
+ 'openstack-swift',
+ 'openstack-swift-account',
+ 'openstack-swift-container',
+ 'openstack-swift-object',
+ 'openstack-swift-proxy',
+ 'swift',
+ 'python-swiftclient'
+ )
+
+# vim: et ts=4 sw=4
--
1.9.3