1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
# Copyright (C) 2015 Red Hat, Inc., Lee Yarwood <lyarwood@redhat.com>
# Copyright (C) 2017 Red Hat, Inc., Martin Schuppert <mschuppert@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.report.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
import os
class OpenStackIronic(Plugin):
short_desc = 'OpenStack Ironic'
plugin_name = "openstack_ironic"
profiles = ('openstack', 'openstack_undercloud')
var_puppet_gen = "/var/lib/config-data/puppet-generated/ironic"
def setup(self):
self.conf_list = [
"/etc/ironic/*",
self.var_puppet_gen + "/etc/ironic/*",
self.var_puppet_gen + "_api/etc/ironic/*"
]
self.add_copy_spec([
"/etc/ironic/",
self.var_puppet_gen + "/etc/xinetd.conf",
self.var_puppet_gen + "/etc/xinetd.d/",
self.var_puppet_gen + "/etc/ironic/",
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",
self.var_puppet_gen + "/etc/my.cnf.d/tripleo.cnf",
self.var_puppet_gen + "_api/etc/ironic/",
self.var_puppet_gen + "_api/etc/httpd/conf/",
self.var_puppet_gen + "_api/etc/httpd/conf.d/",
self.var_puppet_gen + "_api/etc/httpd/conf.modules.d/*.conf",
self.var_puppet_gen + "_api/etc/my.cnf.d/tripleo.cnf"
])
if self.get_option("all_logs"):
self.add_copy_spec([
"/var/log/ironic/",
])
else:
self.add_copy_spec([
"/var/log/ironic/*.log",
])
for path in ['/var/lib/ironic', '/httpboot', '/tftpboot']:
self.add_cmd_output('ls -laRt %s' % path)
self.add_cmd_output('ls -laRt %s' % (self.var_puppet_gen + path))
vars_all = [p in os.environ for p in [
'OS_USERNAME', 'OS_PASSWORD']]
vars_any = [p in os.environ for p in [
'OS_TENANT_NAME', 'OS_PROJECT_NAME']]
self.osc_available = all(vars_all) and any(vars_any)
if not self.osc_available:
self.soslog.warning("Not all environment variables set. Source "
"the environment file for the user intended "
"to connect to the OpenStack environment.")
else:
self.add_cmd_output("openstack baremetal driver list --long")
self.add_cmd_output("openstack baremetal node list --long")
self.add_cmd_output("openstack baremetal port list --long")
self.add_cmd_output("openstack baremetal port group list --long")
def apply_regex_sub(self, regexp, subst):
for conf in self.conf_list:
self.do_path_regex_sub(conf, regexp, subst)
def postproc(self):
protect_keys = [
"dns_passkey", "memcache_secret_key", "rabbit_password",
"password", "qpid_password", "admin_password", "ssl_key_password",
"os_password", "transport_url"
]
connection_keys = ["connection", "sql_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 DebianIronic(OpenStackIronic, DebianPlugin, UbuntuPlugin):
packages = [
'ironic-api',
'ironic-common',
'ironic-conductor',
]
def setup(self):
super(DebianIronic, self).setup()
class RedHatIronic(OpenStackIronic, RedHatPlugin):
packages = ('openstack-selinux',)
discoverd_packages = [
'openstack-ironic-discoverd',
'openstack-ironic-discoverd-ramdisk'
]
def collect_introspection_data(self):
uuids_result = self.collect_cmd_output(
'openstack baremetal node list -f value -c UUID'
)
if uuids_result['status']:
self.soslog.warning('Failed to fetch list of ironic node UUIDs, '
'introspection data won\'t be collected')
return
uuids = [uuid for uuid in uuids_result['output'].split()
if uuid.strip()]
for uuid in uuids:
self.add_cmd_output('openstack baremetal introspection '
'data save %s' % uuid)
def setup(self):
super(RedHatIronic, self).setup()
# is the optional ironic-discoverd service installed?
if any([self.is_installed(p) for p in self.discoverd_packages]):
self.conf_list.append('/etc/ironic-discoverd/*')
self.add_copy_spec('/etc/ironic-discoverd/')
self.add_copy_spec('/var/lib/ironic-discoverd/')
self.add_copy_spec('/var/log/ironic-discoverd/')
self.add_journal(units="openstack-ironic-discoverd")
self.add_journal(units="openstack-ironic-discoverd-dnsmasq")
# ironic-discoverd was renamed to ironic-inspector in Liberty
self.conf_list.append('/etc/ironic-inspector/*')
self.conf_list.append(self.var_puppet_gen + '/etc/ironic-inspector/*')
self.add_copy_spec('/etc/ironic-inspector/')
self.add_copy_spec(self.var_puppet_gen + '/etc/ironic-inspector/')
self.add_copy_spec('/var/lib/ironic-inspector/')
if self.get_option("all_logs"):
self.add_copy_spec('/var/log/ironic-inspector/')
else:
self.add_copy_spec('/var/log/ironic-inspector/*.log')
self.add_copy_spec('/var/log/ironic-inspector/ramdisk/')
self.add_journal(units="openstack-ironic-inspector-dnsmasq")
if self.osc_available:
self.add_cmd_output("openstack baremetal introspection list")
if self.get_option("all_logs"):
self.collect_introspection_data()
# vim: set et ts=4 sw=4 :
|