Alon Bar-Lev has uploaded a new change for review. Change subject: packaging: setup: add websocket proxy configuration ......................................................................
packaging: setup: add websocket proxy configuration configuration of websocket proxy on engine machine using setup. 1. enroll certificate. 2. enforce ssl. 3. enforce ticket validation. Change-Id: I5d5fad4dc61d9c89c4165a74e9922eded483beac Signed-off-by: Alon Bar-Lev <alo...@redhat.com> --- M Makefile M packaging/fedora/setup/basedefs.py M packaging/fedora/setup/engine-setup.py M packaging/fedora/setup/engine_validators.py M packaging/fedora/setup/output_messages.py A packaging/firewalld/base/ovirt-websocket-proxy.xml.in M packaging/setup/ovirt_engine_setup/config.py.in M packaging/setup/ovirt_engine_setup/constants.py M packaging/setup/plugins/ovirt-engine-setup/config/__init__.py A packaging/setup/plugins/ovirt-engine-setup/config/websocket_proxy.py 10 files changed, 408 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/14/16014/1 diff --git a/Makefile b/Makefile index d59a282..9474ed4 100644 --- a/Makefile +++ b/Makefile @@ -329,6 +329,7 @@ install -m 644 packaging/firewalld/base/ovirt-nfs.xml.in "$(DESTDIR)$(DATA_DIR)/firewalld/base/ovirt-nfs.xml.in" install -m 644 packaging/firewalld/base/ovirt-http.xml.in "$(DESTDIR)$(DATA_DIR)/firewalld/base/ovirt-http.xml.in" install -m 644 packaging/firewalld/base/ovirt-https.xml.in "$(DESTDIR)$(DATA_DIR)/firewalld/base/ovirt-https.xml.in" + install -m 644 packaging/firewalld/base/ovirt-websocket-proxy.xml.in "$(DESTDIR)$(DATA_DIR)/firewalld/base/ovirt-websocket-proxy.xml.in" install -m 644 packaging/conf/nfs.sysconfig.in "$(DESTDIR)$(DATA_DIR)/conf" install -m 644 packaging/conf/ovirt-engine-proxy.conf.v2.in "$(DESTDIR)$(DATA_DIR)/conf" diff --git a/packaging/fedora/setup/basedefs.py b/packaging/fedora/setup/basedefs.py index be82102..d675d93 100644 --- a/packaging/fedora/setup/basedefs.py +++ b/packaging/fedora/setup/basedefs.py @@ -79,6 +79,7 @@ FILE_CERT_TEMPLATE="%s/cert.template"%(DIR_OVIRT_PKI) FILE_ENGINE_CERT="%s/certs/engine.cer"%(DIR_OVIRT_PKI) FILE_APACHE_CERT="%s/certs/apache.cer"%(DIR_OVIRT_PKI) +FILE_WEBSOCKET_PROXY_CERT="%s/certs/websocket-proxy.cer"%(DIR_OVIRT_PKI) FILE_JBOSSAS_CONF="/etc/%s/%s.conf" % (ENGINE_SERVICE_NAME, ENGINE_SERVICE_NAME) FILE_DB_INSTALL_SCRIPT="engine-db-install.sh" FILE_DB_UPGRADE_SCRIPT="upgrade.sh" @@ -97,7 +98,9 @@ FILE_ENGINE_KEYSTORE="%s/keys/engine.p12"%(DIR_OVIRT_PKI) FILE_APACHE_KEYSTORE="%s/keys/apache.p12"%(DIR_OVIRT_PKI) FILE_JBOSS_KEYSTORE="%s/keys/jboss.p12"%(DIR_OVIRT_PKI) +FILE_WEBSOCKET_PROXY_KEYSTORE="%s/keys/websocket-proxy.p12"%(DIR_OVIRT_PKI) FILE_APACHE_PRIVATE_KEY="%s/keys/apache.key.nopass"%(DIR_OVIRT_PKI) +FILE_WEBSOCKET_PROXY_PRIVATE_KEY="%s/keys/websocket-proxy.key.nopass"%(DIR_OVIRT_PKI) FILE_SSH_PRIVATE_KEY="%s/keys/engine_id_rsa"%(DIR_OVIRT_PKI) FILE_YUM_VERSION_LOCK="/etc/yum/pluginconf.d/versionlock.list" FILE_PSQL_CONF="/var/lib/pgsql/data/postgresql.conf" @@ -156,6 +159,9 @@ # engine goes back into normal mode once the upgrade is finished: FILE_ENGINE_CONF_MAINTENANCE="%s/99-maintenance.conf" % DIR_ENGINE_CONF +DIR_WEBSOCKET_PROXY_CONF = "/etc/ovirt-engine/ovirt-websocket-proxy.conf.d" +FILE_WEBSOCKET_PROXY_CONF = "%s/10-setup.conf" % DIR_WEBSOCKET_PROXY_CONF + # ISO FILES VIRTIO_WIN_FILE_LIST = [ "/usr/share/virtio-win/virtio-win_x86.vfd", @@ -212,6 +218,7 @@ CONST_BASE_MAC_ADDR="00:1A:4A" CONST_DEFAULT_MAC_RANGE="00:1a:4a:16:84:02-00:1a:4a:16:84:fd" CONST_MINIMUM_SPACE_ISODOMAIN=350 +CONST_WEBSOCKET_PORXY_PORT=6100 CONST_HTTP_BASE_PORT="8700" CONST_HTTPS_BASE_PORT="8701" CONST_AJP_BASE_PORT="8702" diff --git a/packaging/fedora/setup/engine-setup.py b/packaging/fedora/setup/engine-setup.py index 21ece4a..65c555c 100755 --- a/packaging/fedora/setup/engine-setup.py +++ b/packaging/fedora/setup/engine-setup.py @@ -157,6 +157,12 @@ 'steps' : [ { 'title' : output_messages.INFO_UPD_CONF % "Postgresql", 'functions' : [editPostgresConf] } ] }, + { 'description' : 'Config WebSocket Proxy', + 'condition' : [utils.compareStrIgnoreCase, controller.CONF["CONFIG_WEBSOCKET_PROXY"], "yes"], + 'condition_match' : [True], + 'steps' : [ { 'title' : output_messages.INFO_CFG_WEBSOCKET_PROXY, + 'functions' : [_configWebSocketProxy] } ] + }, { 'description' : 'Config NFS', 'condition' : [utils.compareStrIgnoreCase, controller.CONF["CONFIG_NFS"], "yes"], 'condition_match' : [True], @@ -433,6 +439,20 @@ "USE_DEFAULT" : False, "NEED_CONFIRM" : False, "CONDITION" : False},] + , + "WEBSOCKET_PROXY": [ + { "CMD_OPTION" :"config-websocket-proxy", + "USAGE" :output_messages.INFO_CONF_PARAMS_CONFIG_WEBSOCKET_PROXY_USAGE, + "PROMPT" :output_messages.INFO_CONF_PARAMS_CONFIG_WEBSOCKET_PROXY_PROMPT, + "OPTION_LIST" :["yes","no"], + "VALIDATION_FUNC" :validate.validateOptions, + "DEFAULT_VALUE" :"yes", + "MASK_INPUT" : False, + "LOOSE_VALIDATION": False, + "CONF_NAME" : "CONFIG_WEBSOCKET_PROXY", + "USE_DEFAULT" : False, + "NEED_CONFIRM" : False, + "CONDITION" : False} ] , "NFS": [ { "CMD_OPTION" :"nfs-mp", @@ -506,6 +526,12 @@ "DESCRIPTION" : output_messages.INFO_GRP_LOCAL_DB, "PRE_CONDITION" : validate.validateRemoteHost, "PRE_CONDITION_MATCH" : False, + "POST_CONDITION" : False, + "POST_CONDITION_MATCH" : True}, + { "GROUP_NAME" : "WEBSOCKET_PROXY", + "DESCRIPTION" : output_messages.INFO_GRP_WEBSOCKET_PROXY, + "PRE_CONDITION" : validate.validateWebSocketProxy, + "PRE_CONDITION_MATCH" : True, "POST_CONDITION" : False, "POST_CONDITION_MATCH" : True}, { "GROUP_NAME" : "NFS", @@ -914,6 +940,8 @@ # Create Sample configuration files _createIptablesConfig() firewalld_services = ['ovirt-http', 'ovirt-https'] + if utils.compareStrIgnoreCase(controller.CONF['CONFIG_WEBSOCKET_PROXY'], 'yes'): + firewalld_services.append('ovirt-websocket-proxy') if utils.compareStrIgnoreCase(controller.CONF['CONFIG_NFS'], 'yes'): firewalld_services.append('ovirt-nfs') if basedefs.CONST_CONFIG_EXTRA_FIREWALLD_RULES in controller.CONF: @@ -962,7 +990,8 @@ logging.debug("Creating firewalld configuration") services_config = { '@HTTP_PORT@': controller.CONF['HTTP_PORT'], - '@HTTPS_PORT@': controller.CONF['HTTPS_PORT'] + '@HTTPS_PORT@': controller.CONF['HTTPS_PORT'], + '@WEBSOCKET_PROXY@': basedefs.CONST_WEBSOCKET_PORXY_PORT, } for service in services: template_file = glob.glob( @@ -1020,6 +1049,12 @@ for port in [controller.CONF["HTTP_PORT"], controller.CONF["HTTPS_PORT"]]: ports.append({ 'port': port, + 'protocol': ['tcp'] + }) + + if utils.compareStrIgnoreCase(controller.CONF["CONFIG_WEBSOCKET_PROXY"], "yes"): + ports.append({ + 'port': basedefs.CONST_WEBSOCKET_PORXY_PORT, 'protocol': ['tcp'] }) @@ -1801,6 +1836,57 @@ logging.error(traceback.format_exc()) raise Exception(output_messages.ERR_FAILED_CFG_NFS_SHARE) +def _configWebSocketProxy(): + utils.execCmd( + cmdList=( + os.path.join(basedefs.DIR_ENGINE_BIN, "pki-enroll-pkcs12.sh"), + "--name=%s" % 'websocket-proxy', + "--password=%s" % basedefs.CONST_CA_PASS, + "--subject=/C=%s/O=%s/CN=%s" % ( + basedefs.CONST_CA_COUNTRY, + controller.CONF["ORG_NAME"], + controller.CONF["HOST_FQDN"], + ), + ), + failOnError=True, + msg=output_messages.ERR_RC_CODE, + maskList=[basedefs.CONST_CA_PASS], + ) + cmd = [ + basedefs.EXEC_OPENSSL, + "pkcs12", + "-in", basedefs.FILE_WEBSOCKET_PROXY_KEYSTORE, + "-passin", "pass:" + basedefs.CONST_KEY_PASS, + "-nodes", + "-nocerts", + "-out", basedefs.FILE_WEBSOCKET_PROXY_PRIVATE_KEY + ] + out, rc = utils.execCmd(cmdList=cmd, failOnError=True, msg=output_messages.ERR_RC_CODE, maskList=[basedefs.CONST_KEY_PASS]) + os.chmod(basedefs.FILE_WEBSOCKET_PROXY_PRIVATE_KEY, 0600) + utils.chownToEngine(basedefs.FILE_WEBSOCKET_PROXY_PRIVATE_KEY) + + with open(basedefs.FILE_WEBSOCKET_PROXY_CONF, 'w') as f: + f.write( + ( + "PROXY_PORT={port}\n" + "SSL_CERTIFICATE={certificate}\n" + "SSL_KEY={key}\n" + "FORCE_DATA_VERIFICATION=True\n" + "CERT_FOR_DATA_VERIFICATION={engine_cert}\n" + "SSL_ONLY=True\n" + ).format( + port=basedefs.CONST_WEBSOCKET_PORXY_PORT, + certificate=basedefs.FILE_WEBSOCKET_PROXY_CERT, + key=basedefs.FILE_WEBSOCKET_PROXY_PRIVATE_KEY, + engine_cert=basedefs.FILE_ENGINE_CERT, + ) + ) + + utils.updateVDCOption("WebSocketProxy", "Engine") + service = utils.Service("ovirt-websocket-proxy") + service.start() + service.autoStart() + def setMaxSharedMemory(): """ Check and verify that the kernel.shmmax kernel parameter is above 35mb diff --git a/packaging/fedora/setup/engine_validators.py b/packaging/fedora/setup/engine_validators.py index 69fa0e5..5795daf 100644 --- a/packaging/fedora/setup/engine_validators.py +++ b/packaging/fedora/setup/engine_validators.py @@ -377,6 +377,11 @@ print "\n" + output_messages.ERR_PING + ".\n" return False +def validateWebSocketProxy(param, options=[]): + ret = utils.Service('ovirt-websocket-proxy').available() + logging.debug("validateWebSocketProxy %s", ret) + return ret + def _checkDbConnection(dbAdminUser, dbHost, dbPort): """ _checkDbConnection checks connection to the DB""" diff --git a/packaging/fedora/setup/output_messages.py b/packaging/fedora/setup/output_messages.py index bab9299..5e72467 100644 --- a/packaging/fedora/setup/output_messages.py +++ b/packaging/fedora/setup/output_messages.py @@ -40,6 +40,7 @@ INFO_UPD_RHEVM_CONF="Editing %s Configuration" % basedefs.APP_NAME INFO_UPD_CONF="Editing %s Configuration" INFO_CFG_NFS="Configuring the Default ISO Domain" +INFO_CFG_WEBSOCKET_PROXY="Configuring the WebSocket proxy" INFO_START_ENGINE="Starting ovirt-engine Service" INFO_START_HTTPD="Starting HTTPD Service" INFO_CFG_IPTABLES="Configuring Firewall" @@ -71,6 +72,7 @@ INFO_GRP_REMOTE_DB="Remote DB parameters" INFO_GRP_LOCAL_DB="Local DB parameters" INFO_GRP_ISO="ISO Domain parameters" +INFO_GRP_WEBSOCKET_PROXY="Websocket PRoxy parameters" INFO_GRP_IPTABLES="Firewall related parameters" #_addFinalInfoMsg @@ -131,6 +133,8 @@ INFO_CONF_PARAMS_DC_TYPE_PROMPT="The default storage type you will be using " INFO_CONF_PARAMS_CONFIG_NFS_USAGE="Whether to configure NFS share on this server to be used as an ISO domain" INFO_CONF_PARAMS_CONFIG_NFS_PROMPT="Configure NFS share on this server to be used as an ISO Domain?" +INFO_CONF_PARAMS_CONFIG_WEBSOCKET_PROXY_PROMPT="Configure WebSocket proxy on this server?" +INFO_CONF_PARAMS_CONFIG_WEBSOCKET_PROXY_USAGE="Whether to configure WebSocket Porxy on this server" INFO_CONF_PARAMS_NFS_MP_USAGE="NFS mount point" INFO_CONF_PARAMS_NFS_MP_PROMPT="Local ISO domain path" INFO_CONF_PARAMS_NFS_DESC_USAGE="ISO Domain name" diff --git a/packaging/firewalld/base/ovirt-websocket-proxy.xml.in b/packaging/firewalld/base/ovirt-websocket-proxy.xml.in new file mode 100644 index 0000000..f933502 --- /dev/null +++ b/packaging/firewalld/base/ovirt-websocket-proxy.xml.in @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<service> + <short>ovirt-websocket-proxy</short> + <description>oVirt configured WebSocket Proxy service</description> + <port protocol="tcp" port="@WEBSOCKET_PROXY_PORT@"/> +</service> diff --git a/packaging/setup/ovirt_engine_setup/config.py.in b/packaging/setup/ovirt_engine_setup/config.py.in index 177e9b3..bdb7e0d 100644 --- a/packaging/setup/ovirt_engine_setup/config.py.in +++ b/packaging/setup/ovirt_engine_setup/config.py.in @@ -21,6 +21,7 @@ ENGINE_SYSCONFDIR = '@ENGINE_ETC@' ENGINE_SERVICE_CONFIG = '@ENGINE_VARS@' +ENGINE_WEBSOCKET_PROXY_CONFIG = '@ENGINE_WSPROXY_VARS@' ENGINE_NOTIFIER_SERVICE_CONFIG = '@ENGINE_NOTIFIER_VARS@' ENGINE_PKIDIR = '@ENGINE_PKI@' ENGINE_DATADIR = '@ENGINE_USR@' diff --git a/packaging/setup/ovirt_engine_setup/constants.py b/packaging/setup/ovirt_engine_setup/constants.py index cb301b5..4bcb7c9 100644 --- a/packaging/setup/ovirt_engine_setup/constants.py +++ b/packaging/setup/ovirt_engine_setup/constants.py @@ -70,6 +70,7 @@ OVIRT_ENGINE_LOCALSTATEDIR = config.ENGINE_LOCALSTATEDIR OVIRT_ENGINE_TMPDIR = config.ENGINE_TMP OVIRT_ENGINE_SERVICE_CONFIG = config.ENGINE_SERVICE_CONFIG + OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIG = config.ENGINE_WEBSOCKET_PROXY_CONFIG OVIRT_ENGINE_NOTIFIER_SERVICE_CONFIG = \ config.ENGINE_NOTIFIER_SERVICE_CONFIG @@ -189,6 +190,14 @@ OVIRT_ENGINE_PKIKEYSDIR, 'apache.key.nopass', ) + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE = os.path.join( + OVIRT_ENGINE_PKIKEYSDIR, + 'websocket-proxy.p12', + ) + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_KEY = os.path.join( + OVIRT_ENGINE_PKIKEYSDIR, + 'websocket-proxy.key.nopass', + ) OVIRT_ENGINE_PKI_JBOSS_STORE = os.path.join( OVIRT_ENGINE_PKIKEYSDIR, 'jboss.p12', @@ -204,6 +213,10 @@ OVIRT_ENGINE_PKI_APACHE_CERT = os.path.join( OVIRT_ENGINE_PKICERTSDIR, 'apache.cer', + ) + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_CERT = os.path.join( + OVIRT_ENGINE_PKICERTSDIR, + 'websocket-proxy.cer', ) OVIRT_ENGINE_PKI_ENGINE_TRUST_STORE = os.path.join( OVIRT_ENGINE_PKIDIR, @@ -248,6 +261,14 @@ OVIRT_ENGINE_SERVICE_CONFIG_PKI = os.path.join( OVIRT_ENGINE_SERVICE_CONFIGD, '10-setup-pki.conf', + ) + + OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIGD = ( + '%s.d' % OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIG + ) + OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIG_SETUP = os.path.join( + OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIGD, + '10-setup.conf', ) OVIRT_ENGINE_NOTIFIER_SERVICE_CONFIGD = ( @@ -397,6 +418,7 @@ DEFAULT_NETWORK_JBOSS_HTTPS_PORT = 8443 DEFAULT_NETWORK_JBOSS_AJP_PORT = 8702 DEFAULT_NETWORK_JBOSS_DEBUG_ADDRESS = '127.0.0.1:8787' + DEFAULT_WEBSOCKET_PROXY_PORT = 6100 DEFAULT_CONFIG_APPLICATION_MODE = 'Both' DEFAULT_CONFIG_STORAGE_TYPE = 'NFS' @@ -699,6 +721,7 @@ JBOSS_HTTPS_PORT = 'OVESETUP_CONFIG/jbossHttpsPort' JBOSS_AJP_PORT = 'OVESETUP_CONFIG/jbossAjpPort' JBOSS_DEBUG_ADDRESS = 'OVESETUP_CONFIG/jbossDebugAddress' + WEBSOCKET_PROXY_PORT = 'OVESETUP_CONFIG/websocketProxyPort' MAC_RANGE_POOL = 'OVESETUP_CONFIG/macRangePool' @@ -763,6 +786,14 @@ FQDN_REVERSE_VALIDATION = 'OVESETUP_CONFIG/fqdnReverseValidation' FQDN_NON_LOOPBACK_VALIDATION = 'OVESETUP_CONFIG/fqdnNonLoopback' + @osetupattrs( + answerfile=True, + summary=True, + description=_('Configure WebSocket Proxy'), + ) + def WEBSOCKET_PROXY_CONFIG(self): + return 'OVESETUP_CONFIG/websocketProxyConfig' + @util.export @util.codegen diff --git a/packaging/setup/plugins/ovirt-engine-setup/config/__init__.py b/packaging/setup/plugins/ovirt-engine-setup/config/__init__.py index 9c28248..52d499b 100644 --- a/packaging/setup/plugins/ovirt-engine-setup/config/__init__.py +++ b/packaging/setup/plugins/ovirt-engine-setup/config/__init__.py @@ -34,6 +34,7 @@ from . import tools from . import iso_domain from . import macrange +from . import websocket_proxy @util.export @@ -50,6 +51,7 @@ tools.Plugin(context=context) iso_domain.Plugin(context=context) macrange.Plugin(context=context) + websocket_proxy.Plugin(context=context) # vim: expandtab tabstop=4 shiftwidth=4 diff --git a/packaging/setup/plugins/ovirt-engine-setup/config/websocket_proxy.py b/packaging/setup/plugins/ovirt-engine-setup/config/websocket_proxy.py new file mode 100644 index 0000000..6292b59 --- /dev/null +++ b/packaging/setup/plugins/ovirt-engine-setup/config/websocket_proxy.py @@ -0,0 +1,264 @@ +# +# ovirt-engine-setup -- ovirt engine setup +# Copyright (C) 2013 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +"""websocket proxy plugin.""" + + +import os +import gettext +_ = lambda m: gettext.dgettext(message=m, domain='ovirt-engine-setup') + + +from otopi import constants as otopicons +from otopi import filetransaction +from otopi import util +from otopi import plugin + + +from ovirt_engine_setup import constants as osetupcons +from ovirt_engine_setup import dialog + + +@util.export +class Plugin(plugin.PluginBase): + """websocket proxy plugin.""" + + def __init__(self, context): + super(Plugin, self).__init__(context=context) + self._enabled = False + + @plugin.event( + stage=plugin.Stages.STAGE_INIT, + ) + def _init(self): + self.environment.setdefault( + osetupcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG, + None + ) + self.environment.setdefault( + osetupcons.ConfigEnv.WEBSOCKET_PROXY_PORT, + osetupcons.Defaults.DEFAULT_WEBSOCKET_PROXY_PORT + ) + + @plugin.event( + stage=plugin.Stages.STAGE_SETUP, + ) + def _setup(self): + self.command.detect('openssl') + + @plugin.event( + stage=plugin.Stages.STAGE_LATE_SETUP, + ) + def _late_setup(self): + if not os.path.exists( + osetupcons.FileLocations. + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE + ): + if ( + self.environment[ + osetupcons.CoreEnv.DEVELOPER_MODE + ] or + self.services.exists(name='ovirt-websocket-proxy') + ): + self._enabled = True + + @plugin.event( + stage=plugin.Stages.STAGE_CUSTOMIZATION, + condition=lambda self: self._enabled, + before=[ + osetupcons.Stages.DIALOG_TITLES_E_SYSTEM, + ], + after=[ + osetupcons.Stages.DB_CONNECTION_STATUS, + osetupcons.Stages.DIALOG_TITLES_S_SYSTEM, + ], + ) + def _customization(self): + + if self.environment[ + osetupcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG + ] is None: + self.environment[ + osetupcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG + ] = dialog.queryBoolean( + dialog=self.dialog, + name='OVESETUP_CONFIG_WEBSOCKET_PROXY', + note=_( + 'Configure WebSocket Proxy on this machine? ' + '(@VALUES@) [@DEFAULT@]: ' + ), + prompt=True, + default=True, + ) + self._enabled = self.environment[ + osetupcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG + ] + + if self._enabled: + self.environment[osetupcons.NetEnv.FIREWALLD_SERVICES].extend([ + { + 'name': 'ovirt-websocket-proxy', + 'directory': 'base' + }, + ]) + self.environment[ + osetupcons.NetEnv.FIREWALLD_SUBST + ].update({ + '@WEBSOCKET_PROXY_PORT@': self.environment[ + osetupcons.ConfigEnv.WEBSOCKET_PROXY_PORT + ], + }) + + @plugin.event( + stage=plugin.Stages.STAGE_MISC, + condition=lambda self: self._enabled, + after=[ + osetupcons.Stages.DB_CONNECTION_AVAILABLE, + osetupcons.Stages.CA_AVAILABLE, + ], + ) + def _misc(self): + + self.logger.info(_('Configurating WebSocket Proxy')) + + self.environment[osetupcons.DBEnv.STATEMENT].updateVdcOptions( + options=[ + { + 'name': 'WebSocketProxy', + 'value': 'Engine', + }, + ] + ) + + self.execute( + args=( + osetupcons.FileLocations.OVIRT_ENGINE_PKI_CA_ENROLL, + '--name=%s' % 'websocket-proxy', + '--password=%s' % ( + self.environment[osetupcons.PKIEnv.STORE_PASS], + ), + '--subject=/C=%s/O=%s/CN=%s' % ( + self.environment[osetupcons.PKIEnv.COUNTRY], + self.environment[osetupcons.PKIEnv.ORG], + self.environment[osetupcons.ConfigEnv.FQDN], + ), + ), + ) + self.environment[ + otopicons.CoreEnv.MODIFIED_FILES + ].extend( + ( + ( + osetupcons.FileLocations. + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_CERT + ), + ( + osetupcons.FileLocations. + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE + ), + ) + ) + + rc, stdout, stderr = self.execute( + args=( + self.command.get('openssl'), + 'pkcs12', + '-in', ( + osetupcons.FileLocations. + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE + ), + '-passin', 'pass:%s' % self.environment[ + osetupcons.PKIEnv.STORE_PASS + ], + '-nodes', + '-nocerts', + ), + logStreams=False, + ) + + self.environment[otopicons.CoreEnv.MAIN_TRANSACTION].append( + filetransaction.FileTransaction( + osetupcons.FileLocations.OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_KEY, + mode=0o600, + owner=self.environment[osetupcons.SystemEnv.USER_ENGINE], + enforcePermissions=True, + content=stdout, + modifiedList=self.environment[ + otopicons.CoreEnv.MODIFIED_FILES + ], + ) + ) + + self.environment[otopicons.CoreEnv.MAIN_TRANSACTION].append( + filetransaction.FileTransaction( + name=( + osetupcons.FileLocations. + OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIG_SETUP + ), + content=( + "PROXY_PORT={port}\n" + "SSL_CERTIFICATE={certificate}\n" + "SSL_KEY={key}\n" + "FORCE_DATA_VERIFICATION=True\n" + "CERT_FOR_DATA_VERIFICATION={engine_cert}\n" + "SSL_ONLY=True\n" + ).format( + port=self.environment[ + osetupcons.ConfigEnv.WEBSOCKET_PROXY_PORT + ], + certificate=( + osetupcons.FileLocations. + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_CERT + ), + key=( + osetupcons.FileLocations. + OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_KEY + ), + engine_cert=( + osetupcons.FileLocations. + OVIRT_ENGINE_PKI_ENGINE_CERT + ), + ), + modifiedList=self.environment[ + otopicons.CoreEnv.MODIFIED_FILES + ], + ) + ) + + @plugin.event( + stage=plugin.Stages.STAGE_CLOSEUP, + condition=lambda self: ( + self._enabled and + not self.environment[ + osetupcons.CoreEnv.DEVELOPER_MODE + ] + ), + ) + def _closeup(self): + for state in (False, True): + self.services.state( + name='ovirt-websocket-proxy', + state=state, + ) + self.services.startup( + name='ovirt-websocket-proxy', + state=True, + ) + + +# vim: expandtab tabstop=4 shiftwidth=4 -- To view, visit http://gerrit.ovirt.org/16014 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5d5fad4dc61d9c89c4165a74e9922eded483beac Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alon Bar-Lev <alo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches