components/openstack/nova/files/solariszones/driver.py
author Sean Wilcox <sean.wilcox@oracle.com>
Tue, 09 Feb 2016 16:26:27 -0800
branchs11u3-sru
changeset 5430 b6b088be89d5
parent 5429 1ae4cfbadda9
child 5432 e6a5784e62c3
permissions -rw-r--r--
18595100 nova resize does not work 22675628 problem in SERVICE/NOVA
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     1
# Copyright 2011 Justin Santa Barbara
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     2
# All Rights Reserved.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     3
#
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
     4
# Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     5
#
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     6
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     7
#    not use this file except in compliance with the License. You may obtain
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     8
#    a copy of the License at
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     9
#
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    10
#         http://www.apache.org/licenses/LICENSE-2.0
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    11
#
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    12
#    Unless required by applicable law or agreed to in writing, software
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    13
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    14
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    15
#    License for the specific language governing permissions and limitations
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    16
#    under the License.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    17
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    18
"""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    19
Driver for Solaris Zones (nee Containers):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    20
"""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    21
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    22
import glob
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    23
import os
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    24
import platform
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    25
import shutil
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    26
import tempfile
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    27
import uuid
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    28
4679
a5bb9ac1f999 21434410 Nova zones driver should use specific version of kstat RAD module
david.comay@oracle.com
parents: 4645
diff changeset
    29
import rad.bindings.com.oracle.solaris.rad.kstat_1 as kstat
a5bb9ac1f999 21434410 Nova zones driver should use specific version of kstat RAD module
david.comay@oracle.com
parents: 4645
diff changeset
    30
import rad.bindings.com.oracle.solaris.rad.zonemgr_1 as zonemgr
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    31
import rad.client
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    32
import rad.connect
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    33
from solaris_install.archive.checkpoints import InstantiateUnifiedArchive
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    34
from solaris_install.archive import LOGFILE as ARCHIVE_LOGFILE
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    35
from solaris_install.archive import UnifiedArchive
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    36
from solaris_install.engine import InstallEngine
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
    37
from solaris_install.target.size import Size
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    38
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
    39
from cinderclient import exceptions as cinder_exception
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    40
from eventlet import greenthread
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    41
from lxml import etree
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
    42
from oslo_config import cfg
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    43
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    44
from nova.compute import power_state
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    45
from nova.compute import task_states
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
    46
from nova.compute import vm_states
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
    47
from nova.console import type as ctype
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    48
from nova import conductor
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    49
from nova import context as nova_context
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    50
from nova import exception
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
    51
from nova.i18n import _
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    52
from nova.image import glance
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
    53
from nova.network import neutronv2
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
    54
from nova import objects
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
    55
from nova.objects import flavor as flavor_obj
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
    56
from nova.openstack.common import excutils
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    57
from nova.openstack.common import fileutils
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    58
from nova.openstack.common import jsonutils
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    59
from nova.openstack.common import log as logging
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
    60
from nova.openstack.common import loopingcall
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
    61
from nova.openstack.common import processutils
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
    62
from nova.openstack.common import strutils
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    63
from nova import utils
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    64
from nova.virt import driver
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    65
from nova.virt import event as virtevent
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    66
from nova.virt import images
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    67
from nova.virt.solariszones import sysconfig
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    68
from nova import volume
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
    69
from nova.volume.cinder import API
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
    70
from nova.volume.cinder import cinderclient
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
    71
from nova.volume.cinder import get_cinder_client_version
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
    72
from nova.volume.cinder import translate_volume_exception
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
    73
from nova.volume.cinder import _untranslate_volume_summary_view
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    74
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    75
solariszones_opts = [
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    76
    cfg.StrOpt('glancecache_dirname',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    77
               default='$state_path/images',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    78
               help='Default path to Glance cache for Solaris Zones.'),
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
    79
    cfg.StrOpt('live_migration_cipher',
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
    80
               help='Cipher to use for encryption of memory traffic during '
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
    81
                    'live migration. If not specified, a common encryption '
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
    82
                    'algorithm will be negotiated. Options include: none or '
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
    83
                    'the name of a supported OpenSSL cipher algorithm.'),
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    84
    cfg.StrOpt('solariszones_snapshots_directory',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    85
               default='$instances_path/snapshots',
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
    86
               help='Location to store snapshots before uploading them to the '
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
    87
                    'Glance image service.'),
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    88
]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    89
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    90
CONF = cfg.CONF
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    91
CONF.register_opts(solariszones_opts)
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
    92
CONF.import_opt('vncserver_proxyclient_address', 'nova.vnc')
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    93
LOG = logging.getLogger(__name__)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    94
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    95
# These should match the strings returned by the zone_state_str()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    96
# function in the (private) libzonecfg library. These values are in turn
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    97
# returned in the 'state' string of the Solaris Zones' RAD interface by
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    98
# the zonemgr(3RAD) provider.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    99
ZONE_STATE_CONFIGURED = 'configured'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   100
ZONE_STATE_INCOMPLETE = 'incomplete'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   101
ZONE_STATE_UNAVAILABLE = 'unavailable'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   102
ZONE_STATE_INSTALLED = 'installed'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   103
ZONE_STATE_READY = 'ready'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   104
ZONE_STATE_RUNNING = 'running'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   105
ZONE_STATE_SHUTTING_DOWN = 'shutting_down'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   106
ZONE_STATE_DOWN = 'down'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   107
ZONE_STATE_MOUNTED = 'mounted'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   108
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   109
# Mapping between zone state and Nova power_state.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   110
SOLARISZONES_POWER_STATE = {
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   111
    ZONE_STATE_CONFIGURED:      power_state.NOSTATE,
3200
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
   112
    ZONE_STATE_INCOMPLETE:      power_state.NOSTATE,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   113
    ZONE_STATE_UNAVAILABLE:     power_state.NOSTATE,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   114
    ZONE_STATE_INSTALLED:       power_state.SHUTDOWN,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   115
    ZONE_STATE_READY:           power_state.RUNNING,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   116
    ZONE_STATE_RUNNING:         power_state.RUNNING,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   117
    ZONE_STATE_SHUTTING_DOWN:   power_state.RUNNING,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   118
    ZONE_STATE_DOWN:            power_state.RUNNING,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   119
    ZONE_STATE_MOUNTED:         power_state.NOSTATE
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   120
}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   121
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   122
# Solaris Zones brands as defined in brands(5).
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   123
ZONE_BRAND_LABELED = 'labeled'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   124
ZONE_BRAND_SOLARIS = 'solaris'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   125
ZONE_BRAND_SOLARIS_KZ = 'solaris-kz'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   126
ZONE_BRAND_SOLARIS10 = 'solaris10'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   127
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   128
# Mapping between supported zone brands and the name of the corresponding
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   129
# brand template.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   130
ZONE_BRAND_TEMPLATE = {
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   131
    ZONE_BRAND_SOLARIS:         'SYSdefault',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   132
    ZONE_BRAND_SOLARIS_KZ:      'SYSsolaris-kz',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   133
}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   134
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   135
MAX_CONSOLE_BYTES = 102400
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
   136
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
   137
VNC_CONSOLE_BASE_FMRI = 'svc:/application/openstack/nova/zone-vnc-console'
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
   138
# Required in order to create a zone VNC console SMF service instance
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
   139
VNC_SERVER_PATH = '/usr/bin/vncserver'
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
   140
XTERM_PATH = '/usr/bin/xterm'
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   141
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
   142
# The underlying Solaris Zones framework does not expose a specific
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
   143
# version number, instead relying on feature tests to identify what is
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
   144
# and what is not supported. A HYPERVISOR_VERSION is defined here for
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
   145
# Nova's use but it generally should not be changed unless there is a
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
   146
# incompatible change such as concerning kernel zone live migration.
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
   147
HYPERVISOR_VERSION = '5.11'
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
   148
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   149
ROOTZPOOL_RESOURCE = 'rootzpool'
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   150
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   151
def lookup_resource_property(zone, resource, prop, filter=None):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   152
    """Lookup specified property from specified Solaris Zone resource."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   153
    try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   154
        val = zone.getResourceProperties(zonemgr.Resource(resource, filter),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   155
                                         [prop])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   156
    except rad.client.ObjectError:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   157
        return None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   158
    except Exception:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   159
        raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   160
    return val[0].value if val else None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   161
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   162
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   163
def lookup_resource_property_value(zone, resource, prop, value):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   164
    """Lookup specified property with value from specified Solaris Zone
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   165
    resource. Returns property if matching value is found, else None
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   166
    """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   167
    try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   168
        resources = zone.getResources(zonemgr.Resource(resource))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   169
        for resource in resources:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   170
            for propertee in resource.properties:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   171
                if propertee.name == prop and propertee.value == value:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   172
                    return propertee
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   173
        else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   174
            return None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   175
    except rad.client.ObjectError:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   176
        return None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   177
    except Exception:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   178
        raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   179
5429
1ae4cfbadda9 20867780 Nova should support LZR for block devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5414
diff changeset
   180
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   181
def zonemgr_strerror(ex):
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   182
    """Format the payload from a zonemgr(3RAD) rad.client.ObjectError
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   183
    exception into a sensible error string that can be logged. Newlines
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   184
    are converted to a colon-space string to create a single line.
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   185
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   186
    If the exception was something other than rad.client.ObjectError,
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   187
    just return it as a string.
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   188
    """
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   189
    if not isinstance(ex, rad.client.ObjectError):
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   190
        return str(ex)
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   191
    payload = ex.get_payload()
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   192
    if payload.code == zonemgr.ErrorCode.NONE:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   193
        return str(ex)
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   194
    error = [str(payload.code)]
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   195
    if payload.str is not None and payload.str != '':
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   196
        error.append(payload.str)
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   197
    if payload.stderr is not None and payload.stderr != '':
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   198
        stderr = payload.stderr.rstrip()
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   199
        error.append(stderr.replace('\n', ': '))
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   200
    result = ': '.join(error)
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   201
    return result
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   202
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   203
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   204
class SolarisVolumeAPI(API):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   205
    """ Extending the volume api to support additional cinder sub-commands
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   206
    """
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   207
    @translate_volume_exception
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   208
    def create(self, context, size, name, description, snapshot=None,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   209
               image_id=None, volume_type=None, metadata=None,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   210
               availability_zone=None, source_volume=None):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   211
        """Clone the source volume by calling the cinderclient version of
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   212
        create with a source_volid argument
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   213
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   214
        :param context: the context for the clone
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   215
        :param size: size of the new volume, must be the same as the source
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   216
            volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   217
        :param name: display_name of the new volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   218
        :param description: display_description of the new volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   219
        :param snapshot: Snapshot object
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   220
        :param image_id: image_id to create the volume from
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   221
        :param volume_type: type of volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   222
        :param metadata: Additional metadata for the volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   223
        :param availability_zone: zone:host where the volume is to be created
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   224
        :param source_volume: Volume object
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   225
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   226
        Returns a volume object
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   227
        """
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   228
        if snapshot is not None:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   229
            snapshot_id = snapshot['id']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   230
        else:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   231
            snapshot_id = None
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   232
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   233
        if source_volume is not None:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   234
            source_volid = source_volume['id']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   235
        else:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   236
            source_volid = None
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   237
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   238
        kwargs = dict(snapshot_id=snapshot_id,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   239
                      volume_type=volume_type,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   240
                      user_id=context.user_id,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   241
                      project_id=context.project_id,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   242
                      availability_zone=availability_zone,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   243
                      metadata=metadata,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   244
                      imageRef=image_id,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   245
                      source_volid=source_volid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   246
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   247
        version = get_cinder_client_version(context)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   248
        if version == '1':
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   249
            kwargs['display_name'] = name
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   250
            kwargs['display_description'] = description
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   251
        elif version == '2':
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   252
            kwargs['name'] = name
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   253
            kwargs['description'] = description
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   254
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   255
        try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   256
            item = cinderclient(context).volumes.create(size, **kwargs)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   257
            return _untranslate_volume_summary_view(context, item)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   258
        except cinder_exception.OverLimit:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   259
            raise exception.OverQuota(overs='volumes')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   260
        except cinder_exception.BadRequest as err:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   261
            raise exception.InvalidInput(reason=unicode(err))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   262
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   263
    @translate_volume_exception
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   264
    def update(self, context, volume_id, fields):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   265
        """Update the fields of a volume for example used to rename a volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   266
        via a call to cinderclient
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   267
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   268
        :param context: the context for the update
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   269
        :param volume_id: the id of the volume to update
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   270
        :param fields: a dictionary of of the name/value pairs to update
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   271
        """
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   272
        cinderclient(context).volumes.update(volume_id, **fields)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   273
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   274
    @translate_volume_exception
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   275
    def extend(self, context, volume, newsize):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   276
        """Extend the size of a cinder volume by calling the cinderclient
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   277
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   278
        :param context: the context for the extend
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   279
        :param volume: the volume object to extend
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   280
        :param newsize: the new size of the volume in GB
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   281
        """
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   282
        cinderclient(context).volumes.extend(volume, newsize)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   283
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   284
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   285
class ZoneConfig(object):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   286
    """ZoneConfig - context manager for access zone configurations.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   287
    Automatically opens the configuration for a zone and commits any changes
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   288
    before exiting
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   289
    """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   290
    def __init__(self, zone):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   291
        """zone is a zonemgr object representing either a kernel zone or
