config/sysinv/sysinv/sysinv/sysinv/puppet/common.py

100 lines
3.4 KiB
Python

#
# Copyright (c) 2017 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
""" System Inventory Puppet common top level code."""
from eventlet.green import subprocess
import os
from oslo_log import log as logging
from sysinv._i18n import _
from sysinv.common import constants
from sysinv.common import exception
from tsconfig import tsconfig
LOG = logging.getLogger(__name__)
PUPPET_HIERADATA_PATH = os.path.join(tsconfig.PUPPET_PATH, 'hieradata')
# runtime applied manifest constants
REPORT_STATUS_CFG = 'report_status'
REPORT_SUCCESS = 'report_success'
REPORT_FAILURE = 'report_failure'
REPORT_INVENTORY_UPDATE = 'inventory_update'
# name of manifest config operations to report back to sysinv conductor
REPORT_ROUTE_CONFIG = 'route_config'
REPORT_USER_CONFIG = 'user_config'
REPORT_UPGRADE_ACTIONS = 'upgrade_actions'
REPORT_AIO_CINDER_CONFIG = 'aio_cinder_config'
REPORT_DISK_PARTITON_CONFIG = 'manage_disk_partitions'
REPORT_LVM_BACKEND_CONFIG = 'lvm_config'
REPORT_EXTERNAL_BACKEND_CONFIG = 'external_config'
REPORT_CEPH_BACKEND_CONFIG = 'ceph_config'
REPORT_CEPH_EXTERNAL_BACKEND_CONFIG = 'ceph_external_config'
REPORT_CEPH_SERVICES_CONFIG = 'ceph_services'
REPORT_CEPH_MONITOR_CONFIG = 'ceph_monitor'
REPORT_PCI_SRIOV_CONFIG = 'pci_sriov_config'
REPORT_CEPH_OSD_CONFIG = 'ceph_osd'
REPORT_CEPH_RADOSGW_CONFIG = 'ceph_radosgw'
REPORT_CEPH_ROOK_CONFIG = 'ceph_rook_config'
# puppet report configs for hosts cert update
REPORT_KUBE_CERT_UPDATE_TRUSTBOTHCAS = constants.KUBE_CERT_UPDATE_TRUSTBOTHCAS
REPORT_KUBE_CERT_UPDATE_UPDATECERTS = constants.KUBE_CERT_UPDATE_UPDATECERTS
REPORT_KUBE_CERT_UPDATE_TRUSTNEWCA = constants.KUBE_CERT_UPDATE_TRUSTNEWCA
# puppet report configs for pods cert update
REPORT_KUBE_CERT_UPDATE_PODS_TRUSTBOTHCAS = \
'pods_' + constants.KUBE_CERT_UPDATE_TRUSTBOTHCAS
REPORT_KUBE_CERT_UPDATE_PODS_TRUSTNEWCA = \
'pods_' + constants.KUBE_CERT_UPDATE_TRUSTNEWCA
REPORT_KUBE_UPDATE_KUBELET_PARAMS = 'update_kubelet_params'
REPORT_HTTP_CONFIG = 'http_config'
REPORT_KERNEL_CONFIG = 'host_kernel_config'
REPORT_UPGRADE_ABORT = 'upgrade_abort'
REPORT_APPARMOR_CONFIG = 'host_apparmor_config'
REPORT_UPGRADE_CONTROL_PLANE = 'upgrade_control_plane'
def puppet_apply_manifest(ip_address, personality,
manifest=None, runtime=None, do_reboot=False,
hieradata_path=PUPPET_HIERADATA_PATH):
""" Apply configuration for the specified manifest."""
if not manifest:
manifest = personality
cmd = [
"/usr/local/bin/puppet-manifest-apply.sh",
hieradata_path,
str(ip_address),
personality,
manifest
]
if runtime:
cmd.append(runtime)
try:
if do_reboot:
LOG.warn("Sysinv will be rebooting the node post "
"manifest application")
with open("/dev/console", "w") as fconsole:
cmdstr = " ".join(cmd) + ' && reboot'
subprocess.Popen(cmdstr,
stdout=fconsole,
stderr=fconsole,
shell=True)
else:
with open(os.devnull, "w") as fnull:
subprocess.check_call(cmd, stdout=fnull, stderr=fnull) # pylint: disable=not-callable
except subprocess.CalledProcessError:
msg = "Failed to execute %s manifest for host %s" % \
(manifest, ip_address)
LOG.exception(msg)
raise exception.SysinvException(_(msg))