components/openstack/nova/files/solariszones/driver.py
author Laszlo Peter <laszlo.peter@oracle.com>
Wed, 07 Sep 2016 14:48:42 -0700
changeset 6854 52081f923019
parent 6458 d1b4766148c2
child 6900 7563855115a6
permissions -rw-r--r--
24465850 Update Nova for the Mitaka release 22456289 nova interface-attach reports an error; adds unusable entry to instance anyway
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     1
# Copyright 2011 Justin Santa Barbara
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     2
# All Rights Reserved.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     3
#
5252
947514442d05 22513201 nova resize revert will fail if there are volumes attached
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5196
diff changeset
     4
# Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     5
#
353323c7bdc1 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
353323c7bdc1 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
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     8
#    a copy of the License at
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     9
#
353323c7bdc1 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
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    11
#
353323c7bdc1 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
353323c7bdc1 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
353323c7bdc1 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
353323c7bdc1 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
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    16
#    under the License.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    17
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    18
"""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    19
Driver for Solaris Zones (nee Containers):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    20
"""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    21
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
    22
import base64
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    23
import glob
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    24
import os
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    25
import platform
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    26
import shutil
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    27
import tempfile
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    28
import uuid
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    29
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
    30
from openstack_common import get_ovsdb_info
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
    31
import rad.bindings.com.oracle.solaris.rad.archivemgr_1 as archivemgr
4669
342ab6111bb5 20957828 swift Makefile has typo for COMPONENT_BUGDB
david.comay@oracle.com
parents: 4585
diff changeset
    32
import rad.bindings.com.oracle.solaris.rad.kstat_1 as kstat
342ab6111bb5 20957828 swift Makefile has typo for COMPONENT_BUGDB
david.comay@oracle.com
parents: 4585
diff changeset
    33
import rad.bindings.com.oracle.solaris.rad.zonemgr_1 as zonemgr
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    34
import rad.client
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    35
import rad.connect
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
    36
from solaris_install.target.size import Size
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    37
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    38
from cinderclient import exceptions as cinder_exception
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    39
from cinderclient.v1 import client as v1_client
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    40
from eventlet import greenthread
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    41
from keystoneclient import exceptions as keystone_exception
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    42
from lxml import etree
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    43
from oslo_concurrency import processutils
4553
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
    44
from oslo_config import cfg
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    45
from oslo_log import log as logging
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    46
from oslo_serialization import jsonutils
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    47
from oslo_utils import excutils
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    48
from oslo_utils import fileutils
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    49
from oslo_utils import strutils
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    50
from oslo_utils import versionutils
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
    51
from passlib.hash import sha256_crypt
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
    52
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
    53
from nova.api.metadata import password
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    54
from nova.compute import arch
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    55
from nova.compute import hv_type
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    56
from nova.compute import power_state
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    57
from nova.compute import task_states
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    58
from nova.compute import vm_mode
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
    59
from nova.compute import vm_states
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    60
from nova import conductor
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    61
import nova.conf
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
    62
from nova.console import type as ctype
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    63
from nova import context as nova_context
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
    64
from nova import crypto
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    65
from nova import exception
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    66
from nova.i18n import _, _LE, _LI
5607
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
    67
from nova.image import API as glance_api
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    68
from nova.image import glance
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    69
from nova.network.neutronv2 import api as neutronv2_api
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
    70
from nova import objects
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
    71
from nova.objects import flavor as flavor_obj
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    72
from nova.objects import migrate_data as migrate_data_obj
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    73
from nova import utils
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    74
from nova.virt import driver
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    75
from nova.virt import event as virtevent
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    76
from nova.virt import hardware
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    77
from nova.virt import images
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    78
from nova.virt.solariszones import sysconfig
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    79
from nova.volume.cinder import API
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    80
from nova.volume.cinder import cinderclient
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    81
from nova.volume.cinder import translate_volume_exception
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    82
from nova.volume.cinder import _untranslate_volume_summary_view
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    83
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    84
solariszones_opts = [
6014
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    85
    cfg.StrOpt('boot_volume_type',
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    86
               default=None,
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    87
               help='Cinder volume type to use for boot volumes'),
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    88
    cfg.StrOpt('boot_volume_az',
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    89
               default=None,
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    90
               help='Cinder availability zone to use for boot volumes'),
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    91
    cfg.StrOpt('glancecache_dirname',
5609
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5608
diff changeset
    92
               default='/var/share/nova/images',
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    93
               help='Default path to Glance cache for Solaris Zones.'),
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
    94
    cfg.StrOpt('live_migration_cipher',
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
    95
               help='Cipher to use for encryption of memory traffic during '
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
    96
                    'live migration. If not specified, a common encryption '
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
    97
                    'algorithm will be negotiated. Options include: none or '
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
    98
                    'the name of a supported OpenSSL cipher algorithm.'),
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    99
    cfg.StrOpt('solariszones_snapshots_directory',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   100
               default='$instances_path/snapshots',
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   101
               help='Location to store snapshots before uploading them to the '
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   102
                    'Glance image service.'),
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   103
    cfg.StrOpt('zones_suspend_path',
5192
f5359fbbaadd 22151922 zones_suspend_path needs update based on post-PSARC discussion
david.comay@oracle.com
parents: 5191
diff changeset
   104
               default='/var/share/zones/SYSsuspend',
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   105
               help='Default path for suspend images for Solaris Zones.'),
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   106
    cfg.BoolOpt('solariszones_boot_options',
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   107
                default=True,
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   108
                help='Allow kernel boot options to be set in instance '
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   109
                     'metadata.'),
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   110
]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   111
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   112
CONF = nova.conf.CONF
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   113
CONF.register_opts(solariszones_opts, 'solariszones')
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   114
LOG = logging.getLogger(__name__)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   115
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   116
# These should match the strings returned by the zone_state_str()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   117
# function in the (private) libzonecfg library. These values are in turn
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   118
# returned in the 'state' string of the Solaris Zones' RAD interface by
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   119
# the zonemgr(3RAD) provider.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   120
ZONE_STATE_CONFIGURED = 'configured'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   121
ZONE_STATE_INCOMPLETE = 'incomplete'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   122
ZONE_STATE_UNAVAILABLE = 'unavailable'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   123
ZONE_STATE_INSTALLED = 'installed'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   124
ZONE_STATE_READY = 'ready'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   125
ZONE_STATE_RUNNING = 'running'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   126
ZONE_STATE_SHUTTING_DOWN = 'shutting_down'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   127
ZONE_STATE_DOWN = 'down'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   128
ZONE_STATE_MOUNTED = 'mounted'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   129
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   130
# Mapping between zone state and Nova power_state.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   131
SOLARISZONES_POWER_STATE = {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   132
    ZONE_STATE_CONFIGURED:      power_state.NOSTATE,
1990
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
   133
    ZONE_STATE_INCOMPLETE:      power_state.NOSTATE,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   134
    ZONE_STATE_UNAVAILABLE:     power_state.NOSTATE,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   135
    ZONE_STATE_INSTALLED:       power_state.SHUTDOWN,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   136
    ZONE_STATE_READY:           power_state.RUNNING,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   137
    ZONE_STATE_RUNNING:         power_state.RUNNING,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   138
    ZONE_STATE_SHUTTING_DOWN:   power_state.RUNNING,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   139
    ZONE_STATE_DOWN:            power_state.RUNNING,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   140
    ZONE_STATE_MOUNTED:         power_state.NOSTATE
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   141
}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   142
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   143
# Solaris Zones brands as defined in brands(5).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   144
ZONE_BRAND_LABELED = 'labeled'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   145
ZONE_BRAND_SOLARIS = 'solaris'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   146
ZONE_BRAND_SOLARIS_KZ = 'solaris-kz'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   147
ZONE_BRAND_SOLARIS10 = 'solaris10'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   148
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   149
# Mapping between supported zone brands and the name of the corresponding
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   150
# brand template.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   151
ZONE_BRAND_TEMPLATE = {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   152
    ZONE_BRAND_SOLARIS:         'SYSdefault',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   153
    ZONE_BRAND_SOLARIS_KZ:      'SYSsolaris-kz',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   154
}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   155
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   156
MAX_CONSOLE_BYTES = 102400
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   157
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
   158
VNC_CONSOLE_BASE_FMRI = 'svc:/application/openstack/nova/zone-vnc-console'
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
   159
# Required in order to create a zone VNC console SMF service instance
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
   160
VNC_SERVER_PATH = '/usr/bin/vncserver'
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
   161
XTERM_PATH = '/usr/bin/xterm'
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   162
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   163
ROOTZPOOL_RESOURCE = 'rootzpool'
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   164
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   165
# The underlying Solaris Zones framework does not expose a specific
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   166
# version number, instead relying on feature tests to identify what is
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   167
# and what is not supported. A HYPERVISOR_VERSION is defined here for
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   168
# Nova's use but it generally should not be changed unless there is a
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   169
# incompatible change such as concerning kernel zone live migration.
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   170
HYPERVISOR_VERSION = '5.11'
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   171
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   172
shared_storage = ['iscsi', 'fibre_channel']
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   173
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   174
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   175
def lookup_resource(zone, resource):
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   176
    """Lookup specified resource from specified Solaris Zone."""
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   177
    try:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   178
        val = zone.getResources(zonemgr.Resource(resource))
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   179
    except rad.client.ObjectError:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   180
        return None
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   181
    except Exception:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   182
        raise
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   183
    return val[0] if val else None
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   184
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   185
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   186
def lookup_resource_property(zone, resource, prop, filter=None):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   187
    """Lookup specified property from specified Solaris Zone resource."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   188
    try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   189
        val = zone.getResourceProperties(zonemgr.Resource(resource, filter),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   190
                                         [prop])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   191
    except rad.client.ObjectError:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   192
        return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   193
    except Exception:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   194
        raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   195
    return val[0].value if val else None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   196
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   197
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   198
def lookup_resource_property_value(zone, resource, prop, value):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   199
    """Lookup specified property with value from specified Solaris Zone
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
   200
    resource. Returns resource object if matching value is found, else None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   201
    """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   202
    try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   203
        resources = zone.getResources(zonemgr.Resource(resource))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   204
        for resource in resources:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   205
            for propertee in resource.properties:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   206
                if propertee.name == prop and propertee.value == value:
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
   207
                    return resource
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   208
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   209
            return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   210
    except rad.client.ObjectError:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   211
        return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   212
    except Exception:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   213
        raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   214
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   215
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   216
def zonemgr_strerror(ex):
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   217
    """Format the payload from a zonemgr(3RAD) rad.client.ObjectError
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   218
    exception into a sensible error string that can be logged. Newlines
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   219
    are converted to a colon-space string to create a single line.
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   220
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   221
    If the exception was something other than rad.client.ObjectError,
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   222
    just return it as a string.
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   223
    """
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   224
    if not isinstance(ex, rad.client.ObjectError):
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   225
        return str(ex)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   226
    payload = ex.get_payload()
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   227
    if payload.code == zonemgr.ErrorCode.NONE:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   228
        return str(ex)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   229
    error = [str(payload.code)]
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   230
    if payload.str is not None and payload.str != '':
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   231
        error.append(payload.str)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   232
    if payload.stderr is not None and payload.stderr != '':
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   233
        stderr = payload.stderr.rstrip()
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   234
        error.append(stderr.replace('\n', ': '))
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   235
    result = ': '.join(error)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   236
    return result
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   237
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   238
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   239
class SolarisVolumeAPI(API):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   240
    """ Extending the volume api to support additional cinder sub-commands
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   241
    """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   242
    @translate_volume_exception
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   243
    def create(self, context, size, name, description, snapshot=None,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   244
               image_id=None, volume_type=None, metadata=None,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   245
               availability_zone=None, source_volume=None):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   246
        """Clone the source volume by calling the cinderclient version of
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   247
        create with a source_volid argument
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   248
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   249
        :param context: the context for the clone
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   250
        :param size: size of the new volume, must be the same as the source
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   251
            volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   252
        :param name: display_name of the new volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   253
        :param description: display_description of the new volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   254
        :param snapshot: Snapshot object
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   255
        :param image_id: image_id to create the volume from
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   256
        :param volume_type: type of volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   257
        :param metadata: Additional metadata for the volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   258
        :param availability_zone: zone:host where the volume is to be created
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   259
        :param source_volume: Volume object
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   260
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   261
        Returns a volume object
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   262
        """
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   263
        client = cinderclient(context)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   264
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   265
        if snapshot is not None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   266
            snapshot_id = snapshot['id']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   267
        else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   268
            snapshot_id = None
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   269
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   270
        if source_volume is not None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   271
            source_volid = source_volume['id']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   272
        else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   273
            source_volid = None
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   274
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   275
        kwargs = dict(snapshot_id=snapshot_id,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   276
                      volume_type=volume_type,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   277
                      user_id=context.user_id,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   278
                      project_id=context.project_id,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   279
                      availability_zone=availability_zone,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   280
                      metadata=metadata,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   281
                      imageRef=image_id,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   282
                      source_volid=source_volid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   283
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   284
        if isinstance(client, v1_client.Client):
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   285
            kwargs['display_name'] = name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   286
            kwargs['display_description'] = description
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   287
        else:
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   288
            kwargs['name'] = name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   289
            kwargs['description'] = description
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   290
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   291
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   292
            item = cinderclient(context).volumes.create(size, **kwargs)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   293
            return _untranslate_volume_summary_view(context, item)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   294
        except cinder_exception.OverLimit:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   295
            raise exception.OverQuota(overs='volumes')
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   296
        except (cinder_exception.BadRequest,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   297
                keystone_exception.BadRequest) as reason:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   298
            raise exception.InvalidInput(reason=reason)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   299
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   300
    @translate_volume_exception
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   301
    def update(self, context, volume_id, fields):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   302
        """Update the fields of a volume for example used to rename a volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   303
        via a call to cinderclient
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   304
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   305
        :param context: the context for the update
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   306
        :param volume_id: the id of the volume to update
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   307
        :param fields: a dictionary of of the name/value pairs to update
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   308
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   309
        cinderclient(context).volumes.update(volume_id, **fields)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   310
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   311
    @translate_volume_exception
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   312
    def extend(self, context, volume, newsize):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   313
        """Extend the size of a cinder volume by calling the cinderclient
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   314
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   315
        :param context: the context for the extend
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   316
        :param volume: the volume object to extend
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   317
        :param newsize: the new size of the volume in GB
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   318
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   319
        cinderclient(context).volumes.extend(volume, newsize)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   320
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   321
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   322
class ZoneConfig(object):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   323
    """ZoneConfig - context manager for access zone configurations.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   324
    Automatically opens the configuration for a zone and commits any changes
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   325
    before exiting
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   326
    """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   327
    def __init__(self, zone):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   328
        """zone is a zonemgr object representing either a kernel zone or