5409
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
   292
        non-global zone.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   293
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   294
        self.zone = zone
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   295
        self.editing = False
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   296
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   297
    def __enter__(self):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   298
        """enables the editing of the zone."""
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   299
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   300
            self.zone.editConfig()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   301
            self.editing = True
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   302
            return self
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   303
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   304
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   305
            LOG.error(_("Unable to initialize editing of instance '%s' via "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   306
                        "zonemgr(3RAD): %s") % (self.zone.name, reason))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   307
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   308
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   309
    def __exit__(self, exc_type, exc_val, exc_tb):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   310
        """looks for any kind of exception before exiting.  If one is found,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   311
        cancel any configuration changes and reraise the exception.  If not,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   312
        commit the new configuration.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   313
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   314
        if exc_type is not None and self.editing:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   315
            # We received some kind of exception.  Cancel the config and raise.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   316
            self.zone.cancelConfig()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   317
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   318
        else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   319
            # commit the config
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   320
            try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   321
                self.zone.commitConfig()
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   322
            except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   323
                reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   324
                LOG.error(_("Unable to commit the new configuration for "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   325
                            "instance '%s' via zonemgr(3RAD): %s")
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   326
                          % (self.zone.name, reason))
4645
7e2c683157d6 21307395 nova ZoneConfig class should call cancelConfig when editConfig fails in __exit__
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 4629
diff changeset
   327
7e2c683157d6 21307395 nova ZoneConfig class should call cancelConfig when editConfig fails in __exit__
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 4629
diff changeset
   328
                # Last ditch effort to cleanup.
7e2c683157d6 21307395 nova ZoneConfig class should call cancelConfig when editConfig fails in __exit__
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 4629
diff changeset
   329
                self.zone.cancelConfig()
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   330
                raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   331
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   332
    def setprop(self, resource, prop, value):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   333
        """sets a property for an existing resource OR creates a new resource
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   334
        with the given property(s).
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   335
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   336
        current = lookup_resource_property(self.zone, resource, prop)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   337
        if current is not None and current == value:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   338
            # the value is already set
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   339
            return
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   340
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   341
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   342
            if current is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   343
                self.zone.addResource(zonemgr.Resource(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   344
                    resource, [zonemgr.Property(prop, value)]))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   345
            else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   346
                self.zone.setResourceProperties(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   347
                    zonemgr.Resource(resource),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   348
                    [zonemgr.Property(prop, value)])
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   349
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   350
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   351
            LOG.error(_("Unable to set '%s' property on '%s' resource for "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   352
                        "instance '%s' via zonemgr(3RAD): %s")
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   353
                      % (prop, resource, self.zone.name, reason))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   354
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   355
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   356
    def addresource(self, resource, props=None, ignore_exists=False):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   357
        """creates a new resource with an optional property list, or set the
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   358
        property if the resource exists and ignore_exists is true.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   359
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   360
        :param ignore_exists: If the resource exists, set the property for the
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   361
            resource.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   362
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   363
        if props is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   364
            props = []
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   365
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   366
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   367
            self.zone.addResource(zonemgr.Resource(resource, props))
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   368
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   369
            if isinstance(ex, rad.client.ObjectError):
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   370
                code = ex.get_payload().code
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   371
                if (ignore_exists and
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   372
                        code == zonemgr.ErrorCode.RESOURCE_ALREADY_EXISTS):
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   373
                    self.zone.setResourceProperties(zonemgr.Resource(
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   374
                        resource, None), props)
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   375
                    return
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   376
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   377
            LOG.error(_("Unable to create new resource '%s' for instance '%s'"
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   378
                        "via zonemgr(3RAD): %s")
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   379
                      % (resource, self.zone.name, reason))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   380
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   381
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   382
    def removeresources(self, resource, props=None):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   383
        """removes resources whose properties include the optional property
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   384
        list specified in props.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   385
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   386
        if props is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   387
            props = []
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   388
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   389
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   390
            self.zone.removeResources(zonemgr.Resource(resource, props))
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   391
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   392
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   393
            LOG.error(_("Unable to remove resource '%s' for instance '%s' via "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   394
                        "zonemgr(3RAD): %s")
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   395
                      % (resource, self.zone.name, reason))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   396
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   397
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   398
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   399
class SolarisZonesDriver(driver.ComputeDriver):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   400
    """Solaris Zones Driver using the zonemgr(3RAD) and kstat(3RAD) providers.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   401
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   402
    The interface to this class talks in terms of 'instances' (Amazon EC2 and
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   403
    internal Nova terminology), by which we mean 'running virtual machine'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   404
    (XenAPI terminology) or domain (Xen or libvirt terminology).
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   405
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   406
    An instance has an ID, which is the identifier chosen by Nova to represent
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   407
    the instance further up the stack.  This is unfortunately also called a
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   408
    'name' elsewhere.  As far as this layer is concerned, 'instance ID' and
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   409
    'instance name' are synonyms.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   410
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   411
    Note that the instance ID or name is not human-readable or
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   412
    customer-controlled -- it's an internal ID chosen by Nova.  At the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   413
    nova.virt layer, instances do not have human-readable names at all -- such
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   414
    things are only known higher up the stack.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   415
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   416
    Most virtualization platforms will also have their own identity schemes,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   417
    to uniquely identify a VM or domain.  These IDs must stay internal to the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   418
    platform-specific layer, and never escape the connection interface.  The
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   419
    platform-specific layer is responsible for keeping track of which instance
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   420
    ID maps to which platform-specific ID, and vice versa.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   421
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   422
    Some methods here take an instance of nova.compute.service.Instance.  This
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   423
    is the data structure used by nova.compute to store details regarding an
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   424
    instance, and pass them into this layer.  This layer is responsible for
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   425
    translating that generic data structure into terms that are specific to the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   426
    virtualization platform.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   427
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   428
    """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   429
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   430
    capabilities = {
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   431
        "has_imagecache": False,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   432
        "supports_recreate": False,
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   433
        }
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   434
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   435
    def __init__(self, virtapi):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   436
        self.virtapi = virtapi
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   437
        self._compute_event_callback = None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   438
        self._conductor_api = conductor.API()
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   439
        self._fc_hbas = None
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   440
        self._fc_wwnns = None
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   441
        self._fc_wwpns = None
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   442
        self._host_stats = {}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   443
        self._initiator = None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   444
        self._install_engine = None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   445
        self._pagesize = os.sysconf('SC_PAGESIZE')
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   446
        self._rad_connection = None
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   447
        self._uname = os.uname()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   448
        self._validated_archives = list()
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   449
        self._volume_api = SolarisVolumeAPI()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   450
        self._rootzpool_suffix = ROOTZPOOL_RESOURCE
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   451
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   452
    @property
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   453
    def rad_connection(self):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   454
        if self._rad_connection is None:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   455
            self._rad_connection = rad.connect.connect_unix()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   456
        else:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   457
            # taken from rad.connect.RadConnection.__repr__ to look for a
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   458
            # closed connection
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   459
            if self._rad_connection._closed is not None:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   460
                # the RAD connection has been lost.  Reconnect to RAD
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   461
                self._rad_connection = rad.connect.connect_unix()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   462
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   463
        return self._rad_connection
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   464
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   465
    def _init_rad(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   466
        """Connect to RAD providers for kernel statistics and Solaris
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   467
        Zones. By connecting to the local rad(1M) service through a
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   468
        UNIX domain socket, kernel statistics can be read via
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   469
        kstat(3RAD) and Solaris Zones can be configured and controlled
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   470
        via zonemgr(3RAD).
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   471
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   472
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   473
        try:
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   474
            self._kstat_control = self.rad_connection.get_object(
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   475
                kstat.Control())
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   476
        except Exception as reason:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   477
            msg = (_('Unable to connect to svc:/system/rad:local: %s')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   478
                   % reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   479
            raise exception.NovaException(msg)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   480
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   481
    def init_host(self, host):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   482
        """Initialize anything that is necessary for the driver to function,
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   483
        including catching up with currently running VM's on the given host.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   484
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   485
        # TODO(Vek): Need to pass context in for access to auth_token
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   486
        self._init_rad()
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   487
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   488
    def cleanup_host(self, host):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   489
        """Clean up anything that is necessary for the driver gracefully stop,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   490
        including ending remote sessions. This is optional.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   491
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   492
        pass
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   493
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   494
    def _get_fc_hbas(self):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   495
        """Get Fibre Channel HBA information."""
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   496
        if self._fc_hbas:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   497
            return self._fc_hbas
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   498
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   499
        out = None
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   500
        try:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   501
            out, err = utils.execute('/usr/sbin/fcinfo', 'hba-port')
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   502
        except processutils.ProcessExecutionError:
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   503
            return []
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   504
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   505
        if out is None:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   506
            raise RuntimeError(_("Cannot find any Fibre Channel HBAs"))
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   507
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   508
        hbas = []
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   509
        hba = {}
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   510
        for line in out.splitlines():
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   511
            line = line.strip()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   512
            # Collect the following hba-port data:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   513
            # 1: Port WWN
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   514
            # 2: State (online|offline)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   515
            # 3: Node WWN
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   516
            if line.startswith("HBA Port WWN:"):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   517
                # New HBA port entry
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   518
                hba = {}
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   519
                wwpn = line.split()[-1]
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   520
                hba['port_name'] = wwpn
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   521
                continue
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   522
            elif line.startswith("Port Mode:"):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   523
                mode = line.split()[-1]
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   524
                # Skip Target mode ports
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   525
                if mode != 'Initiator':
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   526
                    break
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   527
            elif line.startswith("State:"):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   528
                state = line.split()[-1]
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   529
                hba['port_state'] = state
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   530
                continue
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   531
            elif line.startswith("Node WWN:"):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   532
                wwnn = line.split()[-1]
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   533
                hba['node_name'] = wwnn
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   534
                continue
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   535
            if len(hba) == 3:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   536
                hbas.append(hba)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   537
                hba = {}
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   538
        self._fc_hbas = hbas
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   539
        return self._fc_hbas
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   540
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   541
    def _get_fc_wwnns(self):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   542
        """Get Fibre Channel WWNNs from the system, if any."""
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   543
        hbas = self._get_fc_hbas()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   544
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   545
        wwnns = []
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   546
        for hba in hbas:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   547
            if hba['port_state'] == 'online':
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   548
                wwnn = hba['node_name']
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   549
                wwnns.append(wwnn)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   550
        return wwnns
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   551
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   552
    def _get_fc_wwpns(self):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   553
        """Get Fibre Channel WWPNs from the system, if any."""
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   554
        hbas = self._get_fc_hbas()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   555
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   556
        wwpns = []
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   557
        for hba in hbas:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   558
            if hba['port_state'] == 'online':
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   559
                wwpn = hba['port_name']
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   560
                wwpns.append(wwpn)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   561
        return wwpns
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   562
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   563
    def _get_iscsi_initiator(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   564
        """ Return the iSCSI initiator node name IQN for this host """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   565
        out, err = utils.execute('/usr/sbin/iscsiadm', 'list',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   566
                                 'initiator-node')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   567
        # Sample first line of command output:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   568
        # Initiator node name: iqn.1986-03.com.sun:01:e00000000000.4f757217
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   569
        initiator_name_line = out.splitlines()[0]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   570
        initiator_iqn = initiator_name_line.rsplit(' ', 1)[1]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   571
        return initiator_iqn
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   572
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   573
    def _get_zone_auto_install_state(self, zone_name):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   574
        """Returns the SMF state of the auto-installer service,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   575
           or None if auto-installer service is non-existent
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   576
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   577
        try:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   578
            out, err = utils.execute('/usr/sbin/zlogin', '-S', zone_name,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   579
                                     '/usr/bin/svcs', '-H', '-o', 'state',
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   580
                                     'auto-installer:default')
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   581
            return out.strip()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   582
        except processutils.ProcessExecutionError as err:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   583
            # No auto-installer instance most likely.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   584
            return None
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   585
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   586
    def _get_zone_by_name(self, name):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   587
        """Return a Solaris Zones object via RAD by name."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   588
        try:
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   589
            zone = self.rad_connection.get_object(
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   590
                zonemgr.Zone(), rad.client.ADRGlobPattern({'name': name}))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   591
        except rad.client.NotFoundError:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   592
            return None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   593
        except Exception:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   594
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   595
        return zone
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   596
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   597
    def _get_state(self, zone):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   598
        """Return the running state, one of the power_state codes."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   599
        return SOLARISZONES_POWER_STATE[zone.state]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   600
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   601
    def _pages_to_kb(self, pages):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   602
        """Convert a number of pages of memory into a total size in KBytes."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   603
        return (pages * self._pagesize) / 1024
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   604
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   605
    def _get_max_mem(self, zone):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   606
        """Return the maximum memory in KBytes allowed."""
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   607
        if zone.brand == ZONE_BRAND_SOLARIS:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   608
            mem_resource = 'swap'
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   609
        else:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   610
            mem_resource = 'physical'
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   611
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
   612
        max_mem = lookup_resource_property(zone, 'capped-memory', mem_resource)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   613
        if max_mem is not None:
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   614
            return strutils.string_to_bytes("%sB" % max_mem) / 1024
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   615
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   616
        # If physical property in capped-memory doesn't exist, this may
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   617
        # represent a non-global zone so just return the system's total
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   618
        # memory.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   619
        return self._pages_to_kb(os.sysconf('SC_PHYS_PAGES'))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   620
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   621
    def _get_mem(self, zone):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   622
        """Return the memory in KBytes used by the domain."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   623
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   624
        # There isn't any way of determining this from the hypervisor
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   625
        # perspective in Solaris, so just return the _get_max_mem() value
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   626
        # for now.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   627
        return self._get_max_mem(zone)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   628
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   629
    def _get_num_cpu(self, zone):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   630
        """Return the number of virtual CPUs for the domain.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   631
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   632
        In the case of kernel zones, the number of virtual CPUs a zone
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   633
        ends up with depends on whether or not there were 'virtual-cpu'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   634
        or 'dedicated-cpu' resources in the configuration or whether
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   635
        there was an assigned pool in the configuration. This algorithm
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   636
        attempts to emulate what the virtual platform code does to
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   637
        determine a number of virtual CPUs to use.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   638
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   639
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   640
        # If a 'virtual-cpu' resource exists, use the minimum number of
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   641
        # CPUs defined there.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   642
        ncpus = lookup_resource_property(zone, 'virtual-cpu', 'ncpus')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   643
        if ncpus is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   644
            min = ncpus.split('-', 1)[0]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   645
            if min.isdigit():
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   646
                return int(min)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   647
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   648
        # Otherwise if a 'dedicated-cpu' resource exists, use the maximum
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   649
        # number of CPUs defined there.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   650
        ncpus = lookup_resource_property(zone, 'dedicated-cpu', 'ncpus')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   651
        if ncpus is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   652
            max = ncpus.split('-', 1)[-1]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   653
            if max.isdigit():
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   654
                return int(max)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   655
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   656
        # Finally if neither resource exists but the zone was assigned a
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   657
        # pool in the configuration, the number of CPUs would be the size
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   658
        # of the processor set. Currently there's no way of easily
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   659
        # determining this so use the system's notion of the total number
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   660
        # of online CPUs.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   661
        return os.sysconf('SC_NPROCESSORS_ONLN')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   662
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   663
    def _get_kstat_by_name(self, kstat_class, module, instance, name):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   664
        """Return Kstat snapshot data via RAD as a dictionary."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   665
        pattern = {
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   666
            'class':    kstat_class,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   667
            'module':   module,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   668
            'instance': instance,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   669
            'name':     name
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   670
        }
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   671
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   672
            self._kstat_control.update()
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   673
            kstat_object = self.rad_connection.get_object(
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   674
                kstat.Kstat(), rad.client.ADRGlobPattern(pattern))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   675
        except Exception as reason:
3200
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
   676
            LOG.info(_("Unable to retrieve kstat object '%s:%s:%s' of class "
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
   677
                       "'%s' via kstat(3RAD): %s")
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
   678
                     % (module, instance, name, kstat_class, reason))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   679
            return None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   680
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   681
        kstat_data = {}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   682
        for named in kstat_object.fresh_snapshot().data.NAMED:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   683
            kstat_data[named.name] = getattr(named.value,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   684
                                             str(named.value.discriminant))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   685
        return kstat_data
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   686
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   687
    def _get_cpu_time(self, zone):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   688
        """Return the CPU time used in nanoseconds."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   689
        if zone.id == -1:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   690
            return 0
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   691
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   692
        kstat_data = self._get_kstat_by_name('zones', 'cpu', str(zone.id),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   693
                                             'sys_zone_aggr')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   694
        if kstat_data is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   695
            return 0
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   696
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   697
        return kstat_data['cpu_nsec_kernel'] + kstat_data['cpu_nsec_user']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   698
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   699
    def get_info(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   700
        """Get the current status of an instance, by name (not ID!)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   701
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   702
        :param instance: nova.objects.instance.Instance object
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   703
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   704
        Returns a dict containing:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   705
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   706
        :state:           the running state, one of the power_state codes
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   707
        :max_mem:         (int) the maximum memory in KBytes allowed
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   708
        :mem:             (int) the memory in KBytes used by the domain
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   709
        :num_cpu:         (int) the number of virtual CPUs for the domain
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   710
        :cpu_time:        (int) the CPU time used in nanoseconds
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   711
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   712
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   713
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   714
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   715
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   716
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   717
        return {
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   718
            'state':    self._get_state(zone),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   719
            'max_mem':  self._get_max_mem(zone),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   720
            'mem':      self._get_mem(zone),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   721
            'num_cpu':  self._get_num_cpu(zone),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   722
            'cpu_time': self._get_cpu_time(zone)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   723
        }
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   724
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   725
    def get_num_instances(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   726
        """Return the total number of virtual machines.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   727
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   728
        Return the number of virtual machines that the hypervisor knows
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   729
        about.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   730
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   731
        .. note::
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   732
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   733
            This implementation works for all drivers, but it is
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   734
            not particularly efficient. Maintainers of the virt drivers are
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   735
            encouraged to override this method with something more
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   736
            efficient.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   737
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   738
        return len(self.list_instances())
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   739
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   740
    def instance_exists(self, instance):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   741
        """Checks existence of an instance on the host.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   742
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   743
        :param instance: The instance to lookup
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   744
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   745
        Returns True if an instance with the supplied ID exists on
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   746
        the host, False otherwise.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   747
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   748
        .. note::
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   749
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   750
            This implementation works for all drivers, but it is
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   751
            not particularly efficient. Maintainers of the virt drivers are
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   752
            encouraged to override this method with something more
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   753
            efficient.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   754
        """
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   755
        try:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   756
            return instance.uuid in self.list_instance_uuids()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   757
        except NotImplementedError:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   758
            return instance.name in self.list_instances()
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   759
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   760
    def estimate_instance_overhead(self, instance_info):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   761
        """Estimate the virtualization overhead required to build an instance
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   762
        of the given flavor.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   763
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   764
        Defaults to zero, drivers should override if per-instance overhead
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   765
        calculations are desired.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   766
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   767
        :param instance_info: Instance/flavor to calculate overhead for.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   768
        :returns: Dict of estimated overhead values.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   769
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   770
        return {'memory_mb': 0}
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   771
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   772
    def _get_list_zone_object(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   773
        """Return a list of all Solaris Zones objects via RAD."""
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   774
        return self.rad_connection.list_objects(zonemgr.Zone())
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   775
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   776
    def list_instances(self):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   777
        """Return the names of all the instances known to the virtualization
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   778
        layer, as a list.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   779
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   780
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   781
        instances_list = []
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   782
        for zone in self._get_list_zone_object():
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   783
            instances_list.append(self.rad_connection.get_object(zone).name)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   784
        return instances_list
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   785
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   786
    def list_instance_uuids(self):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   787
        """Return the UUIDS of all the instances known to the virtualization
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   788
        layer, as a list.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   789
        """
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   790
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   791
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   792
    def rebuild(self, context, instance, image_meta, injected_files,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   793
                admin_password, bdms, detach_block_devices,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   794
                attach_block_devices, network_info=None,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   795
                recreate=False, block_device_info=None,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   796
                preserve_ephemeral=False):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   797
        """Destroy and re-make this instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   798
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   799
        A 'rebuild' effectively purges all existing data from the system and
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   800
        remakes the VM with given 'metadata' and 'personalities'.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   801
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   802
        This base class method shuts down the VM, detaches all block devices,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   803
        then spins up the new VM afterwards. It may be overridden by
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   804
        hypervisors that need to - e.g. for optimisations, or when the 'VM'
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   805
        is actually proxied and needs to be held across the shutdown + spin
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   806
        up steps.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   807
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   808
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   809
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   810
                         This function should use the data there to guide
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   811
                         the creation of the new instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   812
        :param image_meta: image object returned by nova.image.glance that
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   813
                           defines the image from which to boot this instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   814
        :param injected_files: User files to inject into instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   815
        :param admin_password: Administrator password to set in instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   816
        :param bdms: block-device-mappings to use for rebuild
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   817
        :param detach_block_devices: function to detach block devices. See
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   818
            nova.compute.manager.ComputeManager:_rebuild_default_impl for
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   819
            usage.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   820
        :param attach_block_devices: function to attach block devices. See
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   821
            nova.compute.manager.ComputeManager:_rebuild_default_impl for
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   822
            usage.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   823
        :param network_info:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   824
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   825
        :param recreate: True if the instance is being recreated on a new
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   826
            hypervisor - all the cleanup of old state is skipped.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   827
        :param block_device_info: Information about block devices to be
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   828
                                  attached to the instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   829
        :param preserve_ephemeral: True if the default ephemeral storage
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
   830
                                   partition must be preserved on rebuild
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   831
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   832
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   833
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
   834
    def _get_extra_specs(self, instance):
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
   835
        """Retrieve extra_specs of an instance."""
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
   836
        flavor = flavor_obj.Flavor.get_by_id(
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
   837
            nova_context.get_admin_context(read_deleted='yes'),
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
   838
            instance['instance_type_id'])
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
   839
        return flavor['extra_specs'].copy()
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
   840
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   841
    def _fetch_image(self, context, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   842
        """Fetch an image using Glance given the instance's image_ref."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   843
        glancecache_dirname = CONF.glancecache_dirname
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   844
        fileutils.ensure_tree(glancecache_dirname)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   845
        image = ''.join([glancecache_dirname, '/', instance['image_ref']])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   846
        if os.path.exists(image):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   847
            LOG.debug(_("Using existing, cached Glance image: id %s")
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   848
                      % instance['image_ref'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   849
            return image
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   850
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   851
        LOG.debug(_("Fetching new Glance image: id %s")
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   852
                  % instance['image_ref'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   853
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   854
            images.fetch(context, instance['image_ref'], image,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   855
                         instance['user_id'], instance['project_id'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   856
        except Exception as reason:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   857
            LOG.error(_("Unable to fetch Glance image: id %s: %s")
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   858
                      % (instance['image_ref'], reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   859
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   860
        return image
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   861
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   862
    def _validate_image(self, image, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   863
        """Validate a glance image for compatibility with the instance"""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   864
        # Skip if the image was already checked and confirmed as valid
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   865
        if instance['image_ref'] in self._validated_archives:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   866
            return
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   867
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   868
        if self._install_engine is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   869
            self._install_engine = InstallEngine(ARCHIVE_LOGFILE)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   870
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   871
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   872
            init_ua_cp = InstantiateUnifiedArchive(instance['image_ref'],
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   873
                                                   image)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   874
            init_ua_cp.execute()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   875
        except Exception:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   876
            reason = (_("Image query failed. Possibly invalid or corrupt. "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   877
                        "Log file location: %s:%s")
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   878
                      % (self._uname[1], ARCHIVE_LOGFILE))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   879
            LOG.error(reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   880
            raise exception.ImageUnacceptable(image_id=instance['image_ref'],
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   881
                                              reason=reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   882
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   883
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   884
            ua = self._install_engine.doc.volatile.get_first_child(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   885
                class_type=UnifiedArchive)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   886
            # Validate the image at this point to ensure:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   887
            # - contains one deployable system
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   888
            deployables = ua.archive_objects
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   889
            if len(deployables) != 1:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   890
                reason = (_('Image must contain only 1 deployable system'))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   891
                raise exception.ImageUnacceptable(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   892
                    image_id=instance['image_ref'],
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   893
                    reason=reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   894
            # - matching architecture
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   895
            deployable_arch = deployables[0].system.arch
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   896
            compute_arch = platform.processor()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   897
            if deployable_arch != compute_arch:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   898
                reason = (_('Image architecture "%s" is incompatible with this'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   899
                          'compute host architecture: "%s"')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   900
                          % (deployable_arch, compute_arch))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   901
                raise exception.ImageUnacceptable(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   902
                    image_id=instance['image_ref'],
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   903
                    reason=reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   904
            # - single root pool only
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   905
            streams = deployables[0].zfs_streams
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   906
            stream_pools = set(stream.zpool for stream in streams)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   907
            if len(stream_pools) > 1:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   908
                reason = (_('Image contains more than one zpool: "%s"')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   909
                          % (stream_pools))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   910
                raise exception.ImageUnacceptable(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   911
                    image_id=instance['image_ref'],
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   912
                    reason=reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   913
            # - looks like it's OK
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   914
            self._validated_archives.append(instance['image_ref'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   915
        finally:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   916
            # Clear the reference to the UnifiedArchive object in the engine
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   917
            # data cache to avoid collision with the next checkpoint execution.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   918
            self._install_engine.doc.volatile.delete_children(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   919
                class_type=UnifiedArchive)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   920
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   921
    def _suri_from_volume_info(self, connection_info):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   922
        """Returns a suri(5) formatted string based on connection_info
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   923
        Currently supports local ZFS volume and iSCSI driver types.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   924
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   925
        driver_type = connection_info['driver_volume_type']
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   926
        if driver_type not in ['iscsi', 'fibre_channel', 'local']:
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   927
            raise exception.VolumeDriverNotFound(driver_type=driver_type)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   928
        if driver_type == 'local':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   929
            suri = 'dev:/dev/zvol/dsk/%s' % connection_info['volume_path']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   930
        elif driver_type == 'iscsi':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   931
            data = connection_info['data']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   932
            # suri(5) format:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   933
            #       iscsi://<host>[:<port>]/target.<IQN>,lun.<LUN>
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   934
            # Sample iSCSI connection data values:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   935
            # target_portal: 192.168.1.244:3260
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   936
            # target_iqn: iqn.2010-10.org.openstack:volume-a89c.....
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   937
            # target_lun: 1
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   938
            suri = 'iscsi://%s/target.%s,lun.%d' % (data['target_portal'],
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   939
                                                    data['target_iqn'],
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   940
                                                    data['target_lun'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   941
            # TODO(npower): need to handle CHAP authentication also
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   942
        elif driver_type == 'fibre_channel':
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   943
            data = connection_info['data']
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   944
            target_wwn = data['target_wwn']
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   945
            # Check for multiple target_wwn values in a list
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   946
            if isinstance(target_wwn, list):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   947
                target_wwn = target_wwn[0]
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   948
            # Ensure there's a fibre channel HBA.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   949
            hbas = self._get_fc_hbas()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   950
            if not hbas:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   951
                LOG.error(_("Cannot attach Fibre Channel volume '%s' because "
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   952
                          "no Fibre Channel HBA initiators were found")
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   953
                          % (target_wwn))
3200
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
   954
                raise exception.InvalidVolume(
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
   955
                    reason="No host Fibre Channel initiator found")
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   956
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   957
            target_lun = data['target_lun']
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   958
            # If the volume was exported just a few seconds previously then
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   959
            # it will probably not be visible to the local adapter yet.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   960
            # Invoke 'fcinfo remote-port' on all local HBA ports to trigger
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   961
            # a refresh.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   962
            for wwpn in self._get_fc_wwpns():
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   963
                utils.execute('/usr/sbin/fcinfo', 'remote-port',
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   964
                              '-p', wwpn)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   965
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   966
            # Use suriadm(1M) to generate a Fibre Channel storage URI.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   967
            try:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   968
                out, err = utils.execute('/usr/sbin/suriadm', 'lookup-uri',
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   969
                                         '-p', 'target=naa.%s' % target_wwn,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   970
                                         '-p', 'lun=%s' % target_lun)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   971
            except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   972
                reason = ex.stderr
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   973
                LOG.error(_("Lookup failure of Fibre Channel volume '%s', lun "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
   974
                          "%s: %s") % (target_wwn, target_lun, reason))
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   975
                raise
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   976
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   977
            lines = out.split('\n')
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   978
            # Use the long form SURI on the second output line.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
   979
            suri = lines[1].strip()
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   980
        return suri
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   981
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   982
    def _set_global_properties(self, name, extra_specs, brand):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   983
        """Set Solaris Zone's global properties if supplied via flavor."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   984
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   985
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   986
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   987
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   988
        # TODO(dcomay): Should figure this out via the brands themselves.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   989
        zonecfg_items = [
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   990
            'bootargs',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   991
            'brand',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   992
            'hostid'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   993
        ]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   994
        if brand == ZONE_BRAND_SOLARIS:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   995
            zonecfg_items.extend(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   996
                ['file-mac-profile', 'fs-allowed', 'limitpriv'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   997
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   998
        with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   999
            for key, value in extra_specs.iteritems():
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1000
                # Ignore not-zonecfg-scoped brand properties.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1001
                if not key.startswith('zonecfg:'):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1002
                    continue
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1003
                _scope, prop = key.split(':', 1)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1004
                # Ignore the 'brand' property if present.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1005
                if prop == 'brand':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1006
                    continue
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1007
                # Ignore but warn about unsupported zonecfg-scoped properties.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1008
                if prop not in zonecfg_items:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1009
                    LOG.warning(_("Ignoring unsupported zone property '%s' "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1010
                                  "set on flavor for instance '%s'")
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1011
                                % (prop, name))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1012
                    continue
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1013
                zc.setprop('global', prop, value)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1014
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1015
    def _create_boot_volume(self, context, instance):
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1016
        """Create a (Cinder) volume service backed boot volume"""
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1017
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1018
            vol = self._volume_api.create(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1019
                context,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1020
                instance['root_gb'],
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1021
                instance['display_name'] + "-" + self._rootzpool_suffix,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1022
                "Boot volume for instance '%s' (%s)"
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1023
                % (instance['name'], instance['uuid']))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1024
            # TODO(npower): Polling is what nova/compute/manager also does when
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1025
            # creating a new volume, so we do likewise here.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1026
            while True:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1027
                volume = self._volume_api.get(context, vol['id'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1028
                if volume['status'] != 'creating':
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1029
                    return volume
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1030
                greenthread.sleep(1)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1031
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1032
        except Exception as reason:
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  1033
            LOG.error(_("Unable to create root zpool volume for instance '%s'"
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  1034
                        ": %s") % (instance['name'], reason))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1035
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1036
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1037
    def _connect_boot_volume(self, volume, mountpoint, context, instance):
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1038
        """Connect a (Cinder) volume service backed boot volume"""
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1039
        instance_uuid = instance['uuid']
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  1040
        volume_id = volume['id']
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1041
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1042
        connector = self.get_volume_connector(instance)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1043
        connection_info = self._volume_api.initialize_connection(
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1044
            context, volume_id, connector)
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1045
        connection_info['serial'] = volume_id
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1046
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1047
        # Check connection_info to determine if the provided volume is
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1048
        # local to this compute node. If it is, then don't use it for
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1049
        # Solaris branded zones in order to avoid a known ZFS deadlock issue
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1050
        # when using a zpool within another zpool on the same system.
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1051
        extra_specs = self._get_extra_specs(instance)
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1052
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1053
        if brand == ZONE_BRAND_SOLARIS:
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1054
            driver_type = connection_info['driver_volume_type']
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1055
            if driver_type == 'local':
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1056
                msg = _("Detected 'local' zvol driver volume type "
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1057
                        "from volume service, which should not be "
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1058
                        "used as a boot device for 'solaris' "
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1059
                        "branded zones.")
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1060
                raise exception.InvalidVolume(reason=msg)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1061
            elif driver_type == 'iscsi':
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1062
                # Check for a potential loopback iSCSI situation
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1063
                data = connection_info['data']
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1064
                target_portal = data['target_portal']
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1065
                # Strip off the port number (eg. 127.0.0.1:3260)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1066
                host = target_portal.rsplit(':', 1)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1067
                # Strip any enclosing '[' and ']' brackets for
5409
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1068
                # IPv6 addresses.
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1069
                target_host = host[0].strip('[]')
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1070
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1071
                # Check if target_host is an IP or hostname matching the
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1072
                # connector host or IP, which would mean the provisioned
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1073
                # iSCSI LUN is on the same host as the instance.
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1074
                if target_host in [connector['ip'], connector['host']]:
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1075
                    msg = _("iSCSI connection info from volume "
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1076
                            "service indicates that the target is a "
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1077
                            "local volume, which should not be used "
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1078
                            "as a boot device for 'solaris' branded "
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1079
                            "zones.")
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1080
                    raise exception.InvalidVolume(reason=msg)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1081
            # Assuming that fibre_channel is non-local
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1082
            elif driver_type != 'fibre_channel':
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1083
                # Some other connection type that we don't understand
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1084
                # Let zone use some local fallback instead.
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1085
                msg = _("Unsupported volume driver type '%s' can not be used "
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1086
                        "as a boot device for zones." % driver_type)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1087
                raise exception.InvalidVolume(reason=msg)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1088
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1089
        # Volume looks OK to use. Notify Cinder of the attachment.
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1090
        self._volume_api.attach(context, volume_id, instance_uuid,
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1091
                                mountpoint)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1092
        return connection_info
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1093
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1094
    def _set_boot_device(self, name, connection_info, brand):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1095
        """Set the boot device specified by connection_info"""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1096
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1097
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1098
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1099
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1100
        suri = self._suri_from_volume_info(connection_info)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1101
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1102
        with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1103
            # ZOSS device configuration is different for the solaris-kz brand
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1104
            if brand == ZONE_BRAND_SOLARIS_KZ:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1105
                zc.zone.setResourceProperties(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1106
                    zonemgr.Resource(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1107
                        "device",
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1108
                        [zonemgr.Property("bootpri", "0")]),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1109
                    [zonemgr.Property("storage", suri)])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1110
            else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1111
                zc.addresource(
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1112
                    ROOTZPOOL_RESOURCE,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1113
                    [zonemgr.Property("storage", listvalue=[suri])],
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1114
                    ignore_exists=True)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1115
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1116
    def _set_num_cpu(self, name, vcpus, brand):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1117
        """Set number of VCPUs in a Solaris Zone configuration."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1118
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1119
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1120
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1121
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1122
        # The Solaris Zone brand type is used to specify the type of
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1123
        # 'cpu' resource set in the Solaris Zone configuration.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1124
        if brand == ZONE_BRAND_SOLARIS:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1125
            vcpu_resource = 'capped-cpu'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1126
        else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1127
            vcpu_resource = 'virtual-cpu'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1128
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1129
        # TODO(dcomay): Until 17881862 is resolved, this should be turned into
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1130
        # an appropriate 'rctl' resource for the 'capped-cpu' case.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1131
        with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1132
            zc.setprop(vcpu_resource, 'ncpus', str(vcpus))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1133
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1134
    def _set_memory_cap(self, name, memory_mb, brand):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1135
        """Set memory cap in a Solaris Zone configuration."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1136
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1137
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1138
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1139
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1140
        # The Solaris Zone brand type is used to specify the type of
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1141
        # 'memory' cap set in the Solaris Zone configuration.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1142
        if brand == ZONE_BRAND_SOLARIS:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1143
            mem_resource = 'swap'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1144
        else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1145
            mem_resource = 'physical'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1146
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1147
        with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1148
            zc.setprop('capped-memory', mem_resource, '%dM' % memory_mb)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1149
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1150
    def _set_network(self, context, name, instance, network_info, brand,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1151
                     sc_dir):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  1152
        """add networking information to the zone."""
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1153
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1154
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1155
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1156
5409
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1157
        if not network_info:
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1158
            with ZoneConfig(zone) as zc:
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1159
                if brand == ZONE_BRAND_SOLARIS:
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1160
                    zc.removeresources("anet",
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1161
                                       [zonemgr.Property("linkname", "net0")])
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1162
                else:
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1163
                    zc.removeresources("anet", [zonemgr.Property("id", "0")])
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1164
                return
2c588e2f06d9 20410887 Solaris Nova driver should be resilient when network info is None
saurabh.vyas@oracle.com
parents: 4679
diff changeset
  1165
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1166
        tenant_id = None
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1167
        network_plugin = neutronv2.get_client(context)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1168
        for netid, network in enumerate(network_info):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1169
            if tenant_id is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1170
                tenant_id = network['network']['meta']['tenant_id']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1171
            port_uuid = network['id']
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1172
            port = network_plugin.show_port(port_uuid)['port']
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1173
            evs_uuid = port['network_id']
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1174
            vport_uuid = port['id']
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1175
            ip = network['network']['subnets'][0]['ips'][0]['address']
4569
e6bd6f2f307f 21306943 IP address prefix length is not being set in the network/install service profile
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4072
diff changeset
  1176
            ip_plen = network['network']['subnets'][0]['cidr'].split('/')[1]
e6bd6f2f307f 21306943 IP address prefix length is not being set in the network/install service profile
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 4072
diff changeset
  1177
            ip = '/'.join([ip, ip_plen])
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1178
            ip_version = network['network']['subnets'][0]['version']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1179
            route = network['network']['subnets'][0]['gateway']['address']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1180
            dns_list = network['network']['subnets'][0]['dns']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1181
            nameservers = []
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1182
            for dns in dns_list:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1183
                if dns['type'] == 'dns':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1184
                    nameservers.append(dns['address'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1185
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1186
            with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1187
                if netid == 0:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1188
                    zc.setprop('anet', 'configure-allowed-address', 'false')
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1189
                    zc.setprop('anet', 'evs', evs_uuid)
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1190
                    zc.setprop('anet', 'vport', vport_uuid)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1191
                else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1192
                    zc.addresource(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1193
                        'anet',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1194
                        [zonemgr.Property('configure-allowed-address',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1195
                                          'false'),
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1196
                         zonemgr.Property('evs', evs_uuid),
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1197
                         zonemgr.Property('vport', vport_uuid)])
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1198
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1199
                filter = [zonemgr.Property('vport', vport_uuid)]
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1200
                if brand == ZONE_BRAND_SOLARIS:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1201
                    linkname = lookup_resource_property(zc.zone, 'anet',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1202
                                                        'linkname', filter)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1203
                else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1204
                    id = lookup_resource_property(zc.zone, 'anet', 'id',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1205
                                                  filter)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1206
                    linkname = 'net%s' % id
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1207
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1208
            # create the required sysconfig file (or skip if this is part of a
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1209
            # resize process)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1210
            tstate = instance['task_state']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1211
            if tstate not in [task_states.RESIZE_FINISH,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1212
                              task_states.RESIZE_REVERTING,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1213
                              task_states.RESIZE_MIGRATING]:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1214
                subnet_uuid = port['fixed_ips'][0]['subnet_id']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1215
                subnet = network_plugin.show_subnet(subnet_uuid)['subnet']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1216
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1217
                if subnet['enable_dhcp']:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1218
                    tree = sysconfig.create_ncp_defaultfixed('dhcp', linkname,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1219
                                                             netid, ip_version)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1220
                else:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1221
                    tree = sysconfig.create_ncp_defaultfixed('static',
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1222
                                                             linkname, netid,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1223
                                                             ip_version, ip,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1224
                                                             route,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1225
                                                             nameservers)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1226
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1227
                fp = os.path.join(sc_dir, 'evs-network-%d.xml' % netid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1228
                sysconfig.create_sc_profile(fp, tree)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1229
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1230
        if tenant_id is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1231
            # set the tenant id
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1232
            with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1233
                zc.setprop('global', 'tenant', tenant_id)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1234
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1235
    def _verify_sysconfig(self, sc_dir, instance):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  1236
        """verify the SC profile(s) passed in contain an entry for
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1237
        system/config-user to configure the root account.  If an SSH key is
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1238
        specified, configure root's profile to use it.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1239
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1240
        usercheck = lambda e: e.attrib.get('name') == 'system/config-user'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1241
        hostcheck = lambda e: e.attrib.get('name') == 'system/identity'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1242
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1243
        root_account_needed = True
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1244
        hostname_needed = True
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1245
        sshkey = instance.get('key_data')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1246
        name = instance.get('display_name')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1247
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1248
        # find all XML files in sc_dir
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1249
        for root, dirs, files in os.walk(sc_dir):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1250
            for fname in [f for f in files if f.endswith(".xml")]:
3141
e4ac7e52627e 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 3028
diff changeset
  1251
                fileroot = etree.parse(os.path.join(root, fname))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1252
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1253
                # look for config-user properties
3141
e4ac7e52627e 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 3028
diff changeset
  1254
                if filter(usercheck, fileroot.findall('service')):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1255
                    # a service element was found for config-user.  Verify
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1256
                    # root's password is set, the admin account name is set and
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1257
                    # the admin's password is set
3141
e4ac7e52627e 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 3028
diff changeset
  1258
                    pgs = fileroot.iter('property_group')
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1259
                    for pg in pgs:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1260
                        if pg.attrib.get('name') == 'root_account':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1261
                            root_account_needed = False
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1262
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1263
                # look for identity properties
3141
e4ac7e52627e 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 3028
diff changeset
  1264
                if filter(hostcheck, fileroot.findall('service')):
e4ac7e52627e 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 3028
diff changeset
  1265
                    for props in fileroot.iter('propval'):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1266
                        if props.attrib.get('name') == 'nodename':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1267
                            hostname_needed = False
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1268
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1269
        # Verify all of the requirements were met.  Create the required SMF
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1270
        # profile(s) if needed.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1271
        if root_account_needed:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1272
            fp = os.path.join(sc_dir, 'config-root.xml')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1273
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1274
            if sshkey is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1275
                # set up the root account as 'normal' with no expiration and
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1276
                # an ssh key
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1277
                tree = sysconfig.create_default_root_account(sshkey=sshkey)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1278
            else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1279
                # set up the root account as 'normal' but to expire immediately
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1280
                tree = sysconfig.create_default_root_account(expire='0')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1281
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1282
            sysconfig.create_sc_profile(fp, tree)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1283
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1284
        elif sshkey is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1285
            fp = os.path.join(sc_dir, 'config-root-ssh-keys.xml')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1286
            tree = sysconfig.create_root_ssh_keys(sshkey)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1287
            sysconfig.create_sc_profile(fp, tree)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1288
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1289
        if hostname_needed and name is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1290
            fp = os.path.join(sc_dir, 'hostname.xml')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1291
            sysconfig.create_sc_profile(fp, sysconfig.create_hostname(name))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1292
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1293
    def _create_config(self, context, instance, network_info,
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1294
                       connection_info, sc_dir):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1295
        """Create a new Solaris Zone configuration."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1296
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1297
        if self._get_zone_by_name(name) is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1298
            raise exception.InstanceExists(name=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1299
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1300
        extra_specs = self._get_extra_specs(instance)
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1301
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1302
        # If unspecified, default zone brand is ZONE_BRAND_SOLARIS
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1303
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1304
        template = ZONE_BRAND_TEMPLATE.get(brand)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1305
        # TODO(dcomay): Detect capability via libv12n(3LIB) or virtinfo(1M).
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1306
        if template is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1307
            msg = (_("Invalid brand '%s' specified for instance '%s'"
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1308
                   % (brand, name)))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1309
            raise exception.NovaException(msg)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1310
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1311
        tstate = instance['task_state']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1312
        if tstate not in [task_states.RESIZE_FINISH,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1313
                           task_states.RESIZE_REVERTING,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1314
                           task_states.RESIZE_MIGRATING]:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1315
            sc_profile = extra_specs.get('install:sc_profile')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1316
            if sc_profile is not None:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1317
                if os.path.isfile(sc_profile):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1318
                    shutil.copy(sc_profile, sc_dir)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1319
                elif os.path.isdir(sc_profile):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1320
                    shutil.copytree(sc_profile, os.path.join(sc_dir,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1321
                                    'sysconfig'))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1322
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1323
            self._verify_sysconfig(sc_dir, instance)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1324
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1325
        LOG.debug(_("Creating zone configuration for '%s' (%s)")
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1326
                  % (name, instance['display_name']))
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1327
        zonemanager = self.rad_connection.get_object(zonemgr.ZoneManager())
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1328
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1329
            zonemanager.create(name, None, template)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1330
            self._set_global_properties(name, extra_specs, brand)
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1331
            if connection_info is not None:
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1332
                self._set_boot_device(name, connection_info, brand)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1333
            self._set_num_cpu(name, instance['vcpus'], brand)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1334
            self._set_memory_cap(name, instance['memory_mb'], brand)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1335
            self._set_network(context, name, instance, network_info, brand,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1336
                              sc_dir)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1337
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1338
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1339
            LOG.error(_("Unable to create configuration for instance '%s' via "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1340
                        "zonemgr(3RAD): %s") % (name, reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1341
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1342
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1343
    def _create_vnc_console_service(self, instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1344
        """Create a VNC console SMF service for a Solaris Zone"""
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1345
        # Basic environment checks first: vncserver and xterm
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1346
        if not os.path.exists(VNC_SERVER_PATH):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1347
            LOG.warning(_("Zone VNC console SMF service not available on this "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1348
                          "compute node. %s is missing. Run 'pkg install "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1349
                          "x11/server/xvnc'") % VNC_SERVER_PATH)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1350
            raise exception.ConsoleTypeUnavailable(console_type='vnc')
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1351
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1352
        if not os.path.exists(XTERM_PATH):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1353
            LOG.warning(_("Zone VNC console SMF service not available on this "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1354
                          "compute node. %s is missing. Run 'pkg install "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1355
                          "terminal/xterm'") % XTERM_PATH)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1356
            raise exception.ConsoleTypeUnavailable(console_type='vnc')
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1357
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1358
        name = instance['name']
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1359
        # TODO(npower): investigate using RAD instead of CLI invocation
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1360
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1361
            out, err = utils.execute('/usr/sbin/svccfg', '-s',
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1362
                                     VNC_CONSOLE_BASE_FMRI, 'add', name)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1363
        except processutils.ProcessExecutionError as ex:
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1364
            if self._has_vnc_console_service(instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1365
                LOG.debug(_("Ignoring attempt to create existing zone VNC "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1366
                            "console SMF service for instance '%s'") % name)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1367
                return
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1368
            reason = ex.stderr
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1369
            LOG.error(_("Unable to create zone VNC console SMF service "
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1370
                        "'{0}': {1}").format(
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1371
                            VNC_CONSOLE_BASE_FMRI + ':' + name, reason))
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1372
            raise
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1373
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1374
    def _delete_vnc_console_service(self, instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1375
        """Delete a VNC console SMF service for a Solaris Zone"""
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1376
        name = instance['name']
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1377
        self._disable_vnc_console_service(instance)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1378
        # TODO(npower): investigate using RAD instead of CLI invocation
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1379
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1380
            out, err = utils.execute('/usr/sbin/svccfg', '-s',
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1381
                                     VNC_CONSOLE_BASE_FMRI, 'delete', '-f',
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1382
                                     name)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1383
        except processutils.ProcessExecutionError as ex:
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1384
            if not self._has_vnc_console_service(instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1385
                LOG.debug(_("Ignoring attempt to delete a non-existent zone "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1386
                            "VNC console SMF service for instance '%s'")
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1387
                          % name)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1388
                return
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1389
            reason = ex.stderr
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1390
            LOG.error(_("Unable to delete zone VNC console SMF service '%s': "
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1391
                        "%s")
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1392
                      % (VNC_CONSOLE_BASE_FMRI + ':' + name, reason))
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1393
            raise
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1394
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1395
    def _enable_vnc_console_service(self, instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1396
        """Enable a zone VNC console SMF service"""
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1397
        name = instance['name']
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1398
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1399
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1400
        # TODO(npower): investigate using RAD instead of CLI invocation
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1401
        try:
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1402
            # The console SMF service exits with SMF_TEMP_DISABLE to prevent
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1403
            # unnecessarily coming online at boot. Tell it to really bring
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1404
            # it online.
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1405
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1406
                                     'setprop', 'vnc/nova-enabled=true')
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1407
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1408
                                     'refresh')
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1409
            out, err = utils.execute('/usr/sbin/svcadm', 'enable',
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1410
                                     console_fmri)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1411
        except processutils.ProcessExecutionError as ex:
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1412
            if not self._has_vnc_console_service(instance):
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1413
                LOG.debug(_("Ignoring attempt to enable a non-existent zone "
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1414
                            "VNC console SMF service for instance '%s'")
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1415
                          % name)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1416
                return
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1417
            reason = ex.stderr
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1418
            LOG.error(_("Unable to start zone VNC console SMF service "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1419
                        "'%s': %s") % (console_fmri, reason))
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1420
            raise
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1421
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1422
        # Allow some time for the console service to come online.
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1423
        greenthread.sleep(2)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1424
        while True:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1425
            try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1426
                out, err = utils.execute('/usr/bin/svcs', '-H', '-o', 'state',
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1427
                                         console_fmri)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1428
                state = out.strip()
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1429
                if state == 'online':
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1430
                    break
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1431
                elif state in ['maintenance', 'offline']:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1432
                    LOG.error(_("Zone VNC console SMF service '%s' is in the "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1433
                                "'%s' state. Run 'svcs -x %s' for details.")
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1434
                              % (console_fmri, state, console_fmri))
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1435
                    raise exception.ConsoleNotFoundForInstance(
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1436
                        instance_uuid=instance['uuid'])
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1437
                # Wait for service state to transition to (hopefully) online
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1438
                # state or offline/maintenance states.
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1439
                greenthread.sleep(2)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1440
            except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1441
                reason = ex.stderr
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1442
                LOG.error(_("Error querying state of zone VNC console SMF "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1443
                            "service '%s': %s") % (console_fmri, reason))
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1444
                raise
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1445
        # TODO(npower): investigate using RAD instead of CLI invocation
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1446
        try:
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1447
            # The console SMF service exits with SMF_TEMP_DISABLE to prevent
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1448
            # unnecessarily coming online at boot. Make that happen.
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1449
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1450
                                     'setprop', 'vnc/nova-enabled=false')
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1451
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1452
                                     'refresh')
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1453
        except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1454
            reason = ex.stderr
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1455
            LOG.error(_("Unable to update 'vnc/nova-enabled' property for "
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1456
                        "zone VNC console SMF service "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1457
                        "'%s': %s") % (console_fmri, reason))
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1458
            raise
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1459
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1460
    def _disable_vnc_console_service(self, instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1461
        """Disable a zone VNC console SMF service"""
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1462
        name = instance['name']
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1463
        if not self._has_vnc_console_service(instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1464
            LOG.debug(_("Ignoring attempt to disable a non-existent zone VNC "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1465
                        "console SMF service for instance '%s'") % name)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1466
            return
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1467
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1468
        # TODO(npower): investigate using RAD instead of CLI invocation
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1469
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1470
            out, err = utils.execute('/usr/sbin/svcadm', 'disable',
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1471
                                     console_fmri)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1472
        except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1473
            reason = ex.stderr
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1474
            LOG.error(_("Unable to disable zone VNC console SMF service "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1475
                        "'%s': %s") % (console_fmri, reason))
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1476
        # The console service sets a SMF instance property for the port
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1477
        # on which the VNC service is listening. The service needs to be
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1478
        # refreshed to reset the property value
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1479
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1480
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1481
                                     'refresh')
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1482
        except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1483
            reason = ex.stderr
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1484
            LOG.error(_("Unable to refresh zone VNC console SMF service "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1485
                        "'%s': %s") % (console_fmri, reason))
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1486
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1487
    def _get_vnc_console_service_state(self, instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1488
        """Returns state of the instance zone VNC console SMF service"""
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1489
        name = instance['name']
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1490
        if not self._has_vnc_console_service(instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1491
            LOG.warning(_("Console state requested for a non-existent zone "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1492
                          "VNC console SMF service for instance '%s'")
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1493
                        % name)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1494
            return None
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1495
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1496
        # TODO(npower): investigate using RAD instead of CLI invocation
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1497
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1498
            state, err = utils.execute('/usr/sbin/svcs', '-H', '-o', 'state',
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1499
                                       console_fmri)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1500
            return state.strip()
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1501
        except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1502
            reason = ex.stderr
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1503
            LOG.error(_("Console state request failed for zone VNC console "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1504
                        "SMF service for instance '%s': %s")
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1505
                      % (name, reason))
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1506
            raise
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1507
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1508
    def _has_vnc_console_service(self, instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1509
        """Returns True if the instance has a zone VNC console SMF service"""
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1510
        name = instance['name']
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1511
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1512
        # TODO(npower): investigate using RAD instead of CLI invocation
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1513
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1514
            utils.execute('/usr/bin/svcs', '-H', '-o', 'state',
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1515
                          console_fmri)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1516
            return True
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1517
        except Exception:
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1518
            return False
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1519
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1520
    def _install(self, instance, image, sc_dir):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1521
        """Install a new Solaris Zone root file system."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1522
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1523
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1524
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1525
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1526
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1527
        # log the zone's configuration
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1528
        with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1529
            LOG.debug("-" * 80)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1530
            LOG.debug(zc.zone.exportConfig(True))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1531
            LOG.debug("-" * 80)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1532
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1533
        options = ['-a ', image]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1534
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1535
        if os.listdir(sc_dir):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1536
            # the directory isn't empty so pass it along to install
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1537
            options.extend(['-c ', sc_dir])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1538
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1539
        try:
5411
27ae522d32d7 22195615 sysconfig temporary directory not always cleaned up
saurabh.vyas@oracle.com
parents: 5410
diff changeset
  1540
            LOG.debug(_("Installing instance '%s' (%s)") %
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1541
                      (name, instance['display_name']))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1542
            zone.install(options=options)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1543
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1544
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1545
            LOG.error(_("Unable to install root file system for instance '%s' "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1546
                        "via zonemgr(3RAD): %s") % (name, reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1547
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1548
5411
27ae522d32d7 22195615 sysconfig temporary directory not always cleaned up
saurabh.vyas@oracle.com
parents: 5410
diff changeset
  1549
        LOG.debug(_("Installation of instance '%s' (%s) complete") %
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1550
                  (name, instance['display_name']))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1551
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1552
    def _power_on(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1553
        """Power on a Solaris Zone."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1554
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1555
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1556
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1557
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1558
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1559
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1560
            zone.boot()
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1561
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1562
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1563
            LOG.error(_("Unable to power on instance '%s' via zonemgr(3RAD): "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1564
                        "%s") % (name, reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1565
            raise exception.InstancePowerOnFailure(reason=reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1566
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1567
    def _uninstall(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1568
        """Uninstall an existing Solaris Zone root file system."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1569
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1570
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1571
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1572
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1573
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1574
        if zone.state == ZONE_STATE_CONFIGURED:
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1575
            LOG.debug(_("Uninstall not required for zone '%s' in state '%s'")
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1576
                      % (name, zone.state))
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1577
            return
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1578
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1579
            zone.uninstall(['-F'])
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1580
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1581
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1582
            LOG.error(_("Unable to uninstall root file system for instance "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1583
                        "'%s' via zonemgr(3RAD): %s") % (name, reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1584
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1585
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1586
    def _delete_config(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1587
        """Delete an existing Solaris Zone configuration."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1588
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1589
        if self._get_zone_by_name(name) is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1590
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1591
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1592
        zonemanager = self.rad_connection.get_object(zonemgr.ZoneManager())
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1593
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1594
            zonemanager.delete(name)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1595
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1596
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1597
            LOG.error(_("Unable to delete configuration for instance '%s' via "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1598
                        "zonemgr(3RAD): %s") % (name, reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1599
            raise
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1600
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1601
    def spawn(self, context, instance, image_meta, injected_files,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1602
              admin_password, network_info=None, block_device_info=None):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1603
        """Create a new instance/VM/domain on the virtualization platform.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1604
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1605
        Once this successfully completes, the instance should be
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1606
        running (power_state.RUNNING).
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1607
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1608
        If this fails, any partial instance should be completely
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1609
        cleaned up, and the virtualization platform should be in the state
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1610
        that it was before this call began.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1611
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1612
        :param context: security context
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1613
        :param instance: nova.objects.instance.Instance
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1614
                         This function should use the data there to guide
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1615
                         the creation of the new instance.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1616
        :param image_meta: image object returned by nova.image.glance that
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1617
                           defines the image from which to boot this instance
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1618
        :param injected_files: User files to inject into instance.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1619
        :param admin_password: Administrator password to set in instance.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1620
        :param network_info:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1621
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1622
        :param block_device_info: Information about block devices to be
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1623
                                  attached to the instance.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1624
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1625
        image = self._fetch_image(context, instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1626
        self._validate_image(image, instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1627
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1628
        # create a new directory for SC profiles
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1629
        sc_dir = tempfile.mkdtemp(prefix="nova-sysconfig-",
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1630
                                  dir=CONF.state_path)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1631
        os.chmod(sc_dir, 0755)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1632
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1633
        # Attempt to provision a (Cinder) volume service backed boot volume
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1634
        volume = self._create_boot_volume(context, instance)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1635
        volume_id = volume['id']
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1636
        # c1d0 is the standard dev for for default boot device.
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1637
        # Irrelevant value for ZFS, but Cinder gets stroppy without it.
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1638
        mountpoint = "c1d0"
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1639
        name = instance['name']
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1640
        try:
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1641
            connection_info = self._connect_boot_volume(volume, mountpoint,
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1642
                                                        context, instance)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1643
        except exception.InvalidVolume as reason:
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1644
            # This Cinder volume is not usable for ZOSS so discard it.
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1645
            # zonecfg will apply default zonepath dataset configuration
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1646
            # instead. Carry on
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1647
            LOG.warning(_("Volume '%s' is being discarded: %s")
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1648
                        % (volume_id, reason))
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1649
            self._volume_api.delete(context, volume_id)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1650
            connection_info = None
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1651
        except Exception as reason:
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1652
            # Something really bad happened. Don't pass Go.
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1653
            LOG.error(_("Unable to attach root zpool volume '%s' to instance "
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1654
                        "%s: %s") % (volume['id'], name, reason))
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1655
            self._volume_api.delete(context, volume_id)
5411
27ae522d32d7 22195615 sysconfig temporary directory not always cleaned up
saurabh.vyas@oracle.com
parents: 5410
diff changeset
  1656
            # remove the sc_profile temp directory
27ae522d32d7 22195615 sysconfig temporary directory not always cleaned up
saurabh.vyas@oracle.com
parents: 5410
diff changeset
  1657
            shutil.rmtree(sc_dir)
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1658
            raise
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1659
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1660
        configured = False
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1661
        installed = False
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1662
        try:
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1663
            self._create_config(context, instance, network_info,
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1664
                                connection_info, sc_dir)
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1665
            configured = True
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  1666
            self._install(instance, image, sc_dir)
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1667
            installed = True
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1668
            self._power_on(instance)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1669
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1670
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1671
            LOG.error(_("Unable to spawn instance '%s' via zonemgr(3RAD): %s")
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  1672
                      % (name, reason))
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1673
            if installed:
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1674
                self._uninstall(instance)
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1675
            if configured:
5429
1ae4cfbadda9 20867780 Nova should support LZR for block devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5414
diff changeset
  1676
                self._delete_config(instance)
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1677
            if connection_info is not None:
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1678
                self._volume_api.detach(context, volume_id)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1679
                self._volume_api.delete(context, volume_id)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1680
            raise
5411
27ae522d32d7 22195615 sysconfig temporary directory not always cleaned up
saurabh.vyas@oracle.com
parents: 5410
diff changeset
  1681
        finally:
27ae522d32d7 22195615 sysconfig temporary directory not always cleaned up
saurabh.vyas@oracle.com
parents: 5410
diff changeset
  1682
            # remove the sc_profile temp directory
27ae522d32d7 22195615 sysconfig temporary directory not always cleaned up
saurabh.vyas@oracle.com
parents: 5410
diff changeset
  1683
            shutil.rmtree(sc_dir)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1684
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  1685
        if connection_info is not None:
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1686
            bdm = objects.BlockDeviceMapping(
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1687
                    source_type='volume',
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1688
                    destination_type='volume',
4629
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1689
                    instance_uuid=instance.uuid,
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1690
                    volume_id=volume_id,
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1691
                    connection_info=jsonutils.dumps(connection_info),
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1692
                    device_name=mountpoint,
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1693
                    delete_on_termination=True,
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1694
                    volume_size=instance['root_gb'])
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1695
            bdm.create(context)
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1696
            bdm.save()
4991a5f4f6b9 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4628
diff changeset
  1697
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1698
    def _power_off(self, instance, halt_type):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1699
        """Power off a Solaris Zone."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1700
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1701
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1702
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1703
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1704
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1705
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1706
            if halt_type == 'SOFT':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1707
                zone.shutdown()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1708
            else:
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  1709
                # 'HARD'
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1710
                zone.halt()
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1711
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1712
            reason = zonemgr_strerror(ex)
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1713
            if isinstance(ex, rad.client.ObjectError):
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1714
                code = ex.get_payload().code
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1715
                if code == zonemgr.ErrorCode.COMMAND_ERROR:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1716
                    LOG.warning(_("Ignoring command error returned while "
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1717
                                  "trying to power off instance '%s' via "
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1718
                                  "zonemgr(3RAD): %s" % (name, reason)))
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1719
                    return
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1720
            LOG.error(_("Unable to power off instance '%s' via zonemgr(3RAD): "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1721
                        "%s") % (name, reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1722
            raise exception.InstancePowerOffFailure(reason=reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1723
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1724
    def _samehost_revert_resize(self, context, instance, network_info,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1725
                                block_device_info):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1726
        """Reverts the zones configuration to pre-resize config
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1727
        """
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1728
        self.power_off(instance)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1729
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1730
        inst_type = flavor_obj.Flavor.get_by_id(
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1731
            nova_context.get_admin_context(read_deleted='yes'),
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1732
            instance['instance_type_id'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1733
        extra_specs = inst_type['extra_specs'].copy()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1734
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1735
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1736
        name = instance['name']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1737
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1738
        cpu = int(instance.system_metadata['old_instance_type_vcpus'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1739
        mem = int(instance.system_metadata['old_instance_type_memory_mb'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1740
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1741
        self._set_num_cpu(name, cpu, brand)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1742
        self._set_memory_cap(name, mem, brand)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1743
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1744
        rgb = int(instance.system_metadata['new_instance_type_root_gb'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1745
        old_rvid = instance.system_metadata.get('old_instance_volid')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1746
        if old_rvid:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1747
            new_rvid = instance.system_metadata.get('new_instance_volid')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1748
            newvname = instance['display_name'] + "-" + self._rootzpool_suffix
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1749
            mount_dev = instance['root_device_name']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1750
            del instance.system_metadata['new_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1751
            del instance.system_metadata['old_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1752
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1753
            self._resize_disk_migration(context, instance, new_rvid, old_rvid,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1754
                                        rgb, mount_dev)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1755
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1756
            self._volume_api.delete(context, new_rvid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1757
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1758
    def destroy(self, context, instance, network_info, block_device_info=None,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1759
                destroy_disks=True, migrate_data=None):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1760
        """Destroy the specified instance from the Hypervisor.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1761
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1762
        If the instance is not found (for example if networking failed), this
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1763
        function should still succeed.  It's probably a good idea to log a
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1764
        warning in that case.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1765
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1766
        :param context: security context
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1767
        :param instance: Instance object as returned by DB layer.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1768
        :param network_info:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1769
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1770
        :param block_device_info: Information about block devices that should
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1771
                                  be detached from the instance.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1772
        :param destroy_disks: Indicates if disks should be destroyed
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1773
        :param migrate_data: implementation specific params
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1774
        """
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1775
        if (instance['task_state'] == task_states.RESIZE_REVERTING and
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1776
           instance.system_metadata['old_vm_state'] == vm_states.RESIZED):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1777
            self._samehost_revert_resize(context, instance, network_info,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1778
                                         block_device_info)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1779
            return
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1780
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1781
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1782
            # These methods log if problems occur so no need to double log
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1783
            # here. Just catch any stray exceptions and allow destroy to
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1784
            # proceed.
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1785
            if self._has_vnc_console_service(instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1786
                self._disable_vnc_console_service(instance)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1787
                self._delete_vnc_console_service(instance)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1788
        except Exception:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1789
            pass
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1790
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1791
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1792
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1793
        # If instance cannot be found, just return.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1794
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1795
            LOG.warning(_("Unable to find instance '%s' via zonemgr(3RAD)")
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1796
                        % name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1797
            return
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1798
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1799
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1800
            if self._get_state(zone) == power_state.RUNNING:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1801
                self._power_off(instance, 'HARD')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1802
            if self._get_state(zone) == power_state.SHUTDOWN:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1803
                self._uninstall(instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1804
            if self._get_state(zone) == power_state.NOSTATE:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1805
                self._delete_config(instance)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1806
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1807
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1808
            LOG.warning(_("Unable to destroy instance '%s' via zonemgr(3RAD): "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1809
                          "%s") % (name, reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1810
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1811
        # One last point of house keeping. If we are deleting the instance
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1812
        # during a resize operation we want to make sure the cinder volumes are
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1813
        # property cleaned up. We need to do this here, because the periodic
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1814
        # task that comes along and cleans these things up isn't nice enough to
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1815
        # pass a context in so that we could simply do the work there.  But
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1816
        # because we have access to a context, we can handle the work here and
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1817
        # let the periodic task simply clean up the left over zone
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1818
        # configuration that might be left around.  Note that the left over
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1819
        # zone will only show up in zoneadm list, not nova list.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1820
        #
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1821
        # If the task state is RESIZE_REVERTING do not process these because
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1822
        # the cinder volume cleanup is taken care of in
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1823
        # finish_revert_migration.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1824
        if instance['task_state'] == task_states.RESIZE_REVERTING:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1825
            return
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1826
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1827
        tags = ['old_instance_volid', 'new_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1828
        for tag in tags:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1829
            volid = instance.system_metadata.get(tag)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1830
            if volid:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1831
                try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1832
                    LOG.debug(_("Deleting volume %s"), volid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1833
                    self._volume_api.delete(context, volid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1834
                    del instance.system_metadata[tag]
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1835
                except Exception:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1836
                    pass
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  1837
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1838
    def cleanup(self, context, instance, network_info, block_device_info=None,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1839
                destroy_disks=True, migrate_data=None, destroy_vifs=True):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1840
        """Cleanup the instance resources .
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1841
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1842
        Instance should have been destroyed from the Hypervisor before calling
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1843
        this method.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1844
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1845
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1846
        :param instance: Instance object as returned by DB layer.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1847
        :param network_info:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1848
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1849
        :param block_device_info: Information about block devices that should
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1850
                                  be detached from the instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1851
        :param destroy_disks: Indicates if disks should be destroyed
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1852
        :param migrate_data: implementation specific params
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1853
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1854
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1855
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1856
    def reboot(self, context, instance, network_info, reboot_type,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1857
               block_device_info=None, bad_volumes_callback=None):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1858
        """Reboot the specified instance.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1859
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1860
        After this is called successfully, the instance's state
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1861
        goes back to power_state.RUNNING. The virtualization
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1862
        platform should ensure that the reboot action has completed
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1863
        successfully even in cases in which the underlying domain/vm
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1864
        is paused or halted/stopped.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1865
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1866
        :param instance: nova.objects.instance.Instance
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1867
        :param network_info:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1868
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1869
        :param reboot_type: Either a HARD or SOFT reboot
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1870
        :param block_device_info: Info pertaining to attached volumes
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1871
        :param bad_volumes_callback: Function to handle any bad volumes
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1872
            encountered
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1873
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1874
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1875
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1876
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1877
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1878
3200
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
  1879
        if self._get_state(zone) == power_state.SHUTDOWN:
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
  1880
            self._power_on(instance)
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
  1881
            return
16d08ab96b7f 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 3178
diff changeset
  1882
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1883
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1884
            if reboot_type == 'SOFT':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1885
                zone.shutdown(['-r'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1886
            else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1887
                zone.reboot()
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1888
        except Exception as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1889
            reason = zonemgr_strerror(ex)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1890
            LOG.error(_("Unable to reboot instance '%s' via zonemgr(3RAD): %s")
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1891
                      % (name, reason))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1892
            raise exception.InstanceRebootFailure(reason=reason)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1893
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1894
    def get_console_pool_info(self, console_type):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1895
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1896
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1897
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1898
    def _get_console_output(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1899
        """Builds a string containing the console output (capped at
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1900
        MAX_CONSOLE_BYTES characters) by reassembling the log files
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1901
        that Solaris Zones framework maintains for each zone.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1902
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1903
        console_str = ""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1904
        avail = MAX_CONSOLE_BYTES
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1905
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1906
        # Examine the log files in most-recently modified order, keeping
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1907
        # track of the size of each file and of how many characters have
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1908
        # been seen. If there are still characters left to incorporate,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1909
        # then the contents of the log file in question are prepended to
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1910
        # the console string built so far. When the number of characters
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1911
        # available has run out, the last fragment under consideration
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1912
        # will likely begin within the middle of a line. As such, the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1913
        # start of the fragment up to the next newline is thrown away.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1914
        # The remainder constitutes the start of the resulting console
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1915
        # output which is then prepended to the console string built so
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1916
        # far and the result returned.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1917
        logfile_pattern = '/var/log/zones/%s.console*' % instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1918
        logfiles = sorted(glob.glob(logfile_pattern), key=os.path.getmtime,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1919
                          reverse=True)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1920
        for file in logfiles:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1921
            size = os.path.getsize(file)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1922
            if size == 0:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1923
                continue
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1924
            avail -= size
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1925
            with open(file, 'r') as log:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1926
                if avail < 0:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1927
                    (fragment, _) = utils.last_bytes(log, avail + size)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1928
                    remainder = fragment.find('\n') + 1
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1929
                    console_str = fragment[remainder:] + console_str
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1930
                    break
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1931
                fragment = ''
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1932
                for line in log.readlines():
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1933
                    fragment += line
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1934
                console_str = fragment + console_str
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1935
        return console_str
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1936
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1937
    def get_console_output(self, context, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1938
        """Get console output for an instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1939
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1940
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1941
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1942
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1943
        return self._get_console_output(instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1944
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1945
    def get_vnc_console(self, context, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1946
        """Get connection info for a vnc console.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1947
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1948
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1949
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1950
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1951
        :returns an instance of console.type.ConsoleVNC
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1952
        """
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1953
        # Do not provide console access prematurely. Zone console access is
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1954
        # exclusive and zones that are still installing require their console.
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1955
        # Grabbing the zone console will break installation.
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1956
        name = instance['name']
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1957
        if instance['vm_state'] == vm_states.BUILDING:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1958
            LOG.info(_("VNC console not available until zone '%s' has "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1959
                     "completed installation. Try again later.") % name)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1960
            raise exception.InstanceNotReady(instance_id=instance['uuid'])
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1961
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1962
        if not self._has_vnc_console_service(instance):
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1963
            LOG.debug(_("Creating zone VNC console SMF service for "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1964
                      "instance '%s'") % name)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1965
            self._create_vnc_console_service(instance)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1966
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1967
        self._enable_vnc_console_service(instance)
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1968
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1969
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1970
        # The console service sets an SMF instance property for the port
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1971
        # on which the VNC service is listening. The service needs to be
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1972
        # refreshed to reflect the current property value
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1973
        # TODO(npower): investigate using RAD instead of CLI invocation
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1974
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1975
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1976
                                     'refresh')
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1977
        except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1978
            reason = ex.stderr
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1979
            LOG.error(_("Unable to refresh zone VNC console SMF service "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1980
                        "'%s': %s" % (console_fmri, reason)))
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1981
            raise
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1982
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1983
        host = CONF.vncserver_proxyclient_address
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1984
        try:
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1985
            out, err = utils.execute('/usr/bin/svcprop', '-p', 'vnc/port',
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1986
                                     console_fmri)
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1987
            port = int(out.strip())
4628
21e8147a2b1e 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4569
diff changeset
  1988
            return ctype.ConsoleVNC(host=host,
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1989
                                    port=port,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1990
                                    internal_access_path=None)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1991
        except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1992
            reason = ex.stderr
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1993
            LOG.error(_("Unable to read VNC console port from zone VNC "
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  1994
                        "console SMF service '%s': %s"
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  1995
                      % (console_fmri, reason)))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1996
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1997
    def get_spice_console(self, context, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1998
        """Get connection info for a spice console.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  1999
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2000
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2001
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2002
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2003
        :returns an instance of console.type.ConsoleSpice
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2004
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2005
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2006
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2007
    def get_rdp_console(self, context, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2008
        """Get connection info for a rdp console.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2009
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2010
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2011
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2012
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2013
        :returns an instance of console.type.ConsoleRDP
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2014
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2015
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2016
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2017
    def get_serial_console(self, context, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2018
        """Get connection info for a serial console.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2019
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2020
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2021
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2022
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2023
        :returns an instance of console.type.ConsoleSerial
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2024
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2025
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2026
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2027
    def _get_zone_diagnostics(self, zone):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2028
        """Return data about Solaris Zone diagnostics."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2029
        if zone.id == -1:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2030
            return None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2031
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2032
        diagnostics = {}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2033
        id = str(zone.id)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2034
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2035
        kstat_data = self._get_kstat_by_name('zone_caps', 'caps', id,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2036
                                             ''.join(('lockedmem_zone_', id)))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2037
        if kstat_data is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2038
            diagnostics['lockedmem'] = kstat_data['usage']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2039
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2040
        kstat_data = self._get_kstat_by_name('zone_caps', 'caps', id,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2041
                                             ''.join(('nprocs_zone_', id)))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2042
        if kstat_data is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2043
            diagnostics['nprocs'] = kstat_data['usage']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2044
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2045
        kstat_data = self._get_kstat_by_name('zone_caps', 'caps', id,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2046
                                             ''.join(('swapresv_zone_', id)))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2047
        if kstat_data is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2048
            diagnostics['swapresv'] = kstat_data['usage']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2049
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2050
        kstat_data = self._get_kstat_by_name('zones', 'cpu', id,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2051
                                             'sys_zone_aggr')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2052
        if kstat_data is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2053
            for key in kstat_data.keys():
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2054
                if key not in ('class', 'crtime', 'snaptime'):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2055
                    diagnostics[key] = kstat_data[key]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2056
        return diagnostics
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2057
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2058
    def get_diagnostics(self, instance):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2059
        """Return data about VM diagnostics.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2060
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2061
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2062
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2063
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2064
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2065
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2066
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2067
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2068
        return self._get_zone_diagnostics(zone)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2069
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2070
    def get_instance_diagnostics(self, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2071
        """Return data about VM diagnostics.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2073
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2074
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2075
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2076
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2077
    def get_all_bw_counters(self, instances):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2078
        """Return bandwidth usage counters for each interface on each
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2079
           running VM.
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2080
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2081
        :param instances: nova.objects.instance.InstanceList
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2082
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2083
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2084
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2085
    def get_all_volume_usage(self, context, compute_host_bdms):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2086
        """Return usage info for volumes attached to vms on
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2087
           a given host.-
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2088
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2089
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2090
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2091
    def get_host_ip_addr(self):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2092
        """Retrieves the IP address of the dom0
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2093
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2094
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2095
        return CONF.my_ip
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2096
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2097
    def attach_volume(self, context, connection_info, instance, mountpoint,
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2098
                      disk_bus=None, device_type=None, encryption=None):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2099
        """Attach the disk to the instance at mountpoint using info."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2100
        # TODO(npower): Apply mountpoint in a meaningful way to the zone
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2101
        # For security reasons this is not permitted in a Solaris branded zone.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2102
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2103
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2104
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2105
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2106
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2107
        extra_specs = self._get_extra_specs(instance)
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2108
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2109
        if brand != ZONE_BRAND_SOLARIS_KZ:
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2110
            # Only Solaris kernel zones are currently supported.
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2111
            reason = (_("'%s' branded zones are not currently supported")
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2112
                      % brand)
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2113
            raise NotImplementedError(reason)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2114
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2115
        suri = self._suri_from_volume_info(connection_info)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2116
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2117
        with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2118
            zc.addresource("device", [zonemgr.Property("storage", suri)])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2119
5429
1ae4cfbadda9 20867780 Nova should support LZR for block devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5414
diff changeset
  2120
        # apply the configuration to the running zone
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2121
        if zone.state == ZONE_STATE_RUNNING:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2122
            zone.apply()
5429
1ae4cfbadda9 20867780 Nova should support LZR for block devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5414
diff changeset
  2123
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2124
    def detach_volume(self, connection_info, instance, mountpoint,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2125
                      encryption=None):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2126
        """Detach the disk attached to the instance."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2127
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2128
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2129
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2130
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2131
5410
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2132
        extra_specs = self._get_extra_specs(instance)
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2133
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2134
        if brand != ZONE_BRAND_SOLARIS_KZ:
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2135
            # Only Solaris kernel zones are currently supported.
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2136
            reason = (_("'%s' branded zones are not currently supported")
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2137
                      % brand)
2fe121cb8570 20592407 Issue meaningful error message when attaching volume to non kernel zone
saurabh.vyas@oracle.com
parents: 5409
diff changeset
  2138
            raise NotImplementedError(reason)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2139
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2140
        suri = self._suri_from_volume_info(connection_info)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2141
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2142
        # Check if the specific property value exists before attempting removal
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2143
        prop = lookup_resource_property_value(zone, "device", "storage", suri)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2144
        if not prop:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2145
            LOG.warning(_("Storage resource '%s' is not attached to instance "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2146
                        "'%s'") % (suri, name))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2147
            return
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2148
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2149
        with ZoneConfig(zone) as zc:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2150
            zc.removeresources("device", [zonemgr.Property("storage", suri)])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2151
5429
1ae4cfbadda9 20867780 Nova should support LZR for block devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5414
diff changeset
  2152
        # apply the configuration to the running zone
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2153
        if zone.state == ZONE_STATE_RUNNING:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2154
            zone.apply()
5429
1ae4cfbadda9 20867780 Nova should support LZR for block devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5414
diff changeset
  2155
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2156
    def swap_volume(self, old_connection_info, new_connection_info,
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2157
                    instance, mountpoint, resize_to):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2158
        """Replace the disk attached to the instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2159
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2160
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2161
        :param resize_to: This parameter is used to indicate the new volume
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2162
                          size when the new volume lager than old volume.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2163
                          And the units is Gigabyte.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2164
        """
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2165
        raise NotImplementedError()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2166
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2167
    def attach_interface(self, instance, image_meta, vif):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2168
        """Attach an interface to the instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2169
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2170
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2171
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2172
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2173
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2174
    def detach_interface(self, instance, vif):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2175
        """Detach an interface from the instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2176
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2177
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2178
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2179
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2180
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2181
    def _cleanup_migrate_disk(self, context, instance, volume):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2182
        """Make a best effort at cleaning up the volume that was created to
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2183
        hold the new root disk
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2184
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2185
        :param context: the context for the migration/resize
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2186
        :param instance: nova.objects.instance.Instance being migrated/resized
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2187
        :param volume: new volume created by the call to cinder create
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2188
        """
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2189
        try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2190
            self._volume_api.delete(context, volume['id'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2191
        except Exception as err:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2192
            LOG.error(_("Unable to cleanup the resized volume: %s" % err))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2193
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2194
    def migrate_disk_and_power_off(self, context, instance, dest,
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2195
                                   flavor, network_info,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2196
                                   block_device_info=None,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2197
                                   timeout=0, retry_interval=0):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2198
        """Transfers the disk of a running instance in multiple phases, turning
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2199
        off the instance before the end.
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2200
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2201
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2202
        :param timeout: time to wait for GuestOS to shutdown
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2203
        :param retry_interval: How often to signal guest while
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2204
                               waiting for it to shutdown
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2205
        """
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2206
        LOG.debug("Starting migrate_disk_and_power_off", instance=instance)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2207
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2208
        samehost = (dest == self.get_host_ip_addr())
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2209
        inst_type = flavor_obj.Flavor.get_by_id(
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2210
            nova_context.get_admin_context(read_deleted='yes'),
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2211
            instance['instance_type_id'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2212
        extra_specs = inst_type['extra_specs'].copy()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2213
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2214
        if brand != ZONE_BRAND_SOLARIS_KZ and not samehost:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2215
            msg = (_("'%s' branded zones do not currently support "
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2216
                     "resize to a different host.") % brand)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2217
            raise exception.MigrationPreCheckError(reason=msg)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2218
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2219
        if brand != flavor['extra_specs'].get('zonecfg:brand'):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2220
            msg = (_("Unable to change brand of zone during resize."))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2221
            raise exception.MigrationPreCheckError(reason=msg)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2222
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2223
        orgb = instance['root_gb']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2224
        nrgb = int(instance.system_metadata['new_instance_type_root_gb'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2225
        if orgb > nrgb:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2226
            msg = (_("Unable to resize to a smaller boot volume."))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2227
            raise exception.ResizeError(reason=msg)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2228
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2229
        self.power_off(instance, timeout, retry_interval)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2230
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2231
        disk_info = None
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2232
        if nrgb > orgb or not samehost:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2233
            bmap = block_device_info.get('block_device_mapping')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2234
            rootmp = instance.root_device_name
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2235
            for entry in bmap:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2236
                mountdev = entry['mount_device'].rpartition('/')[2]
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2237
                if mountdev == rootmp:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2238
                    root_ci = entry['connection_info']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2239
                    break
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2240
            else:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2241
                # If this is a non-global zone that is on the same host and is
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2242
                # simply using a dataset, the disk size is purely an OpenStack
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2243
                # quota.  We can continue without doing any disk work.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2244
                if samehost and brand == ZONE_BRAND_SOLARIS:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2245
                    return disk_info
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2246
                else:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2247
                    msg = (_("Cannot find an attached root device."))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2248
                    raise exception.ResizeError(reason=msg)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2249
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2250
            if root_ci['driver_volume_type'] == 'iscsi':
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2251
                volume_id = root_ci['data']['volume_id']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2252
            else:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2253
                volume_id = root_ci['serial']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2254
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2255
            if volume_id is None:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2256
                msg = (_("Cannot find an attached root device."))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2257
                raise exception.ResizeError(reason=msg)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2258
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2259
            vinfo = self._volume_api.get(context, volume_id)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2260
            newvolume = self._volume_api.create(context, orgb,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2261
                                                vinfo['display_name'] +
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2262
                                                '-resized',
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2263
                                                vinfo['display_description'],
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2264
                                                source_volume=vinfo)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2265
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2266
            instance.system_metadata['old_instance_volid'] = volume_id
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2267
            instance.system_metadata['new_instance_volid'] = newvolume['id']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2268
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2269
            # TODO(npower): Polling is what nova/compute/manager also does when
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2270
            # creating a new volume, so we do likewise here.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2271
            while True:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2272
                volume = self._volume_api.get(context, newvolume['id'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2273
                if volume['status'] != 'creating':
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2274
                    break
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2275
                greenthread.sleep(1)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2276
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2277
            if nrgb > orgb:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2278
                try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2279
                    self._volume_api.extend(context, newvolume['id'], nrgb)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2280
                except Exception:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2281
                    LOG.error(_("Failed to extend the new volume"))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2282
                    self._cleanup_migrate_disk(context, instance, newvolume)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2283
                    raise
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2284
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2285
            disk_info = newvolume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2286
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2287
        return disk_info
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2288
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2289
    def snapshot(self, context, instance, image_id, update_task_state):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2290
        """Snapshots the specified instance.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2291
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2292
        :param context: security context
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2293
        :param instance: nova.objects.instance.Instance
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2294
        :param image_id: Reference to a pre-created image that will
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2295
                         hold the snapshot.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2296
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2297
        # Get original base image info
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2298
        (base_service, base_id) = glance.get_remote_image_service(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2299
            context, instance['image_ref'])
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2300
        try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2301
            base = base_service.show(context, base_id)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2302
        except exception.ImageNotFound:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2303
            base = {}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2304
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2305
        snapshot_service, snapshot_id = glance.get_remote_image_service(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2306
            context, image_id)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2307
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2308
        # Build updated snapshot image metadata
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2309
        snapshot = snapshot_service.show(context, snapshot_id)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2310
        metadata = {
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2311
            'is_public': False,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2312
            'status': 'active',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2313
            'name': snapshot['name'],
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2314
            'properties': {
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2315
                'image_location': 'snapshot',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2316
                'image_state': 'available',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2317
                'owner_id': instance['project_id'],
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2318
                'instance_uuid': instance['uuid'],
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2319
            }
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2320
        }
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2321
        # Match architecture, hypervisor_type and vm_mode properties to base
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2322
        # image.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2323
        for prop in ['architecture', 'hypervisor_type', 'vm_mode']:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2324
            if prop in base.get('properties', {}):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2325
                base_prop = base['properties'][prop]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2326
                metadata['properties'][prop] = base_prop
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2327
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2328
        # Set generic container and disk formats initially in case the glance
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2329
        # service rejects unified archives (uar) and zfs in metadata
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2330
        metadata['container_format'] = 'ovf'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2331
        metadata['disk_format'] = 'raw'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2332
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2333
        update_task_state(task_state=task_states.IMAGE_PENDING_UPLOAD)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2334
        snapshot_directory = CONF.solariszones_snapshots_directory
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2335
        fileutils.ensure_tree(snapshot_directory)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2336
        snapshot_name = uuid.uuid4().hex
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2337
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2338
        with utils.tempdir(dir=snapshot_directory) as tmpdir:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2339
            out_path = os.path.join(tmpdir, snapshot_name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2340
            zone_name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2341
            utils.execute('/usr/sbin/archiveadm', 'create', '--root-only',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2342
                          '-z', zone_name, out_path)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2343
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2344
            LOG.info(_("Snapshot extracted, beginning image upload"),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2345
                     instance=instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2346
            try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2347
                # Upload the archive image to the image service
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2348
                update_task_state(
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2349
                    task_state=task_states.IMAGE_UPLOADING,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2350
                    expected_state=task_states.IMAGE_PENDING_UPLOAD)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2351
                with open(out_path, 'r') as image_file:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2352
                    snapshot_service.update(context,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2353
                                            image_id,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2354
                                            metadata,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2355
                                            image_file)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2356
                    LOG.info(_("Snapshot image upload complete"),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2357
                             instance=instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2358
                try:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2359
                    # Try to update the image metadata container and disk
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2360
                    # formats more suitably for a unified archive if the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2361
                    # glance server recognises them.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2362
                    metadata['container_format'] = 'uar'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2363
                    metadata['disk_format'] = 'zfs'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2364
                    snapshot_service.update(context,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2365
                                            image_id,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2366
                                            metadata,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2367
                                            None)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  2368
                except exception.Invalid:
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2369
                    LOG.warning(_("Image service rejected image metadata "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2370
                                  "container and disk formats 'uar' and "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2371
                                  "'zfs'. Using generic values 'ovf' and "
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2372
                                  "'raw' as fallbacks."))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2373
            finally:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2374
                # Delete the snapshot image file source
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2375
                os.unlink(out_path)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2376
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2377
    def post_interrupted_snapshot_cleanup(self, context, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2378
        """Cleans up any resources left after an interrupted snapshot.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2379
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2380
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2381
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2382
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2383
        pass
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2384
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2385
    def _cleanup_finish_migration(self, context, instance, disk_info,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2386
                                  network_info, samehost):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2387
        """Best effort attempt at cleaning up any additional resources that are
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2388
        not directly managed by Nova or Cinder so as not to leak these
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2389
        resources.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2390
        """
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2391
        if disk_info:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2392
            self._volume_api.detach(context, disk_info['id'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2393
            self._volume_api.delete(context, disk_info['id'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2394
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2395
            old_rvid = instance.system_metadata.get('old_instance_volid')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2396
            if old_rvid:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2397
                connector = self.get_volume_connector(instance)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2398
                connection_info = self._volume_api.initialize_connection(
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2399
                                    context, old_rvid, connector)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2400
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2401
                new_rvid = instance.system_metadata['new_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2402
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2403
                rootmp = instance.root_device_name
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2404
                self._volume_api.attach(context, old_rvid, instance['uuid'],
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2405
                                        rootmp)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2406
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2407
                bdmobj = objects.BlockDeviceMapping()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2408
                bdm = bdmobj.get_by_volume_id(context, new_rvid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2409
                bdm['connection_info'] = jsonutils.dumps(connection_info)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2410
                bdm['volume_id'] = old_rvid
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2411
                bdm.save()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2412
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2413
                del instance.system_metadata['new_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2414
                del instance.system_metadata['old_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2415
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2416
        if not samehost:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2417
            self.destroy(context, instance, network_info)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2418
            instance['host'] = instance['launched_on']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2419
            instance['node'] = instance['launched_on']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2420
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2421
    def finish_migration(self, context, migration, instance, disk_info,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2422
                         network_info, image_meta, resize_instance,
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2423
                         block_device_info=None, power_on=True):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2424
        """Completes a resize.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2425
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2426
        :param context: the context for the migration/resize
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2427
        :param migration: the migrate/resize information
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2428
        :param instance: nova.objects.instance.Instance being migrated/resized
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2429
        :param disk_info: the newly transferred disk information
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2430
        :param network_info:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2431
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2432
        :param image_meta: image object returned by nova.image.glance that
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2433
                           defines the image from which this instance
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2434
                           was created
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2435
        :param resize_instance: True if the instance is being resized,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2436
                                False otherwise
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2437
        :param block_device_info: instance volume block device info
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2438
        :param power_on: True if the instance should be powered on, False
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2439
                         otherwise
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2440
        """
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2441
        if not resize_instance:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2442
            raise NotImplementedError()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2443
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2444
        samehost = (migration['dest_node'] == migration['source_node'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2445
        if samehost:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2446
            instance.system_metadata['old_vm_state'] = vm_states.RESIZED
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2447
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2448
        inst_type = flavor_obj.Flavor.get_by_id(
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2449
            nova_context.get_admin_context(read_deleted='yes'),
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2450
            instance['instance_type_id'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2451
        extra_specs = inst_type['extra_specs'].copy()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2452
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2453
        name = instance['name']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2454
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2455
        if disk_info:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2456
            bmap = block_device_info.get('block_device_mapping')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2457
            rootmp = instance['root_device_name']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2458
            for entry in bmap:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2459
                if entry['mount_device'] == rootmp:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2460
                    mount_dev = entry['mount_device']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2461
                    root_ci = entry['connection_info']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2462
                    break
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2463
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2464
        try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2465
            if samehost:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2466
                metadstr = 'new_instance_type_vcpus'
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2467
                cpu = int(instance.system_metadata[metadstr])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2468
                metadstr = 'new_instance_type_memory_mb'
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2469
                mem = int(instance.system_metadata[metadstr])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2470
                self._set_num_cpu(name, cpu, brand)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2471
                self._set_memory_cap(name, mem, brand)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2472
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2473
                # Add the new disk to the volume if the size of the disk
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2474
                # changed
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2475
                if disk_info:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2476
                    metadstr = 'new_instance_type_root_gb'
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2477
                    rgb = int(instance.system_metadata[metadstr])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2478
                    self._resize_disk_migration(context, instance,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2479
                                                root_ci['serial'],
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2480
                                                disk_info['id'],
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2481
                                                rgb, mount_dev)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2482
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2483
            else:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2484
                # No need to check disk_info here, because when not on the
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2485
                # same host a disk_info is always passed in.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2486
                mount_dev = 'c1d0'
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2487
                root_serial = root_ci['serial']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2488
                connection_info = self._resize_disk_migration(context,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2489
                                                              instance,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2490
                                                              root_serial,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2491
                                                              disk_info['id'],
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2492
                                                              0, mount_dev,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2493
                                                              samehost)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2494
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2495
                self._create_config(context, instance, network_info,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2496
                                    connection_info, None)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2497
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2498
                zone = self._get_zone_by_name(name)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2499
                if zone is None:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2500
                    raise exception.InstanceNotFound(instance_id=name)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2501
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2502
                zone.attach(['-x', 'initialize-hostdata'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2503
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2504
                bmap = block_device_info.get('block_device_mapping')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2505
                for entry in bmap:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2506
                    if entry['mount_device'] != rootmp:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2507
                        self.attach_volume(context,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2508
                                           entry['connection_info'], instance,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2509
                                           entry['mount_device'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2510
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2511
            if power_on:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2512
                self._power_on(instance)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2513
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2514
                if brand == ZONE_BRAND_SOLARIS:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2515
                    return
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2516
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2517
                # Toggle the autoexpand to extend the size of the rpool.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2518
                # We need to sleep for a few seconds to make sure the zone
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2519
                # is in a state to accept the toggle.  Once bugs are fixed
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2520
                # around the autoexpand and the toggle is no longer needed
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2521
                # or zone.boot() returns only after the zone is ready we
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2522
                # can remove this hack.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2523
                greenthread.sleep(15)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2524
                out, err = utils.execute('/usr/sbin/zlogin', '-S', name,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2525
                                         '/usr/sbin/zpool', 'set',
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2526
                                         'autoexpand=off', 'rpool')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2527
                out, err = utils.execute('/usr/sbin/zlogin', '-S', name,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2528
                                         '/usr/sbin/zpool', 'set',
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2529
                                         'autoexpand=on', 'rpool')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2530
        except Exception:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2531
            # Attempt to cleanup the new zone and new volume to at least
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2532
            # give the user a chance to recover without too many hoops
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2533
            self._cleanup_finish_migration(context, instance, disk_info,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2534
                                           network_info, samehost)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2535
            raise
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2536
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2537
    def confirm_migration(self, context, migration, instance, network_info):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2538
        """Confirms a resize, destroying the source VM.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2539
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2540
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2541
        """
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2542
        samehost = (migration['dest_host'] == self.get_host_ip_addr())
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2543
        old_rvid = instance.system_metadata.get('old_instance_volid')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2544
        new_rvid = instance.system_metadata.get('new_instance_volid')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2545
        if new_rvid and old_rvid:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2546
            new_vname = instance['display_name'] + "-" + self._rootzpool_suffix
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2547
            del instance.system_metadata['old_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2548
            del instance.system_metadata['new_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2549
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2550
            self._volume_api.delete(context, old_rvid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2551
            self._volume_api.update(context, new_rvid,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2552
                                    {'display_name': new_vname})
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2553
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2554
        if not samehost:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2555
            self.destroy(context, instance, network_info)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2556
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2557
    def _resize_disk_migration(self, context, instance, configured,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2558
                               replacement, newvolumesz, mountdev,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2559
                               samehost=True):
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2560
        """Handles the zone root volume switch-over or simply
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2561
        initializing the connection for the new zone if not resizing to the
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2562
        same host
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2563
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2564
        :param context: the context for the _resize_disk_migration
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2565
        :param instance: nova.objects.instance.Instance being resized
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2566
        :param configured: id of the current configured volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2567
        :param replacement: id of the new volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2568
        :param newvolumesz: size of the new volume
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2569
        :param mountdev: the mount point of the device
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2570
        :param samehost: is the resize happening on the same host
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2571
        """
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2572
        connector = self.get_volume_connector(instance)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2573
        connection_info = self._volume_api.initialize_connection(context,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2574
                                                                 replacement,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2575
                                                                 connector)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2576
        connection_info['serial'] = replacement
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2577
        rootmp = instance.root_device_name
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2578
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2579
        if samehost:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2580
            name = instance['name']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2581
            zone = self._get_zone_by_name(name)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2582
            if zone is None:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2583
                raise exception.InstanceNotFound(instance_id=name)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2584
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2585
            # Need to detach the zone and re-attach the zone if this is a
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2586
            # non-global zone so that the update of the rootzpool resource does
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2587
            # not fail.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2588
            if zone.brand == ZONE_BRAND_SOLARIS:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2589
                zone.detach()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2590
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2591
            try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2592
                self._set_boot_device(name, connection_info, zone.brand)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2593
            finally:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2594
                if zone.brand == ZONE_BRAND_SOLARIS:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2595
                    zone.attach()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2596
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2597
        try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2598
            self._volume_api.detach(context, configured)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2599
        except Exception:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2600
            LOG.error(_("Failed to detach the volume"))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2601
            raise
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2602
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2603
        try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2604
            self._volume_api.attach(context, replacement, instance['uuid'],
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2605
                                    rootmp)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2606
        except Exception:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2607
            LOG.error(_("Failed to attach the volume"))
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2608
            raise
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2609
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2610
        bdmobj = objects.BlockDeviceMapping()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2611
        bdm = bdmobj.get_by_volume_id(context, configured)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2612
        bdm['connection_info'] = jsonutils.dumps(connection_info)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2613
        bdm['volume_id'] = replacement
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2614
        bdm.save()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2615
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2616
        if not samehost:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2617
            return connection_info
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2618
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2619
    def finish_revert_migration(self, context, instance, network_info,
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2620
                                block_device_info=None, power_on=True):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2621
        """Finish reverting a resize.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2622
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2623
        :param context: the context for the finish_revert_migration
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2624
        :param instance: nova.objects.instance.Instance being migrated/resized
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2625
        :param network_info:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2626
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2627
        :param block_device_info: instance volume block device info
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2628
        :param power_on: True if the instance should be powered on, False
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2629
                         otherwise
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2630
        """
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2631
        # If this is not a samehost migration then we need to re-attach the
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2632
        # original volume to the instance.  If this was processed in the
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2633
        # initial revert handling this work has already been done.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2634
        old_rvid = instance.system_metadata.get('old_instance_volid')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2635
        if old_rvid:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2636
            connector = self.get_volume_connector(instance)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2637
            connection_info = self._volume_api.initialize_connection(context,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2638
                                                                     old_rvid,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2639
                                                                     connector)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2640
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2641
            new_rvid = instance.system_metadata['new_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2642
            self._volume_api.detach(context, new_rvid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2643
            self._volume_api.delete(context, new_rvid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2644
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2645
            rootmp = instance.root_device_name
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2646
            self._volume_api.attach(context, old_rvid, instance['uuid'],
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2647
                                    rootmp)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2648
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2649
            bdmobj = objects.BlockDeviceMapping()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2650
            bdm = bdmobj.get_by_volume_id(context, new_rvid)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2651
            bdm['connection_info'] = jsonutils.dumps(connection_info)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2652
            bdm['volume_id'] = old_rvid
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2653
            bdm.save()
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2654
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2655
            del instance.system_metadata['new_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2656
            del instance.system_metadata['old_instance_volid']
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2657
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2658
            rootmp = instance.root_device_name
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2659
            bmap = block_device_info.get('block_device_mapping')
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2660
            for entry in bmap:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2661
                if entry['mount_device'] != rootmp:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2662
                    self.attach_volume(context,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2663
                                       entry['connection_info'], instance,
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2664
                                       entry['mount_device'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2665
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  2666
        self._power_on(instance)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2667
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2668
    def pause(self, instance):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2669
        """Pause the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2670
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2671
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2672
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2673
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2674
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2675
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2676
    def unpause(self, instance):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2677
        """Unpause paused VM instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2678
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2679
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2680
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2681
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2682
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2683
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2684
    def suspend(self, instance):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2685
        """suspend the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2686
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2687
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2688
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2689
        # TODO(Vek): Need to pass context in for access to auth_token
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2690
        raise NotImplementedError()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2691
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2692
    def resume(self, context, instance, network_info, block_device_info=None):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2693
        """resume the specified instance.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2694
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2695
        :param context: the context for the resume
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2696
        :param instance: nova.objects.instance.Instance being resumed
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2697
        :param network_info:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2698
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2699
        :param block_device_info: instance volume block device info
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2700
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2701
        raise NotImplementedError()
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2702
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2703
    def resume_state_on_host_boot(self, context, instance, network_info,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2704
                                  block_device_info=None):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2705
        """resume guest state when a host is booted.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2706
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2707
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2708
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2709
        name = instance['name']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2710
        zone = self._get_zone_by_name(name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2711
        if zone is None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2712
            raise exception.InstanceNotFound(instance_id=name)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2713
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2714
        # TODO(dcomay): Should reconcile with value of zone's autoboot
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2715
        # property.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2716
        if self._get_state(zone) not in (power_state.CRASHED,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2717
                                         power_state.SHUTDOWN):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2718
            return
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2719
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2720
        self._power_on(instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2721
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2722
    def rescue(self, context, instance, network_info, image_meta,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2723
               rescue_password):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2724
        """Rescue the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2725
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2726
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2727
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2728
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2729
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2730
    def set_bootable(self, instance, is_bootable):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2731
        """Set the ability to power on/off an instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2732
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2733
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2734
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2735
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2736
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2737
    def unrescue(self, instance, network_info):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2738
        """Unrescue the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2739
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2740
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2741
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2742
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2743
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2744
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2745
    def power_off(self, instance, timeout=0, retry_interval=0):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2746
        """Power off the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2747
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2748
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2749
        :param timeout: time to wait for GuestOS to shutdown
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2750
        :param retry_interval: How often to signal guest while
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2751
                               waiting for it to shutdown
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2752
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2753
        self._power_off(instance, 'SOFT')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2754
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2755
    def power_on(self, context, instance, network_info,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2756
                 block_device_info=None):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2757
        """Power on the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2758
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2759
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2760
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2761
        self._power_on(instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2762
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2763
    def soft_delete(self, instance):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2764
        """Soft delete the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2765
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2766
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2767
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2768
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2769
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2770
    def restore(self, instance):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2771
        """Restore the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2772
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2773
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2774
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2775
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2776
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2777
    def _get_zpool_property(self, prop, zpool):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2778
        """Get the value of property from the zpool."""
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2779
        try:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2780
            value = None
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2781
            (out, _err) = utils.execute('/usr/sbin/zpool', 'get', prop, zpool)
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  2782
        except processutils.ProcessExecutionError as ex:
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  2783
            reason = ex.stderr
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2784
            LOG.error(_("Failed to get property '%s' from zpool '%s': %s")
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  2785
                      % (prop, zpool, reason))
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2786
            return value
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2787
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2788
        zpool_prop = out.splitlines()[1].split()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2789
        if zpool_prop[1] == prop:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2790
            value = zpool_prop[2]
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2791
        return value
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2792
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2793
    def _update_host_stats(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2794
        """Update currently known host stats."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2795
        host_stats = {}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2796
        host_stats['vcpus'] = os.sysconf('SC_NPROCESSORS_ONLN')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2797
        pages = os.sysconf('SC_PHYS_PAGES')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2798
        host_stats['memory_mb'] = self._pages_to_kb(pages) / 1024
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2799
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2800
        out, err = utils.execute('/usr/sbin/zfs', 'list', '-Ho', 'name', '/')
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2801
        root_zpool = out.split('/')[0]
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2802
        size = self._get_zpool_property('size', root_zpool)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2803
        if size is not None:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2804
            host_stats['local_gb'] = Size(size).get(Size.gb_units)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2805
        else:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2806
            host_stats['local_gb'] = 0
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2807
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2808
        # Account for any existing processor sets by looking at the the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2809
        # number of CPUs not assigned to any processor sets.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2810
        kstat_data = self._get_kstat_by_name('misc', 'unix', '0', 'pset')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2811
        if kstat_data is not None:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2812
            host_stats['vcpus_used'] = \
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2813
                host_stats['vcpus'] - kstat_data['ncpus']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2814
        else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2815
            host_stats['vcpus_used'] = 0
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2816
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2817
        # Subtract the number of free pages from the total to get the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2818
        # used.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2819
        kstat_data = self._get_kstat_by_name('pages', 'unix', '0',
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2820
                                             'system_pages')
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2821
        if kstat_data is not None:
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2822
            free_ram_mb = self._pages_to_kb(kstat_data['freemem']) / 1024
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2823
            host_stats['memory_mb_used'] = \
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2824
                host_stats['memory_mb'] - free_ram_mb
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2825
        else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2826
            host_stats['memory_mb_used'] = 0
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2827
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2828
        free = self._get_zpool_property('free', root_zpool)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2829
        if free is not None:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2830
            free_disk_gb = Size(free).get(Size.gb_units)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2831
        else:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2832
            free_disk_gb = 0
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2833
        host_stats['local_gb_used'] = host_stats['local_gb'] - free_disk_gb
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2834
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2835
        host_stats['hypervisor_type'] = 'solariszones'
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2836
        host_stats['hypervisor_version'] = \
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2837
            utils.convert_version_to_int(HYPERVISOR_VERSION)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2838
        host_stats['hypervisor_hostname'] = self._uname[1]
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2839
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2840
        if self._uname[4] == 'i86pc':
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2841
            architecture = 'x86_64'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2842
        else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2843
            architecture = 'sparc64'
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2844
        cpu_info = {
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2845
            'arch': architecture
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2846
        }
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2847
        host_stats['cpu_info'] = jsonutils.dumps(cpu_info)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2848
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2849
        host_stats['disk_available_least'] = 0
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2850
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2851
        supported_instances = [
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2852
            (architecture, 'solariszones', 'solariszones')
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2853
        ]
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2854
        host_stats['supported_instances'] = \
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2855
            jsonutils.dumps(supported_instances)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2856
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2857
        self._host_stats = host_stats
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2858
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2859
    def get_available_resource(self, nodename):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2860
        """Retrieve resource information.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2861
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2862
        This method is called when nova-compute launches, and
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2863
        as part of a periodic task that records the results in the DB.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2864
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2865
        :param nodename:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2866
            node which the caller want to get resources from
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2867
            a driver that manages only one node can safely ignore this
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2868
        :returns: Dictionary describing resources
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2869
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2870
        self._update_host_stats()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2871
        host_stats = self._host_stats
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2872
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2873
        resources = {}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2874
        resources['vcpus'] = host_stats['vcpus']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2875
        resources['memory_mb'] = host_stats['memory_mb']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2876
        resources['local_gb'] = host_stats['local_gb']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2877
        resources['vcpus_used'] = host_stats['vcpus_used']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2878
        resources['memory_mb_used'] = host_stats['memory_mb_used']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2879
        resources['local_gb_used'] = host_stats['local_gb_used']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2880
        resources['hypervisor_type'] = host_stats['hypervisor_type']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2881
        resources['hypervisor_version'] = host_stats['hypervisor_version']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2882
        resources['hypervisor_hostname'] = host_stats['hypervisor_hostname']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2883
        resources['cpu_info'] = host_stats['cpu_info']
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2884
        resources['disk_available_least'] = host_stats['disk_available_least']
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2885
        resources['supported_instances'] = host_stats['supported_instances']
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2886
        return resources
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2887
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2888
    def pre_live_migration(self, context, instance, block_device_info,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2889
                           network_info, disk_info, migrate_data=None):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2890
        """Prepare an instance for live migration
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2891
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2892
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2893
        :param instance: nova.objects.instance.Instance object
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2894
        :param block_device_info: instance block device information
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2895
        :param network_info: instance network information
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2896
        :param disk_info: instance disk information
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2897
        :param migrate_data: implementation specific data dict.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2898
        """
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2899
        return {}
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2900
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2901
    def _live_migration(self, name, dest, dry_run=False):
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2902
        """Live migration of a Solaris kernel zone to another host."""
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2903
        zone = self._get_zone_by_name(name)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2904
        if zone is None:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2905
            raise exception.InstanceNotFound(instance_id=name)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2906
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2907
        options = []
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2908
        live_migration_cipher = CONF.live_migration_cipher
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2909
        if live_migration_cipher is not None:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2910
            options.extend(['-c', live_migration_cipher])
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2911
        if dry_run:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2912
            options.append('-nq')
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2913
        options.append('ssh://nova@' + dest)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2914
        zone.migrate(options)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2915
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2916
    def live_migration(self, context, instance, dest,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2917
                       post_method, recover_method, block_migration=False,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2918
                       migrate_data=None):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2919
        """Live migration of an instance to another host.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2920
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2921
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2922
        :param instance:
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2923
            nova.db.sqlalchemy.models.Instance object
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2924
            instance object that is migrated.
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2925
        :param dest: destination host
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2926
        :param post_method:
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2927
            post operation method.
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2928
            expected nova.compute.manager._post_live_migration.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2929
        :param recover_method:
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2930
            recovery method when any exception occurs.
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2931
            expected nova.compute.manager._rollback_live_migration.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2932
        :param block_migration: if true, migrate VM disk.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2933
        :param migrate_data: implementation specific params.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2934
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2935
        """
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2936
        name = instance['name']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2937
        try:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2938
            self._live_migration(name, dest, dry_run=False)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2939
        except Exception as ex:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2940
            with excutils.save_and_reraise_exception():
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  2941
                reason = zonemgr_strerror(ex)
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2942
                LOG.error(_("Unable to live migrate instance '%s' to host "
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2943
                            "'%s' via zonemgr(3RAD): %s")
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  2944
                          % (name, dest, reason))
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2945
                recover_method(context, instance, dest, block_migration)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2946
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2947
        post_method(context, instance, dest, block_migration, migrate_data)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2948
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2949
    def rollback_live_migration_at_destination(self, context, instance,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2950
                                               network_info,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2951
                                               block_device_info,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2952
                                               destroy_disks=True,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2953
                                               migrate_data=None):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2954
        """Clean up destination node after a failed live migration.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2955
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2956
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2957
        :param instance: instance object that was being migrated
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2958
        :param network_info: instance network information
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2959
        :param block_device_info: instance block device information
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2960
        :param destroy_disks:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2961
            if true, destroy disks at destination during cleanup
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2962
        :param migrate_data: implementation specific params
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2963
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2964
        """
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2965
        pass
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2966
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2967
    def post_live_migration(self, context, instance, block_device_info,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2968
                            migrate_data=None):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2969
        """Post operation of live migration at source host.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2970
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2971
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2972
        :instance: instance object that was migrated
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2973
        :block_device_info: instance block device information
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  2974
        :param migrate_data: if not None, it is a dict which has data
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  2975
        """
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2976
        try:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2977
            # These methods log if problems occur so no need to double log
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2978
            # here. Just catch any stray exceptions and allow destroy to
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2979
            # proceed.
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2980
            if self._has_vnc_console_service(instance):
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2981
                self._disable_vnc_console_service(instance)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2982
                self._delete_vnc_console_service(instance)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2983
        except Exception:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2984
            pass
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2985
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2986
        name = instance['name']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2987
        zone = self._get_zone_by_name(name)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2988
        # If instance cannot be found, just return.
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2989
        if zone is None:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2990
            LOG.warning(_("Unable to find instance '%s' via zonemgr(3RAD)")
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2991
                        % name)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2992
            return
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2993
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2994
        try:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2995
            self._delete_config(instance)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2996
        except Exception as ex:
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  2997
            reason = zonemgr_strerror(ex)
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  2998
            LOG.error(_("Unable to delete configuration for instance '%s' via "
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  2999
                        "zonemgr(3RAD): %s") % (name, reason))
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3000
            raise
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3001
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3002
    def post_live_migration_at_source(self, context, instance, network_info):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3003
        """Unplug VIFs from networks at source.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3004
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3005
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3006
        :param instance: instance object reference
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3007
        :param network_info: instance network information
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3008
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3009
        raise NotImplementedError(_("Hypervisor driver does not support "
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3010
                                    "post_live_migration_at_source method"))
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3011
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3012
    def post_live_migration_at_destination(self, context, instance,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3013
                                           network_info,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3014
                                           block_migration=False,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3015
                                           block_device_info=None):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3016
        """Post operation of live migration at destination host.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3017
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3018
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3019
        :param instance: instance object that is migrated
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3020
        :param network_info: instance network information
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3021
        :param block_migration: if true, post operation of block_migration.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3022
        """
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3023
        pass
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3024
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3025
    def check_instance_shared_storage_local(self, context, instance):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3026
        """Check if instance files located on shared storage.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3027
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3028
        This runs check on the destination host, and then calls
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3029
        back to the source host to check the results.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3030
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3031
        :param context: security context
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3032
        :param instance: nova.db.sqlalchemy.models.Instance
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3033
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3034
        raise NotImplementedError()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3035
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3036
    def check_instance_shared_storage_remote(self, context, data):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3037
        """Check if instance files located on shared storage.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3038
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3039
        :param context: security context
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3040
        :param data: result of check_instance_shared_storage_local
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3041
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3042
        raise NotImplementedError()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3043
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3044
    def check_instance_shared_storage_cleanup(self, context, data):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3045
        """Do cleanup on host after check_instance_shared_storage calls
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3046
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3047
        :param context: security context
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3048
        :param data: result of check_instance_shared_storage_local
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3049
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3050
        pass
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3051
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3052
    def check_can_live_migrate_destination(self, context, instance,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3053
                                           src_compute_info, dst_compute_info,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3054
                                           block_migration=False,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3055
                                           disk_over_commit=False):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3056
        """Check if it is possible to execute live migration.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3057
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3058
        This runs checks on the destination host, and then calls
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3059
        back to the source host to check the results.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3060
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3061
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3062
        :param instance: nova.db.sqlalchemy.models.Instance
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3063
        :param src_compute_info: Info about the sending machine
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3064
        :param dst_compute_info: Info about the receiving machine
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3065
        :param block_migration: if true, prepare for block migration
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3066
        :param disk_over_commit: if true, allow disk over commit
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3067
        :returns: a dict containing migration info (hypervisor-dependent)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3068
        """
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3069
        src_cpu_info = jsonutils.loads(src_compute_info['cpu_info'])
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3070
        src_cpu_arch = src_cpu_info['arch']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3071
        dst_cpu_info = jsonutils.loads(dst_compute_info['cpu_info'])
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3072
        dst_cpu_arch = dst_cpu_info['arch']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3073
        if src_cpu_arch != dst_cpu_arch:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3074
            reason = (_("CPU architectures between source host '%s' (%s) and "
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3075
                        "destination host '%s' (%s) are incompatible.")
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3076
                      % (src_compute_info['hypervisor_hostname'], src_cpu_arch,
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3077
                         dst_compute_info['hypervisor_hostname'],
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3078
                         dst_cpu_arch))
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3079
            raise exception.MigrationPreCheckError(reason=reason)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3080
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3081
        extra_specs = self._get_extra_specs(instance)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3082
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3083
        if brand != ZONE_BRAND_SOLARIS_KZ:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3084
            # Only Solaris kernel zones are currently supported.
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3085
            reason = (_("'%s' branded zones do not currently support live "
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3086
                        "migration.") % brand)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3087
            raise exception.MigrationPreCheckError(reason=reason)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3088
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3089
        if block_migration:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3090
            reason = (_('Block migration is not currently supported.'))
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3091
            raise exception.MigrationPreCheckError(reason=reason)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3092
        if disk_over_commit:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3093
            reason = (_('Disk overcommit is not currently supported.'))
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3094
            raise exception.MigrationPreCheckError(reason=reason)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3095
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3096
        dest_check_data = {
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3097
            'hypervisor_hostname': dst_compute_info['hypervisor_hostname']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3098
        }
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3099
        return dest_check_data
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3100
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3101
    def check_can_live_migrate_destination_cleanup(self, context,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3102
                                                   dest_check_data):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3103
        """Do required cleanup on dest host after check_can_live_migrate calls
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3104
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3105
        :param context: security context
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3106
        :param dest_check_data: result of check_can_live_migrate_destination
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3107
        """
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3108
        pass
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3109
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3110
    def _check_local_volumes_present(self, block_device_info):
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3111
        """Check if local volumes are attached to the instance."""
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3112
        bmap = block_device_info.get('block_device_mapping')
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3113
        for entry in bmap:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3114
            connection_info = entry['connection_info']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3115
            driver_type = connection_info['driver_volume_type']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3116
            if driver_type == 'local':
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3117
                reason = (_("Instances with attached '%s' volumes are not "
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3118
                            "currently supported.") % driver_type)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3119
                raise exception.MigrationPreCheckError(reason=reason)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3120
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3121
    def check_can_live_migrate_source(self, context, instance,
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3122
                                      dest_check_data, block_device_info):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3123
        """Check if it is possible to execute live migration.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3124
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3125
        This checks if the live migration can succeed, based on the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3126
        results from check_can_live_migrate_destination.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3127
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3128
        :param context: security context
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3129
        :param instance: nova.db.sqlalchemy.models.Instance
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3130
        :param dest_check_data: result of check_can_live_migrate_destination
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3131
        :param block_device_info: result of _get_instance_block_device_info
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3132
        :returns: a dict containing migration info (hypervisor-dependent)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3133
        """
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3134
        self._check_local_volumes_present(block_device_info)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3135
        name = instance['name']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3136
        dest = dest_check_data['hypervisor_hostname']
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3137
        try:
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3138
            self._live_migration(name, dest, dry_run=True)
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3139
        except Exception as ex:
5414
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  3140
            reason = zonemgr_strerror(ex)
1697d1e334a5 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
saurabh.vyas@oracle.com
parents: 5413
diff changeset
  3141
            raise exception.MigrationPreCheckError(reason=reason)
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3142
        return dest_check_data
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3143
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3144
    def get_instance_disk_info(self, instance_name,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3145
                               block_device_info=None):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3146
        """Retrieve information about actual disk sizes of an instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3147
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3148
        :param instance_name:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3149
            name of a nova instance as returned by list_instances()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3150
        :param block_device_info:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3151
            Optional; Can be used to filter out devices which are
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3152
            actually volumes.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3153
        :return:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3154
            json strings with below format::
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3155
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3156
                "[{'path':'disk',
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3157
                   'type':'raw',
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3158
                   'virt_disk_size':'10737418240',
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3159
                   'backing_file':'backing_file',
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3160
                   'disk_size':'83886080'
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3161
                   'over_committed_disk_size':'10737418240'},
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3162
                   ...]"
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3163
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3164
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3165
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3166
    def refresh_security_group_rules(self, security_group_id):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3167
        """This method is called after a change to security groups.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3168
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3169
        All security groups and their associated rules live in the datastore,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3170
        and calling this method should apply the updated rules to instances
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3171
        running the specified security group.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3172
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3173
        An error should be raised if the operation cannot complete.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3174
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3175
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3176
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3177
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3178
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3179
    def refresh_security_group_members(self, security_group_id):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3180
        """This method is called when a security group is added to an instance.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3181
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3182
        This message is sent to the virtualization drivers on hosts that are
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3183
        running an instance that belongs to a security group that has a rule
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3184
        that references the security group identified by `security_group_id`.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3185
        It is the responsibility of this method to make sure any rules
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3186
        that authorize traffic flow with members of the security group are
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3187
        updated and any new members can communicate, and any removed members
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3188
        cannot.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3189
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3190
        Scenario:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3191
            * we are running on host 'H0' and we have an instance 'i-0'.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3192
            * instance 'i-0' is a member of security group 'speaks-b'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3193
            * group 'speaks-b' has an ingress rule that authorizes group 'b'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3194
            * another host 'H1' runs an instance 'i-1'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3195
            * instance 'i-1' is a member of security group 'b'
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3196
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3197
            When 'i-1' launches or terminates we will receive the message
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3198
            to update members of group 'b', at which time we will make
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3199
            any changes needed to the rules for instance 'i-0' to allow
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3200
            or deny traffic coming from 'i-1', depending on if it is being
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3201
            added or removed from the group.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3202
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3203
        In this scenario, 'i-1' could just as easily have been running on our
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3204
        host 'H0' and this method would still have been called.  The point was
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3205
        that this method isn't called on the host where instances of that
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3206
        group are running (as is the case with
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3207
        :py:meth:`refresh_security_group_rules`) but is called where references
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3208
        are made to authorizing those instances.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3209
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3210
        An error should be raised if the operation cannot complete.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3211
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3212
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3213
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3214
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3215
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3216
    def refresh_provider_fw_rules(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3217
        """This triggers a firewall update based on database changes.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3218
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3219
        When this is called, rules have either been added or removed from the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3220
        datastore.  You can retrieve rules with
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3221
        :py:meth:`nova.db.provider_fw_rule_get_all`.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3222
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3223
        Provider rules take precedence over security group rules.  If an IP
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3224
        would be allowed by a security group ingress rule, but blocked by
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3225
        a provider rule, then packets from the IP are dropped.  This includes
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3226
        intra-project traffic in the case of the allow_project_net_traffic
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3227
        flag for the libvirt-derived classes.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3228
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3229
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3230
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3231
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3232
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3233
    def refresh_instance_security_rules(self, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3234
        """Refresh security group rules
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3235
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3236
        Gets called when an instance gets added to or removed from
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3237
        the security group the instance is a member of or if the
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3238
        group gains or loses a rule.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3239
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3240
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3241
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3242
    def reset_network(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3243
        """reset networking for specified instance."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3244
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3245
        pass
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3246
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3247
    def ensure_filtering_rules_for_instance(self, instance, network_info):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3248
        """Setting up filtering rules and waiting for its completion.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3249
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3250
        To migrate an instance, filtering rules to hypervisors
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3251
        and firewalls are inevitable on destination host.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3252
        ( Waiting only for filtering rules to hypervisor,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3253
        since filtering rules to firewall rules can be set faster).
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3254
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3255
        Concretely, the below method must be called.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3256
        - setup_basic_filtering (for nova-basic, etc.)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3257
        - prepare_instance_filter(for nova-instance-instance-xxx, etc.)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3258
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3259
        to_xml may have to be called since it defines PROJNET, PROJMASK.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3260
        but libvirt migrates those value through migrateToURI(),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3261
        so , no need to be called.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3262
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3263
        Don't use thread for this method since migration should
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3264
        not be started when setting-up filtering rules operations
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3265
        are not completed.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3266
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3267
        :param instance: nova.objects.instance.Instance object
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3268
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3269
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3270
        # TODO(Vek): Need to pass context in for access to auth_token
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3271
        pass
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3272
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3273
    def filter_defer_apply_on(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3274
        """Defer application of IPTables rules."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3275
        pass
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3276
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3277
    def filter_defer_apply_off(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3278
        """Turn off deferral of IPTables rules and apply the rules now."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3279
        pass
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3280
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3281
    def unfilter_instance(self, instance, network_info):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3282
        """Stop filtering instance."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3283
        # TODO(Vek): Need to pass context in for access to auth_token
5413
bca6b9853ab7 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
saurabh.vyas@oracle.com
parents: 5412
diff changeset
  3284
        pass
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3285
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3286
    def set_admin_password(self, instance, new_pass):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3287
        """Set the root password on the specified instance.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3288
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3289
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3290
        :param new_password: the new password
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3291
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3292
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3293
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3294
    def inject_file(self, instance, b64_path, b64_contents):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3295
        """Writes a file on the specified instance.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3296
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3297
        The first parameter is an instance of nova.compute.service.Instance,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3298
        and so the instance is being specified as instance.name. The second
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3299
        parameter is the base64-encoded path to which the file is to be
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3300
        written on the instance; the third is the contents of the file, also
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3301
        base64-encoded.
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3302
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3303
        NOTE(russellb) This method is deprecated and will be removed once it
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3304
        can be removed from nova.compute.manager.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3305
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3306
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3307
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3308
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3309
    def change_instance_metadata(self, context, instance, diff):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3310
        """Applies a diff to the instance metadata.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3311
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3312
        This is an optional driver method which is used to publish
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3313
        changes to the instance's metadata to the hypervisor.  If the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3314
        hypervisor has no means of publishing the instance metadata to
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3315
        the instance, then this method should not be implemented.
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3316
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3317
        :param context: security context
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3318
        :param instance: nova.objects.instance.Instance
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3319
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3320
        pass
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3321
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3322
    def inject_network_info(self, instance, nw_info):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3323
        """inject network info for specified instance."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3324
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3325
        pass
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3326
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3327
    def poll_rebooting_instances(self, timeout, instances):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3328
        """Poll for rebooting instances
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3329
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3330
        :param timeout: the currently configured timeout for considering
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3331
                        rebooting instances to be stuck
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3332
        :param instances: instances that have been in rebooting state
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3333
                          longer than the configured timeout
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3334
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3335
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3336
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3337
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3338
    def host_power_action(self, host, action):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3339
        """Reboots, shuts down or powers up the host."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3340
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3341
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3342
    def host_maintenance_mode(self, host, mode):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3343
        """Start/Stop host maintenance window. On start, it triggers
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3344
        guest VMs evacuation.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3345
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3346
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3347
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3348
    def set_host_enabled(self, host, enabled):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3349
        """Sets the specified host's ability to accept new instances."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3350
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3351
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3352
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3353
    def get_host_uptime(self, host):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3354
        """Returns the result of calling "uptime" on the target host."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3355
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3356
        return utils.execute('/usr/bin/uptime')[0]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3357
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3358
    def plug_vifs(self, instance, network_info):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3359
        """Plug VIFs into networks.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3360
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3361
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3362
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3363
        # TODO(Vek): Need to pass context in for access to auth_token
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3364
        pass
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3365
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3366
    def unplug_vifs(self, instance, network_info):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3367
        """Unplug VIFs from networks.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3368
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3369
        :param instance: nova.objects.instance.Instance
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3370
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3371
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3372
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3373
    def get_host_stats(self, refresh=False):
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3374
        """Return currently known host stats.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3375
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3376
        If the hypervisor supports pci passthrough, the returned
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3377
        dictionary includes a key-value pair for it.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3378
        The key of pci passthrough device is "pci_passthrough_devices"
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3379
        and the value is a json string for the list of assignable
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3380
        pci devices. Each device is a dictionary, with mandatory
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3381
        keys of 'address', 'vendor_id', 'product_id', 'dev_type',
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3382
        'dev_id', 'label' and other optional device specific information.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3383
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3384
        Refer to the objects/pci_device.py for more idea of these keys.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3385
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3386
        if refresh or not self._host_stats:
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3387
            self._update_host_stats()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3388
        return self._host_stats
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3389
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3390
    def get_host_cpu_stats(self):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3391
        """Get the currently known host CPU stats.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3392
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3393
        :returns: a dict containing the CPU stat info, eg:
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3394
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3395
            | {'kernel': kern,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3396
            |  'idle': idle,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3397
            |  'user': user,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3398
            |  'iowait': wait,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3399
            |   'frequency': freq},
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3400
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3401
                  where kern and user indicate the cumulative CPU time
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3402
                  (nanoseconds) spent by kernel and user processes
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3403
                  respectively, idle indicates the cumulative idle CPU time
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3404
                  (nanoseconds), wait indicates the cumulative I/O wait CPU
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3405
                  time (nanoseconds), since the host is booting up; freq
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3406
                  indicates the current CPU frequency (MHz). All values are
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3407
                  long integers.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3408
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3409
        """
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3410
        raise NotImplementedError()
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3411
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3412
    def block_stats(self, instance_name, disk_id):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3413
        """Return performance counters associated with the given disk_id on the
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3414
        given instance_name.  These are returned as [rd_req, rd_bytes, wr_req,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3415
        wr_bytes, errs], where rd indicates read, wr indicates write, req is
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3416
        the total number of I/O requests made, bytes is the total number of
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3417
        bytes transferred, and errs is the number of requests held up due to a
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3418
        full pipeline.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3419
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3420
        All counters are long integers.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3421
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3422
        This method is optional.  On some platforms (e.g. XenAPI) performance
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3423
        statistics can be retrieved directly in aggregate form, without Nova
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3424
        having to do the aggregation.  On those platforms, this method is
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3425
        unused.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3426
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3427
        Note that this function takes an instance ID.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3428
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3429
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3430
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3431
    def interface_stats(self, instance_name, iface_id):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3432
        """Return performance counters associated with the given iface_id
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3433
        on the given instance_id.  These are returned as [rx_bytes, rx_packets,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3434
        rx_errs, rx_drop, tx_bytes, tx_packets, tx_errs, tx_drop], where rx
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3435
        indicates receive, tx indicates transmit, bytes and packets indicate
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3436
        the total number of bytes or packets transferred, and errs and dropped
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3437
        is the total number of packets failed / dropped.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3438
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3439
        All counters are long integers.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3440
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3441
        This method is optional.  On some platforms (e.g. XenAPI) performance
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3442
        statistics can be retrieved directly in aggregate form, without Nova
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3443
        having to do the aggregation.  On those platforms, this method is
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3444
        unused.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3445
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3446
        Note that this function takes an instance ID.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3447
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3448
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3449
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3450
    def deallocate_networks_on_reschedule(self, instance):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3451
        """Does the driver want networks deallocated on reschedule?"""
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3452
        return False
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3453
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3454
    def macs_for_instance(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3455
        """What MAC addresses must this instance have?
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3456
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3457
        Some hypervisors (such as bare metal) cannot do freeform virtualisation
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3458
        of MAC addresses. This method allows drivers to return a set of MAC
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3459
        addresses that the instance is to have. allocate_for_instance will take
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3460
        this into consideration when provisioning networking for the instance.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3461
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3462
        Mapping of MAC addresses to actual networks (or permitting them to be
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3463
        freeform) is up to the network implementation layer. For instance,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3464
        with openflow switches, fixed MAC addresses can still be virtualised
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3465
        onto any L2 domain, with arbitrary VLANs etc, but regular switches
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3466
        require pre-configured MAC->network mappings that will match the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3467
        actual configuration.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3468
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3469
        Most hypervisors can use the default implementation which returns None.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3470
        Hypervisors with MAC limits should return a set of MAC addresses, which
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3471
        will be supplied to the allocate_for_instance call by the compute
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3472
        manager, and it is up to that call to ensure that all assigned network
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3473
        details are compatible with the set of MAC addresses.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3474
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3475
        This is called during spawn_instance by the compute manager.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3476
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3477
        :return: None, or a set of MAC ids (e.g. set(['12:34:56:78:90:ab'])).
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3478
            None means 'no constraints', a set means 'these and only these
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3479
            MAC addresses'.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3480
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3481
        return None
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3482
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3483
    def dhcp_options_for_instance(self, instance):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3484
        """Get DHCP options for this instance.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3485
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3486
        Some hypervisors (such as bare metal) require that instances boot from
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3487
        the network, and manage their own TFTP service. This requires passing
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3488
        the appropriate options out to the DHCP service. Most hypervisors can
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3489
        use the default implementation which returns None.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3490
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3491
        This is called during spawn_instance by the compute manager.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3492
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3493
        Note that the format of the return value is specific to Quantum
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3494
        client API.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3495
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3496
        :return: None, or a set of DHCP options, eg:
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3497
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3498
             |    [{'opt_name': 'bootfile-name',
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3499
             |      'opt_value': '/tftpboot/path/to/config'},
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3500
             |     {'opt_name': 'server-ip-address',
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3501
             |      'opt_value': '1.2.3.4'},
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3502
             |     {'opt_name': 'tftp-server',
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3503
             |      'opt_value': '1.2.3.4'}
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3504
             |    ]
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3505
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3506
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3507
        pass
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3508
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3509
    def manage_image_cache(self, context, all_instances):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3510
        """Manage the driver's local image cache.
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3511
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3512
        Some drivers chose to cache images for instances on disk. This method
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3513
        is an opportunity to do management of that cache which isn't directly
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3514
        related to other calls into the driver. The prime example is to clean
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3515
        the cache and remove images which are no longer of interest.
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3516
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3517
        :param instances: nova.objects.instance.InstanceList
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3518
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3519
        pass
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3520
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3521
    def add_to_aggregate(self, context, aggregate, host, **kwargs):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3522
        """Add a compute host to an aggregate."""
3809
eb8d6ce0657e PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3200
diff changeset
  3523
        # NOTE(jogo) Currently only used for XenAPI-Pool
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3524
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3525
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3526
    def remove_from_aggregate(self, context, aggregate, host, **kwargs):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3527
        """Remove a compute host from an aggregate."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3528
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3529
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3530
    def undo_aggregate_operation(self, context, op, aggregate,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3531
                                 host, set_error=True):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3532
        """Undo for Resource Pools."""
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3533
        raise NotImplementedError()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3534
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3535
    def get_volume_connector(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3536
        """Get connector information for the instance for attaching to volumes.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3537
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3538
        Connector information is a dictionary representing the ip of the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3539
        machine that will be making the connection, the name of the iscsi
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3540
        initiator, the WWPN and WWNN values of the Fibre Channel initiator,
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3541
        and the hostname of the machine as follows::
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3542
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3543
            {
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3544
                'ip': ip,
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3545
                'initiator': initiator,
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3546
                'wwnns': wwnns,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3547
                'wwpns': wwpns,
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3548
                'host': hostname
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3549
            }
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3550
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3551
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3552
        connector = {'ip': self.get_host_ip_addr(),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3553
                     'host': CONF.host}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3554
        if not self._initiator:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3555
            self._initiator = self._get_iscsi_initiator()
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3556
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3557
        if self._initiator:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3558
            connector['initiator'] = self._initiator
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3559
        else:
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3560
            LOG.warning(_("Could not determine iSCSI initiator name"),
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3561
                        instance=instance)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3562
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3563
        if not self._fc_wwnns:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3564
            self._fc_wwnns = self._get_fc_wwnns()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3565
            if not self._fc_wwnns or len(self._fc_wwnns) == 0:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3566
                LOG.debug(_('Could not determine Fibre Channel '
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3567
                          'World Wide Node Names'),
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3568
                          instance=instance)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3569
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3570
        if not self._fc_wwpns:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3571
            self._fc_wwpns = self._get_fc_wwpns()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3572
            if not self._fc_wwpns or len(self._fc_wwpns) == 0:
5412
8566c7ab4a73 22074872 nova leaks volumes if _create_config throws an exception
saurabh.vyas@oracle.com
parents: 5411
diff changeset
  3573
                LOG.debug(_('Could not determine Fibre Channel '
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3574
                          'World Wide Port Names'),
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3575
                          instance=instance)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3576
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3577
        if self._fc_wwnns and self._fc_wwpns:
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3578
            connector["wwnns"] = self._fc_wwnns
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3579
            connector["wwpns"] = self._fc_wwpns
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3580
        return connector
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3581
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3582
    def get_available_nodes(self, refresh=False):
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3583
        """Returns nodenames of all nodes managed by the compute service.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3584
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3585
        This method is for multi compute-nodes support. If a driver supports
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3586
        multi compute-nodes, this method returns a list of nodenames managed
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3587
        by the service. Otherwise, this method should return
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3588
        [hypervisor_hostname].
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3589
        """
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3590
        stats = self.get_host_stats(refresh=refresh)
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3591
        if not isinstance(stats, list):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3592
            stats = [stats]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3593
        return [s['hypervisor_hostname'] for s in stats]
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3594
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3595
    def node_is_available(self, nodename):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3596
        """Return whether this compute service manages a particular node."""
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3597
        if nodename in self.get_available_nodes():
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3598
            return True
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3599
        # Refresh and check again.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3600
        return nodename in self.get_available_nodes(refresh=True)
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3601
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3602
    def get_per_instance_usage(self):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3603
        """Get information about instance resource usage.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3604
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3605
        :returns: dict of  nova uuid => dict of usage info
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3606
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3607
        return {}
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3608
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3609
    def instance_on_disk(self, instance):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3610
        """Checks access of instance files on the host.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3611
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3612
        :param instance: nova.objects.instance.Instance to lookup
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3613
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3614
        Returns True if files of an instance with the supplied ID accessible on
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3615
        the host, False otherwise.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3616
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3617
        .. note::
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3618
            Used in rebuild for HA implementation and required for validation
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3619
            of access to instance shared disk files
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3620
        """
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3621
        return False
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3622
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3623
    def register_event_listener(self, callback):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3624
        """Register a callback to receive events.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3625
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3626
        Register a callback to receive asynchronous event
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3627
        notifications from hypervisors. The callback will
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3628
        be invoked with a single parameter, which will be
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3629
        an instance of the nova.virt.event.Event class.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3630
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3631
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3632
        self._compute_event_callback = callback
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3633
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3634
    def emit_event(self, event):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3635
        """Dispatches an event to the compute manager.
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3636
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3637
        Invokes the event callback registered by the
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3638
        compute manager to dispatch the event. This
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3639
        must only be invoked from a green thread.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3640
        """
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3641
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3642
        if not self._compute_event_callback:
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3643
            LOG.debug("Discarding event %s", str(event))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3644
            return
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3645
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3646
        if not isinstance(event, virtevent.Event):
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3647
            raise ValueError(
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3648
                _("Event must be an instance of nova.virt.event.Event"))
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3649
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3650
        try:
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3651
            LOG.debug("Emitting event %s", str(event))
3028
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3652
            self._compute_event_callback(event)
5e73a3a3f66a PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3653
        except Exception as ex:
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3654
            LOG.error(_("Exception dispatching event %(event)s: %(ex)s"),
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3655
                      {'event': event, 'ex': ex})
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3656
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3657
    def delete_instance_files(self, instance):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3658
        """Delete any lingering instance files for an instance.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3659
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3660
        :param instance: nova.objects.instance.Instance
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3661
        :returns: True if the instance was deleted from disk, False otherwise.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3662
        """
5430
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  3663
        LOG.debug(_("Cleaning up for instance %s"), instance['name'])
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  3664
        # Delete the zone configuration for the instance using destroy, because
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  3665
        # it will simply take care of the work, and we don't need to duplicate
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  3666
        # the code here.
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  3667
        try:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  3668
            self.destroy(None, instance, None)
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  3669
        except Exception:
b6b088be89d5 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5429
diff changeset
  3670
            return False
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3671
        return True
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3672
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3673
    @property
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3674
    def need_legacy_block_device_info(self):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3675
        """Tell the caller if the driver requires legacy block device info.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3676
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3677
        Tell the caller whether we expect the legacy format of block
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3678
        device info to be passed in to methods that expect it.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3679
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3680
        return True
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3681
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3682
    def volume_snapshot_create(self, context, instance, volume_id,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3683
                               create_info):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3684
        """Snapshots volumes attached to a specified instance.
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3685
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3686
        :param context: request context
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3687
        :param instance: nova.objects.instance.Instance that has the volume
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3688
               attached
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3689
        :param volume_id: Volume to be snapshotted
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3690
        :param create_info: The data needed for nova to be able to attach
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3691
               to the volume.  This is the same data format returned by
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3692
               Cinder's initialize_connection() API call.  In the case of
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3693
               doing a snapshot, it is the image file Cinder expects to be
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3694
               used as the active disk after the snapshot operation has
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3695
               completed.  There may be other data included as well that is
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3696
               needed for creating the snapshot.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3697
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3698
        raise NotImplementedError()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3699
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3700
    def volume_snapshot_delete(self, context, instance, volume_id,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3701
                               snapshot_id, delete_info):
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3702
        """Snapshots volumes attached to a specified instance.
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3703
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3704
        :param context: request context
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3705
        :param instance: nova.objects.instance.Instance that has the volume
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3706
               attached
3178
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3707
        :param volume_id: Attached volume associated with the snapshot
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3708
        :param snapshot_id: The snapshot to delete.
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3709
        :param delete_info: Volume backend technology specific data needed to
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3710
               be able to complete the snapshot.  For example, in the case of
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3711
               qcow2 backed snapshots, this would include the file being
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3712
               merged, and the file being merged into (if appropriate).
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3713
        """
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3714
        raise NotImplementedError()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3715
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3716
    def default_root_device_name(self, instance, image_meta, root_bdm):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3717
        """Provide a default root device name for the driver."""
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3718
        raise NotImplementedError()
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3719
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3720
    def default_device_names_for_instance(self, instance, root_device_name,
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3721
                                          *block_device_lists):
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3722
        """Default the missing device names in the block device mapping."""
77584387a894 PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 3141
diff changeset
  3723
        raise NotImplementedError()
4072
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3724
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3725
    def is_supported_fs_format(self, fs_type):
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3726
        """Check whether the file format is supported by this driver
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3727
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3728
        :param fs_type: the file system type to be checked,
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3729
                        the validate values are defined at disk API module.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3730
        """
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3731
        # NOTE(jichenjc): Return False here so that every hypervisor
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3732
        #                 need to define their supported file system
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3733
        #                 type and implement this function at their
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3734
        #                 virt layer.
db0cec748ec0 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3809
diff changeset
  3735
        return False