Simone Tiraboschi has uploaded a new change for review.

Change subject: WebSocketProxy on a separate host
......................................................................

WebSocketProxy on a separate host

The aim of this feature is to enhance the engine setup being able
to install and configure the WebSocketProxy on a second machine,
where engine does not run, as proposed at:
http://www.ovirt.org/Features/WebSocketProxy_on_a_separate_host

Change-Id: Ifceddd5aa44a77f67a3b6b30c6678d9a3b485f9c
Bug-Url: https://bugzilla.redhat.com/1080992
Bug-Url: https://bugzilla.redhat.com/985945
Signed-off-by: Simone Tiraboschi <stira...@redhat.com>
---
M Makefile
M ovirt-engine.spec.in
M packaging/setup/ovirt_engine_setup/constants.py
M packaging/setup/ovirt_engine_setup/engine/engineconfig.py.in
M packaging/setup/ovirt_engine_setup/engine/engineconstants.py
A packaging/setup/ovirt_engine_setup/websocket_proxy/__init__.py
A packaging/setup/ovirt_engine_setup/websocket_proxy/wspconfig.py.in
A packaging/setup/ovirt_engine_setup/websocket_proxy/wspconstants.py
M packaging/setup/plugins/ovirt-engine-common/websocket_proxy/core.py
M packaging/setup/plugins/ovirt-engine-remove/websocket_proxy/misc.py
M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/config/options.py
M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/__init__.py
A packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/localwsp.py
M packaging/setup/plugins/ovirt-engine-setup/websocket_proxy/config.py
14 files changed, 377 insertions(+), 117 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/34/28534/1

diff --git a/Makefile b/Makefile
index 1e6e91e..ca1fe78 100644
--- a/Makefile
+++ b/Makefile
@@ -191,6 +191,7 @@
        packaging/setup/ovirt_engine_setup/config.py \
        packaging/setup/ovirt_engine_setup/engine/engineconfig.py \
        packaging/setup/ovirt_engine_setup/engine_common/enginecommonconfig.py \
+       packaging/setup/ovirt_engine_setup/websocket_proxy/wspconfig.py \
        packaging/sys-etc/logrotate.d/ovirt-engine \
        packaging/sys-etc/logrotate.d/ovirt-engine-notifier \
        packaging/sys-etc/logrotate.d/ovirt-engine-setup \
diff --git a/ovirt-engine.spec.in b/ovirt-engine.spec.in
index a80526c..0d90e10 100644
--- a/ovirt-engine.spec.in
+++ b/ovirt-engine.spec.in
@@ -194,7 +194,6 @@
 Requires:      %{name}-tools = %{version}-%{release}
 Requires:      %{name}-userportal = %{version}-%{release}
 Requires:      %{name}-webadmin-portal = %{version}-%{release}
-Requires:      %{name}-websocket-proxy >= %{version}-%{release}
 Requires:      java
 Requires:      java-1.7.0-openjdk >= 1:1.7.0.9-2.3.3.2
 Requires:      jpackage-utils
@@ -974,6 +973,7 @@
 %files setup-plugin-websocket-proxy
 
 %{engine_data}/firewalld/websocket-proxy/
