Lev Veyde has uploaded a new change for review.

Change subject: packaging: setup: Add ISO and VFD uploading plugin
......................................................................

packaging: setup: Add ISO and VFD uploading plugin

Change-Id: I34b5c4ab5a16bf56c4b77b40bb76080d9420eede
Signed-off-by: Lev Veyde <lve...@redhat.com>
Bug-Url: https://bugzilla.redhat.com/1026933
---
M packaging/setup/ovirt_engine_setup/constants.py
M packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/__init__.py
A packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/image_upload.py
3 files changed, 180 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/34760/1

diff --git a/packaging/setup/ovirt_engine_setup/constants.py 
b/packaging/setup/ovirt_engine_setup/constants.py
index 47d6efb..b25182e 100644
--- a/packaging/setup/ovirt_engine_setup/constants.py
+++ b/packaging/setup/ovirt_engine_setup/constants.py
@@ -157,9 +157,15 @@
         DATADIR,
         'virtio-win',
     )
+
     RHEV_GUEST_TOOLS_DIR = os.path.join(
         DATADIR,
         'rhev-guest-tools-iso',
+    )
+
+    OVIRT_GUEST_TOOLS_DIR = os.path.join(
+        DATADIR,
+        'ovirt-guest-tools-iso',
     )
 
     OSINFO_LEGACY_SYSPREP = os.path.join(
@@ -424,6 +430,8 @@
     def REMOTE_ENGINE_HOST_ROOT_PASSWORD(self):
         return 'OVESETUP_CONFIG/remoteEngineHostRootPassword'
 
+    ISO_PATHS_TO_UPLOAD = 'isoPathsToUpload'
+
 
 @util.export
 @util.codegen
diff --git 
a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/__init__.py 
b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/__init__.py
index d1eb2f1..4b9a138 100644
--- a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/__init__.py
+++ b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/__init__.py
@@ -27,6 +27,7 @@
 from . import nfs
 from . import exportfs
 from . import selinux
+from . import image_upload
 
 
 @util.export
@@ -36,5 +37,6 @@
     nfs.Plugin(context=context)
     exportfs.Plugin(context=context)
     selinux.Plugin(context=context)
+    image_upload.Plugin(context=context)
 
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git 
a/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/image_upload.py
 
b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/image_upload.py
new file mode 100644
index 0000000..9b3323e
--- /dev/null
+++ 
b/packaging/setup/plugins/ovirt-engine-setup/ovirt-engine/system/image_upload.py
@@ -0,0 +1,170 @@
+#
+# image_upload plugin -- 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.
+#
+
+
+"""
+ISO image uploader plugin.
+"""
+
+
+import datetime
+import os
+import shutil
+import gettext
+_ = lambda m: gettext.dgettext(message=m, domain='ovirt-engine-setup')
+
+
+from otopi import util
+from otopi import plugin
+
+
+from ovirt_engine_setup import util as osetuputil
+from ovirt_engine_setup import constants as osetupcons
+from ovirt_engine_setup.engine import constants as oenginecons
+from ovirt_engine_setup.engine_common import constants as oengcommcons
+
+
+@util.export
+class Plugin(plugin.PluginBase):
+    """
+    ISO image uploader 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.ISO_PATHS_TO_UPLOAD, 
[])
+
+    @plugin.event(
+        stage=plugin.Stages.STAGE_SETUP,
+    )
+    def _setup(self):
+        self.environment[osetupcons.ConfigEnv.ISO_PATHS_TO_UPLOAD] = [
+            os.path.join(
+                osetupcons.FileLocations.VIRTIO_WIN_DIR,
+                'virtio-win_x86.vfd',
+            ),
+            os.path.join(
+                osetupcons.FileLocations.VIRTIO_WIN_DIR,
+                'virtio-win_amd64.vfd',
+            ),
+            os.path.join(
+                osetupcons.FileLocations.VIRTIO_WIN_DIR,
+                'virtio-win.iso',
+            ),
+            os.path.join(
+                osetupcons.FileLocations.OVIRT_GUEST_TOOLS_DIR,
+                'ovirt-tools-setup.iso',
+            ),
+       ]
+
+    @plugin.event(
+        stage=plugin.Stages.STAGE_VALIDATION,
+        condition=lambda self: (
+            not self.environment[
+                osetupcons.CoreEnv.DEVELOPER_MODE
+            ] and
+            self.environment[
+                oenginecons.EngineDBEnv.NEW_DATABASE
+            ] and
+            self.environment[
+                oenginecons.SystemEnv.NFS_CONFIG_ENABLED
+            ]
+        ),
+    )
+    def _validation(self):
+        for filename in 
self.environment[osetupcons.ConfigEnv.ISO_PATHS_TO_UPLOAD]:
+            if os.path.exists(filename):
+                self._enabled = True
+
+    @plugin.event(
+        stage=plugin.Stages.STAGE_MISC,
+        condition=lambda self: self._enabled,
+        after=(
+            oenginecons.Stages.CONFIG_ISO_DOMAIN_AVAILABLE,
+        ),
+    )
+    def _misc(self):
+        """
+        Load files (iso, vfd) from existing rpms to the NFS ISO domain
+        TODO: use engine-iso-uploader when it will support local destinations
+        """
+        uninstall_files = []
+        self.environment[
+            osetupcons.CoreEnv.REGISTER_UNINSTALL_GROUPS
+        ].createGroup(
+            group='iso_images',
+            description='Uploaded ISO images',
+            optional=True
+        ).addFiles(
+            group='iso_images',
+            fileList=uninstall_files,
+        )
+
+        targetDir = self.environment[
+            oenginecons.ConfigEnv.ISO_DOMAIN_STORAGE_DIR
+        ]
+
+        # Iterate the list and copy all the files.
+        for filename in 
self.environment[osetupcons.ConfigEnv.ISO_PATHS_TO_UPLOAD]:
+            if os.path.exists(filename):
+                try:
+                    targetFile = os.path.join(
+                        targetDir,
+                        os.path.basename(filename)
+                    )
+                    if os.path.exists(targetFile):
+                        shutil.move(
+                            targetFile,
+                            '%s.%s' % (
+                                targetFile,
+                                datetime.datetime.now().strftime(
+                                    '%Y%m%d%H%M%S'
+                                )
+                            )
+                        )
+                    shutil.copyfile(filename, targetFile)
+                    uninstall_files.append(targetFile)
+                    os.chmod(targetFile, 0o644)
+                    os.chown(
+                        targetFile,
+                        osetuputil.getUid(
+                            self.environment[oengcommcons.SystemEnv.USER_VDSM]
+                        ),
+                        osetuputil.getGid(
+                            self.environment[oengcommcons.SystemEnv.GROUP_KVM]
+                        )
+                    )
+                except (OSError, shutil.Error) as e:
+                    self.logger.warning(
+                        _(
+                            "Cannot copy '{filename}' to iso domain "
+                            "'{directory}', error: {error}"
+                        ).format(
+                            filename=filename,
+                            directory=targetDir,
+                            error=e,
+                        )
+                    )
+
+
+# vim: expandtab tabstop=4 shiftwidth=4


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

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

Reply via email to