components/openstack/nova/files/solariszones/driver.py
author Sean Wilcox <sean.wilcox@oracle.com>
Fri, 24 Mar 2017 14:28:46 -0600
changeset 7799 e35d3ee6d1b8
parent 7652 8ea2de474b66
permissions -rw-r--r--
PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive 25615046 cloudbase-init should support configdrive on solaris 25027429 Enable cloudbase-init debug in config file
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
#
7583
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
     4
# Copyright (c) 2013, 2017, 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
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
    30
from collections import defaultdict
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
    31
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
    32
import rad.bindings.com.oracle.solaris.rad.archivemgr_1 as archivemgr
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
    33
import rad.bindings.com.oracle.solaris.rad.kstat_2 as kstat
4669
342ab6111bb5 20957828 swift Makefile has typo for COMPONENT_BUGDB
david.comay@oracle.com
parents: 4585
diff changeset
    34
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
    35
import rad.client
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    36
import rad.connect
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
    37
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
    38
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    39
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
    40
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
    41
from eventlet import greenthread
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    42
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
    43
from lxml import etree
6901
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
    44
from oslo_concurrency import lockutils, 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
    45
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
    46
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
    47
from oslo_serialization import jsonutils
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    48
from oslo_utils import excutils
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    49
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
    50
from oslo_utils import strutils
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    51
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
    52
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
    53
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
    54
from nova.api.metadata import base as instance_metadata
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
    55
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
    56
from nova.compute import arch
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    57
from nova.compute import hv_type
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    58
from nova.compute import power_state
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    59
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
    60
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
    61
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
    62
from nova import conductor
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
    63
import nova.conf
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
    64
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
    65
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
    66
from nova import crypto
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    67
from nova import exception
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
    68
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
    69
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
    70
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
    71
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
    72
from nova import objects
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
    73
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
    74
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
    75
from nova import utils
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
    76
from nova.virt import configdrive
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    77
from nova.virt import driver
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    78
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
    79