+%{engine_data}/setup/ovirt_engine_setup/websocket_proxy/
 %{engine_data}/setup/plugins/*/websocket_proxy/
 
 %files setup-plugin-allinone
diff --git a/packaging/setup/ovirt_engine_setup/constants.py 
b/packaging/setup/ovirt_engine_setup/constants.py
index 862b49f..4ec7a3e 100644
--- a/packaging/setup/ovirt_engine_setup/constants.py
+++ b/packaging/setup/ovirt_engine_setup/constants.py
@@ -175,6 +175,7 @@
 class Defaults(object):
     DEFAULT_SYSTEM_USER_ENGINE = 'ovirt'
     DEFAULT_SYSTEM_GROUP_ENGINE = 'ovirt'
+    DEFAULT_WEBSOCKET_PROXY_PORT = 6100
 
 
 @util.export
diff --git a/packaging/setup/ovirt_engine_setup/engine/engineconfig.py.in 
b/packaging/setup/ovirt_engine_setup/engine/engineconfig.py.in
index abfa315..27505bd 100644
--- a/packaging/setup/ovirt_engine_setup/engine/engineconfig.py.in
+++ b/packaging/setup/ovirt_engine_setup/engine/engineconfig.py.in
@@ -21,7 +21,6 @@
 ENGINE_SYSCONFDIR = '@ENGINE_ETC@'
 ENGINE_SERVICE_CONFIG = '@ENGINE_VARS@'
 ENGINE_SERVICE_CONFIG_DEFAULTS = '@ENGINE_DEFAULTS@'
-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/engine/engineconstants.py 
b/packaging/setup/ovirt_engine_setup/engine/engineconstants.py
index 99a7f28..821f48f 100644
--- a/packaging/setup/ovirt_engine_setup/engine/engineconstants.py
+++ b/packaging/setup/ovirt_engine_setup/engine/engineconstants.py
@@ -49,8 +49,6 @@
     OVIRT_ENGINE_SERVICE_CONFIG = engineconfig.ENGINE_SERVICE_CONFIG
     OVIRT_ENGINE_SERVICE_CONFIG_DEFAULTS = \
         engineconfig.ENGINE_SERVICE_CONFIG_DEFAULTS
-    OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIG = \
-        engineconfig.ENGINE_WEBSOCKET_PROXY_CONFIG
     OVIRT_ENGINE_NOTIFIER_SERVICE_CONFIG = \
         engineconfig.ENGINE_NOTIFIER_SERVICE_CONFIG
 
@@ -148,11 +146,11 @@
         OVIRT_ENGINE_PKIKEYSDIR,
         'apache.key.nopass',
     )
-    OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE = os.path.join(
+    OVIRT_ENGINE_PKI_LOCAL_WEBSOCKET_PROXY_STORE = os.path.join(
         OVIRT_ENGINE_PKIKEYSDIR,
         'websocket-proxy.p12',
     )
-    OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_KEY = os.path.join(
+    OVIRT_ENGINE_PKI_LOCAL_WEBSOCKET_PROXY_KEY = os.path.join(
         OVIRT_ENGINE_PKIKEYSDIR,
         'websocket-proxy.key.nopass',
     )
@@ -172,7 +170,7 @@
         OVIRT_ENGINE_PKICERTSDIR,
         'apache.cer',
     )
-    OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_CERT = os.path.join(
+    OVIRT_ENGINE_PKI_LOCAL_WEBSOCKET_PROXY_CERT = os.path.join(
         OVIRT_ENGINE_PKICERTSDIR,
         'websocket-proxy.cer',
     )
@@ -275,14 +273,6 @@
         '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 = (
         '%s.d' % OVIRT_ENGINE_NOTIFIER_SERVICE_CONFIG
     )
@@ -316,8 +306,6 @@
     DEFAULT_SYSTEM_MEMCHECK_RECOMMENDED_MB = 16384
     DEFAULT_SYSTEM_MEMCHECK_THRESHOLD = 90
 
-    DEFAULT_WEBSOCKET_PROXY_PORT = 6100
-
     DEFAULT_CONFIG_APPLICATION_MODE = 'Both'
     DEFAULT_CONFIG_STORAGE_TYPE = 'NFS'
 
@@ -328,8 +316,6 @@
 
 @util.export
 class Stages(object):
-    CONFIG_WEBSOCKET_PROXY_CUSTOMIZATION = \
-        'setup.config.websocket-proxy.customization'
 
     SYSTEM_NFS_CONFIG_AVAILABLE = 'osetup.system.nfs.available'
 
@@ -346,6 +332,8 @@
 
     MEMORY_CHECK = 'osetup.memory.check'
 
+    LOCAL_WSP_CERTS_AVAILABLE = 'osetup.pki.localwsp.available'
+
 
 @util.export
 @util.codegen
@@ -357,7 +345,6 @@
 
     ENGINE_SERVICE_NAME = 'ovirt-engine'
 
-    WEBSOCKET_PROXY_SERVICE_NAME = 'ovirt-websocket-proxy'
     PKI_PASSWORD = 'mypass'
     MINIMUM_SPACE_ISODOMAIN_MB = 350
     ISO_DOMAIN_IMAGE_UID = '11111111-1111-1111-1111-111111111111'
@@ -457,10 +444,6 @@
 @osetupattrsclass
 class ConfigEnv(object):
 
-    WEBSOCKET_PROXY_HOST = 'OVESETUP_CONFIG/websocketProxyHost'
-
-    WEBSOCKET_PROXY_PORT = 'OVESETUP_CONFIG/websocketProxyPort'
-
     @osetupattrs(
         postinstallfile=True,
     )
@@ -507,15 +490,6 @@
         'OVESETUP_CONFIG/isoDomainDefaultMountPoint'
 
     MAC_RANGE_POOL = 'OVESETUP_CONFIG/macRangePool'
-
-    @osetupattrs(
-        answerfile=True,
-        summary=True,
-        description=_('Configure WebSocket Proxy'),
-        postinstallfile=True,
-    )
-    def WEBSOCKET_PROXY_CONFIG(self):
-        return 'OVESETUP_CONFIG/websocketProxyConfig'
 
 
 @util.export
diff --git a/packaging/setup/ovirt_engine_setup/websocket_proxy/__init__.py 
b/packaging/setup/ovirt_engine_setup/websocket_proxy/__init__.py
new file mode 100644
index 0000000..74cb8e6
--- /dev/null
+++ b/packaging/setup/ovirt_engine_setup/websocket_proxy/__init__.py
@@ -0,0 +1,25 @@
+#
+# ovirt-engine-setup -- ovirt engine setup
+# Copyright (C) 2014 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.
+#
+
+
+"""ovirt_engine_setup module."""
+
+
+__all__ = []
+
+
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/packaging/setup/ovirt_engine_setup/websocket_proxy/wspconfig.py.in 
b/packaging/setup/ovirt_engine_setup/websocket_proxy/wspconfig.py.in
new file mode 100644
index 0000000..9ee0e50
--- /dev/null
+++ b/packaging/setup/ovirt_engine_setup/websocket_proxy/wspconfig.py.in
@@ -0,0 +1,24 @@
+#
+# ovirt-engine-setup -- ovirt engine setup
+# Copyright (C) 2013-2014 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.
+#
+
+
+"""Engine Config."""
+
+ENGINE_WEBSOCKET_PROXY_CONFIG = '@ENGINE_WSPROXY_VARS@'
+ENGINE_PKIDIR = '@ENGINE_PKI@'
+
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/packaging/setup/ovirt_engine_setup/websocket_proxy/wspconstants.py 
b/packaging/setup/ovirt_engine_setup/websocket_proxy/wspconstants.py
new file mode 100644
index 0000000..da9188b
--- /dev/null
+++ b/packaging/setup/ovirt_engine_setup/websocket_proxy/wspconstants.py
@@ -0,0 +1,111 @@
+#
+# ovirt-engine-setup -- ovirt engine setup
+# Copyright (C) 2014 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.
+#
+
+
+"""Constants."""
+
+
+import os
+import gettext
+_ = lambda m: gettext.dgettext(message=m, domain='ovirt-engine-setup')
+
+
+from otopi import util
+
+
+from ovirt_engine_setup.constants import osetupattrsclass
+from ovirt_engine_setup.constants import osetupattrs
+
+
+from . import wspconfig
+
+
+@util.export
+class FileLocations(object):
+
+    OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIG = \
+        wspconfig.ENGINE_WEBSOCKET_PROXY_CONFIG
+
+    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_PKIDIR = wspconfig.ENGINE_PKIDIR
+
+    OVIRT_ENGINE_PKIKEYSDIR = os.path.join(
+        OVIRT_ENGINE_PKIDIR,
+        'keys',
+    )
+    OVIRT_ENGINE_PKICERTSDIR = os.path.join(
+        OVIRT_ENGINE_PKIDIR,
+        'certs',
+    )
+
+    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_WEBSOCKET_PROXY_CERT = os.path.join(
+        OVIRT_ENGINE_PKICERTSDIR,
+        'websocket-proxy.cer',
+    )
+    OVIRT_ENGINE_PKI_ENGINE_CERT = os.path.join(
+        OVIRT_ENGINE_PKICERTSDIR,
+        'engine.cer',
+    )
+
+
+@util.export
+class Stages(object):
+    CONFIG_WEBSOCKET_PROXY_CUSTOMIZATION = \
+        'setup.config.websocket-proxy.customization'
+
+
+@util.export
+@util.codegen
+class Const(object):
+    WEBSOCKET_PROXY_SERVICE_NAME = 'ovirt-websocket-proxy'
+
+
+@util.export
+@util.codegen
+@osetupattrsclass
+class ConfigEnv(object):
+
+    WEBSOCKET_PROXY_HOST = 'OVESETUP_CONFIG/websocketProxyHost'
+
+    WEBSOCKET_PROXY_PORT = 'OVESETUP_CONFIG/websocketProxyPort'
+
+    @osetupattrs(
+        answerfile=True,
+        summary=True,
+        description=_('Configure WebSocket Proxy'),
+        postinstallfile=True,
+    )
+    def WEBSOCKET_PROXY_CONFIG(self):
+        return 'OVESETUP_CONFIG/websocketProxyConfig'
+
+
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git 
a/packaging/setup/plugins/ovirt-engine-common/websocket_proxy/core.py 
b/packaging/setup/plugins/ovirt-engine-common/websocket_proxy/core.py
index 54d1188..ae6c83d 100644
--- a/packaging/setup/plugins/ovirt-engine-common/websocket_proxy/core.py
+++ b/packaging/setup/plugins/ovirt-engine-common/websocket_proxy/core.py
@@ -28,7 +28,7 @@
 
 
 from ovirt_engine_setup import constants as osetupcons
-from ovirt_engine_setup.engine import engineconstants as oenginecons
+from ovirt_engine_setup.websocket_proxy import wspconstants as owspcons
 
 
 @util.export
@@ -46,11 +46,11 @@
     )
     def _transactionBegin(self):
         if self.services.exists(
-            name=oenginecons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
+            name=owspcons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
         ):
             self.logger.info(_('Stopping websocket-proxy service'))
             self.services.state(
-                name=oenginecons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
+                name=owspcons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
                 state=False
             )
 
diff --git 
a/packaging/setup/plugins/ovirt-engine-remove/websocket_proxy/misc.py 
b/packaging/setup/plugins/ovirt-engine-remove/websocket_proxy/misc.py
index 486c715..2e13ba4 100644
--- a/packaging/setup/plugins/ovirt-engine-remove/websocket_proxy/misc.py
+++ b/packaging/setup/plugins/ovirt-engine-remove/websocket_proxy/misc.py
@@ -28,7 +28,7 @@
 
 
 from ovirt_engine_setup import constants as osetupcons
-from ovirt_engine_setup.engine import engineconstants as oenginecons
+from ovirt_engine_setup.websocket_proxy import wspconstants as owspcons
 
 
 @util.export
@@ -43,10 +43,10 @@
     )
     def _misc(self):
         if self.services.exists(
-            name=oenginecons.Const.WEBSOCKET_PROXY_SERVICE_NAME
+            name=owspcons.Const.WEBSOCKET_PROXY_SERVICE_NAME
         ):
             self.services.startup(
-                name=oenginecons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
+                name=owspcons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
                 state=False,
             )
 
diff --git 
a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/config/options.py 
b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/config/options.py
index 55744d5..8e3169d 100644
--- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/config/options.py
+++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/config/options.py
@@ -197,7 +197,7 @@
                     'name': 'WebSocketProxy',
                     'value': '%s:%s' % (
                         'localhost',
-                        oenginecons.Defaults.DEFAULT_WEBSOCKET_PROXY_PORT,
+                        osetupcons.Defaults.DEFAULT_WEBSOCKET_PROXY_PORT,
                     ),
                 },
                 {
diff --git 
a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/__init__.py 
b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/__init__.py
index f51d0a7..8529e90 100644
--- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/__init__.py
+++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/__init__.py
@@ -23,12 +23,14 @@
 
 
 from . import ca
+from . import localwsp
 from . import ssh
 
 
 @util.export
 def createPlugins(context):
     ca.Plugin(context=context)
+    localwsp.Plugin(context=context)
     ssh.Plugin(context=context)
 
 
diff --git 
a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/localwsp.py 
b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/localwsp.py
new file mode 100644
index 0000000..4e212ca
--- /dev/null
+++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/pki/localwsp.py
@@ -0,0 +1,112 @@
+#
+# ovirt-engine-setup -- ovirt engine setup
+# Copyright (C) 2014 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.
+#
+
+
+"""local websocket proxy plugin."""
+
+
+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.engine import engineconstants as oenginecons
+
+
+@util.export
+class Plugin(plugin.PluginBase):
+    """local websocket proxy plugin."""
+
+    def __init__(self, context):
+        super(Plugin, self).__init__(context=context)
+        self._enabled = True
+
+    @plugin.event(
+        stage=plugin.Stages.STAGE_MISC,
+        condition=lambda self: self._enabled,
+        name=osetupcons.Stages.LOCAL_WSP_CERTS_AVAILABLE,
+        after=(
+            osetupcons.Stages.CA_AVAILABLE,
+        ),
+    )
+    def _misc(self):
+
+        self.logger.info(_('Creating certs for a local WebSocket Proxy'))
+
+        self.execute(
+            args=(
+                oenginecons.FileLocations.OVIRT_ENGINE_PKI_CA_ENROLL,
+                '--name=%s' % 'websocket-proxy',
+                '--password=%s' % (
+                    self.environment[oenginecons.PKIEnv.STORE_PASS],
+                ),
+                '--subject=/C=%s/O=%s/CN=%s' % (
+                    self.environment[oenginecons.PKIEnv.COUNTRY],
+                    self.environment[oenginecons.PKIEnv.ORG],
+                    self.environment[osetupcons.ConfigEnv.FQDN],
+                ),
+            ),
+        )
+        self.environment[
+            otopicons.CoreEnv.MODIFIED_FILES
+        ].extend(
+            (
+                (
+                    oenginecons.FileLocations.
+                    OVIRT_ENGINE_PKI_LOCAL_WEBSOCKET_PROXY_CERT
+                ),
+                (
+                    oenginecons.FileLocations.
+                    OVIRT_ENGINE_PKI_LOCAL_WEBSOCKET_PROXY_STORE
+                ),
+            )
+        )
+
+        rc, stdout, stderr = self.execute(
+            args=(
+                oenginecons.FileLocations.OVIRT_ENGINE_PKI_PKCS12_EXTRACT,
+                '--name=websocket-proxy',
+                '--passin=%s' % self.environment[
+                    oenginecons.PKIEnv.STORE_PASS
+                ],
+                '--key=-',
+            ),
+            logStreams=False,
+        )
+
+        self.environment[otopicons.CoreEnv.MAIN_TRANSACTION].append(
+            filetransaction.FileTransaction(
+                oenginecons.FileLocations.
+                OVIRT_ENGINE_PKI_LOCAL_WEBSOCKET_PROXY_KEY,
+                mode=0o600,
+                owner=self.environment[osetupcons.SystemEnv.USER_ENGINE],
+                enforcePermissions=True,
+                content=stdout,
+                modifiedList=self.environment[
+                    otopicons.CoreEnv.MODIFIED_FILES
+                ],
+            )
+        )
+
+
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git 
a/packaging/setup/plugins/ovirt-engine-setup/websocket_proxy/config.py 
b/packaging/setup/plugins/ovirt-engine-setup/websocket_proxy/config.py
index 8b14191..b87875f 100644
--- a/packaging/setup/plugins/ovirt-engine-setup/websocket_proxy/config.py
+++ b/packaging/setup/plugins/ovirt-engine-setup/websocket_proxy/config.py
@@ -31,9 +31,7 @@
 
 
 from ovirt_engine_setup import constants as osetupcons
-from ovirt_engine_setup.engine import engineconstants as oenginecons
-from ovirt_engine_setup.engine_common \
-    import enginecommonconstants as oengcommcons
+from ovirt_engine_setup.websocket_proxy import wspconstants as owspcons
 from ovirt_engine_setup import dialog
 
 
@@ -51,15 +49,15 @@
     )
     def _init(self):
         self.environment.setdefault(
-            oenginecons.ConfigEnv.WEBSOCKET_PROXY_CONFIG,
+            owspcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG,
             None
         )
         self.environment.setdefault(
-            oenginecons.ConfigEnv.WEBSOCKET_PROXY_PORT,
-            oenginecons.Defaults.DEFAULT_WEBSOCKET_PROXY_PORT
+            owspcons.ConfigEnv.WEBSOCKET_PROXY_PORT,
+            osetupcons.Defaults.DEFAULT_WEBSOCKET_PROXY_PORT
         )
         self.environment.setdefault(
-            oenginecons.ConfigEnv.WEBSOCKET_PROXY_HOST,
+            owspcons.ConfigEnv.WEBSOCKET_PROXY_HOST,
             'localhost'
         )
 
@@ -69,7 +67,7 @@
     def _late_setup(self):
         if (
             not os.path.exists(
-                oenginecons.FileLocations.
+                owspcons.FileLocations.
                 OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE
             )
             # Do not check if service exists. when upgrading from
@@ -92,23 +90,22 @@
 
     @plugin.event(
         stage=plugin.Stages.STAGE_CUSTOMIZATION,
-        name=oenginecons.Stages.CONFIG_WEBSOCKET_PROXY_CUSTOMIZATION,
+        name=owspcons.Stages.CONFIG_WEBSOCKET_PROXY_CUSTOMIZATION,
         condition=lambda self: self._enabled,
         before=(
             osetupcons.Stages.DIALOG_TITLES_E_SYSTEM,
         ),
         after=(
-            oengcommcons.Stages.DB_CONNECTION_STATUS,
             osetupcons.Stages.DIALOG_TITLES_S_SYSTEM,
         ),
     )
     def _customization(self):
 
         if self.environment[
-            oenginecons.ConfigEnv.WEBSOCKET_PROXY_CONFIG
+            owspcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG
         ] is None:
             self.environment[
-                oenginecons.ConfigEnv.WEBSOCKET_PROXY_CONFIG
+                owspcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG
             ] = dialog.queryBoolean(
                 dialog=self.dialog,
                 name='OVESETUP_CONFIG_WEBSOCKET_PROXY',
@@ -120,21 +117,20 @@
                 default=True,
             )
         self._enabled = self.environment[
-            oenginecons.ConfigEnv.WEBSOCKET_PROXY_CONFIG
+            owspcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG
         ]
 
     @plugin.event(
         stage=plugin.Stages.STAGE_CUSTOMIZATION,
         condition=lambda self: self.environment[
-            oenginecons.ConfigEnv.WEBSOCKET_PROXY_CONFIG
+            owspcons.ConfigEnv.WEBSOCKET_PROXY_CONFIG
         ],
         before=(
             osetupcons.Stages.DIALOG_TITLES_E_SYSTEM,
         ),
         after=(
-            oengcommcons.Stages.DB_CONNECTION_STATUS,
             osetupcons.Stages.DIALOG_TITLES_S_SYSTEM,
-            oenginecons.Stages.CONFIG_WEBSOCKET_PROXY_CUSTOMIZATION,
+            owspcons.Stages.CONFIG_WEBSOCKET_PROXY_CUSTOMIZATION,
         ),
     )
     def _customization_firewall(self):
@@ -148,7 +144,7 @@
             osetupcons.NetEnv.FIREWALLD_SUBST
         ].update({
             '@WEBSOCKET_PROXY_PORT@': self.environment[
-                oenginecons.ConfigEnv.WEBSOCKET_PROXY_PORT
+                owspcons.ConfigEnv.WEBSOCKET_PROXY_PORT
             ],
         })
 
@@ -156,72 +152,87 @@
         stage=plugin.Stages.STAGE_MISC,
         condition=lambda self: self._enabled,
         after=(
-            oengcommcons.Stages.DB_CONNECTION_AVAILABLE,
-            osetupcons.Stages.CA_AVAILABLE,
+            osetupcons.Stages.LOCAL_WSP_CERTS_AVAILABLE,
         ),
     )
     def _misc(self):
 
         self.logger.info(_('Configuring WebSocket Proxy'))
 
-        self.execute(
-            args=(
-                oenginecons.FileLocations.OVIRT_ENGINE_PKI_CA_ENROLL,
-                '--name=%s' % 'websocket-proxy',
-                '--password=%s' % (
-                    self.environment[oenginecons.PKIEnv.STORE_PASS],
-                ),
-                '--subject=/C=%s/O=%s/CN=%s' % (
-                    self.environment[oenginecons.PKIEnv.COUNTRY],
-                    self.environment[oenginecons.PKIEnv.ORG],
-                    self.environment[osetupcons.ConfigEnv.FQDN],
-                ),
-            ),
-        )
-        self.environment[
-            otopicons.CoreEnv.MODIFIED_FILES
-        ].extend(
-            (
-                (
-                    oenginecons.FileLocations.
-                    OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_CERT
-                ),
-                (
-                    oenginecons.FileLocations.
-                    OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE
+        _on_separate_h = False
+        if (
+            not os.path.exists(
+                owspcons.FileLocations.
+                OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE
+            )
+        ):
+            _on_separate_h = True
+
+        if _on_separate_h:
+            self.dialog.note(
+                text=_(
+                    "\n"
+                    "ATTENTION\n"
+                    "\n"
+                    "Manual actions are required on the engine host and on "
+                    "this host\n in order to enroll certs for this host "
+                    "and configure the engine about it.\n"
+                    "Please execute this command on the engine host: \n"
+                    "engine-config -s WebSocketProxy={fqdn}:{port}\n"
+                    "\n"
+                    "Than, still on the engine host: \n"
+                    "/usr/share/ovirt-engine/bin/pki-enroll-pkcs12.sh \\\n"
+                    " --name=websocket-proxy-standalone \\\n"
+                    " --password=<password> \\\n"
+                    " --subject=\"/C=<country>/O=<organization>/CN={fqdn}\"\n"
+                    "\n"
+                    "Substitute <country>, <organization> to suite your "
+                    "environment\n(i.e. the values must match values in the "
+                    "certificate authority of your engine), <password> with "
+                    "a password of you choice\n"
+                    "\n"
+                    "Than copy /etc/pki/ovirt-engine/keys/"
+                    "websocket-proxy-standalone.p12\n"
+                    "from the engine host to this host at "
+                    "{wsp_store}\n"
+                    "And copy /etc/pki/ovirt-engine/certs/engine.cer\n"
+                    "from the engine host to this host at "
+                    "{engine_cer}\n"
+                    "\n"
+                    "Than, at last, on this host:\n"
+                    "openssl pkcs12 -in {wsp_store} -nokeys -out {wsp_cert}\n"
+                    "openssl pkcs12 -in {wsp_store} -nocerts -nodes "
+                    "-out {wsp_keycert}\n"
+                    "using the password you provided before on "
+                    "the engine host\n"
+                    "\n"
+                ).format(
+                    fqdn=self.environment[osetupcons.ConfigEnv.FQDN],
+                    port=self.environment[
+                        owspcons.ConfigEnv.WEBSOCKET_PROXY_PORT
+                    ],
+                    wsp_store=self.environment[
+                        owspcons.FileLocations.
+                        OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_STORE
+                    ],
+                    wsp_cert=self.environment[
+                        owspcons.FileLocations.
+                        OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_CERT
+                    ],
+                    wsp_key=self.environment[
+                        owspcons.FileLocations.
+                        OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_KEY
+                    ],
+                    engine_cer=self.environment[
+                        owspcons.FileLocations.OVIRT_ENGINE_PKI_ENGINE_CERT
+                    ]
                 ),
             )
-        )
-
-        rc, stdout, stderr = self.execute(
-            args=(
-                oenginecons.FileLocations.OVIRT_ENGINE_PKI_PKCS12_EXTRACT,
-                '--name=websocket-proxy',
-                '--passin=%s' % self.environment[
-                    oenginecons.PKIEnv.STORE_PASS
-                ],
-                '--key=-',
-            ),
-            logStreams=False,
-        )
-
-        self.environment[otopicons.CoreEnv.MAIN_TRANSACTION].append(
-            filetransaction.FileTransaction(
-                oenginecons.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=(
-                    oenginecons.FileLocations.
+                    owspcons.FileLocations.
                     OVIRT_ENGINE_WEBSOCKET_PROXY_CONFIG_SETUP
                 ),
                 content=(
@@ -233,18 +244,18 @@
                     "SSL_ONLY=True\n"
                 ).format(
                     port=self.environment[
-                        oenginecons.ConfigEnv.WEBSOCKET_PROXY_PORT
+                        owspcons.ConfigEnv.WEBSOCKET_PROXY_PORT
                     ],
                     certificate=(
-                        oenginecons.FileLocations.
+                        owspcons.FileLocations.
                         OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_CERT
                     ),
                     key=(
-                        oenginecons.FileLocations.
+                        owspcons.FileLocations.
                         OVIRT_ENGINE_PKI_WEBSOCKET_PROXY_KEY
                     ),
                     engine_cert=(
-                        oenginecons.FileLocations.
+                        owspcons.FileLocations.
                         OVIRT_ENGINE_PKI_ENGINE_CERT
                     ),
                 ),
@@ -268,11 +279,11 @@
     def _closeup(self):
         for state in (False, True):
             self.services.state(
-                name=oenginecons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
+                name=owspcons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
                 state=state,
             )
         self.services.startup(
-            name=oenginecons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
+            name=owspcons.Const.WEBSOCKET_PROXY_SERVICE_NAME,
             state=True,
         )
 


-- 
To view, visit http://gerrit.ovirt.org/28534
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifceddd5aa44a77f67a3b6b30c6678d9a3b485f9c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Simone Tiraboschi <stira...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to