5190
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
   329
        non-global zone.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   330
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   331
        self.zone = zone
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   332
        self.editing = False
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   333
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   334
    def __enter__(self):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   335
        """enables the editing of the zone."""
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   336
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   337
            self.zone.editConfig()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   338
            self.editing = True
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   339
            return self
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   340
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   341
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   342
            LOG.error(_("Unable to initialize editing of instance '%s' via "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   343
                        "zonemgr(3RAD): %s") % (self.zone.name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   344
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   345
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   346
    def __exit__(self, exc_type, exc_val, exc_tb):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   347
        """looks for any kind of exception before exiting.  If one is found,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   348
        cancel any configuration changes and reraise the exception.  If not,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   349
        commit the new configuration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   350
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   351
        if exc_type is not None and self.editing:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   352
            # We received some kind of exception.  Cancel the config and raise.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   353
            self.zone.cancelConfig()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   354
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   355
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   356
            # commit the config
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   357
            try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   358
                self.zone.commitConfig()
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   359
            except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   360
                reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   361
                LOG.error(_("Unable to commit the new configuration for "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   362
                            "instance '%s' via zonemgr(3RAD): %s")
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   363
                          % (self.zone.name, reason))
4551
aeda29f57900 21307395 nova ZoneConfig class should call cancelConfig when editConfig fails in __exit__
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 4550
diff changeset
   364
aeda29f57900 21307395 nova ZoneConfig class should call cancelConfig when editConfig fails in __exit__
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 4550
diff changeset
   365
                # Last ditch effort to cleanup.
aeda29f57900 21307395 nova ZoneConfig class should call cancelConfig when editConfig fails in __exit__
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 4550
diff changeset
   366
                self.zone.cancelConfig()
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   367
                raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   368
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   369
    def setprop(self, resource, prop, value):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   370
        """sets a property for an existing resource OR creates a new resource
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   371
        with the given property(s).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   372
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   373
        current = lookup_resource_property(self.zone, resource, prop)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   374
        if current is not None and current == value:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   375
            # the value is already set
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   376
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   377
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   378
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   379
            if current is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   380
                self.zone.addResource(zonemgr.Resource(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   381
                    resource, [zonemgr.Property(prop, value)]))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   382
            else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   383
                self.zone.setResourceProperties(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   384
                    zonemgr.Resource(resource),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   385
                    [zonemgr.Property(prop, value)])
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   386
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   387
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   388
            LOG.error(_("Unable to set '%s' property on '%s' resource for "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   389
                        "instance '%s' via zonemgr(3RAD): %s")
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   390
                      % (prop, resource, self.zone.name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   391
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   392
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   393
    def addresource(self, resource, props=None, ignore_exists=False):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   394
        """creates a new resource with an optional property list, or set the
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   395
        property if the resource exists and ignore_exists is true.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   396
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   397
        :param ignore_exists: If the resource exists, set the property for the
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   398
            resource.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   399
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   400
        if props is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   401
            props = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   402
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   403
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   404
            self.zone.addResource(zonemgr.Resource(resource, props))
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   405
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   406
            if isinstance(ex, rad.client.ObjectError):
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   407
                code = ex.get_payload().code
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   408
                if (ignore_exists and
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   409
                        code == zonemgr.ErrorCode.RESOURCE_ALREADY_EXISTS):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   410
                    self.zone.setResourceProperties(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   411
                        zonemgr.Resource(resource, None), props)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   412
                    return
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   413
            reason = zonemgr_strerror(ex)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   414
            LOG.error(_("Unable to create new resource '%s' for instance '%s'"
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   415
                        "via zonemgr(3RAD): %s")
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   416
                      % (resource, self.zone.name, reason))
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   417
            raise
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   418
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   419
    def removeresources(self, resource, props=None):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   420
        """removes resources whose properties include the optional property
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   421
        list specified in props.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   422
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   423
        if props is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   424
            props = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   425
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   426
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   427
            self.zone.removeResources(zonemgr.Resource(resource, props))
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   428
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   429
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   430
            LOG.error(_("Unable to remove resource '%s' for instance '%s' via "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   431
                        "zonemgr(3RAD): %s")
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   432
                      % (resource, self.zone.name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   433
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   434
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   435
    def clear_resource_props(self, resource, props):
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   436
        """Clear property values of a given resource
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   437
        """
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   438
        try:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   439
            self.zone.clearResourceProperties(zonemgr.Resource(resource, None),
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   440
                                              props)
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   441
        except rad.client.ObjectError as ex:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   442
            reason = zonemgr_strerror(ex)
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   443
            LOG.error(_("Unable to clear '%s' property on '%s' resource for "
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   444
                        "instance '%s' via zonemgr(3RAD): %s")
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   445
                      % (props, resource, self.zone.name, reason))
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   446
            raise
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   447
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   448
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   449
class SolarisZonesDriver(driver.ComputeDriver):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   450
    """Solaris Zones Driver using the zonemgr(3RAD) and kstat(3RAD) providers.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   451
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   452
    The interface to this class talks in terms of 'instances' (Amazon EC2 and
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   453
    internal Nova terminology), by which we mean 'running virtual machine'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   454
    (XenAPI terminology) or domain (Xen or libvirt terminology).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   455
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   456
    An instance has an ID, which is the identifier chosen by Nova to represent
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   457
    the instance further up the stack.  This is unfortunately also called a
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   458
    'name' elsewhere.  As far as this layer is concerned, 'instance ID' and
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   459
    'instance name' are synonyms.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   460
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   461
    Note that the instance ID or name is not human-readable or
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   462
    customer-controlled -- it's an internal ID chosen by Nova.  At the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   463
    nova.virt layer, instances do not have human-readable names at all -- such
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   464
    things are only known higher up the stack.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   465
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   466
    Most virtualization platforms will also have their own identity schemes,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   467
    to uniquely identify a VM or domain.  These IDs must stay internal to the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   468
    platform-specific layer, and never escape the connection interface.  The
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   469
    platform-specific layer is responsible for keeping track of which instance
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   470
    ID maps to which platform-specific ID, and vice versa.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   471
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   472
    Some methods here take an instance of nova.compute.service.Instance.  This
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   473
    is the data structure used by nova.compute to store details regarding an
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   474
    instance, and pass them into this layer.  This layer is responsible for
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   475
    translating that generic data structure into terms that are specific to the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   476
    virtualization platform.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   477
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   478
    """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   479
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   480
    capabilities = {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   481
        "has_imagecache": False,
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   482
        "supports_recreate": True,
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   483
        "supports_migrate_to_same_host": False
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   484
    }
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   485
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   486
    def __init__(self, virtapi):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   487
        self.virtapi = virtapi
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   488
        self._archive_manager = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   489
        self._compute_event_callback = None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   490
        self._conductor_api = conductor.API()
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   491
        self._fc_hbas = None
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   492
        self._fc_wwnns = None
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   493
        self._fc_wwpns = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   494
        self._host_stats = {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   495
        self._initiator = None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   496
        self._install_engine = None
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   497
        self._kstat_control = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   498
        self._pagesize = os.sysconf('SC_PAGESIZE')
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   499
        self._rad_connection = None
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   500
        self._rootzpool_suffix = ROOTZPOOL_RESOURCE
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   501
        self._uname = os.uname()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   502
        self._validated_archives = list()
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   503
        self._volume_api = SolarisVolumeAPI()
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   504
        self._zone_manager = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   505
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   506
    @property
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   507
    def rad_connection(self):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   508
        if self._rad_connection is None:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   509
            self._rad_connection = rad.connect.connect_unix()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   510
        else:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   511
            # taken from rad.connect.RadConnection.__repr__ to look for a
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   512
            # closed connection
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   513
            if self._rad_connection._closed is not None:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   514
                # the RAD connection has been lost.  Reconnect to RAD
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   515
                self._rad_connection = rad.connect.connect_unix()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   516
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   517
        return self._rad_connection
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   518
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   519
    @property
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   520
    def zone_manager(self):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   521
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   522
            if (self._zone_manager is None or
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   523
                    self._zone_manager._conn._closed is not None):
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   524
                self._zone_manager = self.rad_connection.get_object(
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   525
                    zonemgr.ZoneManager())
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
   526
        except Exception as ex:
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
   527
            reason = _("Unable to obtain RAD object: %s") % ex
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
   528
            raise exception.NovaException(reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   529
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   530
        return self._zone_manager
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   531
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   532
    @property
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   533
    def kstat_control(self):
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   534
        try:
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   535
            if (self._kstat_control is None or
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   536
                    self._kstat_control._conn._closed is not None):
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   537
                self._kstat_control = self.rad_connection.get_object(
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   538
                    kstat.Control())
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   539
        except Exception as ex:
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   540
            reason = _("Unable to obtain RAD object: %s") % ex
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   541
            raise exception.NovaException(reason)
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   542
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   543
        return self._kstat_control
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   544
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   545
    @property
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   546
    def archive_manager(self):
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   547
        try:
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   548
            if (self._archive_manager is None or
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   549
                    self._archive_manager._conn._closed is not None):
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   550
                self._archive_manager = self.rad_connection.get_object(
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   551
                    archivemgr.ArchiveManager())
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   552
        except Exception as ex:
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   553
            reason = _("Unable to obtain RAD object: %s") % ex
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   554
            raise exception.NovaException(reason)
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   555
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   556
        return self._archive_manager
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   557
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   558
    def init_host(self, host):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   559
        """Initialize anything that is necessary for the driver to function,
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   560
        including catching up with currently running VM's on the given host.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   561
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   562
        # TODO(Vek): Need to pass context in for access to auth_token
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   563
        pass
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   564
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   565
    def cleanup_host(self, host):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   566
        """Clean up anything that is necessary for the driver gracefully stop,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   567
        including ending remote sessions. This is optional.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   568
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   569
        pass
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   570
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   571
    def _get_fc_hbas(self):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   572
        """Get Fibre Channel HBA information."""
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   573
        if self._fc_hbas:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   574
            return self._fc_hbas
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   575
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   576
        out = None
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   577
        try:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   578
            out, err = utils.execute('/usr/sbin/fcinfo', 'hba-port')
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   579
        except processutils.ProcessExecutionError:
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   580
            return []
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   581
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   582
        if out is None:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   583
            raise RuntimeError(_("Cannot find any Fibre Channel HBAs"))
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   584
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   585
        hbas = []
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   586
        hba = {}
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   587
        for line in out.splitlines():
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   588
            line = line.strip()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   589
            # Collect the following hba-port data:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   590
            # 1: Port WWN
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   591
            # 2: State (online|offline)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   592
            # 3: Node WWN
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   593
            if line.startswith("HBA Port WWN:"):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   594
                # New HBA port entry
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   595
                hba = {}
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   596
                wwpn = line.split()[-1]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   597
                hba['port_name'] = wwpn
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   598
                continue
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   599
            elif line.startswith("Port Mode:"):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   600
                mode = line.split()[-1]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   601
                # Skip Target mode ports
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   602
                if mode != 'Initiator':
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   603
                    break
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   604
            elif line.startswith("State:"):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   605
                state = line.split()[-1]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   606
                hba['port_state'] = state
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   607
                continue
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   608
            elif line.startswith("Node WWN:"):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   609
                wwnn = line.split()[-1]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   610
                hba['node_name'] = wwnn
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   611
                continue
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   612
            if len(hba) == 3:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   613
                hbas.append(hba)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   614
                hba = {}
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   615
        self._fc_hbas = hbas
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   616
        return self._fc_hbas
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   617
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   618
    def _get_fc_wwnns(self):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   619
        """Get Fibre Channel WWNNs from the system, if any."""
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   620
        hbas = self._get_fc_hbas()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   621
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   622
        wwnns = []
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   623
        for hba in hbas:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   624
            if hba['port_state'] == 'online':
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   625
                wwnn = hba['node_name']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   626
                wwnns.append(wwnn)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   627
        return wwnns
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   628
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   629
    def _get_fc_wwpns(self):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   630
        """Get Fibre Channel WWPNs from the system, if any."""
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   631
        hbas = self._get_fc_hbas()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   632
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   633
        wwpns = []
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   634
        for hba in hbas:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   635
            if hba['port_state'] == 'online':
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   636
                wwpn = hba['port_name']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   637
                wwpns.append(wwpn)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   638
        return wwpns
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   639
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   640
    def _get_iscsi_initiator(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   641
        """ Return the iSCSI initiator node name IQN for this host """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   642
        out, err = utils.execute('/usr/sbin/iscsiadm', 'list',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   643
                                 'initiator-node')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   644
        # Sample first line of command output:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   645
        # Initiator node name: iqn.1986-03.com.sun:01:e00000000000.4f757217
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   646
        initiator_name_line = out.splitlines()[0]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   647
        initiator_iqn = initiator_name_line.rsplit(' ', 1)[1]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   648
        return initiator_iqn
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   649
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   650
    def _get_zone_by_name(self, name):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   651
        """Return a Solaris Zones object via RAD by name."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   652
        try:
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   653
            zone = self.rad_connection.get_object(
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   654
                zonemgr.Zone(), rad.client.ADRGlobPattern({'name': name}))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   655
        except rad.client.NotFoundError:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   656
            return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   657
        except Exception:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   658
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   659
        return zone
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   660
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   661
    def _get_state(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   662
        """Return the running state, one of the power_state codes."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   663
        return SOLARISZONES_POWER_STATE[zone.state]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   664
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   665
    def _pages_to_kb(self, pages):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   666
        """Convert a number of pages of memory into a total size in KBytes."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   667
        return (pages * self._pagesize) / 1024
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   668
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   669
    def _get_max_mem(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   670
        """Return the maximum memory in KBytes allowed."""
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   671
        if zone.brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   672
            mem_resource = 'swap'
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   673
        else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   674
            mem_resource = 'physical'
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   675
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   676
        max_mem = lookup_resource_property(zone, 'capped-memory', mem_resource)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   677
        if max_mem is not None:
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   678
            return strutils.string_to_bytes("%sB" % max_mem) / 1024
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   679
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   680
        # If physical property in capped-memory doesn't exist, this may
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   681
        # represent a non-global zone so just return the system's total
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   682
        # memory.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   683
        return self._pages_to_kb(os.sysconf('SC_PHYS_PAGES'))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   684
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   685
    def _get_mem(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   686
        """Return the memory in KBytes used by the domain."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   687
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   688
        # There isn't any way of determining this from the hypervisor
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   689
        # perspective in Solaris, so just return the _get_max_mem() value
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   690
        # for now.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   691
        return self._get_max_mem(zone)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   692
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   693
    def _get_num_cpu(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   694
        """Return the number of virtual CPUs for the domain.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   695
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   696
        In the case of kernel zones, the number of virtual CPUs a zone
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   697
        ends up with depends on whether or not there were 'virtual-cpu'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   698
        or 'dedicated-cpu' resources in the configuration or whether
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   699
        there was an assigned pool in the configuration. This algorithm
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   700
        attempts to emulate what the virtual platform code does to
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   701
        determine a number of virtual CPUs to use.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   702
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   703
        # If a 'virtual-cpu' resource exists, use the minimum number of
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   704
        # CPUs defined there.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   705
        ncpus = lookup_resource_property(zone, 'virtual-cpu', 'ncpus')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   706
        if ncpus is not None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   707
            min = ncpus.split('-', 1)[0]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   708
            if min.isdigit():
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   709
                return int(min)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   710
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   711
        # Otherwise if a 'dedicated-cpu' resource exists, use the maximum
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   712
        # number of CPUs defined there.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   713
        ncpus = lookup_resource_property(zone, 'dedicated-cpu', 'ncpus')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   714
        if ncpus is not None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   715
            max = ncpus.split('-', 1)[-1]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   716
            if max.isdigit():
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   717
                return int(max)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   718
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   719
        # Finally if neither resource exists but the zone was assigned a
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   720
        # pool in the configuration, the number of CPUs would be the size
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   721
        # of the processor set. Currently there's no way of easily
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   722
        # determining this so use the system's notion of the total number
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   723
        # of online CPUs.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   724
        return os.sysconf('SC_NPROCESSORS_ONLN')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   725
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   726
    def _get_kstat_by_name(self, kstat_class, module, instance, name):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   727
        """Return Kstat snapshot data via RAD as a dictionary."""
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   728
        pattern = {}
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   729
        if kstat_class is not None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   730
            pattern.update({'class': kstat_class})
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   731
        if module is not None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   732
            pattern.update({'module': module})
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   733
        if instance is not None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   734
            pattern.update({'instance': instance})
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   735
        if name is not None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   736
            pattern.update({'name': name})
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   737
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   738
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   739
            self.kstat_control.update()
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   740
            kstat_objects = self.rad_connection.list_objects(
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   741
                kstat.Kstat(), rad.client.ADRGlobPattern(pattern))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   742
        except Exception as reason:
1990
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
   743
            LOG.info(_("Unable to retrieve kstat object '%s:%s:%s' of class "
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
   744
                       "'%s' via kstat(3RAD): %s")
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
   745
                     % (module, instance, name, kstat_class, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   746
            return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   747
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   748
        kstat_data = []
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   749
        for kstat_object in kstat_objects:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   750
            object = self.rad_connection.get_object(kstat_object)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   751
            for named in object.fresh_snapshot().data.NAMED:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   752
                kstat_data.append(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   753
                    {named.name:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   754
                     getattr(named.value, str(named.value.discriminant))})
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   755
        return kstat_data
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   756
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   757
    def _aggregate_kstat_statistic(self, kstat_data, statistic):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   758
        aggregate = 0
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   759
        for ks in kstat_data:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   760
            value = ks.get(statistic)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   761
            if value is not None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   762
                aggregate += value
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   763
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   764
        return aggregate
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   765
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   766
    def _get_kstat_statistic(self, kstat_data, statistic):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   767
        value = None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   768
        for ks in kstat_data:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   769
            value = ks.get(statistic)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   770
            if value is not None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   771
                break
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   772
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   773
        return value
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   774
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   775
    def _get_cpu_time(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   776
        """Return the CPU time used in nanoseconds."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   777
        if zone.id == -1:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   778
            return 0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   779
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   780
        kstat_data = self._get_kstat_by_name(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   781
            'zones', 'cpu', None, ''.join(('sys_zone_', str(zone.id))))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   782
        if kstat_data is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   783
            return 0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   784
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   785
        cpu_nsec_kernel = self._aggregate_kstat_statistic(kstat_data,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   786
                                                          'cpu_nsec_kernel')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   787
        cpu_nsec_user = self._aggregate_kstat_statistic(kstat_data,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   788
                                                        'cpu_nsec_user')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   789
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   790
        return cpu_nsec_kernel + cpu_nsec_user
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   791
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   792
    def get_info(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   793
        """Get the current status of an instance, by name (not ID!)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   794
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   795
        :param instance: nova.objects.instance.Instance object
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   796
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   797
        Returns a InstanceInfo object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   798
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   799
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   800
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   801
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   802
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   803
            raise exception.InstanceNotFound(instance_id=name)
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   804
        return hardware.InstanceInfo(state=self._get_state(zone),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   805
                                     max_mem_kb=self._get_max_mem(zone),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   806
                                     mem_kb=self._get_mem(zone),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   807
                                     num_cpu=self._get_num_cpu(zone),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   808
                                     cpu_time_ns=self._get_cpu_time(zone))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   809
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   810
    def get_num_instances(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   811
        """Return the total number of virtual machines.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   812
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   813
        Return the number of virtual machines that the hypervisor knows
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   814
        about.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   815
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   816
        .. note::
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   817
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   818
            This implementation works for all drivers, but it is
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   819
            not particularly efficient. Maintainers of the virt drivers are
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   820
            encouraged to override this method with something more
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   821
            efficient.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   822
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   823
        return len(self.list_instances())
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   824
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   825
    def instance_exists(self, instance):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   826
        """Checks existence of an instance on the host.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   827
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   828
        :param instance: The instance to lookup
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   829
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   830
        Returns True if an instance with the supplied ID exists on
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   831
        the host, False otherwise.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   832
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   833
        .. note::
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   834
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   835
            This implementation works for all drivers, but it is
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   836
            not particularly efficient. Maintainers of the virt drivers are
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   837
            encouraged to override this method with something more
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   838
            efficient.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   839
        """
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   840
        try:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   841
            return instance.uuid in self.list_instance_uuids()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   842
        except NotImplementedError:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   843
            return instance.name in self.list_instances()
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   844
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   845
    def estimate_instance_overhead(self, instance_info):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   846
        """Estimate the virtualization overhead required to build an instance
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   847
        of the given flavor.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   848
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   849
        Defaults to zero, drivers should override if per-instance overhead
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   850
        calculations are desired.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   851
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   852
        :param instance_info: Instance/flavor to calculate overhead for.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   853
        :returns: Dict of estimated overhead values.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   854
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   855
        return {'memory_mb': 0}
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   856
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   857
    def _get_list_zone_object(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   858
        """Return a list of all Solaris Zones objects via RAD."""
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   859
        return self.rad_connection.list_objects(zonemgr.Zone())
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   860
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   861
    def list_instances(self):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   862
        """Return the names of all the instances known to the virtualization
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   863
        layer, as a list.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   864
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   865
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   866
        instances_list = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   867
        for zone in self._get_list_zone_object():
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   868
            instances_list.append(self.rad_connection.get_object(zone).name)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   869
        return instances_list
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   870
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   871
    def list_instance_uuids(self):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   872
        """Return the UUIDS of all the instances known to the virtualization
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   873
        layer, as a list.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   874
        """
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   875
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   876
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   877
    def _rebuild_block_devices(self, context, instance, bdms, recreate):
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   878
        root_ci = None
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   879
        rootmp = instance['root_device_name']
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   880
        for entry in bdms:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   881
            if entry['connection_info'] is None:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   882
                continue
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   883
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   884
            if entry['device_name'] == rootmp:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   885
                root_ci = jsonutils.loads(entry['connection_info'])
5948
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   886
                # Let's make sure this is a well formed connection_info, by
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
   887
                # checking if it has a serial key that represents the
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
   888
                # volume_id. If not check to see if the block device has a
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
   889
                # volume_id, if so then assign this to the root_ci.serial.
5948
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   890
                #
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   891
                # If we cannot repair the connection_info then simply do not
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   892
                # return a root_ci and let the caller decide if they want to
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   893
                # fail or not.
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   894
                if root_ci.get('serial') is None:
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   895
                    if entry.get('volume_id') is not None:
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   896
                        root_ci['serial'] = entry['volume_id']
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   897
                    else:
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   898
                        LOG.debug(_("Unable to determine the volume id for "
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   899
                                    "the connection info for the root device "
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   900
                                    "for instance '%s'") % instance['name'])
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   901
                        root_ci = None
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   902
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   903
                continue
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   904
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   905
            if not recreate:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   906
                ci = jsonutils.loads(entry['connection_info'])
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   907
                self.detach_volume(ci, instance, entry['device_name'])
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   908
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   909
        if root_ci is None and recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   910
            msg = (_("Unable to find the root device for instance '%s'.")
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   911
                   % instance['name'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   912
            raise exception.NovaException(msg)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   913
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   914
        return root_ci
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   915
6260
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   916
    def _set_instance_metahostid(self, instance):
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   917
        """Attempt to get the hostid from the current configured zone and
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   918
        return the hostid.  Otherwise return None, and do not set the hostid in
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   919
        the instance
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   920
        """
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   921
        hostid = instance.system_metadata.get('hostid')
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   922
        if hostid is not None:
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   923
            return hostid
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   924
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   925
        zone = self._get_zone_by_name(instance['name'])
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   926
        if zone is None:
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   927
            return None
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   928
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   929
        hostid = lookup_resource_property(zone, 'global', 'hostid')
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   930
        if hostid:
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   931
            instance.system_metadata['hostid'] = hostid
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   932
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   933
        return hostid
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   934
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   935
    def rebuild(self, context, instance, image_meta, injected_files,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   936
                admin_password, bdms, detach_block_devices,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   937
                attach_block_devices, network_info=None,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   938
                recreate=False, block_device_info=None,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   939
                preserve_ephemeral=False):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   940
        """Destroy and re-make this instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   941
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   942
        A 'rebuild' effectively purges all existing data from the system and
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   943
        remakes the VM with given 'metadata' and 'personalities'.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   944
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   945
        This base class method shuts down the VM, detaches all block devices,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   946
        then spins up the new VM afterwards. It may be overridden by
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   947
        hypervisors that need to - e.g. for optimisations, or when the 'VM'
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   948
        is actually proxied and needs to be held across the shutdown + spin
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   949
        up steps.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   950
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   951
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   952
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   953
                         This function should use the data there to guide
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   954
                         the creation of the new instance.
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   955
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   956
            The metadata of the image of the instance.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   957
        :param injected_files: User files to inject into instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   958
        :param admin_password: Administrator password to set in instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   959
        :param bdms: block-device-mappings to use for rebuild
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   960
        :param detach_block_devices: function to detach block devices. See
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   961
            nova.compute.manager.ComputeManager:_rebuild_default_impl for
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   962
            usage.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   963
        :param attach_block_devices: function to attach block devices. See
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   964
            nova.compute.manager.ComputeManager:_rebuild_default_impl for
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   965
            usage.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   966
        :param network_info:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   967
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   968
        :param recreate: True if the instance is being recreated on a new
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   969
            hypervisor - all the cleanup of old state is skipped.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   970
        :param block_device_info: Information about block devices to be
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   971
                                  attached to the instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   972
        :param preserve_ephemeral: True if the default ephemeral storage
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   973
                                   partition must be preserved on rebuild
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   974
        """
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   975
        if recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   976
            instance.system_metadata['evac_from'] = instance['launched_on']
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   977
            instance.save()
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   978
            extra_specs = self._get_extra_specs(instance)
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   979
            brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   980
            if brand == ZONE_BRAND_SOLARIS:
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   981
                msg = (_("'%s' branded zones do not currently support "
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   982
                         "evacuation.") % brand)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   983
                raise exception.NovaException(msg)
6260
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   984
        else:
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
   985
            self._power_off(instance, "HALT")
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   986
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   987
        instance.task_state = task_states.REBUILD_BLOCK_DEVICE_MAPPING
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   988
        instance.save(expected_task_state=[task_states.REBUILDING])
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   989
        root_ci = self._rebuild_block_devices(context, instance, bdms,
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   990
                                              recreate)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   991
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   992
        if recreate:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   993
            if root_ci is not None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   994
                driver_type = root_ci['driver_volume_type']
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   995
            else:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   996
                driver_type = 'local'
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   997
            if driver_type not in shared_storage:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   998
                msg = (_("Root device is not on shared storage for instance "
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   999
                         "'%s'.") % instance['name'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1000
                raise exception.NovaException(msg)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1001
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1002
        if not recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1003
            self.destroy(context, instance, network_info, block_device_info)
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1004
            if root_ci is not None:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1005
                self._volume_api.detach(context, root_ci['serial'])
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1006
                self._volume_api.delete(context, root_ci['serial'])
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1007
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1008
        instance.task_state = task_states.REBUILD_SPAWNING
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1009
        instance.save(
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1010
            expected_task_state=[task_states.REBUILD_BLOCK_DEVICE_MAPPING])
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1011
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1012
        # Instead of using a boolean for 'rebuilding' scratch data, use a
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1013
        # string because the object will translate it to a string anyways.
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1014
        if recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1015
            extra_specs = self._get_extra_specs(instance)
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1016
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1017
            instance.system_metadata['rebuilding'] = 'false'
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1018
            self._create_config(context, instance, network_info, root_ci, None)
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1019
            del instance.system_metadata['evac_from']
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1020
            instance.save()
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1021
        else:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1022
            instance.system_metadata['rebuilding'] = 'true'
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1023
            self.spawn(context, instance, image_meta, injected_files,
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1024
                       admin_password, network_info, block_device_info)
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1025
            self.power_off(instance)
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1026
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1027
        del instance.system_metadata['rebuilding']
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1028
        name = instance['name']
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1029
        zone = self._get_zone_by_name(name)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1030
        if zone is None:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1031
            raise exception.InstanceNotFound(instance_id=name)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1032
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1033
        if recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1034
            zone.attach(['-x', 'initialize-hostdata'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1035
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1036
        rootmp = instance['root_device_name']
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1037
        for entry in bdms:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1038
            if (entry['connection_info'] is None or
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1039
                    rootmp == entry['device_name']):
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1040
                continue
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1041
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1042
            connection_info = jsonutils.loads(entry['connection_info'])
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1043
            mount = entry['device_name']
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1044
            self.attach_volume(context, connection_info, instance, mount)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1045
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1046
        self._power_on(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1047
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1048
        if admin_password is not None:
5312
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  1049
            # Because there is no way to make sure a zone is ready upon
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  1050
            # returning from a boot request. We must give the zone a few
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  1051
            # seconds to boot before attempting to set the admin password.
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  1052
            greenthread.sleep(15)
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  1053
            self.set_admin_password(instance, admin_password)
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  1054
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1055
    def _get_extra_specs(self, instance):
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1056
        """Retrieve extra_specs of an instance."""
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1057
        flavor = flavor_obj.Flavor.get_by_id(
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1058
            nova_context.get_admin_context(read_deleted='yes'),
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1059
            instance['instance_type_id'])
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1060
        return flavor['extra_specs'].copy()
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1061
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1062
    def _fetch_image(self, context, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1063
        """Fetch an image using Glance given the instance's image_ref."""
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1064
        glancecache_dirname = CONF.solariszones.glancecache_dirname
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1065
        fileutils.ensure_tree(glancecache_dirname)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1066
        image = ''.join([glancecache_dirname, '/', instance['image_ref']])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1067
        if os.path.exists(image):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1068
            LOG.debug(_("Using existing, cached Glance image: id %s")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1069
                      % instance['image_ref'])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1070
            return image
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1071
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1072
        LOG.debug(_("Fetching new Glance image: id %s")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1073
                  % instance['image_ref'])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1074
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1075
            images.fetch(context, instance['image_ref'], image,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1076
                         instance['user_id'], instance['project_id'])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1077
        except Exception as reason:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1078
            LOG.error(_("Unable to fetch Glance image: id %s: %s")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1079
                      % (instance['image_ref'], reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1080
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1081
        return image
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1082
5607
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1083
    def _validate_image(self, context, image, instance):
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1084
        """Validate a glance image for compatibility with the instance."""
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1085
        # Skip if the image was already checked and confirmed as valid.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1086
        if instance['image_ref'] in self._validated_archives:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1087
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1088
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1089
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
  1090
            ua = self.archive_manager.getArchive(image)
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1091
        except Exception as ex:
5541
e93ae190039c 22854239 Nova not expecting anything but a RAD error in call to getArchive()
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5436
diff changeset
  1092
            if isinstance(ex, rad.client.ObjectError):
e93ae190039c 22854239 Nova not expecting anything but a RAD error in call to getArchive()
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5436
diff changeset
  1093
                reason = ex.get_payload().info
e93ae190039c 22854239 Nova not expecting anything but a RAD error in call to getArchive()
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5436
diff changeset
  1094
            else:
e93ae190039c 22854239 Nova not expecting anything but a RAD error in call to getArchive()
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5436
diff changeset
  1095
                reason = str(ex)
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1096
            raise exception.ImageUnacceptable(image_id=instance['image_ref'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1097
                                              reason=reason)
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1098
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1099
        # Validate the image at this point to ensure:
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1100
        # - contains one deployable system
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1101
        deployables = ua.getArchivedSystems()
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1102
        if len(deployables) != 1:
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1103
            reason = _("Image must contain only a single deployable system.")
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1104
            raise exception.ImageUnacceptable(image_id=instance['image_ref'],
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1105
                                              reason=reason)
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1106
        # - matching architecture
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1107
        deployable_arch = str(ua.isa)
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1108
        compute_arch = platform.processor()
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1109
        if deployable_arch.lower() != compute_arch:
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1110
            reason = (_("Unified Archive architecture '%s' is incompatible "
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1111
                      "with this compute host's architecture, '%s'.")
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1112
                      % (deployable_arch, compute_arch))
5607
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1113
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1114
            # For some reason we have gotten the wrong architecture image,
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1115
            # which should have been filtered by the scheduler. One reason this
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1116
            # could happen is because the images architecture type is
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1117
            # incorrectly set. Check for this and report a better reason.
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1118
            glanceapi = glance_api()
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1119
            image_meta = glanceapi.get(context, instance['image_ref'])
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1120
            image_properties = image_meta.get('properties')
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1121
            if image_properties.get('architecture') is None:
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1122
                reason = reason + (_(" The 'architecture' property is not set "
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1123
                                     "on the Glance image."))
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1124
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1125
            raise exception.ImageUnacceptable(image_id=instance['image_ref'],
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1126
                                              reason=reason)
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1127
        # - single root pool only
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1128
        if not deployables[0].rootOnly:
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1129
            reason = _("Image contains more than one ZFS pool.")
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1130
            raise exception.ImageUnacceptable(image_id=instance['image_ref'],
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1131
                                              reason=reason)
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1132
        # - looks like it's OK
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1133
        self._validated_archives.append(instance['image_ref'])
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1134
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1135
    def _suri_from_volume_info(self, connection_info):
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1136
        """Returns a suri(5) formatted string based on connection_info.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1137
        Currently supports local ZFS volume, NFS, Fibre Channel and iSCSI
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1138
        driver types.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1139
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1140
        driver_type = connection_info['driver_volume_type']
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1141
        if driver_type not in ['iscsi', 'fibre_channel', 'local', 'nfs']:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1142
            raise exception.VolumeDriverNotFound(driver_type=driver_type)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1143
        if driver_type == 'local':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1144
            suri = 'dev:/dev/zvol/dsk/%s' % connection_info['volume_path']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1145
        elif driver_type == 'iscsi':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1146
            data = connection_info['data']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1147
            # suri(5) format:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1148
            #       iscsi://<host>[:<port>]/target.<IQN>,lun.<LUN>
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1149
            # luname-only URI format for the multipathing:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1150
            #       iscsi://<host>[:<port>]/luname.naa.<ID>
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1151
            # Sample iSCSI connection data values:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1152
            # target_portal: 192.168.1.244:3260
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1153
            # target_iqn: iqn.2010-10.org.openstack:volume-a89c.....
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1154
            # target_lun: 1
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1155
            suri = None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1156
            if 'target_iqns' in data:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1157
                target = data['target_iqns'][0]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1158
                target_lun = data['target_luns'][0]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1159
                try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1160
                    utils.execute('/usr/sbin/iscsiadm', 'list', 'target',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1161
                                  '-vS', target)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1162
                    out, err = utils.execute('/usr/sbin/suriadm', 'lookup-uri',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1163
                                             '-t', 'iscsi',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1164
                                             '-p', 'target=%s' % target,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1165
                                             '-p', 'lun=%s' % target_lun)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1166
                    for line in [l.strip() for l in out.splitlines()]:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1167
                        if "luname.naa." in line:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1168
                            LOG.debug(_("The found luname-only URI for the "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1169
                                      "LUN '%s' is '%s'.") %
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1170
                                      (target_lun, line))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1171
                            suri = line
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1172
                except processutils.ProcessExecutionError as ex:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1173
                    reason = ex.stderr
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1174
                    LOG.debug(_("Failed to lookup-uri for volume '%s', lun "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1175
                              "'%s': '%s'.") % (target, target_lun, reason))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1176
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1177
            if suri is None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1178
                suri = 'iscsi://%s/target.%s,lun.%d' % (data['target_portal'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1179
                                                        data['target_iqn'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1180
                                                        data['target_lun'])
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1181
            # TODO(npower): need to handle CHAP authentication also
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1182
        elif driver_type == 'nfs':
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1183
            data = connection_info['data']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1184
            suri = (
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1185
                'nfs://cinder:cinder@%s/%s' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1186
                (data['export'].replace(':', ''), data['name'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1187
            )
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1188
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1189
        elif driver_type == 'fibre_channel':
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1190
            data = connection_info['data']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1191
            target_wwn = data['target_wwn']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1192
            # Ensure there's a fibre channel HBA.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1193
            hbas = self._get_fc_hbas()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1194
            if not hbas:
6070
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1195
                LOG.error(_("Cannot attach Fibre Channel volume because "
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1196
                          "no Fibre Channel HBA initiators were found"))
1990
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
  1197
                raise exception.InvalidVolume(
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
  1198
                    reason="No host Fibre Channel initiator found")
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1199
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1200
            target_lun = data['target_lun']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1201
            # If the volume was exported just a few seconds previously then
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1202
            # it will probably not be visible to the local adapter yet.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1203
            # Invoke 'fcinfo remote-port' on all local HBA ports to trigger
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1204
            # a refresh.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1205
            for wwpn in self._get_fc_wwpns():
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1206
                utils.execute('/usr/sbin/fcinfo', 'remote-port', '-p', wwpn)
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1207
6070
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1208
            suri = self._lookup_fc_volume_suri(target_wwn, target_lun)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1209
        return suri
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1210
6070
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1211
    def _lookup_fc_volume_suri(self, target_wwn, target_lun):
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1212
        """Searching the LU based URI for the FC LU. """
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1213
        wwns = []
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1214
        if isinstance(target_wwn, list):
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1215
            wwns = target_wwn
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1216
        else:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1217
            wwns.append(target_wwn)
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1218
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1219
        for _none in range(3):
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1220
            for wwn in wwns:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1221
                try:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1222
                    out, err = utils.execute('/usr/sbin/suriadm', 'lookup-uri',
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1223
                                             '-p', 'target=naa.%s' % wwn,
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1224
                                             '-p', 'lun=%s' % target_lun)
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1225
                    for line in [l.strip() for l in out.splitlines()]:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1226
                        if line.startswith("lu:luname.naa."):
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1227
                            return line
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1228
                except processutils.ProcessExecutionError as ex:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1229
                    reason = ex.stderr
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1230
                    LOG.debug(_("Failed to lookup-uri for volume '%s', lun "
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1231
                              "%s: %s") % (wwn, target_lun, reason))
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1232
            greenthread.sleep(2)
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1233
        else:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1234
            msg = _("Unable to lookup URI of Fibre Channel volume "
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1235
                    "with lun '%s'." % target_lun)
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1236
            raise exception.InvalidVolume(reason=msg)
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1237
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1238
    def _set_global_properties(self, name, extra_specs, brand):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1239
        """Set Solaris Zone's global properties if supplied via flavor."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1240
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1241
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1242
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1243
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1244
        # TODO(dcomay): Should figure this out via the brands themselves.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1245
        zonecfg_items = [
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1246
            'bootargs',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1247
            'brand',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1248
            'hostid'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1249
        ]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1250
        if brand == ZONE_BRAND_SOLARIS:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1251
            zonecfg_items.extend(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1252
                ['file-mac-profile', 'fs-allowed', 'limitpriv'])
6178
a11e4cbcf3d2 23523730 zonecfg:cpu-arch missing from supported zone properties in extra_specs
david.comay@oracle.com
parents: 6123
diff changeset
  1253
        else:
a11e4cbcf3d2 23523730 zonecfg:cpu-arch missing from supported zone properties in extra_specs
david.comay@oracle.com
parents: 6123
diff changeset
  1254
            zonecfg_items.extend(['cpu-arch'])
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1255
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1256
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1257
            for key, value in extra_specs.iteritems():
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1258
                # Ignore not-zonecfg-scoped brand properties.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1259
                if not key.startswith('zonecfg:'):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1260
                    continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1261
                _scope, prop = key.split(':', 1)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1262
                # Ignore the 'brand' property if present.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1263
                if prop == 'brand':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1264
                    continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1265
                # Ignore but warn about unsupported zonecfg-scoped properties.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1266
                if prop not in zonecfg_items:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1267
                    LOG.warning(_("Ignoring unsupported zone property '%s' "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1268
                                  "set on flavor for instance '%s'")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1269
                                % (prop, name))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1270
                    continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1271
                zc.setprop('global', prop, value)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1272
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1273
    def _create_boot_volume(self, context, instance):
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1274
        """Create a (Cinder) volume service backed boot volume"""
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1275
        boot_vol_az = CONF.solariszones.boot_volume_az
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1276
        boot_vol_type = CONF.solariszones.boot_volume_type
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1277
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1278
            vol = self._volume_api.create(
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1279
                context, instance['root_gb'],
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1280
                instance['hostname'] + "-" + self._rootzpool_suffix,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1281
                "Boot volume for instance '%s' (%s)"
6014
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
  1282
                % (instance['name'], instance['uuid']),
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1283
                volume_type=boot_vol_type, availability_zone=boot_vol_az)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1284
            # TODO(npower): Polling is what nova/compute/manager also does when
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1285
            # creating a new volume, so we do likewise here.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1286
            while True:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1287
                volume = self._volume_api.get(context, vol['id'])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1288
                if volume['status'] != 'creating':
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1289
                    return volume
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1290
                greenthread.sleep(1)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1291
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1292
        except Exception as reason:
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1293
            LOG.error(_("Unable to create root zpool volume for instance '%s'"
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1294
                        ": %s") % (instance['name'], reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1295
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1296
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1297
    def _connect_boot_volume(self, volume, mountpoint, context, instance):
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1298
        """Connect a (Cinder) volume service backed boot volume"""
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1299
        instance_uuid = instance['uuid']
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1300
        volume_id = volume['id']
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1301
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1302
        connector = self.get_volume_connector(instance)
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1303
        connection_info = self._volume_api.initialize_connection(context,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1304
                                                                 volume_id,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1305
                                                                 connector)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1306
        connection_info['serial'] = volume_id
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1307
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1308
        # Check connection_info to determine if the provided volume is
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1309
        # local to this compute node. If it is, then don't use it for
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1310
        # Solaris branded zones in order to avoid a known ZFS deadlock issue
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1311
        # when using a zpool within another zpool on the same system.
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1312
        extra_specs = self._get_extra_specs(instance)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1313
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1314
        if brand == ZONE_BRAND_SOLARIS:
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1315
            driver_type = connection_info['driver_volume_type']
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1316
            if driver_type == 'local':
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1317
                msg = _("Detected 'local' zvol driver volume type "
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1318
                        "from volume service, which should not be "
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1319
                        "used as a boot device for 'solaris' "
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1320
                        "branded zones.")
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1321
                raise exception.InvalidVolume(reason=msg)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1322
            elif driver_type == 'iscsi':
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1323
                # Check for a potential loopback iSCSI situation
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1324
                data = connection_info['data']
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1325
                target_portal = data['target_portal']
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1326
                # Strip off the port number (eg. 127.0.0.1:3260)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1327
                host = target_portal.rsplit(':', 1)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1328
                # Strip any enclosing '[' and ']' brackets for
5190
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1329
                # IPv6 addresses.
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1330
                target_host = host[0].strip('[]')
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1331
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1332
                # Check if target_host is an IP or hostname matching the
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1333
                # connector host or IP, which would mean the provisioned
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1334
                # iSCSI LUN is on the same host as the instance.
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1335
                if target_host in [connector['ip'], connector['host']]:
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1336
                    msg = _("iSCSI connection info from volume "
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1337
                            "service indicates that the target is a "
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1338
                            "local volume, which should not be used "
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1339
                            "as a boot device for 'solaris' branded "
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1340
                            "zones.")
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1341
                    raise exception.InvalidVolume(reason=msg)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1342
            # Assuming that fibre_channel is non-local
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1343
            elif driver_type != 'fibre_channel':
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1344
                # Some other connection type that we don't understand
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1345
                # Let zone use some local fallback instead.
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1346
                msg = _("Unsupported volume driver type '%s' can not be used "
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1347
                        "as a boot device for zones." % driver_type)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1348
                raise exception.InvalidVolume(reason=msg)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1349
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1350
        # Volume looks OK to use. Notify Cinder of the attachment.
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1351
        self._volume_api.attach(context, volume_id, instance_uuid, mountpoint)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1352
        return connection_info
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1353
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1354
    def _set_boot_device(self, name, connection_info, brand):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1355
        """Set the boot device specified by connection_info"""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1356
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1357
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1358
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1359
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1360
        suri = self._suri_from_volume_info(connection_info)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1361
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1362
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1363
            # ZOSS device configuration is different for the solaris-kz brand
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1364
            if brand == ZONE_BRAND_SOLARIS_KZ:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1365
                zc.zone.setResourceProperties(
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1366
                    zonemgr.Resource("device",
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1367
                                     [zonemgr.Property("bootpri", "0")]),
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1368
                    [zonemgr.Property("storage", suri)])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1369
            else:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1370
                zc.addresource(ROOTZPOOL_RESOURCE,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1371
                               [zonemgr.Property("storage", listvalue=[suri])],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1372
                               ignore_exists=True)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1373
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1374
    def _set_num_cpu(self, name, vcpus, brand):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1375
        """Set number of VCPUs in a Solaris Zone configuration."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1376
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1377
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1378
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1379
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1380
        # The Solaris Zone brand type is used to specify the type of
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1381
        # 'cpu' resource set in the Solaris Zone configuration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1382
        if brand == ZONE_BRAND_SOLARIS:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1383
            vcpu_resource = 'capped-cpu'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1384
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1385
            vcpu_resource = 'virtual-cpu'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1386
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1387
        # TODO(dcomay): Until 17881862 is resolved, this should be turned into
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1388
        # an appropriate 'rctl' resource for the 'capped-cpu' case.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1389
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1390
            zc.setprop(vcpu_resource, 'ncpus', str(vcpus))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1391
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1392
    def _set_memory_cap(self, name, memory_mb, brand):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1393
        """Set memory cap in a Solaris Zone configuration."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1394
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1395
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1396
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1397
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1398
        # The Solaris Zone brand type is used to specify the type of
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1399
        # 'memory' cap set in the Solaris Zone configuration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1400
        if brand == ZONE_BRAND_SOLARIS:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1401
            mem_resource = 'swap'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1402
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1403
            mem_resource = 'physical'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1404
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1405
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1406
            zc.setprop('capped-memory', mem_resource, '%dM' % memory_mb)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1407
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1408
    def _ovs_add_port(self, instance, vif, port):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1409
        if vif['type'] == 'binding_failed':
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1410
            LOG.error(_('Port binding has failed for VIF %s. Ensure that '
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1411
                        'OVS agent is running and/or bridge_mappings are '
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1412
                        'correctly configured. VM will not have network '
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1413
                        'connectivity') % vif)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1414
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1415
        ovs_bridge = CONF.neutron.ovs_bridge
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1416
        cmd = ['/usr/sbin/ovs-vsctl',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1417
               '--timeout=%s' % CONF.ovs_vsctl_timeout,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1418
               '--', '--if-exists', 'del-port', ovs_bridge, port,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1419
               '--', 'add-port', ovs_bridge, port,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1420
               '--', 'set', 'Interface', port,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1421
               'external-ids:iface-id=%s' % vif['id'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1422
               'external-ids:iface-status=active',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1423
               'external-ids:attached-mac=%s' % vif['address'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1424
               'external-ids:vm-uuid=%s' % instance['uuid']
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1425
               ]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1426
        try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1427
            out, err = utils.execute(*cmd)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1428
        except Exception as reason:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1429
            msg = (_("Failed to add port '%s' with MAC address '%s' to "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1430
                     "OVS Bridge '%s': %s")
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1431
                   % (port, vif['address'], ovs_bridge, reason))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1432
            raise exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1433
        LOG.debug(_('Successfully added port %s with MAC adddress %s') %
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1434
                  (port, vif['address']))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1435
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1436
    def _ovs_delete_port(self, port, log_warnings=False):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1437
        ovs_bridge = CONF.neutron.ovs_bridge
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1438
        cmd = ['/usr/sbin/ovs-vsctl',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1439
               '--timeout=%s' % CONF.ovs_vsctl_timeout,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1440
               '--', '--if-exists', 'del-port', ovs_bridge, port]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1441
        try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1442
            out, err = utils.execute(*cmd)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1443
            LOG.debug(_('Removed port %s from the OVS bridge %s') %
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1444
                      (port, ovs_bridge))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1445
        except Exception as reason:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1446
            msg = (_("Unable to remove port '%s' from the OVS "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1447
                     "bridge '%s': %s") % (port, ovs_bridge, reason))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1448
            if log_warnings:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1449
                LOG.warning(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1450
            else:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1451
                raise nova.exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1452
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1453
    def _plug_vifs(self, instance, network_info):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1454
        if not network_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1455
            LOG.debug(_("Instance has no VIF. Nothing to plug."))
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1456
            return
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1457
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1458
        # first find out all the anets for a given instance
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1459
        try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1460
            out, err = utils.execute('/usr/sbin/dladm', 'show-vnic',
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1461
                                     '-z', instance['name'],
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1462
                                     '-po', 'link,macaddress')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1463
        except Exception as reason:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1464
            msg = (_("Unable to get interfaces for instance '%s': %s")
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1465
                   % (instance['name'], reason))
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1466
            raise exception.NovaException(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1467
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1468
        anetdict = {}
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1469
        for anet_maddr in out.strip().splitlines():
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1470
            anet, maddr = anet_maddr.strip().split(':', 1)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1471
            maddr = maddr.replace('\\', '')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1472
            maddr = ''.join(['%02x' % int(b, 16) for b in maddr.split(':')])
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1473
            anetdict[maddr] = anet
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1474
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1475
        LOG.debug(_("List of instance %s's anets: %s")
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1476
                  % (instance['name'], anetdict))
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1477
        # we now have a list of VNICs that belong to the VM
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1478
        # we need to map the VNIC to the bridge
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1479
        for vif in network_info:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1480
            vif_maddr = ''.join(['%02x' % int(b, 16) for b in
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1481
                                 vif['address'].split(':')])
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1482
            anet = anetdict.get(vif_maddr)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1483
            if anet is None:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1484
                LOG.error(_('Failed to add port %s connected to network %s '
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1485
                            'to instance %s')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1486
                          % (vif['ovs_interfaceid'], vif['network']['id'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1487
                             instance['name']))
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1488
                continue
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1489
            self._ovs_add_port(instance, vif, anet)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1490
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1491
    def _unplug_vifs(self, instance):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1492
        ovs_bridge = CONF.neutron.ovs_bridge
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1493
        # remove the anets from the OVS bridge
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1494
        cmd = ['/usr/sbin/ovs-vsctl', '--timeout=%s' % CONF.ovs_vsctl_timeout,
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1495
               'list-ports', ovs_bridge]
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1496
        try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1497
            out, err = utils.execute(*cmd)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1498
        except Exception as reason:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1499
            msg = (_("Unable to get interfaces for instance '%s': %s")
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1500
                   % (instance['name'], reason))
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1501
            raise exception.NovaException(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1502
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1503
        for port in out.strip().splitlines():
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1504
            if port.split('/')[0] != instance['name']:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1505
                continue
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1506
            self._ovs_delete_port(port, log_warnings=True)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1507
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1508
    def _set_ovs_info(self, context, zone, brand, first_anet, vif):
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1509
        # Need to be admin to retrieve provider:network_type attribute
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1510
        network_plugin = neutronv2_api.get_client(context, admin=True)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1511
        network = network_plugin.show_network(
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1512
            vif['network']['id'])['network']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1513
        network_type = network['provider:network_type']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1514
        lower_link = None
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1515
        if network_type == 'vxlan':
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1516
            lower_link = 'ovs.vxlan1'
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1517
        elif network_type in ['vlan', 'flat']:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1518
            physical_network = network['provider:physical_network']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1519
            # retrieve the other_config information from Open_vSwitch table
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1520
            try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1521
                results = get_ovsdb_info('Open_vSwitch', ['other_config'])
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1522
            except Exception as err:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1523
                LOG.error(_("Failed to retrieve other_config: %s"), err)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1524
                raise
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1525
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1526
            other_config = results[0]['other_config']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1527
            if not other_config:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1528
                msg = (_("'other_config' column in 'Open_vSwitch' OVSDB table "
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1529
                         "is not configured. Please configure it so that the "
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1530
                         "lower-link can be determined for the instance's "
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1531
                         "interface."))
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1532
                LOG.error(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1533
                raise exception.NovaException(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1534
            bridge_mappings = other_config.get('bridge_mappings')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1535
            if not bridge_mappings:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1536
                msg = (_("'bridge_mappings' info is not set in the "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1537
                         "'other_config' column of 'Open_vSwitch' OVSDB "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1538
                         "table. Please configure it so that the lower-link "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1539
                         "can be determined for the instance's interface."))
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1540
                LOG.error(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1541
                raise exception.NovaException(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1542
            for bridge_mapping in bridge_mappings.split(','):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1543
                if physical_network in bridge_mapping:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1544
                    lower_link = bridge_mapping.split(':')[1]
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1545
                    break
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1546
            if not lower_link:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1547
                msg = (_("Failed to determine the lower_link for vif '%s'.") %
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1548
                       (vif))
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1549
                LOG.error(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1550
                raise exception.NovaException(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1551
        else:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1552
            # TYPE_GRE and TYPE_LOCAL
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1553
            msg = (_("Unsupported network type: %s") % network_type)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1554
            LOG.error(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1555
            raise exception.NovaException(msg)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1556
6283
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1557
        mtu = network['mtu']
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1558
        with ZoneConfig(zone) as zc:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1559
            if first_anet:
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1560
                zc.setprop('anet', 'lower-link', lower_link)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1561
                zc.setprop('anet', 'configure-allowed-address', 'false')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1562
                zc.setprop('anet', 'mac-address', vif['address'])
6283
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1563
                if mtu > 0:
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1564
                    zc.setprop('anet', 'mtu', str(mtu))
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1565
            else:
6283
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1566
                props = [zonemgr.Property('lower-link', lower_link),
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1567
                         zonemgr.Property('configure-allowed-address',
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1568
                                          'false'),
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1569
                         zonemgr.Property('mac-address', vif['address'])]
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1570
                if mtu > 0:
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1571
                    props.append(zonemgr.Property('mtu', str(mtu)))
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1572
                zc.addresource('anet', props)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1573
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1574
            prop_filter = [zonemgr.Property('mac-address', vif['address'])]
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1575
            if brand == ZONE_BRAND_SOLARIS:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1576
                anetname = lookup_resource_property(zc.zone, 'anet',
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1577
                                                    'linkname', prop_filter)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1578
            else:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1579
                anetid = lookup_resource_property(zc.zone, 'anet', 'id',
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1580
                                                  prop_filter)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1581
                anetname = 'net%s' % anetid
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1582
        return anetname
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1583
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1584
    def _set_network(self, context, name, instance, network_info, brand,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1585
                     sc_dir):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1586
        """add networking information to the zone."""
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1587
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1588
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1589
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1590
5190
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1591
        if not network_info:
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1592
            with ZoneConfig(zone) as zc:
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1593
                if brand == ZONE_BRAND_SOLARIS:
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1594
                    zc.removeresources("anet",
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1595
                                       [zonemgr.Property("linkname", "net0")])
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1596
                else:
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1597
                    zc.removeresources("anet", [zonemgr.Property("id", "0")])
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1598
                return
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1599
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1600
        for vifid, vif in enumerate(network_info):
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1601
            LOG.debug("%s", jsonutils.dumps(vif, indent=5))
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1602
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1603
            ip = vif['network']['subnets'][0]['ips'][0]['address']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1604
            cidr = vif['network']['subnets'][0]['cidr']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1605
            ip_cidr = "%s/%s" % (ip, cidr.split('/')[1])
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1606
            ip_version = vif['network']['subnets'][0]['version']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1607
            dhcp_server = \
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1608
                vif['network']['subnets'][0]['meta'].get('dhcp_server')
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1609
            enable_dhcp = dhcp_server is not None
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1610
            route = vif['network']['subnets'][0]['gateway']['address']
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1611
            dns_list = vif['network']['subnets'][0]['dns']
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1612
            nameservers = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1613
            for dns in dns_list:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1614
                if dns['type'] == 'dns':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1615
                    nameservers.append(dns['address'])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1616
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1617
            anetname = self._set_ovs_info(context, zone, brand, vifid == 0,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1618
                                          vif)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1619
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1620
            # create the required sysconfig file (or skip if this is part of a
5436
2c7413fb2a81 22691630 attempting to resize or evacuate with a network is broken
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
  1621
            # resize or evacuate process)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1622
            tstate = instance['task_state']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1623
            if tstate not in [task_states.RESIZE_FINISH,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1624
                              task_states.RESIZE_REVERTING,
5436
2c7413fb2a81 22691630 attempting to resize or evacuate with a network is broken
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
  1625
                              task_states.RESIZE_MIGRATING,
2c7413fb2a81 22691630 attempting to resize or evacuate with a network is broken
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
  1626
                              task_states.REBUILD_SPAWNING] or \
2c7413fb2a81 22691630 attempting to resize or evacuate with a network is broken
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
  1627
                (tstate == task_states.REBUILD_SPAWNING and
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1628
                 instance.system_metadata['rebuilding'] == 'true'):
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1629
                if enable_dhcp:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1630
                    tree = sysconfig.create_ncp_defaultfixed('dhcp',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1631
                                                             anetname, vifid,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1632
                                                             ip_version)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1633
                else:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1634
                    host_routes = vif['network']['subnets'][0]['routes']
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1635
                    tree = sysconfig.create_ncp_defaultfixed('static',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1636
                                                             anetname, vifid,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1637
                                                             ip_version,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1638
                                                             ip_cidr, route,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1639
                                                             nameservers,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1640
                                                             host_routes)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1641
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1642
                fp = os.path.join(sc_dir, 'zone-network-%d.xml' % vifid)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1643
                sysconfig.create_sc_profile(fp, tree)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1644
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1645
    def _set_suspend(self, instance):
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1646
        """Use the instance name to specify the pathname for the suspend image.
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1647
        """
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1648
        name = instance['name']
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1649
        zone = self._get_zone_by_name(name)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1650
        if zone is None:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1651
            raise exception.InstanceNotFound(instance_id=name)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1652
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1653
        path = os.path.join(CONF.solariszones.zones_suspend_path,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1654
                            '%{zonename}')
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1655
        with ZoneConfig(zone) as zc:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1656
            zc.addresource('suspend', [zonemgr.Property('path', path)])
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1657
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1658
    def _verify_sysconfig(self, sc_dir, instance, admin_password=None):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1659
        """verify the SC profile(s) passed in contain an entry for
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1660
        system/config-user to configure the root account.  If an SSH key is
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1661
        specified, configure root's profile to use it.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1662
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1663
        usercheck = lambda e: e.attrib.get('name') == 'system/config-user'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1664
        hostcheck = lambda e: e.attrib.get('name') == 'system/identity'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1665
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1666
        root_account_needed = True
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1667
        hostname_needed = True
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1668
        sshkey = instance.get('key_data')
4736
455a1830e5e8 21542088 VM's display_name is used instead of hostname to set the hostname for VM
Drew Fisher <drew.fisher@oracle.com>
parents: 4695
diff changeset
  1669
        name = instance.get('hostname')
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1670
        encrypted_password = None
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1671
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1672
        # encrypt admin password, using SHA-256 as default
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1673
        if admin_password is not None:
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1674
            encrypted_password = sha256_crypt.encrypt(admin_password)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1675
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1676
        # find all XML files in sc_dir
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1677
        for root, dirs, files in os.walk(sc_dir):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1678
            for fname in [f for f in files if f.endswith(".xml")]:
1908
702ae3973fcc 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 1840
diff changeset
  1679
                fileroot = etree.parse(os.path.join(root, fname))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1680
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1681
                # look for config-user properties
1908
702ae3973fcc 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 1840
diff changeset
  1682
                if filter(usercheck, fileroot.findall('service')):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1683
                    # a service element was found for config-user.  Verify
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1684
                    # root's password is set, the admin account name is set and
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1685
                    # the admin's password is set
1908
702ae3973fcc 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 1840
diff changeset
  1686
                    pgs = fileroot.iter('property_group')
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1687
                    for pg in pgs:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1688
                        if pg.attrib.get('name') == 'root_account':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1689
                            root_account_needed = False
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1690
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1691
                # look for identity properties
1908
702ae3973fcc 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 1840
diff changeset
  1692
                if filter(hostcheck, fileroot.findall('service')):
702ae3973fcc 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 1840
diff changeset
  1693
                    for props in fileroot.iter('propval'):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1694
                        if props.attrib.get('name') == 'nodename':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1695
                            hostname_needed = False
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1696
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1697
        # Verify all of the requirements were met.  Create the required SMF
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1698
        # profile(s) if needed.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1699
        if root_account_needed:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1700
            fp = os.path.join(sc_dir, 'config-root.xml')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1701
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1702
            if admin_password is not None and sshkey is not None:
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1703
                # store password for horizon retrieval
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1704
                ctxt = nova_context.get_admin_context()
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1705
                enc = crypto.ssh_encrypt_text(sshkey, admin_password)
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1706
                instance.system_metadata.update(
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1707
                    password.convert_password(ctxt, base64.b64encode(enc)))
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1708
                instance.save()
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1709
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1710
            if encrypted_password is not None or sshkey is not None:
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1711
                # set up the root account as 'normal' with no expiration,
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1712
                # an ssh key, and a root password
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1713
                tree = sysconfig.create_default_root_account(
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1714
                    sshkey=sshkey, password=encrypted_password)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1715
            else:
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1716
                # sets up root account with expiration if sshkey is None
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1717
                # and password is none
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1718
                tree = sysconfig.create_default_root_account(expire='0')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1719
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1720
            sysconfig.create_sc_profile(fp, tree)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1721
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1722
        elif sshkey is not None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1723
            fp = os.path.join(sc_dir, 'config-root-ssh-keys.xml')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1724
            tree = sysconfig.create_root_ssh_keys(sshkey)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1725
            sysconfig.create_sc_profile(fp, tree)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1726
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1727
        if hostname_needed and name is not None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1728
            fp = os.path.join(sc_dir, 'hostname.xml')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1729
            sysconfig.create_sc_profile(fp, sysconfig.create_hostname(name))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1730
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1731
    def _create_config(self, context, instance, network_info, connection_info,
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1732
                       sc_dir, admin_password=None):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1733
        """Create a new Solaris Zone configuration."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1734
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1735
        if self._get_zone_by_name(name) is not None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1736
            raise exception.InstanceExists(name=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1737
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1738
        extra_specs = self._get_extra_specs(instance)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1739
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1740
        # If unspecified, default zone brand is ZONE_BRAND_SOLARIS
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1741
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1742
        template = ZONE_BRAND_TEMPLATE.get(brand)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1743
        # TODO(dcomay): Detect capability via libv12n(3LIB) or virtinfo(1M).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1744
        if template is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1745
            msg = (_("Invalid brand '%s' specified for instance '%s'"
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1746
                   % (brand, name)))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1747
            raise exception.NovaException(msg)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1748
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1749
        tstate = instance['task_state']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1750
        if tstate not in [task_states.RESIZE_FINISH,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1751
                          task_states.RESIZE_REVERTING,
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1752
                          task_states.RESIZE_MIGRATING,
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1753
                          task_states.REBUILD_SPAWNING] or \
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1754
            (tstate == task_states.REBUILD_SPAWNING and
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1755
             instance.system_metadata['rebuilding'] == 'true'):
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1756
            sc_profile = extra_specs.get('install:sc_profile')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1757
            if sc_profile is not None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1758
                if os.path.isfile(sc_profile):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1759
                    shutil.copy(sc_profile, sc_dir)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1760
                elif os.path.isdir(sc_profile):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1761
                    shutil.copytree(sc_profile,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1762
                                    os.path.join(sc_dir, 'sysconfig'))
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1763
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1764
            self._verify_sysconfig(sc_dir, instance, admin_password)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1765
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  1766
        LOG.debug(_("Creating zone configuration for '%s' (%s)")
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  1767
                  % (name, instance['display_name']))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1768
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
  1769
            self.zone_manager.create(name, None, template)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1770
            self._set_global_properties(name, extra_specs, brand)
6260
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  1771
            hostid = instance.system_metadata.get('hostid')
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  1772
            if hostid:
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  1773
                zone = self._get_zone_by_name(name)
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  1774
                with ZoneConfig(zone) as zc:
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  1775
                    zc.setprop('global', 'hostid', hostid)
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  1776
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  1777
            if connection_info is not None:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1778
                self._set_boot_device(name, connection_info, brand)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1779
            self._set_num_cpu(name, instance['vcpus'], brand)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1780
            self._set_memory_cap(name, instance['memory_mb'], brand)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1781
            self._set_network(context, name, instance, network_info, brand,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1782
                              sc_dir)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1783
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1784
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1785
            LOG.error(_("Unable to create configuration for instance '%s' via "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1786
                        "zonemgr(3RAD): %s") % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1787
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1788
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1789
    def _create_vnc_console_service(self, instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1790
        """Create a VNC console SMF service for a Solaris Zone"""
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1791
        # Basic environment checks first: vncserver and xterm
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1792
        if not os.path.exists(VNC_SERVER_PATH):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1793
            LOG.warning(_("Zone VNC console SMF service not available on this "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1794
                          "compute node. %s is missing. Run 'pkg install "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1795
                          "x11/server/xvnc'") % VNC_SERVER_PATH)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1796
            raise exception.ConsoleTypeUnavailable(console_type='vnc')
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1797
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1798
        if not os.path.exists(XTERM_PATH):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1799
            LOG.warning(_("Zone VNC console SMF service not available on this "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1800
                          "compute node. %s is missing. Run 'pkg install "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1801
                          "terminal/xterm'") % XTERM_PATH)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1802
            raise exception.ConsoleTypeUnavailable(console_type='vnc')
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1803
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1804
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1805
        # TODO(npower): investigate using RAD instead of CLI invocation
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1806
        try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1807
            out, err = utils.execute('/usr/sbin/svccfg',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1808
                                     '-s', VNC_CONSOLE_BASE_FMRI, 'add', name)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1809
        except processutils.ProcessExecutionError as ex:
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1810
            if self._has_vnc_console_service(instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1811
                LOG.debug(_("Ignoring attempt to create existing zone VNC "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1812
                            "console SMF service for instance '%s'") % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1813
                return
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1814
            reason = ex.stderr
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1815
            LOG.error(_("Unable to create zone VNC console SMF service "
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1816
                        "'{0}': {1}").format(
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1817
                            VNC_CONSOLE_BASE_FMRI + ':' + name, reason))
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1818
            raise
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1819
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1820
    def _delete_vnc_console_service(self, instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1821
        """Delete a VNC console SMF service for a Solaris Zone"""
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1822
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1823
        self._disable_vnc_console_service(instance)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1824
        # TODO(npower): investigate using RAD instead of CLI invocation
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1825
        try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1826
            out, err = utils.execute('/usr/sbin/svccfg',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1827
                                     '-s', VNC_CONSOLE_BASE_FMRI, 'delete',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1828
                                     name)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1829
        except processutils.ProcessExecutionError as ex:
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1830
            if not self._has_vnc_console_service(instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1831
                LOG.debug(_("Ignoring attempt to delete a non-existent zone "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1832
                            "VNC console SMF service for instance '%s'")
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1833
                          % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1834
                return
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1835
            reason = ex.stderr
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1836
            LOG.error(_("Unable to delete zone VNC console SMF service '%s': "
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1837
                        "%s")
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1838
                      % (VNC_CONSOLE_BASE_FMRI + ':' + name, reason))
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1839
            raise
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1840
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1841
    def _enable_vnc_console_service(self, instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1842
        """Enable a zone VNC console SMF service"""
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1843
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1844
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1845
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1846
        # TODO(npower): investigate using RAD instead of CLI invocation
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1847
        try:
4553
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1848
            # The console SMF service exits with SMF_TEMP_DISABLE to prevent
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1849
            # unnecessarily coming online at boot. Tell it to really bring
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1850
            # it online.
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1851
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1852
                                     'setprop', 'vnc/nova-enabled=true')
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1853
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1854
                                     'refresh')
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1855
            out, err = utils.execute('/usr/sbin/svcadm', 'enable',
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1856
                                     console_fmri)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1857
        except processutils.ProcessExecutionError as ex:
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1858
            if not self._has_vnc_console_service(instance):
4553
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1859
                LOG.debug(_("Ignoring attempt to enable a non-existent zone "
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1860
                            "VNC console SMF service for instance '%s'")
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1861
                          % name)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1862
                return
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1863
            reason = ex.stderr
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1864
            LOG.error(_("Unable to start zone VNC console SMF service "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1865
                        "'%s': %s") % (console_fmri, reason))
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1866
            raise
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1867
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1868
        # Allow some time for the console service to come online.
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1869
        greenthread.sleep(2)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1870
        while True:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1871
            try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1872
                out, err = utils.execute('/usr/bin/svcs', '-H', '-o', 'state',
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1873
                                         console_fmri)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1874
                state = out.strip()
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1875
                if state == 'online':
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1876
                    break
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1877
                elif state in ['maintenance', 'offline']:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1878
                    LOG.error(_("Zone VNC console SMF service '%s' is in the "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1879
                                "'%s' state. Run 'svcs -x %s' for details.")
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1880
                              % (console_fmri, state, console_fmri))
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1881
                    raise exception.ConsoleNotFoundForInstance(
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1882
                        instance_uuid=instance['uuid'])
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1883
                # Wait for service state to transition to (hopefully) online
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1884
                # state or offline/maintenance states.
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1885
                greenthread.sleep(2)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1886
            except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1887
                reason = ex.stderr
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1888
                LOG.error(_("Error querying state of zone VNC console SMF "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1889
                            "service '%s': %s") % (console_fmri, reason))
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1890
                raise
4553
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1891
        # TODO(npower): investigate using RAD instead of CLI invocation
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1892
        try:
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1893
            # The console SMF service exits with SMF_TEMP_DISABLE to prevent
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1894
            # unnecessarily coming online at boot. Make that happen.
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1895
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1896
                                     'setprop', 'vnc/nova-enabled=false')
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1897
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1898
                                     'refresh')
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1899
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1900
            reason = ex.stderr
4553
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1901
            LOG.error(_("Unable to update 'vnc/nova-enabled' property for "
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1902
                        "zone VNC console SMF service "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1903
                        "'%s': %s") % (console_fmri, reason))
4553
13705ca3643b 21038378 Nova VNC console not accessible in multi-node and multi-network configuration
Niall Power <niall.power@oracle.com>
parents: 4551
diff changeset
  1904
            raise
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1905
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1906
    def _disable_vnc_console_service(self, instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1907
        """Disable a zone VNC console SMF service"""
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1908
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1909
        if not self._has_vnc_console_service(instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1910
            LOG.debug(_("Ignoring attempt to disable a non-existent zone VNC "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1911
                        "console SMF service for instance '%s'") % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1912
            return
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1913
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1914
        # TODO(npower): investigate using RAD instead of CLI invocation
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1915
        try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1916
            out, err = utils.execute('/usr/sbin/svcadm', 'disable',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1917
                                     '-s', console_fmri)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1918
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1919
            reason = ex.stderr
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1920
            LOG.error(_("Unable to disable zone VNC console SMF service "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1921
                        "'%s': %s") % (console_fmri, reason))
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1922
        # The console service sets a SMF instance property for the port
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1923
        # on which the VNC service is listening. The service needs to be
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1924
        # refreshed to reset the property value
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1925
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1926
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1927
                                     'refresh')
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1928
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1929
            reason = ex.stderr
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1930
            LOG.error(_("Unable to refresh zone VNC console SMF service "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1931
                        "'%s': %s") % (console_fmri, reason))
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1932
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1933
    def _get_vnc_console_service_state(self, instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1934
        """Returns state of the instance zone VNC console SMF service"""
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1935
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1936
        if not self._has_vnc_console_service(instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1937
            LOG.warning(_("Console state requested for a non-existent zone "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1938
                          "VNC console SMF service for instance '%s'")
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1939
                        % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1940
            return None
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1941
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1942
        # TODO(npower): investigate using RAD instead of CLI invocation
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1943
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1944
            state, err = utils.execute('/usr/sbin/svcs', '-H', '-o', 'state',
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1945
                                       console_fmri)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1946
            return state.strip()
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1947
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1948
            reason = ex.stderr
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1949
            LOG.error(_("Console state request failed for zone VNC console "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1950
                        "SMF service for instance '%s': %s")
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1951
                      % (name, reason))
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1952
            raise
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1953
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1954
    def _has_vnc_console_service(self, instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1955
        """Returns True if the instance has a zone VNC console SMF service"""
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1956
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1957
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1958
        # TODO(npower): investigate using RAD instead of CLI invocation
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1959
        try:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1960
            utils.execute('/usr/bin/svcs', '-H', '-o', 'state', console_fmri)
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1961
            return True
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1962
        except Exception:
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1963
            return False
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1964
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1965
    def _install(self, instance, image, sc_dir):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1966
        """Install a new Solaris Zone root file system."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1967
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1968
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1969
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1970
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1971
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1972
        # log the zone's configuration
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1973
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1974
            LOG.debug("-" * 80)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1975
            LOG.debug(zc.zone.exportConfig(True))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1976
            LOG.debug("-" * 80)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1977
4832
eef9ea54fabe 21761279 Driver erroneously includes trailing space in zone.install() arguments
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4781
diff changeset
  1978
        options = ['-a', image]
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1979
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1980
        if os.listdir(sc_dir):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1981
            # the directory isn't empty so pass it along to install
4832
eef9ea54fabe 21761279 Driver erroneously includes trailing space in zone.install() arguments
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4781
diff changeset
  1982
            options.extend(['-c', sc_dir])
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1983
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1984
        try:
5193
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  1985
            LOG.debug(_("Installing instance '%s' (%s)") %
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1986
                      (name, instance['display_name']))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1987
            zone.install(options=options)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1988
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1989
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1990
            LOG.error(_("Unable to install root file system for instance '%s' "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1991
                        "via zonemgr(3RAD): %s") % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1992
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1993
6260
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  1994
        self._set_instance_metahostid(instance)
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  1995
5193
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  1996
        LOG.debug(_("Installation of instance '%s' (%s) complete") %
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1997
                  (name, instance['display_name']))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1998
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1999
    def _power_on(self, instance, network_info):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2000
        """Power on a Solaris Zone."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2001
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2002
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2003
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2004
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2005
6260
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  2006
        # Attempt to update the zones hostid in the instance data, to catch
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  2007
        # those instances that might have been created without a hostid stored.
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  2008
        self._set_instance_metahostid(instance)
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  2009
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2010
        bootargs = []
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2011
        if CONF.solariszones.solariszones_boot_options:
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2012
            reset_bootargs = False
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2013
            persistent = 'False'
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2014
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2015
            # Get any bootargs already set in the zone
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2016
            cur_bootargs = lookup_resource_property(zone, 'global', 'bootargs')
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2017
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2018
            # Get any bootargs set in the instance metadata by the user
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2019
            meta_bootargs = instance.metadata.get('bootargs')
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2020
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2021
            if meta_bootargs:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2022
                bootargs = ['--', str(meta_bootargs)]
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2023
                persistent = str(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2024
                    instance.metadata.get('bootargs_persist', 'False'))
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2025
                if cur_bootargs is not None and meta_bootargs != cur_bootargs:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2026
                    with ZoneConfig(zone) as zc:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2027
                        reset_bootargs = True
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2028
                        # Temporarily clear bootargs in zone config
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2029
                        zc.clear_resource_props('global', ['bootargs'])
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2030
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2031
        try:
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2032
            zone.boot(bootargs)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2033
            self._plug_vifs(instance, network_info)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2034
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2035
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2036
            LOG.error(_("Unable to power on instance '%s' via zonemgr(3RAD): "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2037
                        "%s") % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2038
            raise exception.InstancePowerOnFailure(reason=reason)
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2039
        finally:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2040
            if CONF.solariszones.solariszones_boot_options:
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2041
                if meta_bootargs and persistent.lower() == 'false':
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2042
                    # We have consumed the metadata bootargs and
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2043
                    # the user asked for them not to be persistent so
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2044
                    # clear them out now.
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2045
                    instance.metadata.pop('bootargs', None)
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2046
                    instance.metadata.pop('bootargs_persist', None)
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2047
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2048
                if reset_bootargs:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2049
                    with ZoneConfig(zone) as zc:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2050
                        # restore original boot args in zone config
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2051
                        zc.setprop('global', 'bootargs', cur_bootargs)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2052
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2053
    def _uninstall(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2054
        """Uninstall an existing Solaris Zone root file system."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2055
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2056
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2057
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2058
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2059
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2060
        if zone.state == ZONE_STATE_CONFIGURED:
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2061
            LOG.debug(_("Uninstall not required for zone '%s' in state '%s'")
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2062
                      % (name, zone.state))
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2063
            return
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2064
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2065
            zone.uninstall(['-F'])
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2066
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2067
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2068
            LOG.error(_("Unable to uninstall root file system for instance "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2069
                        "'%s' via zonemgr(3RAD): %s") % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2070
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2071
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2072
    def _delete_config(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2073
        """Delete an existing Solaris Zone configuration."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2074
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2075
        if self._get_zone_by_name(name) is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2076
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2077
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2078
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
  2079
            self.zone_manager.delete(name)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2080
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2081
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2082
            LOG.error(_("Unable to delete configuration for instance '%s' via "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2083
                        "zonemgr(3RAD): %s") % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2084
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2085
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2086
    def spawn(self, context, instance, image_meta, injected_files,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2087
              admin_password, network_info=None, block_device_info=None):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2088
        """Create a new instance/VM/domain on the virtualization platform.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2089
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2090
        Once this successfully completes, the instance should be
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2091
        running (power_state.RUNNING).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2092
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2093
        If this fails, any partial instance should be completely
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2094
        cleaned up, and the virtualization platform should be in the state
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2095
        that it was before this call began.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2096
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2097
        :param context: security context
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2098
        :param instance: nova.objects.instance.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2099
                         This function should use the data there to guide
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2100
                         the creation of the new instance.
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2101
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2102
            The metadata of the image of the instance.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2103
        :param injected_files: User files to inject into instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2104
        :param admin_password: Administrator password to set in instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2105
        :param network_info:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2106
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2107
        :param block_device_info: Information about block devices to be
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2108
                                  attached to the instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2109
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2110
        image = self._fetch_image(context, instance)
5607
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  2111
        self._validate_image(context, image, instance)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2112
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2113
        # create a new directory for SC profiles
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2114
        sc_dir = tempfile.mkdtemp(prefix="nova-sysconfig-",
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2115
                                  dir=CONF.state_path)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2116
        os.chmod(sc_dir, 0755)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2117
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2118
        # Attempt to provision a (Cinder) volume service backed boot volume
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2119
        volume = self._create_boot_volume(context, instance)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2120
        volume_id = volume['id']
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2121
        # c1d0 is the standard dev for for default boot device.
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2122
        # Irrelevant value for ZFS, but Cinder gets stroppy without it.
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2123
        mountpoint = "c1d0"
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2124
        name = instance['name']
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2125
        try:
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2126
            connection_info = self._connect_boot_volume(volume, mountpoint,
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2127
                                                        context, instance)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2128
        except exception.InvalidVolume as reason:
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2129
            # This Cinder volume is not usable for ZOSS so discard it.
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2130
            # zonecfg will apply default zonepath dataset configuration
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2131
            # instead. Carry on
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2132
            LOG.warning(_("Volume '%s' is being discarded: %s")
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2133
                        % (volume_id, reason))
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2134
            self._volume_api.delete(context, volume_id)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2135
            connection_info = None
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2136
        except Exception as reason:
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2137
            # Something really bad happened. Don't pass Go.
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2138
            LOG.error(_("Unable to attach root zpool volume '%s' to instance "
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2139
                        "%s: %s") % (volume['id'], name, reason))
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2140
            self._volume_api.delete(context, volume_id)
5193
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2141
            # remove the sc_profile temp directory
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2142
            shutil.rmtree(sc_dir)
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2143
            raise
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2144
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2145
        try:
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2146
            self._create_config(context, instance, network_info,
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2147
                                connection_info, sc_dir, admin_password)
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2148
            self._install(instance, image, sc_dir)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2149
            self._power_on(instance, network_info)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2150
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2151
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2152
            LOG.error(_("Unable to spawn instance '%s' via zonemgr(3RAD): %s")
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2153
                      % (name, reason))
5641
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2154
            # At least attempt to uninstall the instance, depending on where
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2155
            # the installation got to there could be things left behind that
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2156
            # need to be cleaned up, e.g a root zpool etc.
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2157
            try:
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2158
                self._uninstall(instance)
5641
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2159
            except Exception as ex:
5847
230bb7c2a9fb 23169819 traceback when failing to uninstall zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5641
diff changeset
  2160
                reason = zonemgr_strerror(ex)
5641
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2161
                LOG.debug(_("Unable to uninstall instance '%s' via "
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2162
                            "zonemgr(3RAD): %s") % (name, reason))
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2163
            try:
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2164
                self._delete_config(instance)
5641
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2165
            except Exception as ex:
5847
230bb7c2a9fb 23169819 traceback when failing to uninstall zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5641
diff changeset
  2166
                reason = zonemgr_strerror(ex)
5641
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2167
                LOG.debug(_("Unable to unconfigure instance '%s' via "
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2168
                            "zonemgr(3RAD): %s") % (name, reason))
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2169
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2170
            if connection_info is not None:
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2171
                self._volume_api.detach(context, volume_id)
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2172
                self._volume_api.delete(context, volume_id)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2173
            raise
5193
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2174
        finally:
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2175
            # remove the sc_profile temp directory
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2176
            shutil.rmtree(sc_dir)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2177
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2178
        if connection_info is not None:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2179
            bdm_obj = objects.BlockDeviceMappingList()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2180
            # there's only one bdm for this instance at this point
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2181
            bdm = bdm_obj.get_by_instance_uuid(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2182
                context, instance.uuid).objects[0]
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2183
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2184
            # update the required attributes
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2185
            bdm['connection_info'] = jsonutils.dumps(connection_info)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2186
            bdm['source_type'] = 'volume'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2187
            bdm['destination_type'] = 'volume'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2188
            bdm['device_name'] = mountpoint
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2189
            bdm['delete_on_termination'] = True
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2190
            bdm['volume_id'] = volume_id
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2191
            bdm['volume_size'] = instance['root_gb']
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2192
            bdm.save()
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2193
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2194
    def _power_off(self, instance, halt_type):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2195
        """Power off a Solaris Zone."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2196
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2197
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2198
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2199
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2200
6260
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  2201
        # Attempt to update the zones hostid in the instance data, to catch
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  2202
        # those instances that might have been created without a hostid stored.
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  2203
        self._set_instance_metahostid(instance)
c6db55d32fc3 23593070 resize/evacuate should carry the hostid of the zone to the new system
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6178
diff changeset
  2204
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2205
        try:
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2206
            self._unplug_vifs(instance)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2207
            if halt_type == 'SOFT':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2208
                zone.shutdown()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2209
            else:
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2210
                # 'HARD'
3521
958ebf9deed1 20052466 remove _ai_health_check() from driver.py now that 18857274 is integrated
Drew Fisher <drew.fisher@oracle.com>
parents: 1990
diff changeset
  2211
                zone.halt()
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2212
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2213
            reason = zonemgr_strerror(ex)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2214
            if isinstance(ex, rad.client.ObjectError):
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2215
                code = ex.get_payload().code
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2216
                if code == zonemgr.ErrorCode.COMMAND_ERROR:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2217
                    LOG.warning(_("Ignoring command error returned while "
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2218
                                  "trying to power off instance '%s' via "
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2219
                                  "zonemgr(3RAD): %s" % (name, reason)))
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2220
                    return
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2221
            LOG.error(_("Unable to power off instance '%s' via zonemgr(3RAD): "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2222
                        "%s") % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2223
            raise exception.InstancePowerOffFailure(reason=reason)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2224
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2225
    def _samehost_revert_resize(self, context, instance, network_info,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2226
                                block_device_info):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2227
        """Reverts the zones configuration to pre-resize config
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2228
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2229
        self.power_off(instance)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2230
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2231
        extra_specs = self._get_extra_specs(instance)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2232
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2233
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2234
        name = instance['name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2235
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2236
        self._set_num_cpu(name, instance.vcpus, brand)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2237
        self._set_memory_cap(name, instance.memory_mb, brand)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2238
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2239
        rgb = instance.root_gb
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2240
        old_rvid = instance.system_metadata.get('old_instance_volid')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2241
        if old_rvid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2242
            new_rvid = instance.system_metadata.get('new_instance_volid')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2243
            mount_dev = instance['root_device_name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2244
            del instance.system_metadata['old_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2245
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2246
            self._resize_disk_migration(context, instance, new_rvid, old_rvid,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2247
                                        rgb, mount_dev)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2248
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2249
    def destroy(self, context, instance, network_info, block_device_info=None,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2250
                destroy_disks=True, migrate_data=None):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2251
        """Destroy the specified instance from the Hypervisor.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2252
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2253
        If the instance is not found (for example if networking failed), this
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2254
        function should still succeed.  It's probably a good idea to log a
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2255
        warning in that case.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2256
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2257
        :param context: security context
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2258
        :param instance: Instance object as returned by DB layer.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2259
        :param network_info:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2260
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2261
        :param block_device_info: Information about block devices that should
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2262
                                  be detached from the instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2263
        :param destroy_disks: Indicates if disks should be destroyed
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2264
        :param migrate_data: implementation specific params
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2265
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2266
        if (instance['task_state'] == task_states.RESIZE_REVERTING and
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2267
                instance.system_metadata['old_vm_state'] == vm_states.RESIZED):
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2268
            return
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2269
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2270
        # A destroy is issued for the original zone for an evac case.  If
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2271
        # the evac fails we need to protect the zone from deletion when
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2272
        # power comes back on.
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2273
        evac_from = instance.system_metadata.get('evac_from')
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2274
        if evac_from is not None and instance['task_state'] is None:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2275
            instance.host = evac_from
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2276
            instance.node = evac_from
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2277
            del instance.system_metadata['evac_from']
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2278
            instance.save()
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2279
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2280
            return
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2281
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2282
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2283
            # These methods log if problems occur so no need to double log
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2284
            # here. Just catch any stray exceptions and allow destroy to
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2285
            # proceed.
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2286
            if self._has_vnc_console_service(instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2287
                self._disable_vnc_console_service(instance)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2288
                self._delete_vnc_console_service(instance)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2289
        except Exception:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2290
            pass
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2291
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2292
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2293
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2294
        # If instance cannot be found, just return.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2295
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2296
            LOG.warning(_("Unable to find instance '%s' via zonemgr(3RAD)")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2297
                        % name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2298
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2299
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2300
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2301
            if self._get_state(zone) == power_state.RUNNING:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2302
                self._power_off(instance, 'HARD')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2303
            if self._get_state(zone) == power_state.SHUTDOWN:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2304
                self._uninstall(instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2305
            if self._get_state(zone) == power_state.NOSTATE:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2306
                self._delete_config(instance)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2307
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2308
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2309
            LOG.warning(_("Unable to destroy instance '%s' via zonemgr(3RAD): "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2310
                          "%s") % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2311
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2312
        # One last point of house keeping. If we are deleting the instance
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2313
        # during a resize operation we want to make sure the cinder volumes are
5252
947514442d05 22513201 nova resize revert will fail if there are volumes attached
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5196
diff changeset
  2314
        # properly cleaned up. We need to do this here, because the periodic
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2315
        # task that comes along and cleans these things up isn't nice enough to
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2316
        # pass a context in so that we could simply do the work there.  But
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2317
        # because we have access to a context, we can handle the work here and
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2318
        # let the periodic task simply clean up the left over zone
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2319
        # configuration that might be left around.  Note that the left over
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2320
        # zone will only show up in zoneadm list, not nova list.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2321
        #
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2322
        # If the task state is RESIZE_REVERTING do not process these because
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2323
        # the cinder volume cleanup is taken care of in
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2324
        # finish_revert_migration.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2325
        if instance['task_state'] == task_states.RESIZE_REVERTING:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2326
            return
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2327
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2328
        tags = ['old_instance_volid', 'new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2329
        for tag in tags:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2330
            volid = instance.system_metadata.get(tag)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2331
            if volid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2332
                try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2333
                    LOG.debug(_("Deleting volume %s"), volid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2334
                    self._volume_api.delete(context, volid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2335
                    del instance.system_metadata[tag]
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2336
                except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2337
                    pass
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2338
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2339
    def cleanup(self, context, instance, network_info, block_device_info=None,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2340
                destroy_disks=True, migrate_data=None, destroy_vifs=True):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2341
        """Cleanup the instance resources .
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2342
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2343
        Instance should have been destroyed from the Hypervisor before calling
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2344
        this method.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2345
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2346
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2347
        :param instance: Instance object as returned by DB layer.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2348
        :param network_info:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2349
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2350
        :param block_device_info: Information about block devices that should
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2351
                                  be detached from the instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2352
        :param destroy_disks: Indicates if disks should be destroyed
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2353
        :param migrate_data: implementation specific params
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2354
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2355
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2356
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2357
    def reboot(self, context, instance, network_info, reboot_type,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2358
               block_device_info=None, bad_volumes_callback=None):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2359
        """Reboot the specified instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2360
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2361
        After this is called successfully, the instance's state
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2362
        goes back to power_state.RUNNING. The virtualization
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2363
        platform should ensure that the reboot action has completed
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2364
        successfully even in cases in which the underlying domain/vm
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2365
        is paused or halted/stopped.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2366
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2367
        :param instance: nova.objects.instance.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2368
        :param network_info:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2369
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2370
        :param reboot_type: Either a HARD or SOFT reboot
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2371
        :param block_device_info: Info pertaining to attached volumes
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2372
        :param bad_volumes_callback: Function to handle any bad volumes
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2373
            encountered
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2374
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2375
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2376
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2377
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2378
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2379
1990
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
  2380
        if self._get_state(zone) == power_state.SHUTDOWN:
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2381
            self._power_on(instance, network_info)
1990
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
  2382
            return
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
  2383
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2384
        bootargs = []
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2385
        if CONF.solariszones.solariszones_boot_options:
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2386
            reset_bootargs = False
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2387
            persistent = 'False'
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2388
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2389
            # Get any bootargs already set in the zone
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2390
            cur_bootargs = lookup_resource_property(zone, 'global', 'bootargs')
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2391
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2392
            # Get any bootargs set in the instance metadata by the user
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2393
            meta_bootargs = instance.metadata.get('bootargs')
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2394
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2395
            if meta_bootargs:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2396
                bootargs = ['--', str(meta_bootargs)]
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2397
                persistent = str(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2398
                    instance.metadata.get('bootargs_persist', 'False'))
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2399
                if cur_bootargs is not None and meta_bootargs != cur_bootargs:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2400
                    with ZoneConfig(zone) as zc:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2401
                        reset_bootargs = True
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2402
                        # Temporarily clear bootargs in zone config
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2403
                        zc.clear_resource_props('global', ['bootargs'])
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2404
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2405
        try:
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2406
            self._unplug_vifs(instance)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2407
            if reboot_type == 'SOFT':
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2408
                bootargs.insert(0, '-r')
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2409
                zone.shutdown(bootargs)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2410
            else:
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2411
                zone.reboot(bootargs)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2412
            self._plug_vifs(instance, network_info)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2413
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2414
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2415
            LOG.error(_("Unable to reboot instance '%s' via zonemgr(3RAD): %s")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2416
                      % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2417
            raise exception.InstanceRebootFailure(reason=reason)
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2418
        finally:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2419
            if CONF.solariszones.solariszones_boot_options:
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2420
                if meta_bootargs and persistent.lower() == 'false':
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2421
                    # We have consumed the metadata bootargs and
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2422
                    # the user asked for them not to be persistent so
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2423
                    # clear them out now.
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2424
                    instance.metadata.pop('bootargs', None)
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2425
                    instance.metadata.pop('bootargs_persist', None)
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2426
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2427
                if reset_bootargs:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2428
                    with ZoneConfig(zone) as zc:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2429
                        # restore original boot args in zone config
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2430
                        zc.setprop('global', 'bootargs', cur_bootargs)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2431
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2432
    def get_console_pool_info(self, console_type):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2433
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2434
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2435
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2436
    def _get_console_output(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2437
        """Builds a string containing the console output (capped at
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2438
        MAX_CONSOLE_BYTES characters) by reassembling the log files
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2439
        that Solaris Zones framework maintains for each zone.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2440
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2441
        console_str = ""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2442
        avail = MAX_CONSOLE_BYTES
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2443
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2444
        # Examine the log files in most-recently modified order, keeping
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2445
        # track of the size of each file and of how many characters have
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2446
        # been seen. If there are still characters left to incorporate,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2447
        # then the contents of the log file in question are prepended to
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2448
        # the console string built so far. When the number of characters
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2449
        # available has run out, the last fragment under consideration
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2450
        # will likely begin within the middle of a line. As such, the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2451
        # start of the fragment up to the next newline is thrown away.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2452
        # The remainder constitutes the start of the resulting console
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2453
        # output which is then prepended to the console string built so
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2454
        # far and the result returned.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2455
        logfile_pattern = '/var/log/zones/%s.console*' % instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2456
        logfiles = sorted(glob.glob(logfile_pattern), key=os.path.getmtime,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2457
                          reverse=True)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2458
        for file in logfiles:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2459
            size = os.path.getsize(file)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2460
            if size == 0:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2461
                continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2462
            avail -= size
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2463
            with open(file, 'r') as log:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2464
                if avail < 0:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2465
                    (fragment, _) = utils.last_bytes(log, avail + size)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2466
                    remainder = fragment.find('\n') + 1
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2467
                    console_str = fragment[remainder:] + console_str
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2468
                    break
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2469
                fragment = ''
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2470
                for line in log.readlines():
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2471
                    fragment += line
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2472
                console_str = fragment + console_str
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2473
        return console_str
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2474
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2475
    def get_console_output(self, context, instance):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2476
        """Get console output for an instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2477
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2478
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2479
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2480
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2481
        return self._get_console_output(instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2482
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2483
    def get_vnc_console(self, context, instance):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2484
        """Get connection info for a vnc console.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2485
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2486
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2487
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2488
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2489
        :returns an instance of console.type.ConsoleVNC
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2490
        """
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2491
        # Do not provide console access prematurely. Zone console access is
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2492
        # exclusive and zones that are still installing require their console.
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2493
        # Grabbing the zone console will break installation.
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2494
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2495
        if instance['vm_state'] == vm_states.BUILDING:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2496
            LOG.info(_("VNC console not available until zone '%s' has "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2497
                     "completed installation. Try again later.") % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2498
            raise exception.InstanceNotReady(instance_id=instance['uuid'])
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2499
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2500
        if not self._has_vnc_console_service(instance):
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2501
            LOG.debug(_("Creating zone VNC console SMF service for "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2502
                      "instance '%s'") % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2503
            self._create_vnc_console_service(instance)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2504
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2505
        self._enable_vnc_console_service(instance)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2506
        console_fmri = VNC_CONSOLE_BASE_FMRI + ':' + name
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2507
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2508
        # The console service sets an SMF instance property for the port
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2509
        # on which the VNC service is listening. The service needs to be
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2510
        # refreshed to reflect the current property value
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2511
        # TODO(npower): investigate using RAD instead of CLI invocation
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2512
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2513
            out, err = utils.execute('/usr/sbin/svccfg', '-s', console_fmri,
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2514
                                     'refresh')
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2515
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2516
            reason = ex.stderr
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2517
            LOG.error(_("Unable to refresh zone VNC console SMF service "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2518
                        "'%s': %s" % (console_fmri, reason)))
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2519
            raise
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2520
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2521
        host = CONF.vnc.vncserver_proxyclient_address
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2522
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2523
            out, err = utils.execute('/usr/bin/svcprop', '-p', 'vnc/port',
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2524
                                     console_fmri)
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2525
            port = int(out.strip())
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2526
            return ctype.ConsoleVNC(host=host, port=port,
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2527
                                    internal_access_path=None)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2528
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2529
            reason = ex.stderr
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2530
            LOG.error(_("Unable to read VNC console port from zone VNC "
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2531
                        "console SMF service '%s': %s"
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2532
                      % (console_fmri, reason)))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2533
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2534
    def get_spice_console(self, context, instance):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2535
        """Get connection info for a spice console.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2536
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2537
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2538
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2539
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2540
        :returns an instance of console.type.ConsoleSpice
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2541
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2542
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2543
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2544
    def get_rdp_console(self, context, instance):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2545
        """Get connection info for a rdp console.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2546
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2547
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2548
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2549
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2550
        :returns an instance of console.type.ConsoleRDP
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2551
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2552
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2553
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2554
    def get_serial_console(self, context, instance):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2555
        """Get connection info for a serial console.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2556
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2557
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2558
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2559
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2560
        :returns an instance of console.type.ConsoleSerial
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2561
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2562
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2563
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2564
    def get_mks_console(self, context, instance):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2565
        """Get connection info for a MKS console.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2566
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2567
        :param context: security context
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2568
        :param instance: nova.objects.instance.Instance
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2569
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2570
        :returns an instance of console.type.ConsoleMKS
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2571
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2572
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2573
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2574
    def _get_zone_diagnostics(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2575
        """Return data about Solaris Zone diagnostics."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2576
        if zone.id == -1:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2577
            return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2578
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2579
        diagnostics = {}
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2580
        zone_id = str(zone.id)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2581
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2582
        kstat_data = self._get_kstat_by_name(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2583
            'zone_caps', 'caps', zone_id,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2584
            ''.join(('lockedmem_zone_', zone_id)))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2585
        if kstat_data is not None:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2586
            diagnostics['lockedmem'] = self._get_kstat_statistic(kstat_data,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2587
                                                                 'usage')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2588
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2589
        kstat_data = self._get_kstat_by_name(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2590
            'zone_caps', 'caps', zone_id, ''.join(('nprocs_zone_', zone_id)))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2591
        if kstat_data is not None:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2592
            diagnostics['nprocs'] = self._get_kstat_statistic(kstat_data,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2593
                                                              'usage')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2594
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2595
        kstat_data = self._get_kstat_by_name(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2596
            'zone_caps', 'caps', zone_id, ''.join(('swapresv_zone_', zone_id)))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2597
        if kstat_data is not None:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2598
            diagnostics['swapresv'] = self._get_kstat_statistic(kstat_data,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2599
                                                                'usage')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2600
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2601
        kstat_data = self._get_kstat_by_name('zones', 'cpu', None,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2602
                                             ''.join(('sys_zone_', zone_id)))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2603
        if kstat_data is not None:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2604
            for ks in kstat_data:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2605
                key = ks.keys()[0]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2606
                if key in ('class', 'crtime', 'snaptime', 'zonename'):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2607
                    continue
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2608
                if key.endswith('_cur'):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2609
                        continue
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2610
                if diagnostics.get(key) is None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2611
                    diagnostics[key] = 0
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2612
                else:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2613
                    diagnostics[key] += ks[key]
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2614
        return diagnostics
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2615
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2616
    def get_diagnostics(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2617
        """Return diagnostics data about the given instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2618
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2619
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2620
            The instance to which the diagnostic data should be returned.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2621
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2622
        :return: Has a big overlap to the return value of the newer interface
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2623
            :func:`get_instance_diagnostics`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2624
        :rtype: dict
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2625
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2626
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2627
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2628
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2629
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2630
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2631
        return self._get_zone_diagnostics(zone)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2632
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2633
    def get_instance_diagnostics(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2634
        """Return diagnostics data about the given instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2635
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2636
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2637
            The instance to which the diagnostic data should be returned.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2638
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2639
        :return: Has a big overlap to the return value of the older interface
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2640
            :func:`get_diagnostics`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2641
        :rtype: nova.virt.diagnostics.Diagnostics
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2642
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2643
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2644
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2645
    def get_all_bw_counters(self, instances):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2646
        """Return bandwidth usage counters for each interface on each
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2647
           running VM.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2648
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2649
        :param instances: nova.objects.instance.InstanceList
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2650
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2651
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2652
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2653
    def get_all_volume_usage(self, context, compute_host_bdms):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2654
        """Return usage info for volumes attached to vms on
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2655
           a given host.-
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2656
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2657
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2658
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2659
    def get_host_ip_addr(self):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2660
        """Retrieves the IP address of the dom0
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2661
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2662
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2663
        return CONF.my_ip
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2664
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2665
    def attach_volume(self, context, connection_info, instance, mountpoint,
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2666
                      disk_bus=None, device_type=None, encryption=None):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2667
        """Attach the disk to the instance at mountpoint using info."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2668
        # TODO(npower): Apply mountpoint in a meaningful way to the zone
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2669
        # For security reasons this is not permitted in a Solaris branded zone.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2670
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2671
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2672
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2673
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2674
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2675
        extra_specs = self._get_extra_specs(instance)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2676
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2677
        if brand != ZONE_BRAND_SOLARIS_KZ:
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2678
            # Only Solaris kernel zones are currently supported.
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2679
            reason = (_("'%s' branded zones are not currently supported")
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2680
                      % brand)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2681
            raise NotImplementedError(reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2682
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2683
        suri = self._suri_from_volume_info(connection_info)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2684
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2685
        resource_scope = [zonemgr.Property("storage", suri)]
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2686
        if connection_info.get('serial') is not None:
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2687
            volume = self._volume_api.get(context, connection_info['serial'])
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2688
            if volume['bootable']:
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2689
                resource_scope.append(zonemgr.Property("bootpri", "1"))
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2690
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2691
        with ZoneConfig(zone) as zc:
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2692
            zc.addresource("device", resource_scope)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2693
4671
d08190e626f1 20867780 Nova should support LZR for block devices
Drew Fisher <drew.fisher@oracle.com>
parents: 4669
diff changeset
  2694
        # apply the configuration to the running zone
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2695
        if zone.state == ZONE_STATE_RUNNING:
5606
005e55ad33d5 22220227 failure to apply zonecfg in attach_volume can leave debris in zonecfg
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5541
diff changeset
  2696
            try:
005e55ad33d5 22220227 failure to apply zonecfg in attach_volume can leave debris in zonecfg
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5541
diff changeset
  2697
                zone.apply()
005e55ad33d5 22220227 failure to apply zonecfg in attach_volume can leave debris in zonecfg
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5541
diff changeset
  2698
            except Exception as ex:
005e55ad33d5 22220227 failure to apply zonecfg in attach_volume can leave debris in zonecfg
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5541
diff changeset
  2699
                reason = zonemgr_strerror(ex)
005e55ad33d5 22220227 failure to apply zonecfg in attach_volume can leave debris in zonecfg
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5541
diff changeset
  2700
                LOG.error(_("Unable to attach '%s' to instance '%s' via "
005e55ad33d5 22220227 failure to apply zonecfg in attach_volume can leave debris in zonecfg
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5541
diff changeset
  2701
                            "zonemgr(3RAD): %s") % (suri, name, reason))
005e55ad33d5 22220227 failure to apply zonecfg in attach_volume can leave debris in zonecfg
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5541
diff changeset
  2702
                with ZoneConfig(zone) as zc:
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2703
                    zc.removeresources("device", resource_scope)
5606
005e55ad33d5 22220227 failure to apply zonecfg in attach_volume can leave debris in zonecfg
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5541
diff changeset
  2704
                raise
4671
d08190e626f1 20867780 Nova should support LZR for block devices
Drew Fisher <drew.fisher@oracle.com>
parents: 4669
diff changeset
  2705
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2706
    def detach_volume(self, connection_info, instance, mountpoint,
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2707
                      encryption=None):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2708
        """Detach the disk attached to the instance."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2709
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2710
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2711
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2712
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2713
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2714
        extra_specs = self._get_extra_specs(instance)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2715
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2716
        if brand != ZONE_BRAND_SOLARIS_KZ:
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2717
            # Only Solaris kernel zones are currently supported.
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2718
            reason = (_("'%s' branded zones are not currently supported")
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2719
                      % brand)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2720
            raise NotImplementedError(reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2721
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2722
        suri = self._suri_from_volume_info(connection_info)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2723
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2724
        # Check if the specific property value exists before attempting removal
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2725
        resource = lookup_resource_property_value(zone, "device", "storage",
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2726
                                                  suri)
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2727
        if not resource:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2728
            LOG.warning(_("Storage resource '%s' is not attached to instance "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2729
                        "'%s'") % (suri, name))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2730
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2731
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2732
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2733
            zc.removeresources("device", [zonemgr.Property("storage", suri)])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2734
4671
d08190e626f1 20867780 Nova should support LZR for block devices
Drew Fisher <drew.fisher@oracle.com>
parents: 4669
diff changeset
  2735
        # apply the configuration to the running zone
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2736
        if zone.state == ZONE_STATE_RUNNING:
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2737
            try:
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2738
                zone.apply()
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2739
            except:
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2740
                LOG.error(_("Unable to apply the detach of resource '%s' to "
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2741
                            "running instance '%s' because the resource is "
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2742
                            "most likely in use.") % (suri, name))
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2743
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2744
                # re-add the entry to the zone configuration so that the
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2745
                # configuration will reflect what is in cinder before we raise
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2746
                # the exception, therefor failing the detach and leaving the
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2747
                # volume in-use.
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2748
                needed_props = ["storage", "bootpri"]
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2749
                props = filter(lambda prop: prop.name in needed_props,
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2750
                               resource.properties)
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2751
                with ZoneConfig(zone) as zc:
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2752
                    zc.addresource("device", props)
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2753
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2754
                raise
4671
d08190e626f1 20867780 Nova should support LZR for block devices
Drew Fisher <drew.fisher@oracle.com>
parents: 4669
diff changeset
  2755
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2756
    def swap_volume(self, old_connection_info, new_connection_info,
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2757
                    instance, mountpoint, resize_to):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2758
        """Replace the volume attached to the given `instance`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2759
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2760
        :param dict old_connection_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2761
            The volume for this connection gets detached from the given
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2762
            `instance`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2763
        :param dict new_connection_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2764
            The volume for this connection gets attached to the given
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2765
            'instance'.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2766
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2767
            The instance whose volume gets replaced by another one.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2768
        :param str mountpoint:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2769
            The mountpoint in the instance where the volume for
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2770
            `old_connection_info` is attached to.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2771
        :param int resize_to:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2772
            If the new volume is larger than the old volume, it gets resized
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2773
            to the given size (in Gigabyte) of `resize_to`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2774
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2775
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2776
        """
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2777
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2778
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2779
    def attach_interface(self, instance, image_meta, vif):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2780
        """Use hotplug to add a network interface to a running instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2781
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2782
        The counter action to this is :func:`detach_interface`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2783
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2784
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2785
            The instance which will get an additional network interface.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2786
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2787
            The metadata of the image of the instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2788
        :param nova.network.model.NetworkInfo vif:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2789
            The object which has the information about the interface to attach.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2790
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2791
        :raise nova.exception.NovaException: If the attach fails.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2792
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2793
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2794
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2795
        name = instance['name']
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2796
        zone = self._get_zone_by_name(name)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2797
        if zone is None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2798
            raise exception.InstanceNotFound(instance_id=name)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2799
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2800
        ctxt = nova_context.get_admin_context()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2801
        extra_specs = self._get_extra_specs(instance)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2802
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2803
        anetname = self._set_ovs_info(ctxt, zone, brand, False, vif)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2804
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2805
        # apply the configuration if the vm is ACTIVE
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2806
        if instance['vm_state'] == vm_states.ACTIVE:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2807
            try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2808
                zone.apply()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2809
            except Exception as ex:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2810
                reason = zonemgr_strerror(ex)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2811
                msg = (_("Unable to attach interface to instance '%s' via "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2812
                         "zonemgr(3RAD): %s") % (name, reason))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2813
                with ZoneConfig(zone) as zc:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2814
                    prop_filter = [zonemgr.Property('mac-address',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2815
                                                    vif['address'])]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2816
                    zc.removeresources('anet', prop_filter)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2817
                raise nova.exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2818
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2819
            # add port to ovs bridge
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2820
            anet = ''.join([name, '/', anetname])
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2821
            self._ovs_add_port(instance, vif, anet)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2822
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2823
    def detach_interface(self, instance, vif):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2824
        """Use hotunplug to remove a network interface from a running instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2825
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2826
        The counter action to this is :func:`attach_interface`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2827
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2828
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2829
            The instance which gets a network interface removed.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2830
        :param nova.network.model.NetworkInfo vif:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2831
            The object which has the information about the interface to detach.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2832
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2833
        :raise nova.exception.NovaException: If the detach fails.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2834
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2835
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2836
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2837
        name = instance['name']
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2838
        zone = self._get_zone_by_name(name)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2839
        if zone is None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2840
            raise exception.InstanceNotFound(instance_id=name)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2841
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2842
        # Check if the specific property value exists before attempting removal
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2843
        resource = lookup_resource_property_value(zone, 'anet',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2844
                                                  'mac-address',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2845
                                                  vif['address'])
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2846
        if not resource:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2847
            msg = (_("Interface with MAC address '%s' is not attached to "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2848
                     "instance '%s'.") % (vif['address'], name))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2849
            raise nova.exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2850
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2851
        extra_specs = self._get_extra_specs(instance)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2852
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2853
        for prop in resource.properties:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2854
            if brand == ZONE_BRAND_SOLARIS and prop.name == 'linkname':
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2855
                anetname = prop.value
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2856
                break
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2857
            elif brand != ZONE_BRAND_SOLARIS and prop.name == 'id':
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2858
                anetname = 'net%s' % prop.value
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2859
                break
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2860
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2861
        with ZoneConfig(zone) as zc:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2862
            zc.removeresources('anet', [zonemgr.Property('mac-address',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2863
                                                         vif['address'])])
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2864
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2865
        # apply the configuration if the vm is ACTIVE
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2866
        if instance['vm_state'] == vm_states.ACTIVE:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2867
            try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2868
                zone.apply()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2869
            except:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2870
                msg = (_("Unable to detach interface '%s' from running "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2871
                         "instance '%s' because the resource is most likely "
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2872
                         "in use.") % (anetname, name))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2873
                needed_props = ["lower-link", "configure-allowed-address",
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2874
                                "mac-address", "mtu"]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2875
                if brand == ZONE_BRAND_SOLARIS:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2876
                    needed_props.append("linkname")
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2877
                else:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2878
                    needed_props.append("id")
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2879
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2880
                props = filter(lambda prop: prop.name in needed_props,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2881
                               resource.properties)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2882
                with ZoneConfig(zone) as zc:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2883
                    zc.addresource('anet', props)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2884
                raise nova.exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2885
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2886
            # remove anet from OVS bridge
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2887
            port = ''.join([name, '/', anetname])
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2888
            self._ovs_delete_port(port)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2889
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2890
    def _cleanup_migrate_disk(self, context, instance, volume):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2891
        """Make a best effort at cleaning up the volume that was created to
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2892
        hold the new root disk
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2893
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2894
        :param context: the context for the migration/resize
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2895
        :param instance: nova.objects.instance.Instance being migrated/resized
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2896
        :param volume: new volume created by the call to cinder create
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2897
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2898
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2899
            self._volume_api.delete(context, volume['id'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2900
        except Exception as err:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2901
            LOG.error(_("Unable to cleanup the resized volume: %s" % err))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2902
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2903
    def migrate_disk_and_power_off(self, context, instance, dest,
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2904
                                   flavor, network_info,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2905
                                   block_device_info=None,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2906
                                   timeout=0, retry_interval=0):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2907
        """Transfers the disk of a running instance in multiple phases, turning
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2908
        off the instance before the end.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2909
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2910
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2911
            The instance whose disk should be migrated.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2912
        :param str dest:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2913
            The IP address of the destination host.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2914
        :param nova.objects.flavor.Flavor flavor:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2915
            The flavor of the instance whose disk get migrated.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2916
        :param nova.network.model.NetworkInfo network_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2917
            The network information of the given `instance`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2918
        :param dict block_device_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2919
            Information about the block devices.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2920
        :param int timeout:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2921
            The time in seconds to wait for the guest OS to shutdown.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2922
        :param int retry_interval:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2923
            How often to signal guest while waiting for it to shutdown.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2924
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2925
        :return: A list of disk information dicts in JSON format.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2926
        :rtype: str
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2927
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2928
        LOG.debug("Starting migrate_disk_and_power_off", instance=instance)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2929
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2930
        samehost = (dest == self.get_host_ip_addr())
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2931
        if samehost:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2932
            instance.system_metadata['resize_samehost'] = samehost
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2933
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2934
        extra_specs = self._get_extra_specs(instance)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2935
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2936
        if brand != ZONE_BRAND_SOLARIS_KZ and not samehost:
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2937
            reason = (_("'%s' branded zones do not currently support resize "
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2938
                        "to a different host.") % brand)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2939
            raise exception.MigrationPreCheckError(reason=reason)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2940
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2941
        if brand != flavor['extra_specs'].get('zonecfg:brand'):
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2942
            reason = (_("Unable to change brand of zone during resize."))
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2943
            raise exception.MigrationPreCheckError(reason=reason)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2944
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2945
        orgb = instance['root_gb']
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2946
        nrgb = flavor.root_gb
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2947
        if orgb > nrgb:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2948
            msg = (_("Unable to resize to a smaller boot volume."))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2949
            raise exception.ResizeError(reason=msg)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2950
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2951
        self.power_off(instance, timeout, retry_interval)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2952
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2953
        disk_info = None
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2954
        if nrgb > orgb or not samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2955
            bmap = block_device_info.get('block_device_mapping')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2956
            rootmp = instance.root_device_name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2957
            for entry in bmap:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2958
                mountdev = entry['mount_device'].rpartition('/')[2]
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2959
                if mountdev == rootmp:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2960
                    root_ci = entry['connection_info']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2961
                    break
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2962
            else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2963
                # If this is a non-global zone that is on the same host and is
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2964
                # simply using a dataset, the disk size is purely an OpenStack
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2965
                # quota.  We can continue without doing any disk work.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2966
                if samehost and brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2967
                    return disk_info
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2968
                else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2969
                    msg = (_("Cannot find an attached root device."))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2970
                    raise exception.ResizeError(reason=msg)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2971
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2972
            if root_ci['driver_volume_type'] == 'iscsi':
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2973
                volume_id = root_ci['data']['volume_id']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2974
            else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2975
                volume_id = root_ci['serial']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2976
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2977
            if volume_id is None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2978
                msg = (_("Cannot find an attached root device."))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2979
                raise exception.ResizeError(reason=msg)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2980
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2981
            vinfo = self._volume_api.get(context, volume_id)
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2982
            newvolume = self._volume_api.create(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2983
                context, orgb, vinfo['display_name'] + '-resized',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2984
                vinfo['display_description'], source_volume=vinfo)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2985
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2986
            instance.system_metadata['old_instance_volid'] = volume_id
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2987
            instance.system_metadata['new_instance_volid'] = newvolume['id']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2988
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2989
            # TODO(npower): Polling is what nova/compute/manager also does when
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2990
            # creating a new volume, so we do likewise here.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2991
            while True:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2992
                volume = self._volume_api.get(context, newvolume['id'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2993
                if volume['status'] != 'creating':
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2994
                    break
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2995
                greenthread.sleep(1)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2996
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2997
            if nrgb > orgb:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2998
                try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2999
                    self._volume_api.extend(context, newvolume['id'], nrgb)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3000
                except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3001
                    LOG.error(_("Failed to extend the new volume"))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3002
                    self._cleanup_migrate_disk(context, instance, newvolume)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3003
                    raise
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3004
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3005
            disk_info = newvolume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3006
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3007
        return disk_info
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3008
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3009
    def snapshot(self, context, instance, image_id, update_task_state):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3010
        """Snapshots the specified instance.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3011
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3012
        :param context: security context
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3013
        :param instance: nova.objects.instance.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3014
        :param image_id: Reference to a pre-created image that will
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3015
                         hold the snapshot.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3016
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3017
        # Get original base image info
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3018
        (base_service, base_id) = glance.get_remote_image_service(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3019
            context, instance['image_ref'])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3020
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3021
            base = base_service.show(context, base_id)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3022
        except exception.ImageNotFound:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3023
            base = {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3024
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3025
        snapshot_service, snapshot_id = glance.get_remote_image_service(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3026
            context, image_id)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3027
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3028
        # Build updated snapshot image metadata
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3029
        snapshot = snapshot_service.show(context, snapshot_id)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3030
        metadata = {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3031
            'is_public': False,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3032
            'status': 'active',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3033
            'name': snapshot['name'],
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3034
            'properties': {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3035
                'image_location': 'snapshot',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3036
                'image_state': 'available',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3037
                'owner_id': instance['project_id'],
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3038
                'instance_uuid': instance['uuid'],
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3039
                'image_type': snapshot['properties']['image_type'],
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3040
            }
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3041
        }
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3042
        # Match architecture, hypervisor_type and vm_mode properties to base
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3043
        # image.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3044
        for prop in ['architecture', 'hypervisor_type', 'vm_mode']:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3045
            if prop in base.get('properties', {}):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3046
                base_prop = base['properties'][prop]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3047
                metadata['properties'][prop] = base_prop
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3048
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3049
        # Set generic container and disk formats initially in case the glance
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3050
        # service rejects Unified Archives (uar) and ZFS in metadata.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3051
        metadata['container_format'] = 'ovf'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3052
        metadata['disk_format'] = 'raw'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3053
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3054
        update_task_state(task_state=task_states.IMAGE_PENDING_UPLOAD)
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3055
        snapshot_directory = CONF.solariszones.solariszones_snapshots_directory
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3056
        fileutils.ensure_tree(snapshot_directory)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3057
        snapshot_name = uuid.uuid4().hex
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3058
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3059
        with utils.tempdir(dir=snapshot_directory) as tmpdir:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3060
            out_path = os.path.join(tmpdir, snapshot_name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3061
            zone_name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3062
            utils.execute('/usr/sbin/archiveadm', 'create', '--root-only',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3063
                          '-z', zone_name, out_path)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3064
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3065
            LOG.info(_("Snapshot extracted, beginning image upload"),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3066
                     instance=instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3067
            try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3068
                # Upload the archive image to the image service
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3069
                update_task_state(
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3070
                    task_state=task_states.IMAGE_UPLOADING,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3071
                    expected_state=task_states.IMAGE_PENDING_UPLOAD)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3072
                with open(out_path, 'r') as image_file:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3073
                    snapshot_service.update(context, image_id, metadata,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3074
                                            image_file)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3075
                    LOG.info(_("Snapshot image upload complete"),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3076
                             instance=instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3077
                try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3078
                    # Try to update the image metadata container and disk
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3079
                    # formats more suitably for a unified archive if the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3080
                    # glance server recognises them.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3081
                    metadata['container_format'] = 'uar'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3082
                    metadata['disk_format'] = 'zfs'
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3083
                    snapshot_service.update(context, image_id, metadata, None)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3084
                except exception.Invalid:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3085
                    LOG.warning(_("Image service rejected image metadata "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3086
                                  "container and disk formats 'uar' and "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3087
                                  "'zfs'. Using generic values 'ovf' and "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3088
                                  "'raw' as fallbacks."))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3089
            finally:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3090
                # Delete the snapshot image file source
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3091
                os.unlink(out_path)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3092
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3093
    def post_interrupted_snapshot_cleanup(self, context, instance):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3094
        """Cleans up any resources left after an interrupted snapshot.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3095
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3096
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3097
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3098
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3099
        pass
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3100
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3101
    def _cleanup_finish_migration(self, context, instance, disk_info,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3102
                                  network_info, samehost):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3103
        """Best effort attempt at cleaning up any additional resources that are
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3104
        not directly managed by Nova or Cinder so as not to leak these
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3105
        resources.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3106
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3107
        if disk_info:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3108
            self._volume_api.detach(context, disk_info['id'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3109
            self._volume_api.delete(context, disk_info['id'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3110
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3111
            old_rvid = instance.system_metadata.get('old_instance_volid')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3112
            if old_rvid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3113
                connector = self.get_volume_connector(instance)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3114
                connection_info = self._volume_api.initialize_connection(
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  3115
                    context, old_rvid, connector)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3116
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3117
                new_rvid = instance.system_metadata['new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3118
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3119
                rootmp = instance.root_device_name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3120
                self._volume_api.attach(context, old_rvid, instance['uuid'],
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3121
                                        rootmp)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3122
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3123
                bdmobj = objects.BlockDeviceMapping()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3124
                bdm = bdmobj.get_by_volume_id(context, new_rvid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3125
                bdm['connection_info'] = jsonutils.dumps(connection_info)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3126
                bdm['volume_id'] = old_rvid
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3127
                bdm.save()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3128
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3129
                del instance.system_metadata['new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3130
                del instance.system_metadata['old_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3131
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3132
        if not samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3133
            self.destroy(context, instance, network_info)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3134
            instance['host'] = instance['launched_on']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3135
            instance['node'] = instance['launched_on']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3136
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3137
    def finish_migration(self, context, migration, instance, disk_info,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3138
                         network_info, image_meta, resize_instance,
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3139
                         block_device_info=None, power_on=True):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3140
        """Completes a resize/migration.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3141
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3142
        :param context: the context for the migration/resize
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3143
        :param migration: the migrate/resize information
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3144
        :param instance: nova.objects.instance.Instance being migrated/resized
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3145
        :param disk_info: the newly transferred disk information
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3146
        :param network_info:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3147
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3148
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3149
            The metadata of the image of the instance.
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3150
        :param resize_instance: True if the instance is being resized,
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3151
                                False otherwise
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3152
        :param block_device_info: instance volume block device info
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3153
        :param power_on: True if the instance should be powered on, False
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3154
                         otherwise
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3155
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3156
        samehost = (migration['dest_node'] == migration['source_node'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3157
        if samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3158
            instance.system_metadata['old_vm_state'] = vm_states.RESIZED
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3159
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3160
        extra_specs = self._get_extra_specs(instance)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3161
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3162
        name = instance['name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3163
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3164
        if disk_info:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3165
            bmap = block_device_info.get('block_device_mapping')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3166
            rootmp = instance['root_device_name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3167
            for entry in bmap:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3168
                if entry['mount_device'] == rootmp:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3169
                    mount_dev = entry['mount_device']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3170
                    root_ci = entry['connection_info']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3171
                    break
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3172
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3173
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3174
            if samehost:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3175
                cpu = instance.vcpus
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3176
                mem = instance.memory_mb
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3177
                self._set_num_cpu(name, cpu, brand)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3178
                self._set_memory_cap(name, mem, brand)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3179
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3180
                # Add the new disk to the volume if the size of the disk
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3181
                # changed
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3182
                if disk_info:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3183
                    rgb = instance.root_gb
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3184
                    self._resize_disk_migration(context, instance,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3185
                                                root_ci['serial'],
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3186
                                                disk_info['id'], rgb,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3187
                                                mount_dev)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3188
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3189
            else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3190
                # No need to check disk_info here, because when not on the
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3191
                # same host a disk_info is always passed in.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3192
                mount_dev = 'c1d0'
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3193
                root_serial = root_ci['serial']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3194
                connection_info = self._resize_disk_migration(context,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3195
                                                              instance,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3196
                                                              root_serial,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3197
                                                              disk_info['id'],
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3198
                                                              0, mount_dev,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3199
                                                              samehost)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3200
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3201
                self._create_config(context, instance, network_info,
5436
2c7413fb2a81 22691630 attempting to resize or evacuate with a network is broken
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
  3202
                                    connection_info, None)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3203
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3204
                zone = self._get_zone_by_name(name)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3205
                if zone is None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3206
                    raise exception.InstanceNotFound(instance_id=name)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3207
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3208
                zone.attach(['-x', 'initialize-hostdata'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3209
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3210
                bmap = block_device_info.get('block_device_mapping')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3211
                for entry in bmap:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3212
                    if entry['mount_device'] != rootmp:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3213
                        self.attach_volume(context, entry['connection_info'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3214
                                           instance, entry['mount_device'])
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3215
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3216
            if power_on:
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3217
                self._power_on(instance, network_info)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3218
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3219
                if brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3220
                    return
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3221
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3222
                # Toggle the autoexpand to extend the size of the rpool.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3223
                # We need to sleep for a few seconds to make sure the zone
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3224
                # is in a state to accept the toggle.  Once bugs are fixed
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3225
                # around the autoexpand and the toggle is no longer needed
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3226
                # or zone.boot() returns only after the zone is ready we
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3227
                # can remove this hack.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3228
                greenthread.sleep(15)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3229
                out, err = utils.execute('/usr/sbin/zlogin', '-S', name,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3230
                                         '/usr/sbin/zpool', 'set',
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3231
                                         'autoexpand=off', 'rpool')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3232
                out, err = utils.execute('/usr/sbin/zlogin', '-S', name,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3233
                                         '/usr/sbin/zpool', 'set',
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3234
                                         'autoexpand=on', 'rpool')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3235
        except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3236
            # Attempt to cleanup the new zone and new volume to at least
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3237
            # give the user a chance to recover without too many hoops
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3238
            self._cleanup_finish_migration(context, instance, disk_info,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3239
                                           network_info, samehost)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3240
            raise
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3241
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3242
    def confirm_migration(self, context, migration, instance, network_info):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3243
        """Confirms a resize/migration, destroying the source VM.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3244
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3245
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3246
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3247
        samehost = (migration['dest_host'] == self.get_host_ip_addr())
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3248
        old_rvid = instance.system_metadata.get('old_instance_volid')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3249
        new_rvid = instance.system_metadata.get('new_instance_volid')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3250
        if new_rvid and old_rvid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3251
            new_vname = instance['display_name'] + "-" + self._rootzpool_suffix
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3252
            del instance.system_metadata['old_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3253
            del instance.system_metadata['new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3254
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3255
            self._volume_api.delete(context, old_rvid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3256
            self._volume_api.update(context, new_rvid,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3257
                                    {'display_name': new_vname})
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3258
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3259
        if not samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3260
            self.destroy(context, instance, network_info)
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3261
        else:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3262
            del instance.system_metadata['resize_samehost']
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3263
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3264
    def _resize_disk_migration(self, context, instance, configured,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3265
                               replacement, newvolumesz, mountdev,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3266
                               samehost=True):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3267
        """Handles the zone root volume switch-over or simply
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3268
        initializing the connection for the new zone if not resizing to the
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3269
        same host
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3270
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3271
        :param context: the context for the _resize_disk_migration
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3272
        :param instance: nova.objects.instance.Instance being resized
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3273
        :param configured: id of the current configured volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3274
        :param replacement: id of the new volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3275
        :param newvolumesz: size of the new volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3276
        :param mountdev: the mount point of the device
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3277
        :param samehost: is the resize happening on the same host
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3278
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3279
        connector = self.get_volume_connector(instance)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3280
        connection_info = self._volume_api.initialize_connection(context,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3281
                                                                 replacement,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3282
                                                                 connector)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3283
        connection_info['serial'] = replacement
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3284
        rootmp = instance.root_device_name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3285
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3286
        if samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3287
            name = instance['name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3288
            zone = self._get_zone_by_name(name)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3289
            if zone is None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3290
                raise exception.InstanceNotFound(instance_id=name)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3291
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3292
            # Need to detach the zone and re-attach the zone if this is a
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3293
            # non-global zone so that the update of the rootzpool resource does
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3294
            # not fail.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3295
            if zone.brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3296
                zone.detach()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3297
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3298
            try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3299
                self._set_boot_device(name, connection_info, zone.brand)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3300
            finally:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3301
                if zone.brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3302
                    zone.attach()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3303
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3304
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3305
            self._volume_api.detach(context, configured)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3306
        except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3307
            LOG.error(_("Failed to detach the volume"))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3308
            raise
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3309
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3310
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3311
            self._volume_api.attach(context, replacement, instance['uuid'],
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3312
                                    rootmp)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3313
        except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3314
            LOG.error(_("Failed to attach the volume"))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3315
            raise
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3316
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3317
        bdmobj = objects.BlockDeviceMapping()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3318
        bdm = bdmobj.get_by_volume_id(context, configured)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3319
        bdm['connection_info'] = jsonutils.dumps(connection_info)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3320
        bdm['volume_id'] = replacement
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3321
        bdm.save()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3322
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3323
        if not samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3324
            return connection_info
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3325
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3326
    def finish_revert_migration(self, context, instance, network_info,
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3327
                                block_device_info=None, power_on=True):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3328
        """Finish reverting a resize/migration.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3329
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3330
        :param context: the context for the finish_revert_migration
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3331
        :param instance: nova.objects.instance.Instance being migrated/resized
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3332
        :param network_info:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3333
           :py:meth:`~nova.network.manager.NetworkManager.get_instance_nw_info`
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3334
        :param block_device_info: instance volume block device info
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3335
        :param power_on: True if the instance should be powered on, False
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3336
                         otherwise
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3337
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3338
        # If this is not a samehost migration then we need to re-attach the
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3339
        # original volume to the instance. Otherwise we need to update the
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3340
        # original zone configuration.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3341
        samehost = instance.system_metadata.get('resize_samehost')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3342
        if samehost:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3343
            self._samehost_revert_resize(context, instance, network_info,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3344
                                         block_device_info)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3345
            del instance.system_metadata['resize_samehost']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3346
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3347
        old_rvid = instance.system_metadata.get('old_instance_volid')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3348
        if old_rvid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3349
            connector = self.get_volume_connector(instance)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3350
            connection_info = self._volume_api.initialize_connection(context,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3351
                                                                     old_rvid,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3352
                                                                     connector)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3353
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3354
            new_rvid = instance.system_metadata['new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3355
            self._volume_api.detach(context, new_rvid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3356
            self._volume_api.delete(context, new_rvid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3357
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3358
            rootmp = instance.root_device_name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3359
            self._volume_api.attach(context, old_rvid, instance['uuid'],
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3360
                                    rootmp)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3361
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3362
            bdmobj = objects.BlockDeviceMapping()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3363
            bdm = bdmobj.get_by_volume_id(context, new_rvid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3364
            bdm['connection_info'] = jsonutils.dumps(connection_info)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3365
            bdm['volume_id'] = old_rvid
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3366
            bdm.save()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3367
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3368
            del instance.system_metadata['new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3369
            del instance.system_metadata['old_instance_volid']
5252
947514442d05 22513201 nova resize revert will fail if there are volumes attached
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5196
diff changeset
  3370
        else:
5608
3a50019e38cf 22750945 Revert resize same host branded zones results in error status
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5607
diff changeset
  3371
            new_rvid = instance.system_metadata.get('new_instance_volid')
5252
947514442d05 22513201 nova resize revert will fail if there are volumes attached
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5196
diff changeset
  3372
            if new_rvid:
947514442d05 22513201 nova resize revert will fail if there are volumes attached
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5196
diff changeset
  3373
                del instance.system_metadata['new_instance_volid']
947514442d05 22513201 nova resize revert will fail if there are volumes attached
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5196
diff changeset
  3374
                self._volume_api.delete(context, new_rvid)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3375
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3376
        self._power_on(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3377
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3378
    def pause(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3379
        """Pause the given instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3380
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3381
        A paused instance doesn't use CPU cycles of the host anymore. The
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3382
        state of the VM could be stored in the memory or storage space of the
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3383
        host, depending on the underlying hypervisor technology.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3384
        A "stronger" version of `pause` is :func:'suspend'.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3385
        The counter action for `pause` is :func:`unpause`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3386
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3387
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3388
            The instance which should be paused.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3389
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3390
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3391
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3392
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3393
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3394
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3395
    def unpause(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3396
        """Unpause the given paused instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3397
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3398
        The paused instance gets unpaused and will use CPU cycles of the
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3399
        host again. The counter action for 'unpause' is :func:`pause`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3400
        Depending on the underlying hypervisor technology, the guest has the
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3401
        same state as before the 'pause'.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3402
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3403
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3404
            The instance which should be unpaused.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3405
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3406
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3407
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3408
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3409
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3410
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3411
    def suspend(self, context, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3412
        """Suspend the specified instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3413
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3414
        A suspended instance doesn't use CPU cycles or memory of the host
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3415
        anymore. The state of the instance could be persisted on the host
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3416
        and allocate storage space this way. A "softer" way of `suspend`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3417
        is :func:`pause`. The counter action for `suspend` is :func:`resume`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3418
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3419
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3420
            The context for the suspend.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3421
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3422
            The instance to suspend.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3423
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3424
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3425
        """
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3426
        name = instance['name']
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3427
        zone = self._get_zone_by_name(name)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3428
        if zone is None:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3429
            raise exception.InstanceNotFound(instance_id=name)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3430
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3431
        if zone.brand != ZONE_BRAND_SOLARIS_KZ:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3432
            # Only Solaris kernel zones are currently supported.
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3433
            reason = (_("'%s' branded zones do not currently support "
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3434
                        "suspend. Use 'nova reset-state --active %s' "
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3435
                        "to reset instance state back to 'active'.")
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3436
                      % (zone.brand, instance['display_name']))
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3437
            raise exception.InstanceSuspendFailure(reason=reason)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3438
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3439
        if self._get_state(zone) != power_state.RUNNING:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3440
            reason = (_("Instance '%s' is not running.") % name)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3441
            raise exception.InstanceSuspendFailure(reason=reason)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3442
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3443
        try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3444
            new_path = os.path.join(CONF.solariszones.zones_suspend_path,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3445
                                    '%{zonename}')
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3446
            if not lookup_resource(zone, 'suspend'):
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3447
                # add suspend if not configured
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3448
                self._set_suspend(instance)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3449
            elif lookup_resource_property(zone, 'suspend', 'path') != new_path:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3450
                # replace the old suspend resource with the new one
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3451
                with ZoneConfig(zone) as zc:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3452
                    zc.removeresources('suspend')
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3453
                self._set_suspend(instance)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3454
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3455
            zone.suspend()
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3456
            self._unplug_vifs(instance)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3457
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3458
            reason = zonemgr_strerror(ex)
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3459
            LOG.error(_("Unable to suspend instance '%s' via "
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3460
                        "zonemgr(3RAD): %s") % (name, reason))
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3461
            raise exception.InstanceSuspendFailure(reason=reason)
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3462
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3463
    def resume(self, context, instance, network_info, block_device_info=None):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3464
        """resume the specified suspended instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3465
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3466
        The suspended instance gets resumed and will use CPU cycles and memory
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3467
        of the host again. The counter action for 'resume' is :func:`suspend`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3468
        Depending on the underlying hypervisor technology, the guest has the
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3469
        same state as before the 'suspend'.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3470
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3471
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3472
            The context for the resume.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3473
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3474
            The suspended instance to resume.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3475
        :param nova.network.model.NetworkInfo network_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3476
            Necessary network information for the resume.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3477
        :param dict block_device_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3478
            Instance volume block device info.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3479
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3480
        :return: None
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3481
        """
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3482
        name = instance['name']
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3483
        zone = self._get_zone_by_name(name)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3484
        if zone is None:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3485
            raise exception.InstanceNotFound(instance_id=name)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3486
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3487
        if zone.brand != ZONE_BRAND_SOLARIS_KZ:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3488
            # Only Solaris kernel zones are currently supported.
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3489
            reason = (_("'%s' branded zones do not currently support "
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3490
                      "resume.") % zone.brand)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3491
            raise exception.InstanceResumeFailure(reason=reason)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3492
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3493
        # check that the instance is suspended
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3494
        if self._get_state(zone) != power_state.SHUTDOWN:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3495
            reason = (_("Instance '%s' is not suspended.") % name)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3496
            raise exception.InstanceResumeFailure(reason=reason)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3497
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3498
        try:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3499
            zone.boot()
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3500
            self._plug_vifs(instance, network_info)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3501
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3502
            reason = zonemgr_strerror(ex)
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3503
            LOG.error(_("Unable to resume instance '%s' via zonemgr(3RAD): %s")
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3504
                      % (name, reason))
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3505
            raise exception.InstanceResumeFailure(reason=reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3506
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3507
    def resume_state_on_host_boot(self, context, instance, network_info,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3508
                                  block_device_info=None):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3509
        """resume guest state when a host is booted.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3510
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3511
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3512
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3513
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3514
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3515
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3516
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3517
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3518
        # TODO(dcomay): Should reconcile with value of zone's autoboot
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3519
        # property.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3520
        if self._get_state(zone) not in (power_state.CRASHED,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3521
                                         power_state.SHUTDOWN):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3522
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3523
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3524
        self._power_on(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3525
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3526
    def rescue(self, context, instance, network_info, image_meta,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3527
               rescue_password):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3528
        """Rescue the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3529
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3530
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3531
            The context for the rescue.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3532
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3533
            The instance being rescued.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3534
        :param nova.network.model.NetworkInfo network_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3535
            Necessary network information for the resume.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3536
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3537
            The metadata of the image of the instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3538
        :param rescue_password: new root password to set for rescue.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3539
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3540
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3541
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3542
    def set_bootable(self, instance, is_bootable):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3543
        """Set the ability to power on/off an instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3544
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3545
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3546
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3547
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3548
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3549
    def unrescue(self, instance, network_info):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3550
        """Unrescue the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3551
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3552
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3553
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3554
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3555
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3556
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3557
    def power_off(self, instance, timeout=0, retry_interval=0):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3558
        """Power off the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3559
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3560
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3561
        :param timeout: time to wait for GuestOS to shutdown
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3562
        :param retry_interval: How often to signal guest while
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3563
                               waiting for it to shutdown
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3564
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3565
        self._power_off(instance, 'SOFT')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3566
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3567
    def power_on(self, context, instance, network_info,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3568
                 block_device_info=None):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3569
        """Power on the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3570
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3571
        :param instance: nova.objects.instance.Instance
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3572
        """
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3573
        self._power_on(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3574
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3575
    def trigger_crash_dump(self, instance):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3576
        """Trigger crash dump mechanism on the given instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3577
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3578
        Stalling instances can be triggered to dump the crash data. How the
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3579
        guest OS reacts in details, depends on the configuration of it.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3580
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3581
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3582
            The instance where the crash dump should be triggered.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3583
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3584
        :return: None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3585
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3586
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3587
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3588
    def soft_delete(self, instance):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3589
        """Soft delete the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3590
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3591
        A soft-deleted instance doesn't allocate any resources anymore, but is
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3592
        still available as a database entry. The counter action :func:`restore`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3593
        uses the database entry to create a new instance based on that.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3594
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3595
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3596
            The instance to soft-delete.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3597
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3598
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3599
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3600
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3601
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3602
    def restore(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3603
        """Restore the specified soft-deleted instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3604
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3605
        The restored instance will be automatically booted. The counter action
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3606
        for `restore` is :func:`soft_delete`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3607
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3608
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3609
            The soft-deleted instance which should be restored from the
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3610
            soft-deleted data.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3611
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3612
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3613
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3614
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3615
1840
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3616
    def _get_zpool_property(self, prop, zpool):
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3617
        """Get the value of property from the zpool."""
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3618
        try:
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3619
            value = None
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3620
            (out, _err) = utils.execute('/usr/sbin/zpool', 'get', prop, zpool)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3621
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3622
            reason = ex.stderr
1840
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3623
            LOG.error(_("Failed to get property '%s' from zpool '%s': %s")
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3624
                      % (prop, zpool, reason))
1840
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3625
            return value
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3626
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3627
        zpool_prop = out.splitlines()[1].split()
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3628
        if zpool_prop[1] == prop:
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3629
            value = zpool_prop[2]
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3630
        return value
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3631
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3632
    def _update_host_stats(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3633
        """Update currently known host stats."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3634
        host_stats = {}
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3635
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3636
        host_stats['vcpus'] = os.sysconf('SC_NPROCESSORS_ONLN')
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3637
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3638
        pages = os.sysconf('SC_PHYS_PAGES')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3639
        host_stats['memory_mb'] = self._pages_to_kb(pages) / 1024
1840
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3640
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3641
        out, err = utils.execute('/usr/sbin/zfs', 'list', '-Ho', 'name', '/')
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3642
        root_zpool = out.split('/')[0]
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3643
        size = self._get_zpool_property('size', root_zpool)
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3644
        if size is not None:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3645
            host_stats['local_gb'] = Size(size).get(Size.gb_units)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3646
        else:
1840
bfe6a6253fcd 18617606 local_gb is 0 and free_disk_fb is negative in output of nova hypervisor_show
Strony <strony.zhang@oracle.com>
parents: 1760
diff changeset
  3647
            host_stats['local_gb'] = 0
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3648
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3649
        # Account for any existing processor sets by looking at the the number
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3650
        # of CPUs not assigned to any processor sets.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3651
        kstat_data = self._get_kstat_by_name('misc', 'unix', '0', 'pset')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3652
        if kstat_data is not None:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3653
            unassigned = self._get_kstat_statistic(kstat_data, 'ncpus')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3654
            host_stats['vcpus_used'] = host_stats['vcpus'] - unassigned
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3655
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3656
            host_stats['vcpus_used'] = 0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3657
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3658
        # Subtract the number of free pages from the total to get the used.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3659
        kstat_data = self._get_kstat_by_name('pages', 'unix', '0',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3660
                                             'system_pages')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3661
        if kstat_data is not None:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3662
            free_ram_mb = self._get_kstat_statistic(kstat_data, 'freemem')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3663
            free_ram_mb = self._pages_to_kb(free_ram_mb) / 1024
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3664
            host_stats['memory_mb_used'] = \
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3665
                host_stats['memory_mb'] - free_ram_mb
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3666
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3667
            host_stats['memory_mb_used'] = 0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3668
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3669
        free = self._get_zpool_property('free', root_zpool)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3670
        if free is not None:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3671
            free_disk_gb = Size(free).get(Size.gb_units)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3672
        else:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3673
            free_disk_gb = 0
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3674
        host_stats['local_gb_used'] = host_stats['local_gb'] - free_disk_gb
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3675
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3676
        host_stats['hypervisor_type'] = 'solariszones'
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3677
        host_stats['hypervisor_version'] = \
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3678
            versionutils.convert_version_to_int(HYPERVISOR_VERSION)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3679
        host_stats['hypervisor_hostname'] = self._uname[1]
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3680
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3681
        if self._uname[4] == 'i86pc':
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3682
            architecture = arch.X86_64
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3683
        else:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3684
            architecture = arch.SPARC64
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3685
        cpu_info = {
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3686
            'arch': architecture
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3687
        }
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3688
        host_stats['cpu_info'] = jsonutils.dumps(cpu_info)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3689
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3690
        host_stats['disk_available_least'] = free_disk_gb
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3691
        host_stats['supported_instances'] = [
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3692
            (architecture, hv_type.SOLARISZONES, vm_mode.SOL)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3693
        ]
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3694
        host_stats['numa_topology'] = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3695
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3696
        self._host_stats = host_stats
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3697
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3698
    def get_available_resource(self, nodename):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3699
        """Retrieve resource information.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3700
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3701
        This method is called when nova-compute launches, and
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3702
        as part of a periodic task that records the results in the DB.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3703
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3704
        :param nodename:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3705
            node which the caller want to get resources from
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3706
            a driver that manages only one node can safely ignore this
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3707
        :returns: Dictionary describing resources
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3708
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3709
        self._update_host_stats()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3710
        host_stats = self._host_stats
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3711
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3712
        resources = {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3713
        resources['vcpus'] = host_stats['vcpus']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3714
        resources['memory_mb'] = host_stats['memory_mb']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3715
        resources['local_gb'] = host_stats['local_gb']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3716
        resources['vcpus_used'] = host_stats['vcpus_used']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3717
        resources['memory_mb_used'] = host_stats['memory_mb_used']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3718
        resources['local_gb_used'] = host_stats['local_gb_used']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3719
        resources['hypervisor_type'] = host_stats['hypervisor_type']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3720
        resources['hypervisor_version'] = host_stats['hypervisor_version']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3721
        resources['hypervisor_hostname'] = host_stats['hypervisor_hostname']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3722
        resources['cpu_info'] = host_stats['cpu_info']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3723
        resources['disk_available_least'] = host_stats['disk_available_least']
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3724
        resources['supported_instances'] = host_stats['supported_instances']
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3725
        resources['numa_topology'] = host_stats['numa_topology']
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3726
        return resources
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3727
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3728
    def pre_live_migration(self, context, instance, block_device_info,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3729
                           network_info, disk_info, migrate_data=None):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3730
        """Prepare an instance for live migration
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3731
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3732
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3733
        :param instance: nova.objects.instance.Instance object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3734
        :param block_device_info: instance block device information
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3735
        :param network_info: instance network information
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3736
        :param disk_info: instance disk information
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3737
        :param migrate_data: a LiveMigrateData object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3738
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3739
        return migrate_data
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3740
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3741
    def _live_migration(self, name, dest, dry_run=False):
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3742
        """Live migration of a Solaris kernel zone to another host."""
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3743
        zone = self._get_zone_by_name(name)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3744
        if zone is None:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3745
            raise exception.InstanceNotFound(instance_id=name)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3746
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3747
        options = []
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3748
        live_migration_cipher = CONF.solariszones.live_migration_cipher
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3749
        if live_migration_cipher is not None:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3750
            options.extend(['-c', live_migration_cipher])
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3751
        if dry_run:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3752
            options.append('-nq')
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3753
        options.append('ssh://nova@' + dest)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3754
        zone.migrate(options)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3755
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3756
    def live_migration(self, context, instance, dest,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3757
                       post_method, recover_method, block_migration=False,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3758
                       migrate_data=None):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3759
        """Live migration of an instance to another host.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3760
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3761
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3762
        :param instance:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3763
            nova.db.sqlalchemy.models.Instance object
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3764
            instance object that is migrated.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3765
        :param dest: destination host
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3766
        :param post_method:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3767
            post operation method.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3768
            expected nova.compute.manager._post_live_migration.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3769
        :param recover_method:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3770
            recovery method when any exception occurs.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3771
            expected nova.compute.manager._rollback_live_migration.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3772
        :param block_migration: if true, migrate VM disk.
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3773
        :param migrate_data: a LiveMigrateData object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3774
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3775
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3776
        name = instance['name']
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3777
        try:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3778
            self._live_migration(name, dest, dry_run=False)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3779
        except Exception as ex:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3780
            with excutils.save_and_reraise_exception():
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3781
                reason = zonemgr_strerror(ex)
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3782
                LOG.error(_("Unable to live migrate instance '%s' to host "
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3783
                            "'%s' via zonemgr(3RAD): %s")
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3784
                          % (name, dest, reason))
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3785
                recover_method(context, instance, dest, block_migration)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3786
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3787
        post_method(context, instance, dest, block_migration, migrate_data)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3788
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3789
    def live_migration_force_complete(self, instance):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3790
        """Force live migration to complete
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3791
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3792
        :param instance: Instance being live migrated
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3793
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3794
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3795
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3796
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3797
    def live_migration_abort(self, instance):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3798
        """Abort an in-progress live migration.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3799
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3800
        :param instance: instance that is live migrating
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3801
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3802
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3803
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3804
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3805
    def rollback_live_migration_at_destination(self, context, instance,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3806
                                               network_info,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3807
                                               block_device_info,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3808
                                               destroy_disks=True,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3809
                                               migrate_data=None):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3810
        """Clean up destination node after a failed live migration.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3811
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3812
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3813
        :param instance: instance object that was being migrated
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3814
        :param network_info: instance network information
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3815
        :param block_device_info: instance block device information
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3816
        :param destroy_disks:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3817
            if true, destroy disks at destination during cleanup
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3818
        :param migrate_data: a LiveMigrateData object
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3819
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3820
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3821
        pass
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3822
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3823
    def post_live_migration(self, context, instance, block_device_info,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3824
                            migrate_data=None):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3825
        """Post operation of live migration at source host.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3826
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3827
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3828
        :instance: instance object that was migrated
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3829
        :block_device_info: instance block device information
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3830
        :param migrate_data: a LiveMigrateData object
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3831
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3832
        try:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3833
            # These methods log if problems occur so no need to double log
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3834
            # here. Just catch any stray exceptions and allow destroy to
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3835
            # proceed.
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3836
            if self._has_vnc_console_service(instance):
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3837
                self._disable_vnc_console_service(instance)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3838
                self._delete_vnc_console_service(instance)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3839
        except Exception:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3840
            pass
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3841
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3842
        name = instance['name']
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3843
        zone = self._get_zone_by_name(name)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3844
        # If instance cannot be found, just return.
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3845
        if zone is None:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3846
            LOG.warning(_("Unable to find instance '%s' via zonemgr(3RAD)")
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3847
                        % name)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3848
            return
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3849
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3850
        try:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3851
            self._delete_config(instance)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3852
        except Exception as ex:
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3853
            reason = zonemgr_strerror(ex)
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3854
            LOG.error(_("Unable to delete configuration for instance '%s' via "
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3855
                        "zonemgr(3RAD): %s") % (name, reason))
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3856
            raise
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3857
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3858
    def post_live_migration_at_source(self, context, instance, network_info):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3859
        """Unplug VIFs from networks at source.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3860
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3861
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3862
        :param instance: instance object reference
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3863
        :param network_info: instance network information
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3864
        """
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3865
        self._unplug_vifs(instance)
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3866
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3867
    def post_live_migration_at_destination(self, context, instance,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3868
                                           network_info,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3869
                                           block_migration=False,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3870
                                           block_device_info=None):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3871
        """Post operation of live migration at destination host.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3872
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3873
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3874
        :param instance: instance object that is migrated
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3875
        :param network_info: instance network information
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3876
        :param block_migration: if true, post operation of block_migration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3877
        """
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3878
        self._plug_vifs(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3879
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3880
    def check_instance_shared_storage_local(self, context, instance):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3881
        """Check if instance files located on shared storage.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3882
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3883
        This runs check on the destination host, and then calls
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3884
        back to the source host to check the results.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3885
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3886
        :param context: security context
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3887
        :param instance: nova.objects.instance.Instance object
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3888
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3889
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3890
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3891
    def check_instance_shared_storage_remote(self, context, data):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3892
        """Check if instance files located on shared storage.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3893
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3894
        :param context: security context
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3895
        :param data: result of check_instance_shared_storage_local
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3896
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3897
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3898
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3899
    def check_instance_shared_storage_cleanup(self, context, data):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3900
        """Do cleanup on host after check_instance_shared_storage calls
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3901
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3902
        :param context: security context
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3903
        :param data: result of check_instance_shared_storage_local
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3904
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3905
        pass
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3906
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3907
    def check_can_live_migrate_destination(self, context, instance,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3908
                                           src_compute_info, dst_compute_info,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3909
                                           block_migration=False,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3910
                                           disk_over_commit=False):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3911
        """Check if it is possible to execute live migration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3912
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3913
        This runs checks on the destination host, and then calls
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3914
        back to the source host to check the results.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3915
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3916
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3917
        :param instance: nova.db.sqlalchemy.models.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3918
        :param src_compute_info: Info about the sending machine
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3919
        :param dst_compute_info: Info about the receiving machine
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3920
        :param block_migration: if true, prepare for block migration
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3921
        :param disk_over_commit: if true, allow disk over commit
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3922
        :returns: a LiveMigrateData object (hypervisor-dependent)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3923
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3924
        src_cpu_info = jsonutils.loads(src_compute_info['cpu_info'])
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3925
        src_cpu_arch = src_cpu_info['arch']
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3926
        dst_cpu_info = jsonutils.loads(dst_compute_info['cpu_info'])
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3927
        dst_cpu_arch = dst_cpu_info['arch']
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3928
        if src_cpu_arch != dst_cpu_arch:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3929
            reason = (_("CPU architectures between source host '%s' (%s) and "
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3930
                        "destination host '%s' (%s) are incompatible.")
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3931
                      % (src_compute_info['hypervisor_hostname'], src_cpu_arch,
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3932
                         dst_compute_info['hypervisor_hostname'],
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3933
                         dst_cpu_arch))
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3934
            raise exception.MigrationPreCheckError(reason=reason)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3935
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3936
        extra_specs = self._get_extra_specs(instance)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3937
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3938
        if brand != ZONE_BRAND_SOLARIS_KZ:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3939
            # Only Solaris kernel zones are currently supported.
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3940
            reason = (_("'%s' branded zones do not currently support live "
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3941
                        "migration.") % brand)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3942
            raise exception.MigrationPreCheckError(reason=reason)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3943
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3944
        if block_migration:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3945
            reason = (_('Block migration is not currently supported.'))
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3946
            raise exception.MigrationPreCheckError(reason=reason)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3947
        if disk_over_commit:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3948
            reason = (_('Disk overcommit is not currently supported.'))
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3949
            raise exception.MigrationPreCheckError(reason=reason)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3950
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3951
        dest_check_data = objects.SolarisZonesLiveMigrateData()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3952
        dest_check_data.hypervisor_hostname = \
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3953
            dst_compute_info['hypervisor_hostname']
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3954
        return dest_check_data
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3955
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3956
    def check_can_live_migrate_destination_cleanup(self, context,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3957
                                                   dest_check_data):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3958
        """Do required cleanup on dest host after check_can_live_migrate calls
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3959
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3960
        :param context: security context
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3961
        :param dest_check_data: result of check_can_live_migrate_destination
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3962
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3963
        pass
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3964
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3965
    def _check_local_volumes_present(self, block_device_info):
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3966
        """Check if local volumes are attached to the instance."""
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3967
        bmap = block_device_info.get('block_device_mapping')
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3968
        for entry in bmap:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3969
            connection_info = entry['connection_info']
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3970
            driver_type = connection_info['driver_volume_type']
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3971
            if driver_type == 'local':
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3972
                reason = (_("Instances with attached '%s' volumes are not "
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3973
                            "currently supported.") % driver_type)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3974
                raise exception.MigrationPreCheckError(reason=reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3975
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3976
    def check_can_live_migrate_source(self, context, instance,
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3977
                                      dest_check_data, block_device_info=None):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3978
        """Check if it is possible to execute live migration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3979
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3980
        This checks if the live migration can succeed, based on the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3981
        results from check_can_live_migrate_destination.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3982
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3983
        :param context: security context
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3984
        :param instance: nova.db.sqlalchemy.models.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3985
        :param dest_check_data: result of check_can_live_migrate_destination
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3986
        :param block_device_info: result of _get_instance_block_device_info
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3987
        :returns: a LiveMigrateData object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3988
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3989
        if not isinstance(dest_check_data, migrate_data_obj.LiveMigrateData):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3990
            obj = objects.SolarisZonesLiveMigrateData()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3991
            obj.from_legacy_dict(dest_check_data)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3992
            dest_check_data = obj
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3993
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3994
        self._check_local_volumes_present(block_device_info)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3995
        name = instance['name']
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3996
        dest = dest_check_data.hypervisor_hostname
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3997
        try:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3998
            self._live_migration(name, dest, dry_run=True)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  3999
        except Exception as ex:
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  4000
            reason = zonemgr_strerror(ex)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  4001
            raise exception.MigrationPreCheckError(reason=reason)
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4002
        return dest_check_data
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4003
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4004
    def get_instance_disk_info(self, instance,
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4005
                               block_device_info=None):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4006
        """Retrieve information about actual disk sizes of an instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4007
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4008
        :param instance: nova.objects.Instance
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4009
        :param block_device_info:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4010
            Optional; Can be used to filter out devices which are
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4011
            actually volumes.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4012
        :return:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4013
            json strings with below format::
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4014
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4015
                "[{'path':'disk',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4016
                   'type':'raw',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4017
                   'virt_disk_size':'10737418240',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4018
                   'backing_file':'backing_file',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4019
                   'disk_size':'83886080'
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4020
                   'over_committed_disk_size':'10737418240'},
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4021
                   ...]"
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4022
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4023
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4024
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4025
    def refresh_security_group_rules(self, security_group_id):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4026
        """This method is called after a change to security groups.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4027
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4028
        All security groups and their associated rules live in the datastore,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4029
        and calling this method should apply the updated rules to instances
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4030
        running the specified security group.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4031
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4032
        An error should be raised if the operation cannot complete.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4033
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4034
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4035
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4036
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4037
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4038
    def refresh_instance_security_rules(self, instance):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4039
        """Refresh security group rules
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4040
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4041
        Gets called when an instance gets added to or removed from
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4042
        the security group the instance is a member of or if the
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4043
        group gains or loses a rule.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4044
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4045
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4046
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4047
    def reset_network(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4048
        """reset networking for specified instance."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4049
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4050
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4051
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4052
    def ensure_filtering_rules_for_instance(self, instance, network_info):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4053
        """Setting up filtering rules and waiting for its completion.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4054
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4055
        To migrate an instance, filtering rules to hypervisors
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4056
        and firewalls are inevitable on destination host.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4057
        ( Waiting only for filtering rules to hypervisor,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4058
        since filtering rules to firewall rules can be set faster).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4059
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4060
        Concretely, the below method must be called.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4061
        - setup_basic_filtering (for nova-basic, etc.)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4062
        - prepare_instance_filter(for nova-instance-instance-xxx, etc.)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4063
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4064
        to_xml may have to be called since it defines PROJNET, PROJMASK.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4065
        but libvirt migrates those value through migrateToURI(),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4066
        so , no need to be called.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4067
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4068
        Don't use thread for this method since migration should
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4069
        not be started when setting-up filtering rules operations
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4070
        are not completed.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4071
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4072
        :param instance: nova.objects.instance.Instance object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4073
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4074
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4075
        # TODO(Vek): Need to pass context in for access to auth_token
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4076
        pass
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4077
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4078
    def filter_defer_apply_on(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4079
        """Defer application of IPTables rules."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4080
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4081
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4082
    def filter_defer_apply_off(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4083
        """Turn off deferral of IPTables rules and apply the rules now."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4084
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4085
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4086
    def unfilter_instance(self, instance, network_info):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4087
        """Stop filtering instance."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4088
        # TODO(Vek): Need to pass context in for access to auth_token
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4089
        pass
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4090
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4091
    def set_admin_password(self, instance, new_pass):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4092
        """Set the root password on the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4093
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4094
        :param instance: nova.objects.instance.Instance
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4095
        :param new_pass: the new password
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4096
        """
5312
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4097
        name = instance['name']
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4098
        zone = self._get_zone_by_name(name)
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4099
        if zone is None:
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4100
            raise exception.InstanceNotFound(instance_id=name)
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4101
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4102
        if zone.state == ZONE_STATE_RUNNING:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4103
            out, err = utils.execute('/usr/sbin/zlogin', '-S', name,
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4104
                                     '/usr/bin/passwd', '-p',
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4105
                                     "'%s'" % sha256_crypt.encrypt(new_pass))
5312
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4106
        else:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4107
            raise exception.InstanceNotRunning(instance_id=name)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4108
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4109
    def inject_file(self, instance, b64_path, b64_contents):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4110
        """Writes a file on the specified instance.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4111
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4112
        The first parameter is an instance of nova.compute.service.Instance,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4113
        and so the instance is being specified as instance.name. The second
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4114
        parameter is the base64-encoded path to which the file is to be
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4115
        written on the instance; the third is the contents of the file, also
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4116
        base64-encoded.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4117
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4118
        NOTE(russellb) This method is deprecated and will be removed once it
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4119
        can be removed from nova.compute.manager.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4120
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4121
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4122
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4123
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4124
    def change_instance_metadata(self, context, instance, diff):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4125
        """Applies a diff to the instance metadata.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4126
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4127
        This is an optional driver method which is used to publish
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4128
        changes to the instance's metadata to the hypervisor.  If the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4129
        hypervisor has no means of publishing the instance metadata to
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4130
        the instance, then this method should not be implemented.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4131
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4132
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4133
        :param instance: nova.objects.instance.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4134
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4135
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4136
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4137
    def inject_network_info(self, instance, nw_info):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4138
        """inject network info for specified instance."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4139
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4140
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4141
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4142
    def poll_rebooting_instances(self, timeout, instances):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4143
        """Perform a reboot on all given 'instances'.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4144
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4145
        Reboots the given `instances` which are longer in the rebooting state
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4146
        than `timeout` seconds.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4147
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4148
        :param int timeout:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4149
            The timeout (in seconds) for considering rebooting instances
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4150
            to be stuck.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4151
        :param list instances:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4152
            A list of nova.objects.instance.Instance objects that have been
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4153
            in rebooting state longer than the configured timeout.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4154
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4155
        :return: None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4156
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4157
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4158
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4159
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4160
    def host_power_action(self, action):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4161
        """Reboots, shuts down or powers up the host.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4162
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4163
        :param str action:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4164
            The action the host should perform. The valid actions are:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4165
            ""startup", "shutdown" and "reboot".
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4166
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4167
        :return: The result of the power action
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4168
        :rtype: : str
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4169
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4170
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4171
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4172
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4173
    def host_maintenance_mode(self, host, mode):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4174
        """Start/Stop host maintenance window.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4175
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4176
        On start, it triggers the migration of all instances to other hosts.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4177
        Consider the combination with :func:`set_host_enabled`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4178
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4179
        :param str host:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4180
            The name of the host whose maintenance mode should be changed.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4181
        :param bool mode:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4182
            If `True`, go into maintenance mode. If `False`, leave the
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4183
            maintenance mode.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4184
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4185
        :return: "on_maintenance" if switched to maintenance mode or
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4186
                 "off_maintenance" if maintenance mode got left.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4187
        :rtype: str
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4188
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4189
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4190
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4191
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4192
    def set_host_enabled(self, enabled):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4193
        """Sets the ability of this host to accept new instances.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4194
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4195
        :param bool enabled:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4196
            If this is `True`, the host will accept new instances. If it is
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4197
            `False`, the host won't accept new instances.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4198
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4199
        :return: If the host can accept further instances, return "enabled",
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4200
                 if further instances shouldn't be scheduled to this host,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4201
                 return "disabled".
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4202
        :rtype: str
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4203
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4204
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4205
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4206
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4207
    def get_host_uptime(self):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4208
        """Returns the result of calling the Linux command `uptime` on this
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4209
        host.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4210
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4211
        :return: A text which contains the uptime of this host since the
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4212
                 last boot.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4213
        :rtype: str
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4214
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4215
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4216
        return utils.execute('/usr/bin/uptime')[0]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4217
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4218
    def plug_vifs(self, instance, network_info):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4219
        """Plug virtual interfaces (VIFs) into the given `instance` at
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4220
        instance boot time.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4221
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4222
        The counter action is :func:`unplug_vifs`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4223
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4224
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4225
            The instance which gets VIFs plugged.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4226
        :param nova.network.model.NetworkInfo network_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4227
            The object which contains information about the VIFs to plug.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4228
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4229
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4230
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4231
        # TODO(Vek): Need to pass context in for access to auth_token
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4232
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4233
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4234
    def unplug_vifs(self, instance, network_info):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4235
        # NOTE(markus_z): 2015-08-18
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4236
        # The compute manager doesn't use this interface, which seems odd
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4237
        # since the manager should be the controlling thing here.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4238
        """Unplug virtual interfaces (VIFs) from networks.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4239
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4240
        The counter action is :func:`plug_vifs`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4241
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4242
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4243
            The instance which gets VIFs unplugged.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4244
        :param nova.network.model.NetworkInfo network_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4245
            The object which contains information about the VIFs to unplug.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4246
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4247
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4248
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4249
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4250
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4251
    def get_host_cpu_stats(self):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4252
        """Get the currently known host CPU stats.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4253
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4254
        :returns: a dict containing the CPU stat info, eg:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4255
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4256
            | {'kernel': kern,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4257
            |  'idle': idle,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4258
            |  'user': user,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4259
            |  'iowait': wait,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4260
            |   'frequency': freq},
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4261
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4262
                  where kern and user indicate the cumulative CPU time
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4263
                  (nanoseconds) spent by kernel and user processes
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4264
                  respectively, idle indicates the cumulative idle CPU time
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4265
                  (nanoseconds), wait indicates the cumulative I/O wait CPU
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4266
                  time (nanoseconds), since the host is booting up; freq
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4267
                  indicates the current CPU frequency (MHz). All values are
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4268
                  long integers.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4269
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4270
        """
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4271
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4272
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4273
    def block_stats(self, instance, disk_id):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4274
        """Return performance counters associated with the given disk_id on the
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4275
        given instance.  These are returned as [rd_req, rd_bytes, wr_req,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4276
        wr_bytes, errs], where rd indicates read, wr indicates write, req is
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4277
        the total number of I/O requests made, bytes is the total number of
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4278
        bytes transferred, and errs is the number of requests held up due to a
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4279
        full pipeline.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4280
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4281
        All counters are long integers.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4282
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4283
        This method is optional.  On some platforms (e.g. XenAPI) performance
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4284
        statistics can be retrieved directly in aggregate form, without Nova
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4285
        having to do the aggregation.  On those platforms, this method is
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4286
        unused.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4287
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4288
        Note that this function takes an instance ID.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4289
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4290
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4291
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4292
    def deallocate_networks_on_reschedule(self, instance):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4293
        """Does the driver want networks deallocated on reschedule?"""
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4294
        return False
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4295
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4296
    def macs_for_instance(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4297
        """What MAC addresses must this instance have?
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4298
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4299
        Some hypervisors (such as bare metal) cannot do freeform virtualisation
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4300
        of MAC addresses. This method allows drivers to return a set of MAC
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4301
        addresses that the instance is to have. allocate_for_instance will take
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4302
        this into consideration when provisioning networking for the instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4303
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4304
        Mapping of MAC addresses to actual networks (or permitting them to be
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4305
        freeform) is up to the network implementation layer. For instance,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4306
        with openflow switches, fixed MAC addresses can still be virtualised
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4307
        onto any L2 domain, with arbitrary VLANs etc, but regular switches
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4308
        require pre-configured MAC->network mappings that will match the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4309
        actual configuration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4310
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4311
        Most hypervisors can use the default implementation which returns None.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4312
        Hypervisors with MAC limits should return a set of MAC addresses, which
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4313
        will be supplied to the allocate_for_instance call by the compute
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4314
        manager, and it is up to that call to ensure that all assigned network
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4315
        details are compatible with the set of MAC addresses.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4316
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4317
        This is called during spawn_instance by the compute manager.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4318
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4319
        :return: None, or a set of MAC ids (e.g. set(['12:34:56:78:90:ab'])).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4320
            None means 'no constraints', a set means 'these and only these
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4321
            MAC addresses'.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4322
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4323
        return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4324
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4325
    def dhcp_options_for_instance(self, instance):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4326
        """Get DHCP options for this instance.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4327
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4328
        Some hypervisors (such as bare metal) require that instances boot from
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4329
        the network, and manage their own TFTP service. This requires passing
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4330
        the appropriate options out to the DHCP service. Most hypervisors can
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4331
        use the default implementation which returns None.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4332
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4333
        This is called during spawn_instance by the compute manager.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4334
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4335
        Note that the format of the return value is specific to the Neutron
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4336
        client API.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4337
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4338
        :return: None, or a set of DHCP options, eg:
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4339
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4340
             |    [{'opt_name': 'bootfile-name',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4341
             |      'opt_value': '/tftpboot/path/to/config'},
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4342
             |     {'opt_name': 'server-ip-address',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4343
             |      'opt_value': '1.2.3.4'},
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4344
             |     {'opt_name': 'tftp-server',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4345
             |      'opt_value': '1.2.3.4'}
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4346
             |    ]
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4347
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4348
        """
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4349
        return None
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4350
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4351
    def manage_image_cache(self, context, all_instances):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4352
        """Manage the driver's local image cache.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4353
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4354
        Some drivers chose to cache images for instances on disk. This method
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4355
        is an opportunity to do management of that cache which isn't directly
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4356
        related to other calls into the driver. The prime example is to clean
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4357
        the cache and remove images which are no longer of interest.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4358
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4359
        :param all_instances: nova.objects.instance.InstanceList
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4360
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4361
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4362
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4363
    def add_to_aggregate(self, context, aggregate, host, **kwargs):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4364
        """Add a compute host to an aggregate.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4365
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4366
        The counter action to this is :func:`remove_from_aggregate`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4367
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4368
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4369
            The security context.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4370
        :param nova.objects.aggregate.Aggregate aggregate:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4371
            The aggregate which should add the given `host`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4372
        :param str host:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4373
            The name of the host to add to the given `aggregate`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4374
        :param dict kwargs:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4375
            A free-form thingy...
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4376
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4377
        :return: None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4378
        """
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  4379
        # NOTE(jogo) Currently only used for XenAPI-Pool
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4380
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4381
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4382
    def remove_from_aggregate(self, context, aggregate, host, **kwargs):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4383
        """Remove a compute host from an aggregate.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4384
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4385
        The counter action to this is :func:`add_to_aggregate`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4386
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4387
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4388
            The security context.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4389
        :param nova.objects.aggregate.Aggregate aggregate:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4390
            The aggregate which should remove the given `host`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4391
        :param str host:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4392
            The name of the host to remove from the given `aggregate`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4393
        :param dict kwargs:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4394
            A free-form thingy...
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4395
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4396
        :return: None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4397
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4398
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4399
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4400
    def undo_aggregate_operation(self, context, op, aggregate,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4401
                                 host, set_error=True):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4402
        """Undo for Resource Pools."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4403
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4404
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4405
    def get_volume_connector(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4406
        """Get connector information for the instance for attaching to volumes.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4407
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4408
        Connector information is a dictionary representing the ip of the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4409
        machine that will be making the connection, the name of the iscsi
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4410
        initiator, the WWPN and WWNN values of the Fibre Channel initiator,
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4411
        and the hostname of the machine as follows::
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4412
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4413
            {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4414
                'ip': ip,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4415
                'initiator': initiator,
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4416
                'wwnns': wwnns,
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4417
                'wwpns': wwpns,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4418
                'host': hostname
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4419
            }
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4420
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4421
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4422
        connector = {
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4423
            'ip': self.get_host_ip_addr(),
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4424
            'host': CONF.host
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4425
        }
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4426
        if not self._initiator:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4427
            self._initiator = self._get_iscsi_initiator()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4428
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4429
        if self._initiator:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4430
            connector['initiator'] = self._initiator
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4431
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4432
            LOG.warning(_("Could not determine iSCSI initiator name"),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4433
                        instance=instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4434
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4435
        if not self._fc_wwnns:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4436
            self._fc_wwnns = self._get_fc_wwnns()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4437
            if not self._fc_wwnns or len(self._fc_wwnns) == 0:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4438
                LOG.debug(_('Could not determine Fibre Channel '
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4439
                          'World Wide Node Names'),
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4440
                          instance=instance)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4441
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4442
        if not self._fc_wwpns:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4443
            self._fc_wwpns = self._get_fc_wwpns()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4444
            if not self._fc_wwpns or len(self._fc_wwpns) == 0:
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  4445
                LOG.debug(_('Could not determine Fibre Channel '
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4446
                          'World Wide Port Names'),
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4447
                          instance=instance)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4448
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4449
        if self._fc_wwnns and self._fc_wwpns:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4450
            connector["wwnns"] = self._fc_wwnns
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4451
            connector["wwpns"] = self._fc_wwpns
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4452
        return connector
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4453
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4454
    def get_available_nodes(self, refresh=False):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4455
        """Returns nodenames of all nodes managed by the compute service.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4456
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4457
        This method is for multi compute-nodes support. If a driver supports
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4458
        multi compute-nodes, this method returns a list of nodenames managed
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4459
        by the service. Otherwise, this method should return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4460
        [hypervisor_hostname].
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4461
        """
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4462
        if refresh or not self._host_stats:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4463
            self._update_host_stats()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4464
        stats = self._host_stats
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4465
        if not isinstance(stats, list):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4466
            stats = [stats]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4467
        return [s['hypervisor_hostname'] for s in stats]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4468
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4469
    def node_is_available(self, nodename):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4470
        """Return whether this compute service manages a particular node."""
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4471
        if nodename in self.get_available_nodes():
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4472
            return True
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4473
        # Refresh and check again.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4474
        return nodename in self.get_available_nodes(refresh=True)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4475
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4476
    def get_per_instance_usage(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4477
        """Get information about instance resource usage.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4478
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4479
        :returns: dict of  nova uuid => dict of usage info
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4480
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4481
        return {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4482
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4483
    def instance_on_disk(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4484
        """Checks access of instance files on the host.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4485
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4486
        :param instance: nova.objects.instance.Instance to lookup
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4487
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4488
        Returns True if files of an instance with the supplied ID accessible on
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4489
        the host, False otherwise.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4490
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4491
        .. note::
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4492
            Used in rebuild for HA implementation and required for validation
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4493
            of access to instance shared disk files
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4494
        """
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4495
        bdmobj = objects.BlockDeviceMappingList
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4496
        bdms = bdmobj.get_by_instance_uuid(nova_context.get_admin_context(),
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4497
                                           instance['uuid'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4498
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4499
        root_ci = None
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4500
        rootmp = instance['root_device_name']
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4501
        for entry in bdms:
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4502
            if entry['connection_info'] is None:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4503
                continue
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4504
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4505
            if entry['device_name'] == rootmp:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4506
                root_ci = jsonutils.loads(entry['connection_info'])
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4507
                break
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4508
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4509
        if root_ci is None:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4510
            msg = (_("Unable to find the root device for instance '%s'.")
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4511
                   % instance['name'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4512
            raise exception.NovaException(msg)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4513
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4514
        driver_type = root_ci['driver_volume_type']
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4515
        return driver_type in shared_storage
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4516
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4517
    def register_event_listener(self, callback):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4518
        """Register a callback to receive events.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4519
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4520
        Register a callback to receive asynchronous event
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4521
        notifications from hypervisors. The callback will
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4522
        be invoked with a single parameter, which will be
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4523
        an instance of the nova.virt.event.Event class.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4524
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4525
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4526
        self._compute_event_callback = callback
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4527
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4528
    def emit_event(self, event):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4529
        """Dispatches an event to the compute manager.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4530
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4531
        Invokes the event callback registered by the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4532
        compute manager to dispatch the event. This
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4533
        must only be invoked from a green thread.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4534
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4535
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4536
        if not self._compute_event_callback:
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4537
            LOG.debug("Discarding event %s", str(event))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4538
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4539
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4540
        if not isinstance(event, virtevent.Event):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4541
            raise ValueError(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4542
                _("Event must be an instance of nova.virt.event.Event"))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4543
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4544
        try:
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4545
            LOG.debug("Emitting event %s", str(event))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4546
            self._compute_event_callback(event)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4547
        except Exception as ex:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4548
            LOG.error(_LE("Exception dispatching event %(event)s: %(ex)s"),
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4549
                      {'event': event, 'ex': ex})
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4550
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4551
    def delete_instance_files(self, instance):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4552
        """Delete any lingering instance files for an instance.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4553
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4554
        :param instance: nova.objects.instance.Instance
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4555
        :returns: True if the instance was deleted from disk, False otherwise.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4556
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4557
        # Delete the zone configuration for the instance using destroy, because
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4558
        # it will simply take care of the work, and we don't need to duplicate
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4559
        # the code here.
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  4560
        LOG.debug(_("Cleaning up for instance %s"), instance['name'])
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4561
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4562
            self.destroy(None, instance, None)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4563
        except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4564
            return False
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4565
        return True
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4566
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4567
    @property
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4568
    def need_legacy_block_device_info(self):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4569
        """Tell the caller if the driver requires legacy block device info.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4570
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4571
        Tell the caller whether we expect the legacy format of block
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4572
        device info to be passed in to methods that expect it.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4573
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4574
        return True
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4575
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4576
    def volume_snapshot_create(self, context, instance, volume_id,
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4577
                               create_info):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4578
        """Snapshots volumes attached to a specified instance.
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4579
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4580
        The counter action to this is :func:`volume_snapshot_delete`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4581
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4582
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4583
            The security context.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4584
        :param nova.objects.instance.Instance  instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4585
            The instance that has the volume attached
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4586
        :param uuid volume_id:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4587
            Volume to be snapshotted
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4588
        :param create_info: The data needed for nova to be able to attach
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4589
               to the volume.  This is the same data format returned by
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4590
               Cinder's initialize_connection() API call.  In the case of
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4591
               doing a snapshot, it is the image file Cinder expects to be
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4592
               used as the active disk after the snapshot operation has
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4593
               completed.  There may be other data included as well that is
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4594
               needed for creating the snapshot.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4595
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4596
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4597
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4598
    def volume_snapshot_delete(self, context, instance, volume_id,
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4599
                               snapshot_id, delete_info):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4600
        """Deletes a snapshot of a volume attached to a specified instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4601
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4602
        The counter action to this is :func:`volume_snapshot_create`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4603
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4604
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4605
            The security context.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4606
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4607
            The instance that has the volume attached.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4608
        :param uuid volume_id:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4609
            Attached volume associated with the snapshot
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4610
        :param uuid snapshot_id:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4611
            The snapshot to delete.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4612
        :param dict delete_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4613
            Volume backend technology specific data needed to be able to
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4614
            complete the snapshot.  For example, in the case of qcow2 backed
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4615
            snapshots, this would include the file being merged, and the file
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4616
            being merged into (if appropriate).
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4617
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4618
        :return: None
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4619
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4620
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4621
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4622
    def default_root_device_name(self, instance, image_meta, root_bdm):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4623
        """Provide a default root device name for the driver.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4624
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4625
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4626
            The instance to get the root device for.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4627
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4628
            The metadata of the image of the instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4629
        :param nova.objects.BlockDeviceMapping root_bdm:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4630
            The description of the root device.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4631
        """
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4632
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4633
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4634
    def default_device_names_for_instance(self, instance, root_device_name,
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4635
                                          *block_device_lists):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4636
        """Default the missing device names in the block device mapping."""
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4637
        raise NotImplementedError()
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4638
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4639
    def get_device_name_for_instance(self, instance,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4640
                                     bdms, block_device_obj):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4641
        """Get the next device name based on the block device mapping.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4642
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4643
        :param instance: nova.objects.instance.Instance that volume is
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4644
                         requesting a device name
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4645
        :param bdms: a nova.objects.BlockDeviceMappingList for the instance
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4646
        :param block_device_obj: A nova.objects.BlockDeviceMapping instance
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4647
                                 with all info about the requested block
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4648
                                 device. device_name does not need to be set,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4649
                                 and should be decided by the driver
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4650
                                 implementation if not set.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4651
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4652
        :returns: The chosen device name.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4653
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4654
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4655
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4656
    def is_supported_fs_format(self, fs_type):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4657
        """Check whether the file format is supported by this driver
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4658
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4659
        :param fs_type: the file system type to be checked,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4660
                        the validate values are defined at disk API module.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4661
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4662
        # NOTE(jichenjc): Return False here so that every hypervisor
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4663
        #                 need to define their supported file system
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4664
        #                 type and implement this function at their
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4665
        #                 virt layer.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4666
        return False
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4667
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4668
    def quiesce(self, context, instance, image_meta):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4669
        """Quiesce the specified instance to prepare for snapshots.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4670
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4671
        If the specified instance doesn't support quiescing,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4672
        InstanceQuiesceNotSupported is raised. When it fails to quiesce by
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4673
        other errors (e.g. agent timeout), NovaException is raised.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4674
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4675
        :param context:  request context
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4676
        :param instance: nova.objects.instance.Instance to be quiesced
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4677
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4678
            The metadata of the image of the instance.
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4679
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4680
        raise NotImplementedError()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4681
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4682
    def unquiesce(self, context, instance, image_meta):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4683
        """Unquiesce the specified instance after snapshots.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4684
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4685
        If the specified instance doesn't support quiescing,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4686
        InstanceQuiesceNotSupported is raised. When it fails to quiesce by
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4687
        other errors (e.g. agent timeout), NovaException is raised.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4688
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4689
        :param context:  request context
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4690
        :param instance: nova.objects.instance.Instance to be unquiesced
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4691
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4692
            The metadata of the image of the instance.
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4693
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4694
        raise NotImplementedError()
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4695
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4696
    def network_binding_host_id(self, context, instance):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4697
        """Get host ID to associate with network ports.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4698
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4699
        :param context:  request context
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4700
        :param instance: nova.objects.instance.Instance that the network
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4701
                         ports will be associated with
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4702
        :returns: a string representing the host ID
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4703
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4704
        return instance.get('host')