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