from nova.virt import hardware
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    80
from nova.virt import images
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    81
from nova.virt.solariszones import sysconfig
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    82
from nova.volume.cinder import API
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    83
from nova.volume.cinder import cinderclient
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
    84
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
    85
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
    86
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    87
solariszones_opts = [
6014
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    88
    cfg.StrOpt('boot_volume_type',
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 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
    91
    cfg.StrOpt('boot_volume_az',
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    92
               default=None,
83c60536394d PSARC/2016/242 Nova boot volume placement
Niall Power <niall.power@oracle.com>
parents: 5949
diff changeset
    93
               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
    94
    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
    95
               default='/var/share/nova/images',
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    96
               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
    97
    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
    98
               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
    99
                    '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
   100
                    '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
   101
                    '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
   102
    cfg.StrOpt('solariszones_snapshots_directory',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   103
               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
   104
               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
   105
                    '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
   106
    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
   107
               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
   108
               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
   109
    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
   110
                default=True,
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   111
                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
   112
                     'metadata.'),
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   113
]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   114
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   115
CONF = nova.conf.CONF
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   116
CONF.register_opts(solariszones_opts, 'solariszones')
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   117
LOG = logging.getLogger(__name__)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   118
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   119
# 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
   120
# 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
   121
# 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
   122
# the zonemgr(3RAD) provider.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   123
ZONE_STATE_CONFIGURED = 'configured'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   124
ZONE_STATE_INCOMPLETE = 'incomplete'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   125
ZONE_STATE_UNAVAILABLE = 'unavailable'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   126
ZONE_STATE_INSTALLED = 'installed'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   127
ZONE_STATE_READY = 'ready'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   128
ZONE_STATE_RUNNING = 'running'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   129
ZONE_STATE_SHUTTING_DOWN = 'shutting_down'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   130
ZONE_STATE_DOWN = 'down'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   131
ZONE_STATE_MOUNTED = 'mounted'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   132
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   133
# 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
   134
SOLARISZONES_POWER_STATE = {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   135
    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
   136
    ZONE_STATE_INCOMPLETE:      power_state.NOSTATE,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   137
    ZONE_STATE_UNAVAILABLE:     power_state.NOSTATE,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   138
    ZONE_STATE_INSTALLED:       power_state.SHUTDOWN,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   139
    ZONE_STATE_READY:           power_state.RUNNING,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   140
    ZONE_STATE_RUNNING:         power_state.RUNNING,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   141
    ZONE_STATE_SHUTTING_DOWN:   power_state.RUNNING,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   142
    ZONE_STATE_DOWN:            power_state.RUNNING,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   143
    ZONE_STATE_MOUNTED:         power_state.NOSTATE
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   144
}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   145
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   146
# 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
   147
ZONE_BRAND_LABELED = 'labeled'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   148
ZONE_BRAND_SOLARIS = 'solaris'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   149
ZONE_BRAND_SOLARIS_KZ = 'solaris-kz'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   150
ZONE_BRAND_SOLARIS10 = 'solaris10'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   151
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   152
# 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
   153
# brand template.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   154
ZONE_BRAND_TEMPLATE = {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   155
    ZONE_BRAND_SOLARIS:         'SYSdefault',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   156
    ZONE_BRAND_SOLARIS_KZ:      'SYSsolaris-kz',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   157
}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   158
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   159
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
   160
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
   161
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
   162
# 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
   163
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
   164
XTERM_PATH = '/usr/bin/xterm'
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   165
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   166
ROOTZPOOL_RESOURCE = 'rootzpool'
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   167
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   168
# 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
   169
# 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
   170
# 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
   171
# 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
   172
# 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
   173
HYPERVISOR_VERSION = '5.11'
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
   174
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   175
shared_storage = ['iscsi', 'fibre_channel']
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   176
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   177
KSTAT_TYPE = {
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   178
    'NVVT_STR': 'string',
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   179
    'NVVT_STRS': 'strings',
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   180
    'NVVT_INT': 'integer',
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   181
    'NVVT_INTS': 'integers',
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   182
    'NVVT_KSTAT': 'kstat',
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   183
}
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   184
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   185
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   186
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
   187
    """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
   188
    try:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   189
        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
   190
    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
   191
        return None
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   192
    except Exception:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   193
        raise
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   194
    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
   195
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
   196
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   197
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
   198
    """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
   199
    try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   200
        val = zone.getResourceProperties(zonemgr.Resource(resource, filter),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   201
                                         [prop])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   202
    except rad.client.ObjectError:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   203
        return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   204
    except Exception:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   205
        raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   206
    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
   207
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   208
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   209
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
   210
    """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
   211
    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
   212
    """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   213
    try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   214
        resources = zone.getResources(zonemgr.Resource(resource))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   215
        for resource in resources:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   216
            for propertee in resource.properties:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   217
                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
   218
                    return resource
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   219
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   220
            return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   221
    except rad.client.ObjectError:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   222
        return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   223
    except Exception:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   224
        raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   225
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   226
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   227
def zonemgr_strerror(ex):
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   228
    """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
   229
    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
   230
    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
   231
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   232
    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
   233
    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
   234
    """
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   235
    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
   236
        return str(ex)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   237
    payload = ex.get_payload()
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   238
    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
   239
        return str(ex)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   240
    error = [str(payload.code)]
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   241
    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
   242
        error.append(payload.str)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   243
    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
   244
        stderr = payload.stderr.rstrip()
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   245
        error.append(stderr.replace('\n', ': '))
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   246
    result = ': '.join(error)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   247
    return result
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   248
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   249
7265
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
   250
class MemoryAlignmentIncorrect(exception.FlavorMemoryTooSmall):
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
   251
    msg_fmt = _("Requested flavor, %(flavor)s, memory size %(memsize)s does "
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
   252
                "not align on %(align)s boundary.")
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
   253
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
   254
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   255
class SolarisVolumeAPI(API):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   256
    """ 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
   257
    """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   258
    @translate_volume_exception
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   259
    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
   260
               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
   261
               availability_zone=None, source_volume=None):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   262
        """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
   263
        create with a source_volid argument
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   264
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   265
        :param context: the context for the clone
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   266
        :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
   267
            volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   268
        :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
   269
        :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
   270
        :param snapshot: Snapshot object
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   271
        :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
   272
        :param volume_type: type of volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   273
        :param metadata: Additional metadata for the volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   274
        :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
   275
        :param source_volume: Volume object
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   276
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   277
        Returns a volume object
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   278
        """
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   279
        client = cinderclient(context)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   280
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   281
        if snapshot is not None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   282
            snapshot_id = snapshot['id']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   283
        else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   284
            snapshot_id = None
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   285
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   286
        if source_volume is not None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   287
            source_volid = source_volume['id']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   288
        else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   289
            source_volid = None
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
        kwargs = dict(snapshot_id=snapshot_id,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   292
                      volume_type=volume_type,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   293
                      user_id=context.user_id,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   294
                      project_id=context.project_id,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   295
                      availability_zone=availability_zone,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   296
                      metadata=metadata,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   297
                      imageRef=image_id,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   298
                      source_volid=source_volid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   299
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   300
        if isinstance(client, v1_client.Client):
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   301
            kwargs['display_name'] = name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   302
            kwargs['display_description'] = description
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   303
        else:
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   304
            kwargs['name'] = name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   305
            kwargs['description'] = description
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   306
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   307
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   308
            item = cinderclient(context).volumes.create(size, **kwargs)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   309
            return _untranslate_volume_summary_view(context, item)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   310
        except cinder_exception.OverLimit:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   311
            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
   312
        except (cinder_exception.BadRequest,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   313
                keystone_exception.BadRequest) as reason:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   314
            raise exception.InvalidInput(reason=reason)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   315
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   316
    @translate_volume_exception
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   317
    def update(self, context, volume_id, fields):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   318
        """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
   319
        via a call to cinderclient
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
        :param context: the context for the update
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   322
        :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
   323
        :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
   324
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   325
        cinderclient(context).volumes.update(volume_id, **fields)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   326
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   327
    @translate_volume_exception
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   328
    def extend(self, context, volume, newsize):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   329
        """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
   330
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   331
        :param context: the context for the extend
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   332
        :param volume: the volume object to extend
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   333
        :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
   334
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   335
        cinderclient(context).volumes.extend(volume, newsize)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   336
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   337
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   338
class ZoneConfig(object):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   339
    """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
   340
    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
   341
    before exiting
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   342
    """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   343
    def __init__(self, zone):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   344
        """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
   345
        non-global zone.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   346
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   347
        self.zone = zone
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   348
        self.editing = False
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   349
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   350
    def __enter__(self):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   351
        """enables the editing of the zone."""
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   352
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   353
            self.zone.editConfig()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   354
            self.editing = True
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   355
            return self
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   356
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   357
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   358
            LOG.exception(_("Unable to initialize editing of instance '%s' "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   359
                            "via zonemgr(3RAD): %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   360
                          % (self.zone.name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   361
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   362
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   363
    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
   364
        """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
   365
        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
   366
        commit the new configuration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   367
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   368
        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
   369
            # 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
   370
            self.zone.cancelConfig()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   371
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   372
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   373
            # commit the config
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   374
            try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   375
                self.zone.commitConfig()
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   376
            except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   377
                reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   378
                LOG.exception(_("Unable to commit the new configuration for "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   379
                                "instance '%s' via zonemgr(3RAD): %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   380
                              % (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
   381
aeda29f57900 21307395 nova ZoneConfig class should call cancelConfig when editConfig fails in __exit__
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 4550
diff changeset
   382
                # 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
   383
                self.zone.cancelConfig()
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   384
                raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   385
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   386
    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
   387
        """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
   388
        with the given property(s).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   389
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   390
        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
   391
        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
   392
            # the value is already set
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   393
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   394
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   395
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   396
            if current is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   397
                self.zone.addResource(zonemgr.Resource(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   398
                    resource, [zonemgr.Property(prop, value)]))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   399
            else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   400
                self.zone.setResourceProperties(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   401
                    zonemgr.Resource(resource),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   402
                    [zonemgr.Property(prop, value)])
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   403
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   404
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   405
            LOG.exception(_("Unable to set '%s' property on '%s' resource for "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   406
                            "instance '%s' via zonemgr(3RAD): %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   407
                          % (prop, resource, self.zone.name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   408
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   409
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   410
    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
   411
        """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
   412
        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
   413
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   414
        :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
   415
            resource.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   416
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   417
        if props is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   418
            props = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   419
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   420
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   421
            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
   422
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   423
            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
   424
                code = ex.get_payload().code
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   425
                if (ignore_exists and
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   426
                        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
   427
                    self.zone.setResourceProperties(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   428
                        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
   429
                    return
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   430
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   431
            LOG.exception(_("Unable to create new resource '%s' for instance "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   432
                            "'%s' via zonemgr(3RAD): %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   433
                          % (resource, self.zone.name, reason))
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   434
            raise
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   435
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   436
    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
   437
        """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
   438
        list specified in props.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   439
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   440
        if props is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   441
            props = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   442
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   443
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   444
            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
   445
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
   446
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   447
            LOG.exception(_("Unable to remove resource '%s' for instance '%s' "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   448
                            "via zonemgr(3RAD): %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   449
                          % (resource, self.zone.name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   450
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   451
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   452
    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
   453
        """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
   454
        """
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   455
        try:
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   456
            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
   457
                                              props)
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   458
        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
   459
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   460
            LOG.exception(_("Unable to clear '%s' property on '%s' resource "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   461
                            "for instance '%s' via zonemgr(3RAD): %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
   462
                          % (props, resource, self.zone.name, reason))
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   463
            raise
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
   464
1760
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
class SolarisZonesDriver(driver.ComputeDriver):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   467
    """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
   468
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   469
    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
   470
    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
   471
    (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
   472
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   473
    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
   474
    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
   475
    '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
   476
    'instance name' are synonyms.
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
    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
   479
    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
   480
    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
   481
    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
   482
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   483
    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
   484
    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
   485
    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
   486
    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
   487
    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
   488
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   489
    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
   490
    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
   491
    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
   492
    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
   493
    virtualization platform.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   494
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   495
    """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   496
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   497
    capabilities = {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   498
        "has_imagecache": False,
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   499
        "supports_recreate": True,
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   500
        "supports_migrate_to_same_host": False
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   501
    }
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   502
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   503
    def __init__(self, virtapi):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   504
        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
   505
        self._archive_manager = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   506
        self._compute_event_callback = None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   507
        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
   508
        self._fc_hbas = None
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   509
        self._fc_wwnns = None
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   510
        self._fc_wwpns = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   511
        self._host_stats = {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   512
        self._initiator = None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   513
        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
   514
        self._kstat_control = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   515
        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
   516
        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
   517
        self._rootzpool_suffix = ROOTZPOOL_RESOURCE
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   518
        self._uname = os.uname()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   519
        self._validated_archives = list()
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   520
        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
   521
        self._zone_manager = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   522
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   523
    @property
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   524
    def rad_connection(self):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   525
        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
   526
            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
   527
        else:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   528
            # 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
   529
            # closed connection
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   530
            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
   531
                # 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
   532
                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
   533
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   534
        return self._rad_connection
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   535
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   536
    @property
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   537
    def zone_manager(self):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   538
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   539
            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
   540
                    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
   541
                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
   542
                    zonemgr.ZoneManager())
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
   543
        except Exception as ex:
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
   544
            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
   545
            raise exception.NovaException(reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   546
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   547
        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
   548
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   549
    @property
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   550
    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
   551
        try:
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   552
            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
   553
                    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
   554
                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
   555
                    kstat.Control())
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   556
        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
   557
            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
   558
            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
   559
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   560
        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
   561
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   562
    @property
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   563
    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
   564
        try:
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   565
            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
   566
                    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
   567
                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
   568
                    archivemgr.ArchiveManager())
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   569
        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
   570
            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
   571
            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
   572
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   573
        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
   574
7583
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
   575
    def _initialize_volume_connection(self, context, volume_id, connection):
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
   576
        connection_info = self._volume_api.initialize_connection(context,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
   577
                                                                 volume_id,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
   578
                                                                 connection)
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
   579
        connection_info['serial'] = volume_id
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
   580
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
   581
        return connection_info
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
   582
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   583
    def init_host(self, host):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   584
        """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
   585
        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
   586
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   587
        # 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
   588
        pass
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   589
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   590
    def cleanup_host(self, host):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   591
        """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
   592
        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
   593
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   594
        pass
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   595
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   596
    def _get_fc_hbas(self):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   597
        """Get Fibre Channel HBA information."""
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   598
        if self._fc_hbas:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   599
            return self._fc_hbas
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   600
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   601
        out = None
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   602
        try:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   603
            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
   604
        except processutils.ProcessExecutionError:
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   605
            return []
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   606
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   607
        if out is None:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   608
            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
   609
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   610
        hbas = []
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   611
        hba = {}
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   612
        for line in out.splitlines():
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   613
            line = line.strip()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   614
            # 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
   615
            # 1: Port WWN
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   616
            # 2: State (online|offline)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   617
            # 3: Node WWN
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   618
            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
   619
                # New HBA port entry
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   620
                hba = {}
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   621
                wwpn = line.split()[-1]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   622
                hba['port_name'] = wwpn
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   623
                continue
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   624
            elif line.startswith("Port Mode:"):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   625
                mode = line.split()[-1]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   626
                # Skip Target mode ports
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   627
                if mode != 'Initiator':
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   628
                    break
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   629
            elif line.startswith("State:"):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   630
                state = line.split()[-1]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   631
                hba['port_state'] = state
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   632
                continue
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   633
            elif line.startswith("Node WWN:"):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   634
                wwnn = line.split()[-1]
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   635
                hba['node_name'] = wwnn
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   636
                continue
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   637
            if len(hba) == 3:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   638
                hbas.append(hba)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   639
                hba = {}
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   640
        self._fc_hbas = hbas
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   641
        return self._fc_hbas
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   642
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   643
    def _get_fc_wwnns(self):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   644
        """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
   645
        hbas = self._get_fc_hbas()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   646
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   647
        wwnns = []
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   648
        for hba in hbas:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   649
            if hba['port_state'] == 'online':
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   650
                wwnn = hba['node_name']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   651
                wwnns.append(wwnn)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   652
        return wwnns
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   653
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   654
    def _get_fc_wwpns(self):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   655
        """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
   656
        hbas = self._get_fc_hbas()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   657
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   658
        wwpns = []
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   659
        for hba in hbas:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   660
            if hba['port_state'] == 'online':
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   661
                wwpn = hba['port_name']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   662
                wwpns.append(wwpn)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   663
        return wwpns
1760
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 _get_iscsi_initiator(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   666
        """ Return the iSCSI initiator node name IQN for this host """
6913
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   667
        try:
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   668
            out, err = utils.execute('/usr/sbin/iscsiadm', 'list',
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   669
                                     'initiator-node')
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   670
            # Sample first line of command output:
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   671
            # Initiator node name: iqn.1986-03.com.sun:01:e00000000000.4f757217
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   672
            initiator_name_line = out.splitlines()[0]
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   673
            initiator_iqn = initiator_name_line.rsplit(' ', 1)[1]
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   674
            return initiator_iqn
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   675
        except processutils.ProcessExecutionError as ex:
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   676
            LOG.info(_("Failed to get the initiator-node info: %s") % (ex))
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
   677
            return None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   678
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   679
    def _get_zone_by_name(self, name):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   680
        """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
   681
        try:
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   682
            zone = self.rad_connection.get_object(
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   683
                zonemgr.Zone(), rad.client.ADRGlobPattern({'name': name}))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   684
        except rad.client.NotFoundError:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   685
            return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   686
        except Exception:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   687
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   688
        return zone
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   689
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   690
    def _get_state(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   691
        """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
   692
        return SOLARISZONES_POWER_STATE[zone.state]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   693
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   694
    def _pages_to_kb(self, pages):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   695
        """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
   696
        return (pages * self._pagesize) / 1024
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   697
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   698
    def _get_max_mem(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   699
        """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
   700
        if zone.brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   701
            mem_resource = 'swap'
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   702
        else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   703
            mem_resource = 'physical'
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   704
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
   705
        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
   706
        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
   707
            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
   708
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   709
        # 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
   710
        # 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
   711
        # memory.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   712
        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
   713
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   714
    def _get_mem(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   715
        """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
   716
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   717
        # 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
   718
        # 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
   719
        # for now.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   720
        return self._get_max_mem(zone)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   721
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   722
    def _get_num_cpu(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   723
        """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
   724
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   725
        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
   726
        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
   727
        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
   728
        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
   729
        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
   730
        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
   731
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   732
        # 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
   733
        # CPUs defined there.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   734
        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
   735
        if ncpus is not None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   736
            min = ncpus.split('-', 1)[0]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   737
            if min.isdigit():
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   738
                return int(min)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   739
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   740
        # 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
   741
        # number of CPUs defined there.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   742
        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
   743
        if ncpus is not None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   744
            max = ncpus.split('-', 1)[-1]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   745
            if max.isdigit():
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   746
                return int(max)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   747
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   748
        # 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
   749
        # 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
   750
        # 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
   751
        # 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
   752
        # of online CPUs.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   753
        return os.sysconf('SC_NPROCESSORS_ONLN')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   754
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   755
    def _kstat_data(self, uri):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   756
        """Return Kstat snapshot data via RAD as a dictionary."""
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   757
        if not isinstance(uri, str):
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   758
            raise exception.NovaException("kstat URI must be string type: "
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   759
                                          "%s is %s" % (uri, type(uri)))
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   760
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   761
        if not uri.startswith("kstat:/"):
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   762
            uri = "kstat:/" + uri
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   763
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   764
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
   765
            self.kstat_control.update()
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   766
            kstat_obj = self.rad_connection.get_object(
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   767
                kstat.Kstat(), rad.client.ADRGlobPattern({"uri": uri}))
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   768
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   769
        except Exception as reason:
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   770
            LOG.info(_("Unable to retrieve kstat object '%s' via kstat(3RAD): "
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   771
                       "%s") % (uri, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   772
            return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   773
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   774
        ks_data = {}
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   775
        for name, data in kstat_obj.getMap().items():
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   776
            ks_data[name] = getattr(data, KSTAT_TYPE[str(data.type)])
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   777
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   778
        return ks_data
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   779
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   780
    def _sum_kstat_statistic(self, kstat_data, statistic):
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   781
        total = 0
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   782
        for ks in kstat_data.values():
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   783
            data = ks.getMap()[statistic]
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   784
            value = getattr(data, KSTAT_TYPE[str(data.type)])
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   785
            try:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   786
                total += value
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   787
            except TypeError:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   788
                LOG.error(_("Unable to aggregate non-summable kstat %s;%s "
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   789
                            " of type %s") % (ks.getParent().uri, statistic,
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   790
                                              type(value)))
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   791
                return 0
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   792
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   793
        return total
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   794
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   795
    def _get_kstat_statistic(self, ks, statistic):
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   796
        if not isinstance(ks, kstat.Kstat):
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   797
            reason = (_("Attempted to get a kstat from %s type.") % (type(ks)))
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   798
            raise TypeError(reason)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   799
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   800
        try:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   801
            data = ks.getMap()[statistic]
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   802
            value = getattr(data, KSTAT_TYPE[str(data.type)])
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   803
        except TypeError:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   804
            value = None
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   805
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   806
        return value
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
   807
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   808
    def _get_cpu_time(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   809
        """Return the CPU time used in nanoseconds."""
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   810
        # If the zone is not in a running state, the information requested
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   811
        # cannot be gathered, so simply return 0.
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   812
        if zone.name is None or zone.state != ZONE_STATE_RUNNING:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   813
            return 0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   814
7475
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   815
        # Loop over the kstats for each cpu. If the cpu list changes, the
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   816
        # gen_num for the accumulated kstat will change invalidating the
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   817
        # result, so retry if this happens.
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   818
        # The retry value of 3 was determined by the "we shouldn't hit this
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   819
        # often, but if we do it should resolve quickly so try again"+1
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   820
        # algorithm.
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   821
        uri = "kstat:/zones/%s/cpu" % zone.name
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   822
        accum_uri = "kstat:/zones/%s/cpu/accum/sys" % zone.name
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   823
        for _attempt in range(3):
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   824
            total = 0
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   825
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   826
            initial = self._kstat_data(accum_uri)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   827
            cpus = self._kstat_data(uri)
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   828
            if cpus is None:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   829
                # If the zone state is not running then give up but if it is
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   830
                # running try again.
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   831
                if zone.state != ZONE_STATE_RUNNING:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   832
                    break
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   833
                else:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   834
                    continue
7475
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   835
            cpus.pop('pset_accum')
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   836
            cpus.pop('accum')
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   837
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   838
            cpu = None
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   839
            for n in cpus:
7475
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   840
                cpu = self._kstat_data(uri + "/%s" % n)
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   841
                if cpu is None:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   842
                    if zone.state != ZONE_STATE_RUNNING:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   843
                        return 0
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   844
                    else:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   845
                        break
7475
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   846
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   847
                total += self._sum_kstat_statistic(cpu, 'cpu_nsec_kernel_cur')
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   848
                total += self._sum_kstat_statistic(cpu, 'cpu_nsec_user_cur')
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   849
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   850
            if cpu is None:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   851
                continue
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   852
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   853
            final = self._kstat_data(accum_uri)
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   854
            if final is None:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
   855
                continue
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   856
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   857
            if initial['gen_num'] == final['gen_num']:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   858
                total += initial['cpu_nsec_user'] + initial['cpu_nsec_kernel']
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   859
                return total
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   860
7475
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
   861
        LOG.error(_("Unable to get accurate cpu usage because cpu list "
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   862
                    "keeps changing"))
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
   863
        return 0
1760
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
    def get_info(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   866
        """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
   867
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   868
        :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
   869
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
   870
        Returns a InstanceInfo object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   871
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   872
        # 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
   873
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   874
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   875
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   876
            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
   877
        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
   878
                                     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
   879
                                     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
   880
                                     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
   881
                                     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
   882
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   883
    def get_num_instances(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   884
        """Return the total number of virtual machines.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   885
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   886
        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
   887
        about.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   888
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   889
        .. note::
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   890
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   891
            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
   892
            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
   893
            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
   894
            efficient.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   895
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   896
        return len(self.list_instances())
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   897
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   898
    def instance_exists(self, instance):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   899
        """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
   900
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   901
        :param instance: The instance to lookup
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   902
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   903
        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
   904
        the host, False otherwise.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   905
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   906
        .. note::
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   907
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   908
            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
   909
            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
   910
            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
   911
            efficient.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   912
        """
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   913
        try:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   914
            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
   915
        except NotImplementedError:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   916
            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
   917
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   918
    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
   919
        """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
   920
        of the given flavor.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   921
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   922
        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
   923
        calculations are desired.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   924
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   925
        :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
   926
        :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
   927
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   928
        return {'memory_mb': 0}
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
   929
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   930
    def _get_list_zone_object(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   931
        """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
   932
        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
   933
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   934
    def list_instances(self):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   935
        """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
   936
        layer, as a list.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   937
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   938
        # 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
   939
        instances_list = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   940
        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
   941
            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
   942
        return instances_list
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   943
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   944
    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
   945
        """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
   946
        layer, as a list.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   947
        """
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   948
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
   949
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   950
    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
   951
        root_ci = None
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   952
        rootmp = instance['root_device_name']
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   953
        for entry in bdms:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   954
            if entry['connection_info'] is None:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   955
                continue
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   956
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   957
            if entry['device_name'] == rootmp:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   958
                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
   959
                # 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
   960
                # 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
   961
                # 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
   962
                # 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
   963
                #
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   964
                # 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
   965
                # 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
   966
                # fail or not.
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   967
                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
   968
                    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
   969
                        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
   970
                    else:
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   971
                        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
   972
                                    "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
   973
                                    "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
   974
                        root_ci = None
bfd525bc0bf2 22991692 instance rebuild failed with Exception during message handling: 'serial'
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5847
diff changeset
   975
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   976
                continue
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   977
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   978
            if not recreate:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   979
                ci = jsonutils.loads(entry['connection_info'])
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   980
                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
   981
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   982
        if root_ci is None and recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
   983
            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
   984
                   % instance['name'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   985
            raise exception.NovaException(msg)
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
        return root_ci
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
   988
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
   989
    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
   990
        """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
   991
        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
   992
        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
   993
        """
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
   994
        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
   995
        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
   996
            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
   997
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
   998
        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
   999
        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
  1000
            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
  1001
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
  1002
        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
  1003
        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
  1004
            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
  1005
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
  1006
        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
  1007
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1008
    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
  1009
                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
  1010
                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
  1011
                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
  1012
                preserve_ephemeral=False):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1013
        """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
  1014
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1015
        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
  1016
        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
  1017
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1018
        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
  1019
        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
  1020
        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
  1021
        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
  1022
        up steps.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1023
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1024
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1025
        :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
  1026
                         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
  1027
                         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
  1028
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1029
            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
  1030
        :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
  1031
        :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
  1032
        :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
  1033
        :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
  1034
            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
  1035
            usage.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1036
        :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
  1037
            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
  1038
            usage.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1039
        :param network_info:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1040
           :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
  1041
        :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
  1042
            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
  1043
        :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
  1044
                                  attached to the instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  1045
        :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
  1046
                                   partition must be preserved on rebuild
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 recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1049
            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
  1050
            instance.save()
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1051
            extra_specs = self._get_flavor(instance)['extra_specs'].copy()
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1052
            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
  1053
            if brand == ZONE_BRAND_SOLARIS:
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1054
                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
  1055
                         "evacuation.") % brand)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1056
                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
  1057
        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
  1058
            self._power_off(instance, "HALT")
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1059
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1060
        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
  1061
        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
  1062
        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
  1063
                                              recreate)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1064
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1065
        if recreate:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1066
            if root_ci is not None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1067
                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
  1068
            else:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1069
                driver_type = 'local'
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1070
            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
  1071
                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
  1072
                         "'%s'.") % instance['name'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1073
                raise exception.NovaException(msg)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1074
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1075
        if not recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1076
            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
  1077
            if root_ci is not None:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1078
                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
  1079
                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
  1080
7027
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1081
                # Go ahead and remove the root bdm from the bdms so that we do
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1082
                # not trip up spawn either checking against the use of c1d0 or
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1083
                # attempting to re-attach the root device.
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1084
                bdms.objects.remove(bdms.root_bdm())
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1085
                rootdevname = block_device_info.get('root_device_name')
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1086
                if rootdevname is not None:
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1087
                    bdi_bdms = block_device_info.get('block_device_mapping')
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1088
                    for entry in bdi_bdms:
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1089
                        if entry['mount_device'] == rootdevname:
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1090
                            bdi_bdms.remove(entry)
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1091
                            break
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1092
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1093
        instance.task_state = task_states.REBUILD_SPAWNING
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1094
        instance.save(
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1095
            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
  1096
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1097
        # 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
  1098
        # 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
  1099
        if recreate:
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1100
            extra_specs = self._get_flavor(instance)['extra_specs'].copy()
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1101
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1102
            instance.system_metadata['rebuilding'] = 'false'
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1103
            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
  1104
            del instance.system_metadata['evac_from']
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1105
            instance.save()
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1106
        else:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1107
            instance.system_metadata['rebuilding'] = 'true'
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1108
            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
  1109
                       admin_password, network_info, block_device_info)
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1110
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1111
        del instance.system_metadata['rebuilding']
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1112
        name = instance['name']
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1113
        zone = self._get_zone_by_name(name)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1114
        if zone is None:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1115
            raise exception.InstanceNotFound(instance_id=name)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1116
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1117
        if recreate:
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1118
            zone.attach(['-x', 'initialize-hostdata'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1119
7027
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1120
            rootmp = instance['root_device_name']
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1121
            for entry in bdms:
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1122
                if (entry['connection_info'] is None or
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1123
                        rootmp == entry['device_name']):
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1124
                    continue
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1125
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1126
                connection_info = jsonutils.loads(entry['connection_info'])
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1127
                mount = entry['device_name']
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1128
                self.attach_volume(context, connection_info, instance, mount)
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1129
208c99e0d339 24766045 rebuild fails attempting to attach the root device after the rebuild of the vm
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7026
diff changeset
  1130
            self._power_on(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1131
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1132
        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
  1133
            # 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
  1134
            # 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
  1135
            # 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
  1136
            greenthread.sleep(15)
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  1137
            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
  1138
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1139
    def _get_flavor(self, instance):
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1140
        """Retrieve the flavor object as specified in the instance object"""
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1141
        return flavor_obj.Flavor.get_by_id(
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1142
            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
  1143
            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
  1144
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1145
    def _fetch_image(self, context, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1146
        """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
  1147
        glancecache_dirname = CONF.solariszones.glancecache_dirname
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1148
        fileutils.ensure_tree(glancecache_dirname)
6901
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1149
        iref = instance['image_ref']
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1150
        image = os.path.join(glancecache_dirname, iref)
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1151
        downloading = image + '.downloading'
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1152
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1153
        with lockutils.lock('glance-image-%s' % iref):
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1154
            if os.path.isfile(downloading):
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1155
                LOG.debug(_('Cleaning partial download of %s' % iref))
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1156
                os.unlink(downloading)
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1157
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1158
            elif os.path.exists(image):
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1159
                LOG.debug(_("Using existing, cached Glance image: id %s")
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1160
                          % iref)
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1161
                return image
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1162
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1163
            LOG.debug(_("Fetching new Glance image: id %s") % iref)
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1164
            try:
7652
8ea2de474b66 25505808 stale .downloading files in image cache block instance deployment
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7593
diff changeset
  1165
                images.fetch(context, iref, downloading, instance['user_id'],
6901
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1166
                             instance['project_id'])
7652
8ea2de474b66 25505808 stale .downloading files in image cache block instance deployment
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7593
diff changeset
  1167
                os.rename(downloading, image)
6901
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1168
                return image
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1169
            except Exception as reason:
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1170
                LOG.exception(_("Unable to fetch Glance image: id %s: %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1171
                              % (iref, reason))
6901
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1172
                raise
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1173
2c7a24ff439f 22699868 _fetch_image method can try and build from partial image download
Drew Fisher <drew.fisher@oracle.com>
parents: 6900
diff changeset
  1174
    @lockutils.synchronized('validate_image')
5607
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1175
    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
  1176
        """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
  1177
        # 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
  1178
        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
  1179
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1180
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1181
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
  1182
            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
  1183
        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
  1184
            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
  1185
                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
  1186
            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
  1187
                reason = str(ex)
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1188
            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
  1189
                                              reason=reason)
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1190
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1191
        # 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
  1192
        # - contains one deployable system
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1193
        deployables = ua.getArchivedSystems()
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1194
        if len(deployables) != 1:
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1195
            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
  1196
            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
  1197
                                              reason=reason)
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1198
        # - matching architecture
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1199
        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
  1200
        compute_arch = platform.processor()
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1201
        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
  1202
            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
  1203
                      "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
  1204
                      % (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
  1205
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1206
            # 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
  1207
            # 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
  1208
            # 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
  1209
            # 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
  1210
            glanceapi = glance_api()
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1211
            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
  1212
            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
  1213
            if image_properties.get('architecture') is None:
6912
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  1214
                reason = reason + (_(" The 'architecture' property is not set "
5607
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1215
                                     "on the Glance image."))
cce26674fa5b 18733958 nova tried to create x86 instance on SPARC
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5606
diff changeset
  1216
5279
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1217
            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
  1218
                                              reason=reason)
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1219
        # - single root pool only
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1220
        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
  1221
            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
  1222
            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
  1223
                                              reason=reason)
6c696d36d952 22471983 Nova's archive logic should account for archive RAD changes
david.comay@oracle.com
parents: 5252
diff changeset
  1224
        # - 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
  1225
        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
  1226
7265
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1227
    def _validate_flavor(self, instance):
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1228
        """Validate the flavor for compatibility with zone brands"""
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1229
        flavor = self._get_flavor(instance)
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1230
        extra_specs = flavor['extra_specs'].copy()
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1231
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1232
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1233
        if brand == ZONE_BRAND_SOLARIS_KZ:
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1234
            # verify the memory is 256mb aligned
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1235
            test_size = Size('256MB')
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1236
            instance_size = Size('%sMB' % instance['memory_mb'])
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1237
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1238
            if instance_size.byte_value % test_size.byte_value:
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1239
                # non-zero result so it doesn't align
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1240
                raise MemoryAlignmentIncorrect(
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1241
                    flavor=flavor['name'],
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1242
                    memsize=str(instance['memory_mb']),
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1243
                    align='256')
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  1244
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1245
    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
  1246
        """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
  1247
        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
  1248
        driver types.
1760
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
        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
  1251
        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
  1252
            raise exception.VolumeDriverNotFound(driver_type=driver_type)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1253
        if driver_type == 'local':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1254
            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
  1255
        elif driver_type == 'iscsi':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1256
            data = connection_info['data']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1257
            # suri(5) format:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1258
            #       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
  1259
            # 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
  1260
            #       iscsi://<host>[:<port>]/luname.naa.<ID>
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1261
            # Sample iSCSI connection data values:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1262
            # target_portal: 192.168.1.244:3260
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1263
            # 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
  1264
            # target_lun: 1
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1265
            suri = None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1266
            if 'target_iqns' in data:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1267
                target = data['target_iqns'][0]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1268
                target_lun = data['target_luns'][0]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1269
                try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1270
                    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
  1271
                                  '-vS', target)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1272
                    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
  1273
                                             '-t', 'iscsi',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1274
                                             '-p', 'target=%s' % target,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1275
                                             '-p', 'lun=%s' % target_lun)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1276
                    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
  1277
                        if "luname.naa." in line:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1278
                            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
  1279
                                      "LUN '%s' is '%s'.") %
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1280
                                      (target_lun, line))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1281
                            suri = line
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1282
                except processutils.ProcessExecutionError as ex:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1283
                    reason = ex.stderr
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1284
                    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
  1285
                              "'%s': '%s'.") % (target, target_lun, reason))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1286
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1287
            if suri is None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1288
                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
  1289
                                                        data['target_iqn'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1290
                                                        data['target_lun'])
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1291
            # 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
  1292
        elif driver_type == 'nfs':
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1293
            data = connection_info['data']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1294
            suri = (
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1295
                'nfs://cinder:cinder@%s/%s' %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1296
                (data['export'].replace(':', ''), data['name'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1297
            )
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  1298
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1299
        elif driver_type == 'fibre_channel':
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1300
            data = connection_info['data']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1301
            target_wwn = data['target_wwn']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1302
            # 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
  1303
            hbas = self._get_fc_hbas()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1304
            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
  1305
                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
  1306
                          "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
  1307
                raise exception.InvalidVolume(
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
  1308
                    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
  1309
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1310
            target_lun = data['target_lun']
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1311
            # 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
  1312
            # 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
  1313
            # 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
  1314
            # a refresh.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1315
            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
  1316
                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
  1317
6070
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1318
            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
  1319
        return suri
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1320
6070
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1321
    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
  1322
        """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
  1323
        wwns = []
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1324
        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
  1325
            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
  1326
        else:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1327
            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
  1328
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1329
        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
  1330
            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
  1331
                try:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1332
                    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
  1333
                                             '-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
  1334
                                             '-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
  1335
                    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
  1336
                        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
  1337
                            return line
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1338
                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
  1339
                    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
  1340
                    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
  1341
                              "%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
  1342
            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
  1343
        else:
87daa7413b2d 23294485 Cinder ZFSFCDriver fails to find the right target wwn
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6031
diff changeset
  1344
            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
  1345
                    "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
  1346
            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
  1347
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1348
    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
  1349
        """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
  1350
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1351
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1352
            raise exception.InstanceNotFound(instance_id=name)
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
        # 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
  1355
        zonecfg_items = [
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1356
            'bootargs',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1357
            'brand',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1358
            'hostid'
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
        if brand == ZONE_BRAND_SOLARIS:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1361
            zonecfg_items.extend(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1362
                ['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
  1363
        else:
a11e4cbcf3d2 23523730 zonecfg:cpu-arch missing from supported zone properties in extra_specs
david.comay@oracle.com
parents: 6123
diff changeset
  1364
            zonecfg_items.extend(['cpu-arch'])
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1365
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1366
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1367
            for key, value in extra_specs.iteritems():
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1368
                # Ignore not-zonecfg-scoped brand properties.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1369
                if not key.startswith('zonecfg:'):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1370
                    continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1371
                _scope, prop = key.split(':', 1)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1372
                # Ignore the 'brand' property if present.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1373
                if prop == 'brand':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1374
                    continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1375
                # 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
  1376
                if prop not in zonecfg_items:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1377
                    LOG.warning(_("Ignoring unsupported zone property '%s' "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1378
                                  "set on flavor for instance '%s'")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1379
                                % (prop, name))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1380
                    continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1381
                zc.setprop('global', prop, value)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1382
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1383
    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
  1384
        """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
  1385
        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
  1386
        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
  1387
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1388
            vol = self._volume_api.create(
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1389
                context, instance['root_gb'],
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1390
                instance['hostname'] + "-" + self._rootzpool_suffix,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1391
                "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
  1392
                % (instance['name'], instance['uuid']),
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1393
                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
  1394
            # 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
  1395
            # 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
  1396
            while True:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1397
                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
  1398
                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
  1399
                    return volume
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1400
                greenthread.sleep(1)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1401
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1402
        except Exception as reason:
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1403
            LOG.exception(_("Unable to create root zpool volume for instance "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1404
                            "'%s': %s") % (instance['name'], reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1405
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1406
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1407
    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
  1408
        """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
  1409
        instance_uuid = instance['uuid']
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1410
        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
  1411
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1412
        connector = self.get_volume_connector(instance)
7583
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  1413
        connection_info = self._initialize_volume_connection(context,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  1414
                                                             volume_id,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  1415
                                                             connector)
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1416
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1417
        # 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
  1418
        # 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
  1419
        # 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
  1420
        # when using a zpool within another zpool on the same system.
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1421
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1422
        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
  1423
        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
  1424
            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
  1425
            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
  1426
                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
  1427
                        "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
  1428
                        "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
  1429
                        "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
  1430
                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
  1431
            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
  1432
                # 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
  1433
                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
  1434
                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
  1435
                # 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
  1436
                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
  1437
                # 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
  1438
                # 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
  1439
                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
  1440
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1441
                # 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
  1442
                # 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
  1443
                # 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
  1444
                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
  1445
                    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
  1446
                            "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
  1447
                            "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
  1448
                            "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
  1449
                            "zones.")
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1450
                    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
  1451
            # 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
  1452
            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
  1453
                # 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
  1454
                # 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
  1455
                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
  1456
                        "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
  1457
                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
  1458
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  1459
        # 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
  1460
        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
  1461
        return connection_info
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1462
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1463
    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
  1464
        """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
  1465
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1466
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1467
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1468
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1469
        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
  1470
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1471
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1472
            # 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
  1473
            if brand == ZONE_BRAND_SOLARIS_KZ:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1474
                zc.zone.setResourceProperties(
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1475
                    zonemgr.Resource("device",
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1476
                                     [zonemgr.Property("bootpri", "0")]),
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1477
                    [zonemgr.Property("storage", suri)])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1478
            else:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1479
                zc.addresource(ROOTZPOOL_RESOURCE,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1480
                               [zonemgr.Property("storage", listvalue=[suri])],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1481
                               ignore_exists=True)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1482
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1483
    def _get_configdrive_path(self, instance):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1484
        cd_name = "config_drive-" + instance['name']
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1485
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1486
        return os.path.join("/var/share/nova/configdrives", cd_name)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1487
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1488
    def _set_configdrive(self, name, instance, sc_dir):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1489
        """Set the configdrive device"""
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1490
        zone = self._get_zone_by_name(name)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1491
        if zone is None:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1492
            raise exception.InstanceNotFound(instance_id=name)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1493
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1494
        cd_path = self._get_configdrive_path(instance)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1495
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1496
        with ZoneConfig(zone) as zc:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1497
            storagepath = "file://root:root@" + cd_path
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1498
            zc.addresource("device", [zonemgr.Property("storage", storagepath),
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1499
                                      zonemgr.Property("id", "1")])
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1500
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1501
        fp = os.path.join(sc_dir, "config_drive.xml")
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1502
        tree = sysconfig.create_config_drive()
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1503
        sysconfig.create_sc_profile(fp, tree)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1504
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1505
    def _unset_configdrive(self, name, instance):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1506
        """ Remove the configdrive device from the zone"""
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1507
        zone = self._get_zone_by_name(name)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1508
        if zone is None:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1509
            raise exception.InstanceNotFound(instance_id=name)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1510
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1511
        cd_path = self._get_configdrive_path(instance)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1512
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1513
        with ZoneConfig(zone) as zc:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1514
            storagepath = "file://root:root@" + cd_path
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1515
            zc.removeresources("device",
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1516
                               [zonemgr.Property("storage", storagepath)])
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1517
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1518
        if zone.state == ZONE_STATE_RUNNING:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1519
            zone.apply()
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1520
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1521
        os.remove(cd_path)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1522
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1523
    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
  1524
        """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
  1525
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1526
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1527
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1528
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1529
        # 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
  1530
        # '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
  1531
        if brand == ZONE_BRAND_SOLARIS:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1532
            vcpu_resource = 'capped-cpu'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1533
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1534
            vcpu_resource = 'virtual-cpu'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1535
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1536
        # 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
  1537
        # 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
  1538
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1539
            zc.setprop(vcpu_resource, 'ncpus', str(vcpus))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1540
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1541
    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
  1542
        """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
  1543
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1544
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1545
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1546
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1547
        # 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
  1548
        # '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
  1549
        if brand == ZONE_BRAND_SOLARIS:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1550
            mem_resource = 'swap'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1551
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1552
            mem_resource = 'physical'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1553
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1554
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1555
            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
  1556
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1557
    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
  1558
        if vif['type'] == 'binding_failed':
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1559
            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
  1560
                        '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
  1561
                        '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
  1562
                        'connectivity') % vif)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1563
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1564
        ovs_bridge = CONF.neutron.ovs_bridge
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1565
        cmd = ['/usr/sbin/ovs-vsctl',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1566
               '--timeout=%s' % CONF.ovs_vsctl_timeout,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1567
               '--', '--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
  1568
               '--', 'add-port', ovs_bridge, port,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1569
               '--', 'set', 'Interface', port,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1570
               '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
  1571
               'external-ids:iface-status=active',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1572
               '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
  1573
               '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
  1574
               ]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1575
        try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1576
            out, err = utils.execute(*cmd)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1577
        except Exception as reason:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1578
            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
  1579
                     "OVS Bridge '%s': %s")
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1580
                   % (port, vif['address'], ovs_bridge, reason))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1581
            raise exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1582
        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
  1583
                  (port, vif['address']))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1584
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1585
    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
  1586
        ovs_bridge = CONF.neutron.ovs_bridge
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1587
        cmd = ['/usr/sbin/ovs-vsctl',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1588
               '--timeout=%s' % CONF.ovs_vsctl_timeout,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1589
               '--', '--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
  1590
        try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1591
            out, err = utils.execute(*cmd)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1592
            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
  1593
                      (port, ovs_bridge))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1594
        except Exception as reason:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1595
            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
  1596
                     "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
  1597
            if log_warnings:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1598
                LOG.warning(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1599
            else:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1600
                raise nova.exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1601
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1602
    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
  1603
        if not network_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1604
            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
  1605
            return
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1606
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1607
        # 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
  1608
        try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1609
            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
  1610
                                     '-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
  1611
                                     '-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
  1612
        except Exception as reason:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1613
            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
  1614
                   % (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
  1615
            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
  1616
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1617
        anetdict = {}
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1618
        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
  1619
            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
  1620
            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
  1621
            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
  1622
            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
  1623
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1624
        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
  1625
                  % (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
  1626
        # 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
  1627
        # 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
  1628
        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
  1629
            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
  1630
                                 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
  1631
            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
  1632
            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
  1633
                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
  1634
                            'to instance %s')
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1635
                          % (vif['ovs_interfaceid'], vif['network']['id'],
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1636
                             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
  1637
                continue
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1638
            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
  1639
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1640
    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
  1641
        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
  1642
        # 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
  1643
        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
  1644
               '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
  1645
        try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1646
            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
  1647
        except Exception as reason:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1648
            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
  1649
                   % (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
  1650
            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
  1651
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1652
        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
  1653
            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
  1654
                continue
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1655
            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
  1656
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1657
    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
  1658
        # 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
  1659
        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
  1660
        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
  1661
            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
  1662
        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
  1663
        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
  1664
        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
  1665
            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
  1666
        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
  1667
            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
  1668
            # 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
  1669
            try:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1670
                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
  1671
            except Exception as err:
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1672
                LOG.exception(_("Failed to retrieve other_config: %s"), err)
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1673
                raise
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1674
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1675
            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
  1676
            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
  1677
                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
  1678
                         "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
  1679
                         "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
  1680
                         "interface."))
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1681
                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
  1682
                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
  1683
            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
  1684
            if not bridge_mappings:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1685
                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
  1686
                         "'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
  1687
                         "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
  1688
                         "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
  1689
                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
  1690
                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
  1691
            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
  1692
                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
  1693
                    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
  1694
                    break
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1695
            if not lower_link:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1696
                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
  1697
                       (vif))
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1698
                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
  1699
                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
  1700
        else:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1701
            # 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
  1702
            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
  1703
            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
  1704
            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
  1705
6283
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1706
        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
  1707
        with ZoneConfig(zone) as zc:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1708
            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
  1709
                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
  1710
                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
  1711
                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
  1712
                if mtu > 0:
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1713
                    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
  1714
            else:
6283
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1715
                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
  1716
                         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
  1717
                                          'false'),
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1718
                         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
  1719
                if mtu > 0:
20926a1ac3fe 23643050 MTU attribute support for Neutron Network
chaithan.prakash@oracle.com <chaithan.prakash@oracle.com>
parents: 6260
diff changeset
  1720
                    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
  1721
                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
  1722
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1723
            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
  1724
            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
  1725
                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
  1726
                                                    '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
  1727
            else:
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1728
                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
  1729
                                                  prop_filter)
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1730
                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
  1731
        return anetname
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1732
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1733
    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
  1734
                     sc_dir):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  1735
        """add networking information to the zone."""
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1736
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1737
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1738
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1739
5190
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1740
        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
  1741
            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
  1742
                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
  1743
                    zc.removeresources("anet",
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1744
                                       [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
  1745
                else:
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1746
                    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
  1747
                return
fc9c815fce00 20410887 Solaris Nova driver should be resilient when network info is None
david.comay@oracle.com
parents: 4982
diff changeset
  1748
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1749
        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
  1750
            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
  1751
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1752
            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
  1753
            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
  1754
            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
  1755
            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
  1756
            dhcp_server = \
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1757
                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
  1758
            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
  1759
            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
  1760
            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
  1761
            nameservers = []
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1762
            for dns in dns_list:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1763
                if dns['type'] == 'dns':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1764
                    nameservers.append(dns['address'])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1765
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1766
            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
  1767
                                          vif)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1768
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1769
            # 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
  1770
            # resize or evacuate process)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1771
            tstate = instance['task_state']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1772
            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
  1773
                              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
  1774
                              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
  1775
                              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
  1776
                (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
  1777
                 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
  1778
                if enable_dhcp:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1779
                    tree = sysconfig.create_ncp_defaultfixed('dhcp',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1780
                                                             anetname, vifid,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1781
                                                             ip_version)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1782
                else:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1783
                    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
  1784
                    tree = sysconfig.create_ncp_defaultfixed('static',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1785
                                                             anetname, vifid,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1786
                                                             ip_version,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1787
                                                             ip_cidr, route,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1788
                                                             nameservers,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1789
                                                             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
  1790
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  1791
                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
  1792
                sysconfig.create_sc_profile(fp, tree)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1793
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1794
    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
  1795
        """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
  1796
        """
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1797
        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
  1798
        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
  1799
        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
  1800
            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
  1801
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1802
        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
  1803
                            '%{zonename}')
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  1804
        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
  1805
            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
  1806
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1807
    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
  1808
        """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
  1809
        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
  1810
        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
  1811
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1812
        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
  1813
        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
  1814
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1815
        root_account_needed = True
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1816
        hostname_needed = True
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1817
        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
  1818
        name = instance.get('hostname')
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1819
        encrypted_password = None
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1820
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1821
        # 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
  1822
        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
  1823
            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
  1824
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1825
        # find all XML files in sc_dir
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1826
        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
  1827
            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
  1828
                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
  1829
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1830
                # 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
  1831
                if filter(usercheck, fileroot.findall('service')):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1832
                    # 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
  1833
                    # 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
  1834
                    # 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
  1835
                    pgs = fileroot.iter('property_group')
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1836
                    for pg in pgs:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1837
                        if pg.attrib.get('name') == 'root_account':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1838
                            root_account_needed = False
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1839
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1840
                # look for identity properties
1908
702ae3973fcc 18793920 nova traceback when provided multiple SMF profiles
Drew Fisher <drew.fisher@oracle.com>
parents: 1840
diff changeset
  1841
                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
  1842
                    for props in fileroot.iter('propval'):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1843
                        if props.attrib.get('name') == 'nodename':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1844
                            hostname_needed = False
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1845
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1846
        # 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
  1847
        # profile(s) if needed.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1848
        if root_account_needed:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1849
            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
  1850
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1851
            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
  1852
                # store password for horizon retrieval
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1853
                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
  1854
                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
  1855
                instance.system_metadata.update(
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1856
                    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
  1857
                instance.save()
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1858
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1859
            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
  1860
                # 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
  1861
                # 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
  1862
                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
  1863
                    sshkey=sshkey, password=encrypted_password)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1864
            else:
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1865
                # 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
  1866
                # and password is none
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1867
                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
  1868
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1869
            sysconfig.create_sc_profile(fp, tree)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1870
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1871
        elif sshkey is not None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1872
            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
  1873
            tree = sysconfig.create_root_ssh_keys(sshkey)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1874
            sysconfig.create_sc_profile(fp, tree)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1875
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1876
        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
  1877
            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
  1878
            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
  1879
4695
0aecdc531b77 19774239 Nova should support setting the Admin Password
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4692
diff changeset
  1880
    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
  1881
                       sc_dir, admin_password=None):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1882
        """Create a new Solaris Zone configuration."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1883
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1884
        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
  1885
            raise exception.InstanceExists(name=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1886
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1887
        flavor = self._get_flavor(instance)
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1888
        extra_specs = flavor['extra_specs'].copy()
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  1889
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1890
        # If unspecified, default zone brand is ZONE_BRAND_SOLARIS
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1891
        brand = extra_specs.get('zonecfg:brand')
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1892
        if brand is None:
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1893
            LOG.warning(_("'zonecfg:brand' key not found in extra specs for "
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1894
                          "flavor '%s'.  Defaulting to 'solaris'"
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1895
                        % flavor['name']))
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1896
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1897
            brand = ZONE_BRAND_SOLARIS
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  1898
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1899
        template = ZONE_BRAND_TEMPLATE.get(brand)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1900
        # 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
  1901
        if template is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1902
            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
  1903
                   % (brand, name)))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1904
            raise exception.NovaException(msg)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1905
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1906
        tstate = instance['task_state']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1907
        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
  1908
                          task_states.RESIZE_REVERTING,
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  1909
                          task_states.RESIZE_MIGRATING,
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1910
                          task_states.REBUILD_SPAWNING] or \
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  1911
            (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
  1912
             instance.system_metadata['rebuilding'] == 'true'):
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1913
            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
  1914
            if sc_profile is not None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1915
                if os.path.isfile(sc_profile):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1916
                    shutil.copy(sc_profile, sc_dir)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1917
                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
  1918
                    shutil.copytree(sc_profile,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1919
                                    os.path.join(sc_dir, 'sysconfig'))
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1920
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  1921
            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
  1922
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  1923
        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
  1924
                  % (name, instance['display_name']))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1925
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
  1926
            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
  1927
            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
  1928
            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
  1929
            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
  1930
                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
  1931
                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
  1932
                    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
  1933
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  1934
            if connection_info is not None:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1935
                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
  1936
            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
  1937
            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
  1938
            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
  1939
                              sc_dir)
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1940
            if configdrive.required_by(instance):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  1941
                self._set_configdrive(name, instance, sc_dir)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1942
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1943
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1944
            LOG.exception(_("Unable to create configuration for instance '%s' "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1945
                            "via zonemgr(3RAD): %s") % (name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1946
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  1947
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1948
    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
  1949
        """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
  1950
        # 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
  1951
        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
  1952
            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
  1953
                          "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
  1954
                          "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
  1955
            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
  1956
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1957
        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
  1958
            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
  1959
                          "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
  1960
                          "terminal/xterm'") % XTERM_PATH)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1961
            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
  1962
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1963
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1964
        # 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
  1965
        try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1966
            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
  1967
                                     '-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
  1968
        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
  1969
            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
  1970
                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
  1971
                            "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
  1972
                return
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1973
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1974
            LOG.exception(_("Unable to create zone VNC console SMF service "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1975
                            "'{0}': {1}").format(VNC_CONSOLE_BASE_FMRI + ':' +
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1976
                                                 name, reason))
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1977
            raise
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1978
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1979
    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
  1980
        """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
  1981
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1982
        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
  1983
        # 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
  1984
        try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1985
            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
  1986
                                     '-s', VNC_CONSOLE_BASE_FMRI, 'delete',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  1987
                                     name)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1988
        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
  1989
            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
  1990
                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
  1991
                            "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
  1992
                          % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1993
                return
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1994
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1995
            LOG.exception(_("Unable to delete zone VNC console SMF service "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1996
                            "'%s': %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  1997
                          % (VNC_CONSOLE_BASE_FMRI + ':' + name, reason))
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  1998
            raise
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  1999
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2000
    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
  2001
        """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
  2002
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2003
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2004
        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
  2005
        # 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
  2006
        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
  2007
            # 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
  2008
            # 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
  2009
            # 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
  2010
            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
  2011
                                     '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
  2012
            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
  2013
                                     'refresh')
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2014
            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
  2015
                                     console_fmri)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2016
        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
  2017
            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
  2018
                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
  2019
                            "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
  2020
                          % name)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2021
                return
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2022
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2023
            LOG.exception(_("Unable to start zone VNC console SMF service "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2024
                            "'%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
  2025
            raise
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2026
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2027
        # 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
  2028
        greenthread.sleep(2)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2029
        while True:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2030
            try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2031
                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
  2032
                                         console_fmri)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2033
                state = out.strip()
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2034
                if state == 'online':
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2035
                    break
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2036
                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
  2037
                    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
  2038
                                "'%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
  2039
                              % (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
  2040
                    raise exception.ConsoleNotFoundForInstance(
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2041
                        instance_uuid=instance['uuid'])
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2042
                # 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
  2043
                # 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
  2044
                greenthread.sleep(2)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2045
            except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2046
                reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2047
                LOG.exception(_("Error querying state of zone VNC console SMF "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2048
                                "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
  2049
                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
  2050
        # 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
  2051
        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
  2052
            # 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
  2053
            # 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
  2054
            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
  2055
                                     '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
  2056
            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
  2057
                                     'refresh')
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2058
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2059
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2060
            LOG.exception(_("Unable to update 'vnc/nova-enabled' property for "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2061
                            "zone VNC console SMF service '%s': %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2062
                          % (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
  2063
            raise
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2064
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2065
    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
  2066
        """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
  2067
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2068
        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
  2069
            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
  2070
                        "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
  2071
            return
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2072
        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
  2073
        # 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
  2074
        try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2075
            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
  2076
                                     '-s', console_fmri)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2077
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2078
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2079
            LOG.exception(_("Unable to disable zone VNC console SMF service "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2080
                            "'%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
  2081
        # 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
  2082
        # 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
  2083
        # 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
  2084
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2085
            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
  2086
                                     'refresh')
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2087
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2088
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2089
            LOG.exception(_("Unable to refresh zone VNC console SMF service "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2090
                            "'%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
  2091
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2092
    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
  2093
        """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
  2094
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2095
        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
  2096
            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
  2097
                          "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
  2098
                        % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2099
            return None
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2100
        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
  2101
        # 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
  2102
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2103
            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
  2104
                                       console_fmri)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2105
            return state.strip()
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2106
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2107
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2108
            LOG.exception(_("Console state request failed for zone VNC "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2109
                            "console SMF service for instance '%s': %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2110
                          % (name, reason))
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2111
            raise
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2112
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2113
    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
  2114
        """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
  2115
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2116
        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
  2117
        # 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
  2118
        try:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2119
            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
  2120
            return True
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2121
        except Exception:
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2122
            return False
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2123
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2124
    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
  2125
        """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
  2126
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2127
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2128
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2129
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2130
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2131
        # log the zone's configuration
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2132
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2133
            LOG.debug("-" * 80)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2134
            LOG.debug(zc.zone.exportConfig(True))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2135
            LOG.debug("-" * 80)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2136
4832
eef9ea54fabe 21761279 Driver erroneously includes trailing space in zone.install() arguments
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4781
diff changeset
  2137
        options = ['-a', image]
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2138
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2139
        if os.listdir(sc_dir):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2140
            # 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
  2141
            options.extend(['-c', sc_dir])
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2142
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2143
        try:
5193
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2144
            LOG.debug(_("Installing instance '%s' (%s)") %
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2145
                      (name, instance['display_name']))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2146
            zone.install(options=options)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2147
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2148
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2149
            LOG.exception(_("Unable to install root file system for instance "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2150
                            "'%s' via zonemgr(3RAD): %s") % (name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2151
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2152
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
  2153
        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
  2154
5193
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2155
        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
  2156
                  (name, instance['display_name']))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2157
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2158
    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
  2159
        """Power on a Solaris Zone."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2160
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2161
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2162
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2163
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2164
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
  2165
        # 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
  2166
        # 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
  2167
        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
  2168
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2169
        bootargs = []
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2170
        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
  2171
            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
  2172
            persistent = 'False'
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2173
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2174
            # 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
  2175
            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
  2176
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2177
            # 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
  2178
            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
  2179
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2180
            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
  2181
                bootargs = ['--', str(meta_bootargs)]
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2182
                persistent = str(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2183
                    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
  2184
                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
  2185
                    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
  2186
                        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
  2187
                        # 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
  2188
                        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
  2189
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2190
        try:
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2191
            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
  2192
            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
  2193
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2194
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2195
            LOG.exception(_("Unable to power on instance '%s' via "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2196
                            "zonemgr(3RAD): %s") % (name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2197
            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
  2198
        finally:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2199
            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
  2200
                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
  2201
                    # 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
  2202
                    # 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
  2203
                    # 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
  2204
                    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
  2205
                    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
  2206
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2207
                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
  2208
                    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
  2209
                        # 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
  2210
                        zc.setprop('global', 'bootargs', cur_bootargs)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2211
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2212
    def _uninstall(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2213
        """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
  2214
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2215
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2216
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2217
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2218
4585
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2219
        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
  2220
            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
  2221
                      % (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
  2222
            return
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2223
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2224
            zone.uninstall(['-F'])
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2225
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2226
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2227
            LOG.exception(_("Unable to uninstall root file system for "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2228
                            "instance '%s' via zonemgr(3RAD): %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2229
                          % (name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2230
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2231
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2232
    def _delete_config(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2233
        """Delete an existing Solaris Zone configuration."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2234
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2235
        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
  2236
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2237
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2238
        try:
5610
3fd0658e8699 22827759 nova-compute still trips over itself when rad:local restarts
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5609
diff changeset
  2239
            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
  2240
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2241
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2242
            LOG.exception(_("Unable to delete configuration for instance '%s' "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2243
                            "via zonemgr(3RAD): %s") % (name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2244
            raise
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2245
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2246
    def _waitfor_copydone(self, name):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2247
        failcount = 0
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2248
        cbi_service = 'svc:/application/cloudbase-init:default'
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2249
        cbi_state = None
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2250
        end_states = ['online', 'degraded', 'maintenance', 'disabled']
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2251
        while cbi_state not in end_states:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2252
            try:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2253
                cbi_state, err = utils.execute('/usr/sbin/zlogin', '-S', name,
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2254
                                               '/usr/bin/svcs', '-H', '-o',
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2255
                                               'state', cbi_service)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2256
                cbi_state = cbi_state.strip()
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2257
            except processutils.ProcessExecutionError:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2258
                # If it has been two minutes and the zone is still not able to
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2259
                # return any kind of state, and the zlogin is failing, then
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2260
                # simply get out of the process of protecting the config-drive
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2261
                # but leave it attached to the zone.
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2262
                if failcount > 120:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2263
                    return False
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2264
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2265
                failcount = failcount + 1
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2266
                greenthread.sleep(1)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2267
                continue
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2268
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2269
            if cbi_state == "disabled" and cbi_state in end_states:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2270
                out, err = utils.execute('/usr/sbin/zlogin', '-S', name,
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2271
                                         '/usr/bin/svcprop', '-p',
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2272
                                         'general/enabled', cbi_service)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2273
                out = out.strip()
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2274
                if out == "true":
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2275
                    end_states.remove('disabled')
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2276
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2277
            if cbi_state == "offline*":
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2278
                out, err = utils.execute('/usr/sbin/zlogin', '-S', name,
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2279
                                         '/usr/bin/svcprop', '-C', '-p',
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2280
                                         'configdrive/copydone', cbi_service)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2281
                out = out.strip()
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2282
                if out == "true":
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2283
                    break
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2284
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2285
        return True
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2286
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2287
    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
  2288
              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
  2289
        """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
  2290
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2291
        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
  2292
        running (power_state.RUNNING).
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2293
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2294
        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
  2295
        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
  2296
        that it was before this call began.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2297
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2298
        :param context: security context
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2299
        :param instance: nova.objects.instance.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2300
                         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
  2301
                         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
  2302
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2303
            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
  2304
        :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
  2305
        :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
  2306
        :param network_info:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2307
           :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
  2308
        :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
  2309
                                  attached to the instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2310
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2311
        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
  2312
        self._validate_image(context, image, instance)
7265
078a4fa1d5a1 24933105 Flavor RAM not aligned to 256Mb causes error in nova.virt.solariszones.driver
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7264
diff changeset
  2313
        self._validate_flavor(instance)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2314
6900
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2315
        # c1d0 is the standard dev for the default boot device.
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2316
        # Irrelevant value for ZFS, but Cinder gets stroppy without it.
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2317
        mountpoint = "c1d0"
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2318
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2319
        # Ensure no block device mappings attempt to use the reserved boot
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2320
        # device (c1d0).
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2321
        for entry in block_device_info.get('block_device_mapping'):
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2322
            if entry['connection_info'] is None:
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2323
                continue
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2324
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2325
            mount_device = entry['mount_device']
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2326
            if mount_device == '/dev/' + mountpoint:
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2327
                msg = (_("Unable to assign '%s' to block device as it is"
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2328
                         "reserved for the root file system") % mount_device)
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2329
                raise exception.InvalidDiskInfo(msg)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2330
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2331
        # 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
  2332
        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
  2333
        volume_id = volume['id']
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2334
        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
  2335
        try:
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2336
            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
  2337
                                                        context, instance)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2338
        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
  2339
            # 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
  2340
            # 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
  2341
            # 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
  2342
            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
  2343
                        % (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
  2344
            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
  2345
            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
  2346
        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
  2347
            # Something really bad happened. Don't pass Go.
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2348
            LOG.exception(_("Unable to attach root zpool volume '%s' to "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2349
                            "instance %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
  2350
            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
  2351
            raise
86590f6eefcb 20052290 instance failed to launch with InvalidBDM: Block Device Mapping is Invalid
Niall Power <niall.power@oracle.com>
parents: 4553
diff changeset
  2352
6900
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2353
        # create a new directory for SC profiles
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2354
        sc_dir = tempfile.mkdtemp(prefix="nova-sysconfig-",
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2355
                                  dir=CONF.state_path)
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2356
        os.chmod(sc_dir, 0755)
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2357
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2358
        # Create the configdrive if required.
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2359
        if configdrive.required_by(instance):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2360
            instance_md = instance_metadata.InstanceMetadata(
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2361
                              instance,
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2362
                              content=injected_files)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2363
            with configdrive.ConfigDriveBuilder(instance_md=instance_md) as cd:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2364
                cd_path = self._get_configdrive_path(instance)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2365
                try:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2366
                    cd.make_drive(cd_path)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2367
                except Exception as e:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2368
                    LOG.info(_("Failed to create config drive '%s'" % cd_path))
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2369
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2370
        try:
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2371
            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
  2372
                                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
  2373
            self._install(instance, image, sc_dir)
6900
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2374
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2375
            for entry in block_device_info.get('block_device_mapping'):
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2376
                if entry['connection_info'] is not None:
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2377
                    self.attach_volume(context, entry['connection_info'],
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2378
                                       instance, entry['mount_device'])
7563855115a6 21678952 Multi-Volume attachment during instance creation does not work
David Hollister <david.hollister@oracle.com>
parents: 6854
diff changeset
  2379
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2380
            self._power_on(instance, network_info)
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2381
            if configdrive.required_by(instance):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2382
                unset = self._waitfor_copydone(name)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2383
                if unset:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2384
                    self._unset_configdrive(name, instance)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2385
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2386
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2387
            LOG.exception(_("Unable to spawn instance '%s' via zonemgr(3RAD): "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2388
                            "'%s'") % (name, reason))
5641
a48a4735fa25 22854356 Failed non-global zone launches leaving instance zpool suspended
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5640
diff changeset
  2389
            # 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
  2390
            # 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
  2391
            # 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
  2392
            try:
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2393
                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
  2394
            except Exception as ex:
5847
230bb7c2a9fb 23169819 traceback when failing to uninstall zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5641
diff changeset
  2395
                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
  2396
                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
  2397
                            "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
  2398
            try:
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2399
                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
  2400
            except Exception as ex:
5847
230bb7c2a9fb 23169819 traceback when failing to uninstall zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5641
diff changeset
  2401
                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
  2402
                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
  2403
                            "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
  2404
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2405
            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
  2406
                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
  2407
                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
  2408
            raise
5193
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2409
        finally:
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2410
            # remove the sc_profile temp directory
3120ba36a435 22195615 sysconfig temporary directory not always cleaned up
david.comay@oracle.com
parents: 5192
diff changeset
  2411
            shutil.rmtree(sc_dir)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2412
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  2413
        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
  2414
            bdm_obj = objects.BlockDeviceMappingList()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2415
            # 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
  2416
            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
  2417
                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
  2418
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2419
            # update the required attributes
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2420
            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
  2421
            bdm['source_type'] = 'volume'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2422
            bdm['destination_type'] = 'volume'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2423
            bdm['device_name'] = mountpoint
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2424
            bdm['delete_on_termination'] = True
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2425
            bdm['volume_id'] = volume_id
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2426
            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
  2427
            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
  2428
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2429
    def _power_off(self, instance, halt_type):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2430
        """Power off a Solaris Zone."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2431
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2432
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2433
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2434
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2435
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
  2436
        # 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
  2437
        # 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
  2438
        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
  2439
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2440
        try:
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2441
            self._unplug_vifs(instance)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2442
            if halt_type == 'SOFT':
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2443
                zone.shutdown()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2444
            else:
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2445
                # '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
  2446
                zone.halt()
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2447
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2448
            reason = zonemgr_strerror(ex)
7026
5d39d81ed166 24696610 iscsi volume deleted before zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6913
diff changeset
  2449
            # A shutdown state could still be reached if the error was
5d39d81ed166 24696610 iscsi volume deleted before zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6913
diff changeset
  2450
            # informational and ignorable.
5d39d81ed166 24696610 iscsi volume deleted before zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6913
diff changeset
  2451
            if self._get_state(zone) == power_state.SHUTDOWN:
5d39d81ed166 24696610 iscsi volume deleted before zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6913
diff changeset
  2452
                LOG.warning(_("Ignoring command error returned while "
5d39d81ed166 24696610 iscsi volume deleted before zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6913
diff changeset
  2453
                              "trying to power off instance '%s' via "
5d39d81ed166 24696610 iscsi volume deleted before zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6913
diff changeset
  2454
                              "zonemgr(3RAD): %s" % (name, reason)))
5d39d81ed166 24696610 iscsi volume deleted before zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6913
diff changeset
  2455
                return
5d39d81ed166 24696610 iscsi volume deleted before zone
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6913
diff changeset
  2456
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2457
            LOG.exception(_("Unable to power off instance '%s' "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2458
                            "via zonemgr(3RAD): %s") % (name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2459
            raise exception.InstancePowerOffFailure(reason=reason)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2460
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2461
    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
  2462
                                block_device_info):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2463
        """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
  2464
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2465
        self.power_off(instance)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2466
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  2467
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2468
        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
  2469
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2470
        name = instance['name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2471
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2472
        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
  2473
        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
  2474
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  2475
        rgb = instance.root_gb
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2476
        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
  2477
        if old_rvid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2478
            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
  2479
            mount_dev = instance['root_device_name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2480
            del instance.system_metadata['old_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2481
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2482
            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
  2483
                                        rgb, mount_dev)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2484
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2485
    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
  2486
                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
  2487
        """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
  2488
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2489
        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
  2490
        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
  2491
        warning in that case.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2492
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2493
        :param context: security context
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2494
        :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
  2495
        :param network_info:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2496
           :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
  2497
        :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
  2498
                                  be detached from the instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2499
        :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
  2500
        :param migrate_data: implementation specific params
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2501
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2502
        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
  2503
                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
  2504
            return
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2505
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2506
        # 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
  2507
        # 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
  2508
        # power comes back on.
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2509
        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
  2510
        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
  2511
            instance.host = evac_from
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2512
            instance.node = evac_from
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2513
            del instance.system_metadata['evac_from']
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2514
            instance.save()
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2515
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2516
            return
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  2517
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2518
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2519
            # 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
  2520
            # 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
  2521
            # proceed.
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2522
            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
  2523
                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
  2524
                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
  2525
        except Exception:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2526
            pass
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2527
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2528
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2529
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2530
        # If instance cannot be found, just return.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2531
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2532
            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
  2533
                        % name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2534
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2535
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2536
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2537
            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
  2538
                self._power_off(instance, 'HARD')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2539
            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
  2540
                self._uninstall(instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2541
            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
  2542
                self._delete_config(instance)
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2543
            if configdrive.required_by(instance):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2544
                # Make sure that we don't leave any dirt around.
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2545
                cd_path = self._get_configdrive_path(instance)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2546
                try:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2547
                    os.remove(cd_path)
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2548
                except OSError:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2549
                    pass
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7652
diff changeset
  2550
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2551
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2552
            reason = zonemgr_strerror(ex)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2553
            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
  2554
                          "%s") % (name, reason))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2555
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2556
        # 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
  2557
        # 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
  2558
        # 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
  2559
        # 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
  2560
        # 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
  2561
        # 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
  2562
        # 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
  2563
        # 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
  2564
        # 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
  2565
        #
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2566
        # 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
  2567
        # 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
  2568
        # finish_revert_migration.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2569
        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
  2570
            return
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2571
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2572
        tags = ['old_instance_volid', 'new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2573
        for tag in tags:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2574
            volid = instance.system_metadata.get(tag)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2575
            if volid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2576
                try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2577
                    LOG.debug(_("Deleting volume %s"), volid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2578
                    self._volume_api.delete(context, volid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2579
                    del instance.system_metadata[tag]
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2580
                except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2581
                    pass
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  2582
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2583
    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
  2584
                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
  2585
        """Cleanup the instance resources .
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2586
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2587
        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
  2588
        this method.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2589
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2590
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2591
        :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
  2592
        :param network_info:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2593
           :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
  2594
        :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
  2595
                                  be detached from the instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2596
        :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
  2597
        :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
  2598
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2599
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2600
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2601
    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
  2602
               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
  2603
        """Reboot the specified instance.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2604
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2605
        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
  2606
        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
  2607
        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
  2608
        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
  2609
        is paused or halted/stopped.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2610
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2611
        :param instance: nova.objects.instance.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2612
        :param network_info:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2613
           :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
  2614
        :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
  2615
        :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
  2616
        :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
  2617
            encountered
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2618
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2619
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2620
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2621
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2622
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2623
1990
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
  2624
        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
  2625
            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
  2626
            return
c1c6cc703d7a 18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents: 1944
diff changeset
  2627
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2628
        bootargs = []
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2629
        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
  2630
            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
  2631
            persistent = 'False'
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2632
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2633
            # 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
  2634
            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
  2635
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2636
            # 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
  2637
            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
  2638
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2639
            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
  2640
                bootargs = ['--', str(meta_bootargs)]
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2641
                persistent = str(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2642
                    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
  2643
                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
  2644
                    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
  2645
                        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
  2646
                        # 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
  2647
                        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
  2648
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2649
        try:
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  2650
            self._unplug_vifs(instance)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2651
            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
  2652
                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
  2653
                zone.shutdown(bootargs)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2654
            else:
5640
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2655
                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
  2656
            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
  2657
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2658
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2659
            LOG.exception(_("Unable to reboot instance '%s' via "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2660
                            "zonemgr(3RAD): %s") % (name, reason))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2661
            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
  2662
        finally:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2663
            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
  2664
                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
  2665
                    # 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
  2666
                    # 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
  2667
                    # 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
  2668
                    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
  2669
                    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
  2670
47302747b363 PSARC/2016/031 OpenStack Nova support for boot options for guests
Brian Reitz <Brian.Reitz@Oracle.COM>
parents: 5610
diff changeset
  2671
                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
  2672
                    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
  2673
                        # 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
  2674
                        zc.setprop('global', 'bootargs', cur_bootargs)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2675
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2676
    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
  2677
        # 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
  2678
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2679
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2680
    def _get_console_output(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2681
        """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
  2682
        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
  2683
        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
  2684
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2685
        console_str = ""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2686
        avail = MAX_CONSOLE_BYTES
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2687
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2688
        # 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
  2689
        # 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
  2690
        # 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
  2691
        # 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
  2692
        # 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
  2693
        # 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
  2694
        # 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
  2695
        # 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
  2696
        # 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
  2697
        # 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
  2698
        # far and the result returned.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2699
        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
  2700
        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
  2701
                          reverse=True)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2702
        for file in logfiles:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2703
            size = os.path.getsize(file)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2704
            if size == 0:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2705
                continue
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2706
            avail -= size
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2707
            with open(file, 'r') as log:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2708
                if avail < 0:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2709
                    (fragment, _) = utils.last_bytes(log, avail + size)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2710
                    remainder = fragment.find('\n') + 1
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2711
                    console_str = fragment[remainder:] + console_str
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2712
                    break
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2713
                fragment = ''
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2714
                for line in log.readlines():
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2715
                    fragment += line
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2716
                console_str = fragment + console_str
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2717
        return console_str
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2718
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2719
    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
  2720
        """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
  2721
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2722
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2723
        :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
  2724
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2725
        return self._get_console_output(instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2726
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2727
    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
  2728
        """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
  2729
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2730
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2731
        :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
  2732
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2733
        :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
  2734
        """
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2735
        # 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
  2736
        # 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
  2737
        # 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
  2738
        name = instance['name']
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2739
        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
  2740
            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
  2741
                     "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
  2742
            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
  2743
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2744
        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
  2745
            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
  2746
                      "instance '%s'") % name)
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2747
            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
  2748
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2749
        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
  2750
        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
  2751
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2752
        # 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
  2753
        # 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
  2754
        # 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
  2755
        # 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
  2756
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2757
            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
  2758
                                     'refresh')
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2759
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2760
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2761
            LOG.exception(_("Unable to refresh zone VNC console SMF service "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2762
                            "'%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
  2763
            raise
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2764
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2765
        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
  2766
        try:
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  2767
            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
  2768
                                     console_fmri)
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2769
            port = int(out.strip())
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2770
            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
  2771
                                    internal_access_path=None)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2772
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  2773
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2774
            LOG.exception(_("Unable to read VNC console port from zone VNC "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2775
                            "console SMF service '%s': %s"
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2776
                          % (console_fmri, reason)))
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2777
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2778
    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
  2779
        """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
  2780
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2781
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2782
        :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
  2783
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2784
        :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
  2785
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2786
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2787
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2788
    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
  2789
        """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
  2790
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2791
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2792
        :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
  2793
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2794
        :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
  2795
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2796
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2797
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2798
    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
  2799
        """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
  2800
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2801
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2802
        :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
  2803
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2804
        :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
  2805
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2806
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2807
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2808
    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
  2809
        """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
  2810
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2811
        :param context: security context
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2812
        :param instance: nova.objects.instance.Instance
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2813
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2814
        :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
  2815
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2816
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2817
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2818
    def _get_zone_diagnostics(self, zone):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2819
        """Return data about Solaris Zone diagnostics."""
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2820
        if zone.name is None or zone.state != ZONE_STATE_RUNNING:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2821
            return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2822
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2823
        diagnostics = defaultdict(lambda: 0)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2824
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2825
        for stat in ['lockedmem', 'nprocs', 'swapresv']:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2826
            uri = "kstat:/zone_caps/caps/%s_zone_%d/%d" % (stat, zone.id,
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2827
                                                           zone.id)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2828
            diagnostics[stat] = self._kstat_data(uri)['usage']
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2829
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2830
        # Get the inital accumulated data kstat, then get the sys_zone kstat
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2831
        # and sum all the "*_cur" statistics in it. Then re-get the accumulated
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2832
        # kstat, and if the generation number hasn't changed, add its values.
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2833
        # If it has changed, try again a few times then give up because
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2834
        # something keeps pulling cpus out from under us.
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2835
7475
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
  2836
        uri = "kstat:/zones/%s/cpu" % zone.name
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
  2837
        accum_uri = "kstat:/zones/%s/cpu/accum/sys" % zone.name
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2838
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2839
        for _attempt in range(3):
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2840
            initial = self._kstat_data(accum_uri)
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2841
            cpus = self._kstat_data(uri)
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2842
            # Something went wrong in the data collection, if the zone is no
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2843
            # longer running simply return None otherwise continue
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2844
            if cpus is None:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2845
                if zone.state != ZONE_STATE_RUNNING:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2846
                    return None
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2847
                continue
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2848
            cpus.pop('accum')
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2849
            cpus.pop('pset_accum')
7475
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
  2850
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
  2851
            # Turn the list of cpu ids in data.keys into a dictionary of the
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
  2852
            # 'sys' kstat for each cpu id.
7593
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2853
            data = {}
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2854
            datapoint = None
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2855
            for n in cpus:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2856
                datapoint = self._kstat_data(uri + "/%s" % n)
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2857
                # We could not get a datapoint for one of the cpus, so try the
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2858
                # whole thing again if zone.state is still running.
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2859
                if datapoint is None:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2860
                    if zone.state != ZONE_STATE_RUNNING:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2861
                        return None
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2862
                    else:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2863
                        break
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2864
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2865
                data.update({n: datapoint['sys']})
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2866
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2867
            if datapoint is None:
3f5b9ebe028b 25406236 openstack/nova/nova-compute service fails after reboot with created instances
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7583
diff changeset
  2868
                continue
7475
6144ac72c2b3 25226057 nova boot will fail due to inability to get kstat values
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7266
diff changeset
  2869
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2870
            # The list of cpu kstats in data must contain at least one element
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2871
            # and all elements have the same map of statistics, since they're
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2872
            # all the same kstat type. This gets a list of all the statistics
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2873
            # which end in "_cur" from the first (guaranteed) kstat element.
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2874
            stats = [k for k in data[data.keys()[0]].getMap().keys() if
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2875
                     k.endswith("_cur")]
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2876
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2877
            for stat in stats:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2878
                diagnostics[stat[:-4]] += self._sum_kstat_statistic(data, stat)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2879
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2880
            final = self._kstat_data(accum_uri)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2881
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2882
            if initial['gen_num'] == final['gen_num']:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2883
                for stat in stats:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2884
                    # Remove the '_cur' from the statistic
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2885
                    diagnostics[stat[:-4]] += initial[stat[:-4]]
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2886
                break
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2887
        else:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2888
            reason = (_("Could not get diagnostic info for instance '%s' "
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2889
                        "because the cpu list keeps changing.") % zone.name)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2890
            raise nova.exception.MaxRetriesExceeded(reason)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2891
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2892
        # Remove any None valued elements from diagnostics and return it
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  2893
        return {k: v for k, v in diagnostics.items() if v is not None}
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2894
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2895
    def get_diagnostics(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2896
        """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
  2897
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2898
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2899
            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
  2900
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2901
        :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
  2902
            :func:`get_instance_diagnostics`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2903
        :rtype: dict
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2904
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2905
        # 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
  2906
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2907
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2908
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2909
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2910
        return self._get_zone_diagnostics(zone)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2911
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2912
    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
  2913
        """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
  2914
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2915
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2916
            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
  2917
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2918
        :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
  2919
            :func:`get_diagnostics`
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  2920
        :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
  2921
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2922
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2923
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2924
    def get_all_bw_counters(self, instances):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2925
        """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
  2926
           running VM.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2927
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  2928
        :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
  2929
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2930
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2931
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2932
    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
  2933
        """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
  2934
           a given host.-
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2935
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2936
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2937
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2938
    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
  2939
        """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
  2940
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2941
        # 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
  2942
        return CONF.my_ip
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2943
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2944
    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
  2945
                      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
  2946
        """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
  2947
        # 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
  2948
        # 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
  2949
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2950
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2951
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2952
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2953
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  2954
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2955
        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
  2956
        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
  2957
            # 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
  2958
            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
  2959
                      % brand)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2960
            raise NotImplementedError(reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2961
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2962
        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
  2963
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  2964
        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
  2965
        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
  2966
            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
  2967
            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
  2968
                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
  2969
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2970
        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
  2971
            zc.addresource("device", resource_scope)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2972
4671
d08190e626f1 20867780 Nova should support LZR for block devices
Drew Fisher <drew.fisher@oracle.com>
parents: 4669
diff changeset
  2973
        # 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
  2974
        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
  2975
            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
  2976
                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
  2977
            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
  2978
                reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2979
                LOG.exception(_("Unable to attach '%s' to instance '%s' via "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  2980
                                "zonemgr(3RAD): %s") % (suri, name, reason))
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
  2981
                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
  2982
                    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
  2983
                raise
4671
d08190e626f1 20867780 Nova should support LZR for block devices
Drew Fisher <drew.fisher@oracle.com>
parents: 4669
diff changeset
  2984
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  2985
    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
  2986
                      encryption=None):
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2987
        """Detach the disk attached to the instance."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2988
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2989
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2990
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2991
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  2992
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  2993
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
5191
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2994
        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
  2995
        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
  2996
            # 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
  2997
            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
  2998
                      % brand)
1a9d78bb53a1 20592407 Issue meaningful error message when attaching volume to non kernel zone
david.comay@oracle.com
parents: 5190
diff changeset
  2999
            raise NotImplementedError(reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3000
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3001
        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
  3002
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3003
        # 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
  3004
        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
  3005
                                                  suri)
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  3006
        if not resource:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3007
            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
  3008
                        "'%s'") % (suri, name))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3009
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3010
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3011
        with ZoneConfig(zone) as zc:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3012
            zc.removeresources("device", [zonemgr.Property("storage", suri)])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3013
4671
d08190e626f1 20867780 Nova should support LZR for block devices
Drew Fisher <drew.fisher@oracle.com>
parents: 4669
diff changeset
  3014
        # 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
  3015
        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
  3016
            try:
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  3017
                zone.apply()
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  3018
            except:
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3019
                LOG.exception(_("Unable to apply the detach of resource '%s' "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3020
                                "to running instance '%s' because the "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3021
                                "resource is most likely in use.")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3022
                              % (suri, name))
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  3023
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  3024
                # 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
  3025
                # configuration will reflect what is in cinder before we raise
6913
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
  3026
                # the exception, therefore failing the detach and leaving the
5949
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  3027
                # 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
  3028
                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
  3029
                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
  3030
                               resource.properties)
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  3031
                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
  3032
                    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
  3033
eefd43fe9fc4 23027174 nova should set the bootpri in the zonecfg on devices
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5948
diff changeset
  3034
                raise
4671
d08190e626f1 20867780 Nova should support LZR for block devices
Drew Fisher <drew.fisher@oracle.com>
parents: 4669
diff changeset
  3035
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3036
    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
  3037
                    instance, mountpoint, resize_to):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3038
        """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
  3039
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3040
        :param dict old_connection_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3041
            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
  3042
            `instance`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3043
        :param dict new_connection_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3044
            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
  3045
            'instance'.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3046
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3047
            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
  3048
        :param str mountpoint:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3049
            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
  3050
            `old_connection_info` is attached to.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3051
        :param int resize_to:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3052
            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
  3053
            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
  3054
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3055
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3056
        """
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3057
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3058
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3059
    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
  3060
        """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
  3061
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3062
        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
  3063
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3064
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3065
            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
  3066
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3067
            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
  3068
        :param nova.network.model.NetworkInfo vif:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3069
            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
  3070
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3071
        :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
  3072
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3073
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3074
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3075
        name = instance['name']
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3076
        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
  3077
        if zone is None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3078
            raise exception.InstanceNotFound(instance_id=name)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3079
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3080
        ctxt = nova_context.get_admin_context()
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  3081
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3082
        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
  3083
        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
  3084
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3085
        # 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
  3086
        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
  3087
            try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3088
                zone.apply()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3089
            except Exception as ex:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3090
                reason = zonemgr_strerror(ex)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3091
                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
  3092
                         "zonemgr(3RAD): %s") % (name, reason))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3093
                with ZoneConfig(zone) as zc:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3094
                    prop_filter = [zonemgr.Property('mac-address',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3095
                                                    vif['address'])]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3096
                    zc.removeresources('anet', prop_filter)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3097
                raise nova.exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3098
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3099
            # add port to ovs bridge
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3100
            anet = ''.join([name, '/', anetname])
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3101
            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
  3102
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3103
    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
  3104
        """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
  3105
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3106
        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
  3107
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3108
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3109
            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
  3110
        :param nova.network.model.NetworkInfo vif:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3111
            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
  3112
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3113
        :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
  3114
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3115
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3116
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3117
        name = instance['name']
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3118
        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
  3119
        if zone is None:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3120
            raise exception.InstanceNotFound(instance_id=name)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3121
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3122
        # 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
  3123
        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
  3124
                                                  'mac-address',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3125
                                                  vif['address'])
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3126
        if not resource:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3127
            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
  3128
                     "instance '%s'.") % (vif['address'], name))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3129
            raise nova.exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3130
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  3131
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3132
        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
  3133
        for prop in resource.properties:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3134
            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
  3135
                anetname = prop.value
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3136
                break
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3137
            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
  3138
                anetname = 'net%s' % prop.value
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3139
                break
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3140
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3141
        with ZoneConfig(zone) as zc:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3142
            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
  3143
                                                         vif['address'])])
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3144
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3145
        # 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
  3146
        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
  3147
            try:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3148
                zone.apply()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3149
            except:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3150
                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
  3151
                         "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
  3152
                         "in use.") % (anetname, name))
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3153
                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
  3154
                                "mac-address", "mtu"]
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3155
                if brand == ZONE_BRAND_SOLARIS:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3156
                    needed_props.append("linkname")
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3157
                else:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3158
                    needed_props.append("id")
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3159
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3160
                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
  3161
                               resource.properties)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3162
                with ZoneConfig(zone) as zc:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3163
                    zc.addresource('anet', props)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3164
                raise nova.exception.NovaException(msg)
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3165
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3166
            # remove anet from OVS bridge
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3167
            port = ''.join([name, '/', anetname])
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3168
            self._ovs_delete_port(port)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3169
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3170
    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
  3171
        """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
  3172
        hold the new root disk
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3173
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3174
        :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
  3175
        :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
  3176
        :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
  3177
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3178
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3179
            self._volume_api.delete(context, volume['id'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3180
        except Exception as err:
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3181
            LOG.exception(_("Unable to cleanup the resized volume: %s" % err))
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3182
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3183
    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
  3184
                                   flavor, network_info,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3185
                                   block_device_info=None,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3186
                                   timeout=0, retry_interval=0):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3187
        """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
  3188
        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
  3189
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3190
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3191
            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
  3192
        :param str dest:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3193
            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
  3194
        :param nova.objects.flavor.Flavor flavor:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3195
            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
  3196
        :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
  3197
            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
  3198
        :param dict block_device_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3199
            Information about the block devices.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3200
        :param int timeout:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3201
            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
  3202
        :param int retry_interval:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3203
            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
  3204
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3205
        :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
  3206
        :rtype: str
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3207
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3208
        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
  3209
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3210
        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
  3211
        if samehost:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3212
            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
  3213
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  3214
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3215
        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
  3216
        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
  3217
            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
  3218
                        "to a different host.") % brand)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3219
            raise exception.MigrationPreCheckError(reason=reason)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3220
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3221
        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
  3222
            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
  3223
            raise exception.MigrationPreCheckError(reason=reason)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3224
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3225
        orgb = instance['root_gb']
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3226
        nrgb = flavor.root_gb
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3227
        if orgb > nrgb:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3228
            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
  3229
            raise exception.ResizeError(reason=msg)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3230
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3231
        self.power_off(instance, timeout, retry_interval)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3232
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3233
        disk_info = None
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3234
        if nrgb > orgb or not samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3235
            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
  3236
            rootmp = instance.root_device_name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3237
            for entry in bmap:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3238
                mountdev = entry['mount_device'].rpartition('/')[2]
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3239
                if mountdev == rootmp:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3240
                    root_ci = entry['connection_info']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3241
                    break
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3242
            else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3243
                # 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
  3244
                # 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
  3245
                # 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
  3246
                if samehost and brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3247
                    return disk_info
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3248
                else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3249
                    msg = (_("Cannot find an attached root device."))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3250
                    raise exception.ResizeError(reason=msg)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3251
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3252
            if root_ci['driver_volume_type'] == 'iscsi':
7583
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3253
                try:
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3254
                    volume_id = root_ci['data']['volume_id']
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3255
                except KeyError:
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3256
                    volume_id = root_ci.get('serial')
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3257
            else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3258
                volume_id = root_ci['serial']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3259
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3260
            if volume_id is None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3261
                msg = (_("Cannot find an attached root device."))
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3262
                raise exception.ResizeError(reason=msg)
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
            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
  3265
            newvolume = self._volume_api.create(
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3266
                context, orgb, vinfo['display_name'] + '-resized',
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3267
                vinfo['display_description'], source_volume=vinfo)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3268
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3269
            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
  3270
            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
  3271
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3272
            # 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
  3273
            # 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
  3274
            while True:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3275
                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
  3276
                if volume['status'] != 'creating':
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3277
                    break
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3278
                greenthread.sleep(1)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3279
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3280
            if nrgb > orgb:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3281
                try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3282
                    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
  3283
                except Exception:
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3284
                    LOG.exception(_("Failed to extend the new volume"))
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3285
                    self._cleanup_migrate_disk(context, instance, newvolume)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3286
                    raise
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3287
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3288
            disk_info = newvolume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3289
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3290
        return disk_info
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3291
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3292
    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
  3293
        """Snapshots the specified instance.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3294
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3295
        :param context: security context
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3296
        :param instance: nova.objects.instance.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3297
        :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
  3298
                         hold the snapshot.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3299
        """
6912
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3300
        name = instance['name']
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3301
        zone = self._get_zone_by_name(name)
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3302
        if zone is None:
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3303
            raise exception.InstanceNotFound(instance_id=name)
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3304
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3305
        # look to see if the zone is a kernel zone and is powered off.  If it
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3306
        # is raise an exception before trying to archive it
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  3307
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
6912
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3308
        brand = extra_specs.get('zonecfg:brand', ZONE_BRAND_SOLARIS)
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3309
        if zone.state != ZONE_STATE_RUNNING and \
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3310
                brand == ZONE_BRAND_SOLARIS_KZ:
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3311
            raise exception.InstanceNotRunning(instance_id=name)
d4b1a12dae66 24673856 snapshot fails when instance is stopped
Drew Fisher <drew.fisher@oracle.com>
parents: 6901
diff changeset
  3312
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3313
        # Get original base image info
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3314
        (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
  3315
            context, instance['image_ref'])
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3316
        try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3317
            base = base_service.show(context, base_id)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3318
        except exception.ImageNotFound:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3319
            base = {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3320
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3321
        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
  3322
            context, image_id)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3323
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3324
        # Build updated snapshot image metadata
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3325
        snapshot = snapshot_service.show(context, snapshot_id)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3326
        metadata = {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3327
            'is_public': False,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3328
            'status': 'active',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3329
            'name': snapshot['name'],
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3330
            'properties': {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3331
                'image_location': 'snapshot',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3332
                'image_state': 'available',
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3333
                '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
  3334
                'instance_uuid': instance['uuid'],
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3335
                'image_type': snapshot['properties']['image_type'],
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3336
            }
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3337
        }
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3338
        # 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
  3339
        # image.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3340
        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
  3341
            if prop in base.get('properties', {}):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3342
                base_prop = base['properties'][prop]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3343
                metadata['properties'][prop] = base_prop
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3344
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3345
        # 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
  3346
        # 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
  3347
        metadata['container_format'] = 'ovf'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3348
        metadata['disk_format'] = 'raw'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3349
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3350
        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
  3351
        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
  3352
        fileutils.ensure_tree(snapshot_directory)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3353
        snapshot_name = uuid.uuid4().hex
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3354
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3355
        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
  3356
            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
  3357
            zone_name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3358
            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
  3359
                          '-z', zone_name, out_path)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3360
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3361
            LOG.info(_("Snapshot extracted, beginning image upload"),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3362
                     instance=instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3363
            try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3364
                # 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
  3365
                update_task_state(
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3366
                    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
  3367
                    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
  3368
                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
  3369
                    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
  3370
                                            image_file)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3371
                    LOG.info(_("Snapshot image upload complete"),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3372
                             instance=instance)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3373
                try:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3374
                    # 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
  3375
                    # 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
  3376
                    # glance server recognises them.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3377
                    metadata['container_format'] = 'uar'
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3378
                    metadata['disk_format'] = 'zfs'
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3379
                    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
  3380
                except exception.Invalid:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3381
                    LOG.warning(_("Image service rejected image metadata "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3382
                                  "container and disk formats 'uar' and "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3383
                                  "'zfs'. Using generic values 'ovf' and "
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3384
                                  "'raw' as fallbacks."))
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3385
            finally:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3386
                # Delete the snapshot image file source
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3387
                os.unlink(out_path)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3388
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3389
    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
  3390
        """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
  3391
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3392
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3393
        :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
  3394
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3395
        pass
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3396
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3397
    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
  3398
                                  network_info, samehost):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3399
        """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
  3400
        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
  3401
        resources.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3402
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3403
        if disk_info:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3404
            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
  3405
            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
  3406
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3407
            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
  3408
            if old_rvid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3409
                connector = self.get_volume_connector(instance)
7583
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3410
                connection_info = self._initialize_volume_connection(context,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3411
                                                                     old_rvid,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3412
                                                                     connector)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3413
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3414
                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
  3415
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3416
                rootmp = instance.root_device_name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3417
                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
  3418
                                        rootmp)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3419
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3420
                bdmobj = objects.BlockDeviceMapping()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3421
                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
  3422
                bdm['connection_info'] = jsonutils.dumps(connection_info)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3423
                bdm['volume_id'] = old_rvid
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3424
                bdm.save()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3425
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3426
                del instance.system_metadata['new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3427
                del instance.system_metadata['old_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3428
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3429
        if not samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3430
            self.destroy(context, instance, network_info)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3431
            instance['host'] = instance['launched_on']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3432
            instance['node'] = instance['launched_on']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3433
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3434
    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
  3435
                         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
  3436
                         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
  3437
        """Completes a resize/migration.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3438
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3439
        :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
  3440
        :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
  3441
        :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
  3442
        :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
  3443
        :param network_info:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3444
           :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
  3445
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3446
            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
  3447
        :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
  3448
                                False otherwise
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3449
        :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
  3450
        :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
  3451
                         otherwise
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3452
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3453
        samehost = (migration['dest_node'] == migration['source_node'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3454
        if samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3455
            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
  3456
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  3457
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3458
        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
  3459
        name = instance['name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3460
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3461
        if disk_info:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3462
            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
  3463
            rootmp = instance['root_device_name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3464
            for entry in bmap:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3465
                if entry['mount_device'] == rootmp:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3466
                    mount_dev = entry['mount_device']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3467
                    root_ci = entry['connection_info']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3468
                    break
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3469
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3470
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3471
            if samehost:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3472
                cpu = instance.vcpus
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3473
                mem = instance.memory_mb
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3474
                self._set_num_cpu(name, cpu, brand)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3475
                self._set_memory_cap(name, mem, brand)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3476
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3477
                # 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
  3478
                # changed
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3479
                if disk_info:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3480
                    rgb = instance.root_gb
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3481
                    self._resize_disk_migration(context, instance,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3482
                                                root_ci['serial'],
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3483
                                                disk_info['id'], rgb,
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3484
                                                mount_dev)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3485
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3486
            else:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3487
                # 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
  3488
                # 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
  3489
                mount_dev = 'c1d0'
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3490
                root_serial = root_ci['serial']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3491
                connection_info = self._resize_disk_migration(context,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3492
                                                              instance,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3493
                                                              root_serial,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3494
                                                              disk_info['id'],
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3495
                                                              0, mount_dev,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3496
                                                              samehost)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3497
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3498
                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
  3499
                                    connection_info, None)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3500
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3501
                zone = self._get_zone_by_name(name)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3502
                if zone is None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3503
                    raise exception.InstanceNotFound(instance_id=name)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3504
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3505
                zone.attach(['-x', 'initialize-hostdata'])
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3506
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3507
                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
  3508
                for entry in bmap:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3509
                    if entry['mount_device'] != rootmp:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3510
                        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
  3511
                                           instance, entry['mount_device'])
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3512
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3513
            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
  3514
                self._power_on(instance, network_info)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3515
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3516
                if brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3517
                    return
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3518
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3519
                # 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
  3520
                # 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
  3521
                # 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
  3522
                # 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
  3523
                # 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
  3524
                # can remove this hack.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3525
                greenthread.sleep(15)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3526
                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
  3527
                                         '/usr/sbin/zpool', 'set',
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3528
                                         'autoexpand=off', 'rpool')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3529
                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
  3530
                                         '/usr/sbin/zpool', 'set',
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3531
                                         'autoexpand=on', 'rpool')
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3532
        except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3533
            # 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
  3534
            # 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
  3535
            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
  3536
                                           network_info, samehost)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3537
            raise
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3538
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3539
    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
  3540
        """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
  3541
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3542
        :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
  3543
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3544
        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
  3545
        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
  3546
        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
  3547
        if new_rvid and old_rvid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3548
            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
  3549
            del instance.system_metadata['old_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3550
            del instance.system_metadata['new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3551
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3552
            self._volume_api.delete(context, old_rvid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3553
            self._volume_api.update(context, new_rvid,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3554
                                    {'display_name': new_vname})
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3555
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3556
        if not samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3557
            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
  3558
        else:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3559
            del instance.system_metadata['resize_samehost']
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3560
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3561
    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
  3562
                               replacement, newvolumesz, mountdev,
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3563
                               samehost=True):
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3564
        """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
  3565
        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
  3566
        same host
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3567
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3568
        :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
  3569
        :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
  3570
        :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
  3571
        :param replacement: id of the new volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3572
        :param newvolumesz: size of the new volume
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3573
        :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
  3574
        :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
  3575
        """
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3576
        connector = self.get_volume_connector(instance)
7583
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3577
        connection_info = self._initialize_volume_connection(context,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3578
                                                             replacement,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3579
                                                             connector)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3580
        rootmp = instance.root_device_name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3581
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3582
        if samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3583
            name = instance['name']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3584
            zone = self._get_zone_by_name(name)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3585
            if zone is None:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3586
                raise exception.InstanceNotFound(instance_id=name)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3587
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3588
            # 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
  3589
            # 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
  3590
            # not fail.
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3591
            if zone.brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3592
                zone.detach()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3593
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3594
            try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3595
                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
  3596
            finally:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3597
                if zone.brand == ZONE_BRAND_SOLARIS:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3598
                    zone.attach()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3599
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3600
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3601
            self._volume_api.detach(context, configured)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3602
        except Exception:
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3603
            LOG.exception(_("Failed to detach the volume"))
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3604
            raise
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3605
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3606
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3607
            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
  3608
                                    rootmp)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3609
        except Exception:
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3610
            LOG.exception(_("Failed to attach the volume"))
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3611
            raise
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3612
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3613
        bdmobj = objects.BlockDeviceMapping()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3614
        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
  3615
        bdm['connection_info'] = jsonutils.dumps(connection_info)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3616
        bdm['volume_id'] = replacement
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3617
        bdm.save()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3618
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3619
        if not samehost:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3620
            return connection_info
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3621
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3622
    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
  3623
                                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
  3624
        """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
  3625
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3626
        :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
  3627
        :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
  3628
        :param network_info:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3629
           :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
  3630
        :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
  3631
        :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
  3632
                         otherwise
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3633
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3634
        # 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
  3635
        # 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
  3636
        # original zone configuration.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3637
        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
  3638
        if samehost:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3639
            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
  3640
                                         block_device_info)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3641
            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
  3642
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3643
        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
  3644
        if old_rvid:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3645
            connector = self.get_volume_connector(instance)
7583
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3646
            connection_info = self._initialize_volume_connection(context,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3647
                                                                 old_rvid,
612b249c2397 25202866 Nova resize fails with Pure storage iSCSI back-end
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7475
diff changeset
  3648
                                                                 connector)
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3649
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3650
            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
  3651
            self._volume_api.detach(context, new_rvid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3652
            self._volume_api.delete(context, new_rvid)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3653
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3654
            rootmp = instance.root_device_name
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3655
            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
  3656
                                    rootmp)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3657
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3658
            bdmobj = objects.BlockDeviceMapping()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3659
            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
  3660
            bdm['connection_info'] = jsonutils.dumps(connection_info)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3661
            bdm['volume_id'] = old_rvid
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3662
            bdm.save()
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3663
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3664
            del instance.system_metadata['new_instance_volid']
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  3665
            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
  3666
        else:
5608
3a50019e38cf 22750945 Revert resize same host branded zones results in error status
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5607
diff changeset
  3667
            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
  3668
            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
  3669
                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
  3670
                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
  3671
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3672
        self._power_on(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3673
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3674
    def pause(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3675
        """Pause the given instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3676
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3677
        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
  3678
        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
  3679
        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
  3680
        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
  3681
        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
  3682
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3683
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3684
            The instance which should be paused.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3685
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3686
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3687
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3688
        # 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
  3689
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3690
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3691
    def unpause(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3692
        """Unpause the given paused instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3693
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3694
        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
  3695
        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
  3696
        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
  3697
        same state as before the 'pause'.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3698
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3699
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3700
            The instance which should be unpaused.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3701
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3702
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3703
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3704
        # 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
  3705
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3706
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  3707
    def suspend(self, context, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3708
        """Suspend the specified instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3709
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3710
        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
  3711
        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
  3712
        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
  3713
        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
  3714
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3715
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3716
            The context for the suspend.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3717
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3718
            The instance to suspend.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3719
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3720
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3721
        """
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3722
        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
  3723
        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
  3724
        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
  3725
            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
  3726
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3727
        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
  3728
            # 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
  3729
            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
  3730
                        "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
  3731
                        "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
  3732
                      % (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
  3733
            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
  3734
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3735
        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
  3736
            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
  3737
            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
  3738
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3739
        try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3740
            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
  3741
                                    '%{zonename}')
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3742
            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
  3743
                # 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
  3744
                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
  3745
            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
  3746
                # 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
  3747
                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
  3748
                    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
  3749
                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
  3750
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3751
            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
  3752
            self._unplug_vifs(instance)
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3753
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3754
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3755
            LOG.exception(_("Unable to suspend instance '%s' via "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3756
                            "zonemgr(3RAD): %s") % (name, reason))
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3757
            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
  3758
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3759
    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
  3760
        """resume the specified suspended instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3761
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3762
        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
  3763
        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
  3764
        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
  3765
        same state as before the 'suspend'.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3766
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3767
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3768
            The context for the resume.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3769
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3770
            The suspended instance to resume.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3771
        :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
  3772
            Necessary network information for the resume.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3773
        :param dict block_device_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3774
            Instance volume block device info.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3775
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3776
        :return: None
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3777
        """
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3778
        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
  3779
        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
  3780
        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
  3781
            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
  3782
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3783
        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
  3784
            # 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
  3785
            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
  3786
                      "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
  3787
            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
  3788
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3789
        # 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
  3790
        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
  3791
            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
  3792
            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
  3793
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3794
        try:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3795
            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
  3796
            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
  3797
        except Exception as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3798
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3799
            LOG.exception(_("Unable to resume instance '%s' via "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3800
                            "zonemgr(3RAD): %s") % (name, reason))
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4736
diff changeset
  3801
            raise exception.InstanceResumeFailure(reason=reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3802
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3803
    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
  3804
                                  block_device_info=None):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3805
        """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
  3806
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3807
        :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
  3808
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3809
        name = instance['name']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3810
        zone = self._get_zone_by_name(name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3811
        if zone is None:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3812
            raise exception.InstanceNotFound(instance_id=name)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3813
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3814
        # 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
  3815
        # property.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3816
        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
  3817
                                         power_state.SHUTDOWN):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3818
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3819
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3820
        self._power_on(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3821
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3822
    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
  3823
               rescue_password):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3824
        """Rescue the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3825
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3826
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3827
            The context for the rescue.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3828
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3829
            The instance being rescued.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3830
        :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
  3831
            Necessary network information for the resume.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3832
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3833
            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
  3834
        :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
  3835
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3836
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3837
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3838
    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
  3839
        """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
  3840
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3841
        :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
  3842
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3843
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3844
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3845
    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
  3846
        """Unrescue the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3847
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3848
        :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
  3849
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3850
        # 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
  3851
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3852
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3853
    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
  3854
        """Power off the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3855
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3856
        :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
  3857
        :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
  3858
        :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
  3859
                               waiting for it to shutdown
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3860
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3861
        self._power_off(instance, 'SOFT')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3862
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3863
    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
  3864
                 block_device_info=None):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3865
        """Power on the specified instance.
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
        :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
  3868
        """
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  3869
        self._power_on(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3870
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3871
    def trigger_crash_dump(self, instance):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3872
        """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
  3873
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3874
        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
  3875
        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
  3876
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3877
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3878
            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
  3879
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3880
        :return: None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3881
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3882
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3883
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3884
    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
  3885
        """Soft delete the specified instance.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3886
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3887
        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
  3888
        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
  3889
        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
  3890
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3891
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3892
            The instance to soft-delete.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3893
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3894
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3895
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3896
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3897
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3898
    def restore(self, instance):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3899
        """Restore the specified soft-deleted instance.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3900
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3901
        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
  3902
        for `restore` is :func:`soft_delete`.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3903
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3904
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3905
            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
  3906
            soft-deleted data.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3907
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3908
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  3909
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3910
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3911
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
  3912
    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
  3913
        """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
  3914
        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
  3915
            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
  3916
            (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
  3917
        except processutils.ProcessExecutionError as ex:
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  3918
            reason = ex.stderr
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3919
            LOG.exception(_("Failed to get property '%s' from zpool '%s': %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  3920
                          % (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
  3921
            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
  3922
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
  3923
        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
  3924
        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
  3925
            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
  3926
        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
  3927
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3928
    def _update_host_stats(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3929
        """Update currently known host stats."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3930
        host_stats = {}
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3931
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3932
        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
  3933
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3934
        pages = os.sysconf('SC_PHYS_PAGES')
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3935
        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
  3936
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
  3937
        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
  3938
        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
  3939
        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
  3940
        if size is not None:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3941
            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
  3942
        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
  3943
            host_stats['local_gb'] = 0
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3944
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3945
        # 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
  3946
        # of CPUs not assigned to any processor sets.
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3947
        uri = "kstat:/misc/unix/pset/0"
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3948
        data = self._kstat_data(uri)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3949
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3950
        if data is not None:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3951
            host_stats['vcpus_used'] = host_stats['vcpus'] - data['ncpus']
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3952
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3953
            host_stats['vcpus_used'] = 0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3954
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3955
        # Subtract the number of free pages from the total to get the used.
7266
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3956
        uri = "kstat:/pages/unix/system_pages"
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3957
        data = self._kstat_data(uri)
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3958
        if data is not None:
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3959
            free_ram = data['freemem']
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3960
            free_ram = self._pages_to_kb(free_ram) / 1024
02c0ccd65cf9 21344183 Nova driver should account for PSARC 2014/384
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7265
diff changeset
  3961
            host_stats['memory_mb_used'] = host_stats['memory_mb'] - free_ram
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3962
        else:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3963
            host_stats['memory_mb_used'] = 0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3964
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3965
        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
  3966
        if free is not None:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3967
            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
  3968
        else:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3969
            free_disk_gb = 0
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3970
        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
  3971
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3972
        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
  3973
        host_stats['hypervisor_version'] = \
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3974
            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
  3975
        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
  3976
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3977
        if self._uname[4] == 'i86pc':
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3978
            architecture = arch.X86_64
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3979
        else:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3980
            architecture = arch.SPARC64
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3981
        cpu_info = {
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3982
            'arch': architecture
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3983
        }
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  3984
        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
  3985
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3986
        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
  3987
        host_stats['supported_instances'] = [
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3988
            (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
  3989
        ]
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  3990
        host_stats['numa_topology'] = None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3991
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3992
        self._host_stats = host_stats
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3993
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3994
    def get_available_resource(self, nodename):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3995
        """Retrieve resource information.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3996
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  3997
        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
  3998
        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
  3999
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4000
        :param nodename:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4001
            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
  4002
            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
  4003
        :returns: Dictionary describing resources
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4004
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4005
        self._update_host_stats()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4006
        host_stats = self._host_stats
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4007
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4008
        resources = {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4009
        resources['vcpus'] = host_stats['vcpus']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4010
        resources['memory_mb'] = host_stats['memory_mb']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4011
        resources['local_gb'] = host_stats['local_gb']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4012
        resources['vcpus_used'] = host_stats['vcpus_used']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4013
        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
  4014
        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
  4015
        resources['hypervisor_type'] = host_stats['hypervisor_type']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4016
        resources['hypervisor_version'] = host_stats['hypervisor_version']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4017
        resources['hypervisor_hostname'] = host_stats['hypervisor_hostname']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4018
        resources['cpu_info'] = host_stats['cpu_info']
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4019
        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
  4020
        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
  4021
        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
  4022
        return resources
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4023
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4024
    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
  4025
                           network_info, disk_info, migrate_data=None):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4026
        """Prepare an instance for live migration
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4027
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4028
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4029
        :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
  4030
        :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
  4031
        :param network_info: instance network information
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4032
        :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
  4033
        :param migrate_data: a LiveMigrateData object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4034
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4035
        return migrate_data
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4036
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4037
    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
  4038
        """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
  4039
        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
  4040
        if zone is None:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4041
            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
  4042
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4043
        options = []
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4044
        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
  4045
        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
  4046
            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
  4047
        if dry_run:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4048
            options.append('-nq')
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4049
        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
  4050
        zone.migrate(options)
1760
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 live_migration(self, context, instance, dest,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4053
                       post_method, recover_method, block_migration=False,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4054
                       migrate_data=None):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4055
        """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
  4056
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4057
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4058
        :param instance:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4059
            nova.db.sqlalchemy.models.Instance object
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4060
            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
  4061
        :param dest: destination host
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4062
        :param post_method:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4063
            post operation method.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4064
            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
  4065
        :param recover_method:
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4066
            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
  4067
            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
  4068
        :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
  4069
        :param migrate_data: a LiveMigrateData object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4070
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4071
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4072
        name = instance['name']
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4073
        try:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4074
            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
  4075
        except Exception as ex:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4076
            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
  4077
                reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  4078
                LOG.exception(_("Unable to live migrate instance '%s' to host "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  4079
                                "'%s' via zonemgr(3RAD): %s")
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  4080
                              % (name, dest, reason))
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4081
                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
  4082
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4083
        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
  4084
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4085
    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
  4086
        """Force live migration to complete
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4087
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4088
        :param instance: Instance being live migrated
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4089
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4090
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4091
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4092
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4093
    def live_migration_abort(self, instance):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4094
        """Abort an in-progress live migration.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4095
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4096
        :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
  4097
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4098
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4099
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4100
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4101
    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
  4102
                                               network_info,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4103
                                               block_device_info,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4104
                                               destroy_disks=True,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4105
                                               migrate_data=None):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4106
        """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
  4107
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4108
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4109
        :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
  4110
        :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
  4111
        :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
  4112
        :param destroy_disks:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4113
            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
  4114
        :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
  4115
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4116
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4117
        pass
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4118
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4119
    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
  4120
                            migrate_data=None):
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4121
        """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
  4122
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4123
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4124
        :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
  4125
        :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
  4126
        :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
  4127
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4128
        try:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4129
            # 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
  4130
            # 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
  4131
            # proceed.
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4132
            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
  4133
                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
  4134
                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
  4135
        except Exception:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4136
            pass
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4137
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4138
        name = instance['name']
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4139
        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
  4140
        # 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
  4141
        if zone is None:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4142
            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
  4143
                        % name)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4144
            return
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4145
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4146
        try:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4147
            self._delete_config(instance)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4148
        except Exception as ex:
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  4149
            reason = zonemgr_strerror(ex)
7264
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  4150
            LOG.exception(_("Unable to delete configuration for instance '%s' "
86d356dd86aa 20052404 Add log.exception() to our drivers for errors
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7263
diff changeset
  4151
                            "via 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
  4152
            raise
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4153
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4154
    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
  4155
        """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
  4156
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4157
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4158
        :param instance: instance object reference
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4159
        :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
  4160
        """
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  4161
        self._unplug_vifs(instance)
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4162
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4163
    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
  4164
                                           network_info,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4165
                                           block_migration=False,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4166
                                           block_device_info=None):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4167
        """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
  4168
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4169
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4170
        :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
  4171
        :param network_info: instance network information
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4172
        :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
  4173
        """
6031
1aaf20a19738 PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents: 6014
diff changeset
  4174
        self._plug_vifs(instance, network_info)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4175
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4176
    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
  4177
        """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
  4178
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4179
        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
  4180
        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
  4181
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4182
        :param context: security context
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4183
        :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
  4184
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4185
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4186
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4187
    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
  4188
        """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
  4189
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4190
        :param context: security context
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4191
        :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
  4192
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4193
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4194
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4195
    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
  4196
        """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
  4197
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4198
        :param context: security context
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4199
        :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
  4200
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4201
        pass
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4202
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4203
    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
  4204
                                           src_compute_info, dst_compute_info,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4205
                                           block_migration=False,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4206
                                           disk_over_commit=False):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4207
        """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
  4208
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4209
        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
  4210
        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
  4211
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4212
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4213
        :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
  4214
        :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
  4215
        :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
  4216
        :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
  4217
        :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
  4218
        :returns: a LiveMigrateData object (hypervisor-dependent)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4219
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4220
        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
  4221
        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
  4222
        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
  4223
        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
  4224
        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
  4225
            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
  4226
                        "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
  4227
                      % (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
  4228
                         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
  4229
                         dst_cpu_arch))
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4230
            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
  4231
7263
d601ec170433 18780229 filter scheduler provides no details with bad flavor definition
Sean Wilcox <sean.wilcox@oracle.com>
parents: 7027
diff changeset
  4232
        extra_specs = self._get_flavor(instance)['extra_specs'].copy()
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4233
        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
  4234
        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
  4235
            # 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
  4236
            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
  4237
                        "migration.") % brand)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4238
            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
  4239
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4240
        if block_migration:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4241
            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
  4242
            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
  4243
        if disk_over_commit:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4244
            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
  4245
            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
  4246
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4247
        dest_check_data = objects.SolarisZonesLiveMigrateData()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4248
        dest_check_data.hypervisor_hostname = \
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4249
            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
  4250
        return dest_check_data
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4251
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4252
    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
  4253
                                                   dest_check_data):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4254
        """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
  4255
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4256
        :param context: security context
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4257
        :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
  4258
        """
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4259
        pass
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4260
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4261
    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
  4262
        """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
  4263
        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
  4264
        for entry in bmap:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4265
            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
  4266
            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
  4267
            if driver_type == 'local':
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4268
                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
  4269
                            "currently supported.") % driver_type)
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4270
                raise exception.MigrationPreCheckError(reason=reason)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4271
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4272
    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
  4273
                                      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
  4274
        """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
  4275
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4276
        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
  4277
        results from check_can_live_migrate_destination.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4278
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4279
        :param context: security context
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4280
        :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
  4281
        :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
  4282
        :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
  4283
        :returns: a LiveMigrateData object
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4284
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4285
        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
  4286
            obj = objects.SolarisZonesLiveMigrateData()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4287
            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
  4288
            dest_check_data = obj
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4289
5195
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4290
        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
  4291
        name = instance['name']
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4292
        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
  4293
        try:
694672bf3c17 PSARC 2015/324 OpenStack Nova support for kernel zone live-migration
david.comay@oracle.com
parents: 5194
diff changeset
  4294
            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
  4295
        except Exception as ex:
5196
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  4296
            reason = zonemgr_strerror(ex)
469925bac9fd 22185397 Nova driver could have improved zonemgr(3RAD) exception handling
david.comay@oracle.com
parents: 5195
diff changeset
  4297
            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
  4298
        return dest_check_data
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4299
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4300
    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
  4301
                               block_device_info=None):
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4302
        """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
  4303
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4304
        :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
  4305
        :param block_device_info:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4306
            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
  4307
            actually volumes.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4308
        :return:
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4309
            json strings with below format::
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4310
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4311
                "[{'path':'disk',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4312
                   'type':'raw',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4313
                   'virt_disk_size':'10737418240',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4314
                   'backing_file':'backing_file',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4315
                   'disk_size':'83886080'
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4316
                   'over_committed_disk_size':'10737418240'},
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4317
                   ...]"
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4318
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4319
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4320
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4321
    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
  4322
        """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
  4323
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4324
        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
  4325
        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
  4326
        running the specified security group.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4327
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4328
        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
  4329
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4330
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4331
        # 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
  4332
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4333
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4334
    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
  4335
        """Refresh security group rules
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4336
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4337
        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
  4338
        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
  4339
        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
  4340
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4341
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4342
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4343
    def reset_network(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4344
        """reset networking for specified instance."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4345
        # 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
  4346
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4347
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4348
    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
  4349
        """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
  4350
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4351
        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
  4352
        and firewalls are inevitable on destination host.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4353
        ( Waiting only for filtering rules to hypervisor,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4354
        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
  4355
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4356
        Concretely, the below method must be called.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4357
        - setup_basic_filtering (for nova-basic, etc.)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4358
        - 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
  4359
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4360
        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
  4361
        but libvirt migrates those value through migrateToURI(),
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4362
        so , no need to be called.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4363
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4364
        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
  4365
        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
  4366
        are not completed.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4367
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4368
        :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
  4369
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4370
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4371
        # 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
  4372
        pass
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4373
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4374
    def filter_defer_apply_on(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4375
        """Defer application of IPTables rules."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4376
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4377
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4378
    def filter_defer_apply_off(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4379
        """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
  4380
        pass
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 unfilter_instance(self, instance, network_info):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4383
        """Stop filtering instance."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4384
        # 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
  4385
        pass
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4386
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4387
    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
  4388
        """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
  4389
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4390
        :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
  4391
        :param new_pass: the new password
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4392
        """
5312
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4393
        name = instance['name']
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4394
        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
  4395
        if zone is None:
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4396
            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
  4397
b5fa281dd501 21660635 root-password functionality required for defcore coverage
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5311
diff changeset
  4398
        if zone.state == ZONE_STATE_RUNNING:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4399
            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
  4400
                                     '/usr/bin/passwd', '-p',
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4401
                                     "'%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
  4402
        else:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4403
            raise exception.InstanceNotRunning(instance_id=name)
1760
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 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
  4406
        """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
  4407
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4408
        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
  4409
        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
  4410
        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
  4411
        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
  4412
        base64-encoded.
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4413
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4414
        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
  4415
        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
  4416
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4417
        # 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
  4418
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4419
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4420
    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
  4421
        """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
  4422
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4423
        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
  4424
        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
  4425
        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
  4426
        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
  4427
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4428
        :param context: security context
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4429
        :param instance: nova.objects.instance.Instance
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4430
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4431
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4432
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4433
    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
  4434
        """inject network info for specified instance."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4435
        # 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
  4436
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4437
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4438
    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
  4439
        """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
  4440
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4441
        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
  4442
        than `timeout` seconds.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4443
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4444
        :param int timeout:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4445
            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
  4446
            to be stuck.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4447
        :param list instances:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4448
            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
  4449
            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
  4450
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4451
        :return: None
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4452
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4453
        # 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
  4454
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4455
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4456
    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
  4457
        """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
  4458
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4459
        :param str action:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4460
            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
  4461
            ""startup", "shutdown" and "reboot".
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4462
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4463
        :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
  4464
        :rtype: : str
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4465
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4466
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4467
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4468
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4469
    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
  4470
        """Start/Stop host maintenance window.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4471
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4472
        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
  4473
        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
  4474
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4475
        :param str host:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4476
            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
  4477
        :param bool mode:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4478
            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
  4479
            maintenance mode.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4480
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4481
        :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
  4482
                 "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
  4483
        :rtype: str
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4484
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4485
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4486
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4487
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4488
    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
  4489
        """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
  4490
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4491
        :param bool enabled:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4492
            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
  4493
            `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
  4494
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4495
        :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
  4496
                 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
  4497
                 return "disabled".
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4498
        :rtype: str
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4499
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4500
        # 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
  4501
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4502
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4503
    def get_host_uptime(self):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4504
        """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
  4505
        host.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4506
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4507
        :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
  4508
                 last boot.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4509
        :rtype: str
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4510
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4511
        # 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
  4512
        return utils.execute('/usr/bin/uptime')[0]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4513
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4514
    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
  4515
        """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
  4516
        instance boot time.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4517
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4518
        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
  4519
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4520
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4521
            The instance which gets VIFs plugged.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4522
        :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
  4523
            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
  4524
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4525
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4526
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4527
        # 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
  4528
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4529
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4530
    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
  4531
        # NOTE(markus_z): 2015-08-18
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4532
        # 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
  4533
        # 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
  4534
        """Unplug virtual interfaces (VIFs) from networks.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4535
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4536
        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
  4537
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4538
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4539
            The instance which gets VIFs unplugged.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4540
        :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
  4541
            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
  4542
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4543
        :return: None
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4544
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4545
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4546
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4547
    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
  4548
        """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
  4549
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4550
        :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
  4551
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4552
            | {'kernel': kern,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4553
            |  'idle': idle,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4554
            |  'user': user,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4555
            |  'iowait': wait,
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4556
            |   'frequency': freq},
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4557
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4558
                  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
  4559
                  (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
  4560
                  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
  4561
                  (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
  4562
                  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
  4563
                  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
  4564
                  long integers.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4565
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4566
        """
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4567
        raise NotImplementedError()
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4568
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4569
    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
  4570
        """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
  4571
        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
  4572
        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
  4573
        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
  4574
        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
  4575
        full pipeline.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4576
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4577
        All counters are long integers.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4578
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4579
        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
  4580
        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
  4581
        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
  4582
        unused.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4583
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4584
        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
  4585
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4586
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4587
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4588
    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
  4589
        """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
  4590
        return False
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4591
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4592
    def macs_for_instance(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4593
        """What MAC addresses must this instance have?
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4594
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4595
        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
  4596
        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
  4597
        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
  4598
        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
  4599
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4600
        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
  4601
        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
  4602
        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
  4603
        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
  4604
        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
  4605
        actual configuration.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4606
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4607
        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
  4608
        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
  4609
        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
  4610
        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
  4611
        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
  4612
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4613
        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
  4614
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4615
        :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
  4616
            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
  4617
            MAC addresses'.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4618
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4619
        return None
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4620
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4621
    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
  4622
        """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
  4623
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4624
        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
  4625
        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
  4626
        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
  4627
        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
  4628
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4629
        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
  4630
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4631
        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
  4632
        client API.
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
        :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
  4635
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4636
             |    [{'opt_name': 'bootfile-name',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4637
             |      '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
  4638
             |     {'opt_name': 'server-ip-address',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4639
             |      '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
  4640
             |     {'opt_name': 'tftp-server',
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4641
             |      '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
  4642
             |    ]
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4643
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4644
        """
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4645
        return None
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4646
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4647
    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
  4648
        """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
  4649
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4650
        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
  4651
        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
  4652
        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
  4653
        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
  4654
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4655
        :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
  4656
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4657
        pass
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4658
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4659
    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
  4660
        """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
  4661
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4662
        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
  4663
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4664
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4665
            The security context.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4666
        :param nova.objects.aggregate.Aggregate aggregate:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4667
            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
  4668
        :param str host:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4669
            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
  4670
        :param dict kwargs:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4671
            A free-form thingy...
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4672
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4673
        :return: None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4674
        """
3652
7e731a1b0b39 PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents: 3521
diff changeset
  4675
        # 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
  4676
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4677
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4678
    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
  4679
        """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
  4680
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4681
        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
  4682
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4683
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4684
            The security context.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4685
        :param nova.objects.aggregate.Aggregate aggregate:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4686
            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
  4687
        :param str host:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4688
            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
  4689
        :param dict kwargs:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4690
            A free-form thingy...
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4691
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4692
        :return: None
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4693
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4694
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4695
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4696
    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
  4697
                                 host, set_error=True):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4698
        """Undo for Resource Pools."""
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4699
        raise NotImplementedError()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4700
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4701
    def get_volume_connector(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4702
        """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
  4703
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4704
        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
  4705
        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
  4706
        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
  4707
        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
  4708
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4709
            {
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4710
                'ip': ip,
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4711
                'initiator': initiator,
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4712
                'wwnns': wwnns,
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4713
                'wwpns': wwpns,
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4714
                'host': hostname
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4715
            }
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4716
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4717
        """
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4718
        connector = {
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4719
            'ip': self.get_host_ip_addr(),
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4720
            'host': CONF.host
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4721
        }
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4722
        if not self._initiator:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4723
            self._initiator = self._get_iscsi_initiator()
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4724
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4725
        if self._initiator:
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4726
            connector['initiator'] = self._initiator
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4727
        else:
6913
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
  4728
            LOG.debug(_("Could not determine iSCSI initiator name"),
473a2401e764 24400482 VM fails to launch if network/iscsi/initiator is disabled
Qiang Strony Zhang <strony.zhang@oracle.com>
parents: 6912
diff changeset
  4729
                      instance=instance)
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4730
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4731
        if not self._fc_wwnns:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4732
            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
  4733
            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
  4734
                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
  4735
                          'World Wide Node Names'),
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4736
                          instance=instance)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4737
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4738
        if not self._fc_wwpns:
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4739
            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
  4740
            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
  4741
                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
  4742
                          'World Wide Port Names'),
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4743
                          instance=instance)
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4744
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4745
        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
  4746
            connector["wwnns"] = self._fc_wwnns
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4747
            connector["wwpns"] = self._fc_wwpns
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4748
        return connector
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4749
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4750
    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
  4751
        """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
  4752
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4753
        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
  4754
        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
  4755
        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
  4756
        [hypervisor_hostname].
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4757
        """
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4758
        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
  4759
            self._update_host_stats()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4760
        stats = self._host_stats
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4761
        if not isinstance(stats, list):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4762
            stats = [stats]
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4763
        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
  4764
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4765
    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
  4766
        """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
  4767
        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
  4768
            return True
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4769
        # Refresh and check again.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4770
        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
  4771
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4772
    def get_per_instance_usage(self):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4773
        """Get information about instance resource usage.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4774
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4775
        :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
  4776
        """
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4777
        return {}
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4778
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4779
    def instance_on_disk(self, instance):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4780
        """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
  4781
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4782
        :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
  4783
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4784
        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
  4785
        the host, False otherwise.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4786
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4787
        .. note::
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4788
            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
  4789
            of access to instance shared disk files
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4790
        """
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4791
        bdmobj = objects.BlockDeviceMappingList
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4792
        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
  4793
                                           instance['uuid'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4794
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4795
        root_ci = None
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4796
        rootmp = instance['root_device_name']
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4797
        for entry in bdms:
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4798
            if entry['connection_info'] is None:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4799
                continue
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4800
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4801
            if entry['device_name'] == rootmp:
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4802
                root_ci = jsonutils.loads(entry['connection_info'])
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4803
                break
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4804
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4805
        if root_ci is None:
5313
17713196eb0c 22464594 Nova driver should support rebuild
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5312
diff changeset
  4806
            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
  4807
                   % instance['name'])
5311
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4808
            raise exception.NovaException(msg)
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4809
92a194d827f0 20739272 Nova driver should support evacuation
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5279
diff changeset
  4810
        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
  4811
        return driver_type in shared_storage
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4812
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4813
    def register_event_listener(self, callback):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4814
        """Register a callback to receive events.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4815
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4816
        Register a callback to receive asynchronous event
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4817
        notifications from hypervisors. The callback will
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4818
        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
  4819
        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
  4820
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4821
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4822
        self._compute_event_callback = callback
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4823
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4824
    def emit_event(self, event):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4825
        """Dispatches an event to the compute manager.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4826
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4827
        Invokes the event callback registered by the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4828
        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
  4829
        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
  4830
        """
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4831
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4832
        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
  4833
            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
  4834
            return
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4835
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4836
        if not isinstance(event, virtevent.Event):
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4837
            raise ValueError(
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4838
                _("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
  4839
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4840
        try:
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4841
            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
  4842
            self._compute_event_callback(event)
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
  4843
        except Exception as ex:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4844
            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
  4845
                      {'event': event, 'ex': ex})
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4846
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4847
    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
  4848
        """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
  4849
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4850
        :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
  4851
        :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
  4852
        """
4982
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4853
        # 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
  4854
        # 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
  4855
        # the code here.
5194
e5ea1fd7704a 22074872 nova leaks volumes if _create_config throws an exception
david.comay@oracle.com
parents: 5193
diff changeset
  4856
        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
  4857
        try:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4858
            self.destroy(None, instance, None)
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4859
        except Exception:
df1be607c345 18595100 nova resize does not work
Sean Wilcox <sean.wilcox@oracle.com>
parents: 4832
diff changeset
  4860
            return False
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4861
        return True
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4862
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4863
    @property
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4864
    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
  4865
        """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
  4866
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4867
        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
  4868
        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
  4869
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4870
        return True
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4871
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4872
    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
  4873
                               create_info):
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4874
        """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
  4875
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4876
        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
  4877
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4878
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4879
            The security context.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4880
        :param nova.objects.instance.Instance  instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4881
            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
  4882
        :param uuid volume_id:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4883
            Volume to be snapshotted
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4884
        :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
  4885
               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
  4886
               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
  4887
               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
  4888
               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
  4889
               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
  4890
               needed for creating the snapshot.
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4891
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4892
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4893
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4894
    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
  4895
                               snapshot_id, delete_info):
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4896
        """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
  4897
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4898
        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
  4899
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4900
        :param nova.context.RequestContext context:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4901
            The security context.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4902
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4903
            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
  4904
        :param uuid volume_id:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4905
            Attached volume associated with the snapshot
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4906
        :param uuid snapshot_id:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4907
            The snapshot to delete.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4908
        :param dict delete_info:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4909
            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
  4910
            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
  4911
            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
  4912
            being merged into (if appropriate).
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4913
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4914
        :return: None
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4915
        """
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4916
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4917
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4918
    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
  4919
        """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
  4920
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4921
        :param nova.objects.instance.Instance instance:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4922
            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
  4923
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4924
            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
  4925
        :param nova.objects.BlockDeviceMapping root_bdm:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4926
            The description of the root device.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4927
        """
1944
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4928
        raise NotImplementedError()
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4929
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4930
    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
  4931
                                          *block_device_lists):
56ac2df1785b PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents: 1908
diff changeset
  4932
        """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
  4933
        raise NotImplementedError()
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4934
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4935
    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
  4936
                                     bdms, block_device_obj):
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4937
        """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
  4938
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4939
        :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
  4940
                         requesting a device name
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4941
        :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
  4942
        :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
  4943
                                 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
  4944
                                 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
  4945
                                 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
  4946
                                 implementation if not set.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4947
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4948
        :returns: The chosen device name.
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4949
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4950
        raise NotImplementedError()
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4951
3998
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4952
    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
  4953
        """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
  4954
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4955
        :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
  4956
                        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
  4957
        """
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4958
        # 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
  4959
        #                 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
  4960
        #                 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
  4961
        #                 virt layer.
5bd484384122 PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents: 3652
diff changeset
  4962
        return False
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4963
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4964
    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
  4965
        """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
  4966
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4967
        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
  4968
        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
  4969
        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
  4970
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4971
        :param context:  request context
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4972
        :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
  4973
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4974
            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
  4975
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4976
        raise NotImplementedError()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4977
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4978
    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
  4979
        """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
  4980
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4981
        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
  4982
        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
  4983
        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
  4984
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4985
        :param context:  request context
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4986
        :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
  4987
        :param nova.objects.ImageMeta image_meta:
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4988
            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
  4989
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 5313
diff changeset
  4990
        raise NotImplementedError()
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4991
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4992
    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
  4993
        """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
  4994
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4995
        :param context:  request context
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4996
        :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
  4997
                         ports will be associated with
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  4998
        :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
  4999
        """
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 6458
diff changeset
  5000
        return instance.get('host')