IBMi VM depends on tagged io, ipl source and keylock position to determine PowerOn mode. During deploying an new IBMi VM, tagged io, IPL source and keylock position must be set. This change set will add a new task in spawn flow to set those required attributes for IBMi. Change-Id: Idd5a305ff9aa6de11920fbc61099a10a0b2df748
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
# Copyright 2015 IBM Corp.
|
|
#
|
|
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
|
|
"""Utilities related to glance image management for the PowerVM driver."""
|
|
|
|
from nova import utils
|
|
|
|
|
|
class OSDistro(object):
|
|
"""Mirror of image os distro.Enum."""
|
|
AIX = 'aix'
|
|
RHEL = 'rhel'
|
|
OS400 = 'ibmi'
|
|
SLES = 'sles'
|
|
UBUNTU = 'ubuntu'
|
|
UNKNOWN = 'Unknown'
|
|
ALL_VALUES = (AIX, RHEL, OS400, SLES, UBUNTU, UNKNOWN)
|
|
|
|
|
|
def stream_blockdev_to_glance(context, image_api, image_id, metadata, devpath):
|
|
"""Stream the entire contents of a block device to a glance image.
|
|
|
|
:param context: Nova security context
|
|
:param image_api: Handle to the glance image API.
|
|
:param image_id: UUID of the prepared glance image.
|
|
:param metadata: Dictionary of metadata for the image.
|
|
:param devpath: String path to device file of block device to be uploaded,
|
|
e.g. "/dev/sde".
|
|
"""
|
|
# Make the device file owned by the current user for the duration of the
|
|
# operation.
|
|
with utils.temporary_chown(devpath), open(devpath, 'rb') as stream:
|
|
# Stream it. This is synchronous.
|
|
image_api.update(context, image_id, metadata, stream)
|
|
|
|
|
|
def snapshot_metadata(context, image_api, image_id, instance):
|
|
"""Generate a metadata dictionary for an instance snapshot.
|
|
|
|
:param context: Nova security context
|
|
:param image_api: Handle to the glance image API.
|
|
:param image_id: UUID of the prepared glance image.
|
|
:param instance: The Nova instance whose disk is to be snapshotted.
|
|
:return: A dict of metadata suitable for image_api.upload.
|
|
"""
|
|
image = image_api.get(context, image_id)
|
|
metadata = {
|
|
'name': image['name'],
|
|
'is_public': False,
|
|
'status': 'active',
|
|
'disk_format': 'raw',
|
|
'container_format': 'bare',
|
|
'properties': {
|
|
'image_location': 'snapshot',
|
|
'image_state': 'available',
|
|
'owner_id': instance.project_id,
|
|
}
|
|
}
|
|
return metadata
|