components/openstack/ironic/files/drivers/modules/solaris_ipmitool.py
author Laszlo Peter <laszlo.peter@oracle.com>
Wed, 07 Sep 2016 14:48:42 -0700
changeset 6855 ea44e7e0ca98
parent 5517 7758049098f4
child 7350 7cd865fc284a
permissions -rw-r--r--
24465791 Update Ironic for the Mitaka release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
     1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
     2
#
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
     3
# Copyright 2012 Hewlett-Packard Development Company, L.P.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
     4
# Copyright (c) 2012 NTT DOCOMO, INC.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
     5
# Copyright 2014 International Business Machines Corporation
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
     6
# All Rights Reserved.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
     7
#
5446
27d201e3362b 22694592 Several configuration files should be more aligned with the upstream
david.comay@oracle.com
parents: 5405
diff changeset
     8
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
     9
#
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    10
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    11
#    not use this file except in compliance with the License. You may obtain
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    12
#    a copy of the License at
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    13
#
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    14
#         http://www.apache.org/licenses/LICENSE-2.0
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    15
#
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    16
#    Unless required by applicable law or agreed to in writing, software
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    17
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    18
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    19
#    License for the specific language governing permissions and limitations
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    20
#    under the License.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    21
"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    22
Solaris Driver and supporting meta-classes.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    23
"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    24
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
    25
import errno
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    26
import os
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    27
import platform
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    28
import re
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    29
import select
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    30
import shutil
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    31
import socket
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    32
from subprocess import Popen, PIPE
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    33
import tempfile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    34
from threading import Thread
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    35
import time
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    36
import urllib2
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    37
from urlparse import urlparse
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    38
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    39
from lockfile import LockFile, LockTimeout
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
    40
from oslo_concurrency import processutils
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
    41
from oslo_config import cfg
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
    42
from oslo_log import log as logging
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
    43
from oslo_service import loopingcall
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
    44
from oslo_utils import excutils, strutils
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    45
from scp import SCPClient
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
    46
import six
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    47
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    48
from ironic.common import boot_devices, exception, images, keystone, states, \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    49
    utils
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
    50
from ironic.common.i18n import _, _LE, _LI, _LW
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    51
from ironic.conductor import task_manager
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    52
from ironic.conductor import utils as manager_utils
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    53
from ironic.db import api as dbapi
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    54
from ironic.drivers import base
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    55
from ironic.drivers.modules import ipmitool
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    56
from ironic.drivers import utils as driver_utils
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
    57
from ironic import objects
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    58
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    59
PLATFORM = platform.system()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    60
if PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    61
    import tarfile
4590
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
    62
else:
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
    63
    from pkg.fmri import is_valid_pkg_name
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
    64
    from pkg.misc import valid_pub_prefix, valid_pub_url
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    65
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    66
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    67
AI_OPTS = [
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    68
    cfg.StrOpt('server',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    69
               help='Host name for AI Server.'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    70
    cfg.StrOpt('username',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    71
               help='Username to ssh to AI Server.'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    72
    cfg.StrOpt('password',
5446
27d201e3362b 22694592 Several configuration files should be more aligned with the upstream
david.comay@oracle.com
parents: 5405
diff changeset
    73
               help='Password for user to ssh to AI Server. If ssh_key_file '
27d201e3362b 22694592 Several configuration files should be more aligned with the upstream
david.comay@oracle.com
parents: 5405
diff changeset
    74
                    'or ssh_key_contents are set, this config setting is used '
27d201e3362b 22694592 Several configuration files should be more aligned with the upstream
david.comay@oracle.com
parents: 5405
diff changeset
    75
                    'to provide the passphrase if required. If an encrypted '
27d201e3362b 22694592 Several configuration files should be more aligned with the upstream
david.comay@oracle.com
parents: 5405
diff changeset
    76
                    'key is used, set this to the passphrase.'),
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    77
    cfg.StrOpt('port',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    78
               default='22',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    79
               help='SSH port to use.'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    80
    cfg.StrOpt('timeout',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    81
               default='10',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    82
               help='SSH socket timeout value in seconds.'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    83
    cfg.StrOpt('deploy_interval',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    84
               default='10',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    85
               help='Interval in seconds to check AI deployment status.'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    86
    cfg.StrOpt('derived_manifest',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    87
               default='file:///usr/lib/ironic/ironic-manifest.ksh',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    88
               help='Derived Manifest used for deployment.'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    89
    cfg.StrOpt('ssh_key_file',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    90
               help='SSH Filename to use.'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    91
    cfg.StrOpt('ssh_key_contents',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    92
               help='Actual SSH Key contents to use.')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    93
    ]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    94
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    95
SOLARIS_IPMI_OPTS = [
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    96
    cfg.StrOpt('imagecache_dirname',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    97
               default='/var/lib/ironic/images',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    98
               help='Default path to image cache.'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    99
    cfg.StrOpt('imagecache_lock_timeout',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   100
               default='60',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   101
               help='Timeout to wait when attempting to lock refcount file.')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   102
]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   103
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   104
LOG = logging.getLogger(__name__)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   105
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   106
CONF = cfg.CONF
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   107
OPT_GROUP = cfg.OptGroup(name='ai',
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   108
                         title='Options for the Solaris driver')
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   109
CONF.register_group(OPT_GROUP)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   110
CONF.register_opts(AI_OPTS, OPT_GROUP)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   111
SOLARIS_IPMI_GROUP = cfg.OptGroup(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   112
    name="solaris_ipmi",
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   113
    title="Options defined in ironic.drivers.modules.solaris_ipmi")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   114
CONF.register_group(SOLARIS_IPMI_GROUP)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   115
CONF.register_opts(SOLARIS_IPMI_OPTS, SOLARIS_IPMI_GROUP)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   116
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   117
VALID_ARCH = ['x86', 'SPARC']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   118
VALID_ARCHIVE_SCHEMES = ["file", "http", "https", "glance"]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   119
VALID_URI_SCHEMES = VALID_ARCHIVE_SCHEMES
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   120
DEFAULT_ARCHIVE_IMAGE_PATH = 'auto_install/manifest/default_archive.xml'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   121
AI_STRING = "Automated Installation"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   122
AI_SUCCESS_STRING = AI_STRING + " succeeded"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   123
AI_FAILURE_STRING = AI_STRING + " failed"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   124
AI_DEPLOY_STRING = AI_STRING + " started"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   125
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   126
REQUIRED_PROPERTIES = {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   127
    'ipmi_address': _("IP address or hostname of the node. Required."),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   128
    'ipmi_username': _("username to use for IPMI connection. Required."),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   129
    'ipmi_password': _("password to use for IPMI connection. Required.")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   130
}
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   131
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   132
OPTIONAL_PROPERTIES = {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   133
    'ai_manifest': _("Automated install manifest to be used for provisioning. "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   134
                     "Optional."),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   135
    'ai_service': _("Automated Install service name to use. Optional."),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   136
    'archive_uri': _("URI of archive to deploy. Optional."),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   137
    'fmri': _("List of IPS package FMRIs to be installed. "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   138
              "Required if publishers property is set."),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   139
    'install_profiles': _("List of configuration profiles to be applied "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   140
                          "to the installation environment during an install. "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   141
                          "Optional."),
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   142
    'publishers': _("List of IPS publishers to install from, in the format "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   143
                    "name@origin. Required if fmri property is set."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   144
    'sc_profiles': _("List of system configuration profiles to be applied "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   145
                     "to an installed system. Optional."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   146
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   147
    'ipmi_port': _("remote IPMI RMCP port. Optional."),
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   148
    'ipmi_priv_level':
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   149
        _("privilege level; default is ADMINISTRATOR. "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   150
          "One of %s. Optional.") % '. '.join(ipmitool.VALID_PRIV_LEVELS),
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   151
    'ipmi_bridging': _("bridging_type; default is \"no\". One of \"single\", "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   152
                       "\"dual\", \"no\". Optional."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   153
    'ipmi_transit_channel': _("transit channel for bridged request. Required "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   154
                              "only if ipmi_bridging is set to \"dual\"."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   155
    'ipmi_transit_address': _("transit address for bridged request. Required "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   156
                              "only if ipmi_bridging is set to \"dual\"."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   157
    'ipmi_target_channel': _("destination channel for bridged request. "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   158
                             "Required only if ipmi_bridging is set to "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   159
                             "\"single\" or \"dual\"."),
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   160
    'ipmi_target_address': _("destination address for bridged request. "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   161
                             "Required only if ipmi_bridging is set "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   162
                             "to \"single\" or \"dual\"."),
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   163
    'ipmi_local_address': _("local IPMB address for bridged requests. "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   164
                            "Used only if ipmi_bridging is set "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   165
                            "to \"single\" or \"dual\". Optional."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   166
    'ipmi_protocol_version': _('the version of the IPMI protocol; default '
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   167
                               'is "2.0". One of "1.5", "2.0". Optional.'),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   168
    'ipmi_force_boot_device': _("Whether Ironic should specify the boot "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   169
                                "device to the BMC each time the server "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   170
                                "is turned on, eg. because the BMC is not "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   171
                                "capable of remembering the selected boot "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   172
                                "device across power cycles; default value "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   173
                                "is False. Optional.")
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   174
}
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   175
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   176
COMMON_PROPERTIES = REQUIRED_PROPERTIES.copy()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   177
COMMON_PROPERTIES.update(OPTIONAL_PROPERTIES)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   178
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   179
IPMI_PROPERTIES = [
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   180
    ('mac', '/System/host_primary_mac_address'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   181
    ('serial', '/System/serial_number'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   182
    ('model', '/System/model'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   183
    ('cpu_arch', '/System/Processors/architecture'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   184
    ('memory_mb', '/System/Memory/installed_memory'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   185
    ('cpus', '/System/Processors/installed_cpus'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   186
    ('datalinks', '/System/Networking/installed_eth_nics'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   187
    ('disks', '/System/Storage/installed_disks'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   188
    ('local_gb', '/System/Storage/installed_disk_size')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   189
]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   190
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   191
CPU_LOCATION = '/System/Processors/CPUs/CPU_%d/total_cores'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   192
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   193
LAST_CMD_TIME = {}
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   194
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   195
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   196
def _ssh_execute(ssh_obj, ssh_cmd, raise_exception=True, err_msg=None):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   197
    """Execute a command via SSH.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   198
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   199
    :param ssh_obj: paramiko.SSHClient, an active ssh connection
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   200
    :param ssh_cmd: Command to execute over SSH.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   201
    :param raise_exception: Wheter to raise exception or not
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   202
    :param err_msg: Custom error message to use
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   203
    :returns: tuple [stdout from command, returncode]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   204
    :raises: SSHCommandFailed on an error from ssh, if specified to raise.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   205
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   206
    LOG.debug("_ssh_execute():ssh_cmd: %s" % (ssh_cmd))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   207
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   208
    returncode = 0
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   209
    stdout = None
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   210
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   211
        stdout = processutils.ssh_execute(ssh_obj, ssh_cmd)[0]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   212
    except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   213
        LOG.error(_LE("Cannot execute SSH cmd %(cmd)s. Reason: %(err)s.") %
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   214
                  {'cmd': ssh_cmd, 'err': err})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   215
        returncode = 1
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   216
        if raise_exception:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   217
            if err_msg:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   218
                raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   219
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   220
                raise exception.SSHCommandFailed(cmd=ssh_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   221
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   222
    return stdout, returncode
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   223
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   224
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   225
def _parse_driver_info(node):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   226
    """Gets the parameters required for ipmitool to access the node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   227
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   228
    Copied from ironic/drivers/modules/ipmitool.py. No differences.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   229
    Copied locally as REQUIRED_PROPERTIES differs from standard ipmitool.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   230
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   231
    :param node: the Node of interest.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   232
    :returns: dictionary of parameters.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   233
    :raises: InvalidParameterValue when an invalid value is specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   234
    :raises: MissingParameterValue when a required ipmi parameter is missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   235
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   236
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   237
    LOG.debug("_parse_driver_info()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   238
    info = node.driver_info or {}
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   239
    bridging_types = ['single', 'dual']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   240
    missing_info = [key for key in REQUIRED_PROPERTIES if not info.get(key)]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   241
    if missing_info:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   242
        raise exception.MissingParameterValue(_(
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   243
            "Missing the following IPMI credentials in node's"
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   244
            " driver_info: %s.") % missing_info)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   245
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   246
    address = info.get('ipmi_address')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   247
    username = info.get('ipmi_username')
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   248
    password = six.text_type(info.get('ipmi_password', ''))
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   249
    dest_port = info.get('ipmi_port')
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   250
    port = info.get('ipmi_terminal_port')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   251
    priv_level = info.get('ipmi_priv_level', 'ADMINISTRATOR')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   252
    bridging_type = info.get('ipmi_bridging', 'no')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   253
    local_address = info.get('ipmi_local_address')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   254
    transit_channel = info.get('ipmi_transit_channel')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   255
    transit_address = info.get('ipmi_transit_address')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   256
    target_channel = info.get('ipmi_target_channel')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   257
    target_address = info.get('ipmi_target_address')
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   258
    protocol_version = str(info.get('ipmi_protocol_version', '2.0'))
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   259
    force_boot_device = info.get('ipmi_force_boot_device', False)
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   260
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   261
    if not username:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   262
        LOG.warning(_LW('ipmi_username is not defined or empty for node %s: '
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   263
                        'NULL user will be utilized.') % node.uuid)
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   264
    if not password:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   265
        LOG.warning(_LW('ipmi_password is not defined or empty for node %s: '
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   266
                        'NULL password will be utilized.') % node.uuid)
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   267
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   268
    if protocol_version not in ipmitool.VALID_PROTO_VERSIONS:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   269
        valid_versions = ', '.join(ipmitool.VALID_PROTO_VERSIONS)
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   270
        raise exception.InvalidParameterValue(_(
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   271
            "Invalid IPMI protocol version value %(version)s, the valid "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   272
            "value can be one of %(valid_versions)s") %
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   273
            {'version': protocol_version, 'valid_versions': valid_versions})
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   274
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   275
    if port is not None:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   276
        port = utils.validate_network_port(port, 'ipmi_terminal_port')
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   277
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   278
    if dest_port is not None:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   279
        dest_port = utils.validate_network_port(dest_port, 'ipmi_port')
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   280
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   281
    # check if ipmi_bridging has proper value
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   282
    if bridging_type == 'no':
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   283
        # if bridging is not selected, then set all bridging params to None
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   284
        (local_address, transit_channel, transit_address, target_channel,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   285
         target_address) = (None,) * 5
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   286
    elif bridging_type in bridging_types:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   287
        # check if the particular bridging option is supported on host
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   288
        if not ipmitool._is_option_supported('%s_bridge' % bridging_type):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   289
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   290
                "Value for ipmi_bridging is provided as %s, but IPMI "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   291
                "bridging is not supported by the IPMI utility installed "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   292
                "on host. Ensure ipmitool version is > 1.8.11"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   293
            ) % bridging_type)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   294
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   295
        # ensure that all the required parameters are provided
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   296
        params_undefined = [param for param, value in [
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   297
            ("ipmi_target_channel", target_channel),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   298
            ('ipmi_target_address', target_address)] if value is None]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   299
        if bridging_type == 'dual':
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   300
            params_undefined2 = [param for param, value in [
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   301
                ("ipmi_transit_channel", transit_channel),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   302
                ('ipmi_transit_address', transit_address)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   303
            ] if value is None]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   304
            params_undefined.extend(params_undefined2)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   305
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   306
            # if single bridging was selected, set dual bridge params to None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   307
            transit_channel = transit_address = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   308
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   309
        # If the required parameters were not provided,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   310
        # raise an exception
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   311
        if params_undefined:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   312
            raise exception.MissingParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   313
                "%(param)s not provided") % {'param': params_undefined})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   314
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   315
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   316
            "Invalid value for ipmi_bridging: %(bridging_type)s,"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   317
            " the valid value can be one of: %(bridging_types)s"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   318
        ) % {'bridging_type': bridging_type,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   319
             'bridging_types': bridging_types + ['no']})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   320
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   321
    if priv_level not in ipmitool.VALID_PRIV_LEVELS:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   322
        valid_priv_lvls = ', '.join(ipmitool.VALID_PRIV_LEVELS)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   323
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   324
            "Invalid privilege level value:%(priv_level)s, the valid value"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   325
            " can be one of %(valid_levels)s") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   326
            {'priv_level': priv_level, 'valid_levels': valid_priv_lvls})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   327
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   328
    return {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   329
        'address': address,
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   330
        'dest_port': dest_port,
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   331
        'username': username,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   332
        'password': password,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   333
        'port': port,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   334
        'uuid': node.uuid,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   335
        'priv_level': priv_level,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   336
        'local_address': local_address,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   337
        'transit_channel': transit_channel,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   338
        'transit_address': transit_address,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   339
        'target_channel': target_channel,
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   340
        'target_address': target_address,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   341
        'protocol_version': protocol_version,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   342
        'force_boot_device': force_boot_device
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   343
    }
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   344
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   345
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   346
def _exec_ipmitool(driver_info, command):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   347
    """Execute the ipmitool command.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   348
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   349
    This uses the lanplus interface to communicate with the BMC device driver.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   350
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   351
    Copied from ironic/drivers/modules/ipmitool.py. Only one difference.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   352
    ipmitool.py version expects a string of space separated commands, and
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   353
    it splits this into an list using 'space' as delimiter.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   354
    This causes setting of bootmode script for SPARC network boot to fail.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   355
    Solaris versions takes a list() as command paramater, and therefore
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   356
    we don't need to split.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   357
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   358
    :param driver_info: the ipmitool parameters for accessing a node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   359
    :param command: list() : the ipmitool command to be executed.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   360
    :returns: (stdout, stderr) from executing the command.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   361
    :raises: PasswordFileFailedToCreate from creating or writing to the
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   362
             temporary file.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   363
    :raises: processutils.ProcessExecutionError from executing the command.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   364
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   365
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   366
    LOG.debug("SolarisDeploy._exec_ipmitool:driver_info: '%s', "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   367
              "command: '%s'" % (driver_info, command))
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   368
    ipmi_version = ('lanplus'
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   369
                    if driver_info['protocol_version'] == '2.0'
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   370
                    else 'lan')
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   371
    args = ['/usr/sbin/ipmitool',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   372
            '-I',
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   373
            ipmi_version,
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   374
            '-H',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   375
            driver_info['address'],
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   376
            '-L', driver_info['priv_level']
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   377
            ]
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   378
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   379
    if driver_info['dest_port']:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   380
        args.append('-p')
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   381
        args.append(driver_info['dest_port'])
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   382
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   383
    if driver_info['username']:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   384
        args.append('-U')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   385
        args.append(driver_info['username'])
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   386
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   387
    for name, option in ipmitool.BRIDGING_OPTIONS:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   388
        if driver_info[name] is not None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   389
            args.append(option)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   390
            args.append(driver_info[name])
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   391
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   392
    # specify retry timing more precisely, if supported
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   393
    num_tries = max(
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   394
        (CONF.ipmi.retry_timeout // CONF.ipmi.min_command_interval), 1)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   395
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   396
    if ipmitool._is_option_supported('timing'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   397
        args.append('-R')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   398
        args.append(str(num_tries))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   399
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   400
        args.append('-N')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   401
        args.append(str(CONF.ipmi.min_command_interval))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   402
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   403
    end_time = (time.time() + CONF.ipmi.retry_timeout)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   404
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   405
    while True:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   406
        num_tries = num_tries - 1
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   407
        # NOTE(deva): ensure that no communications are sent to a BMC more
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   408
        #             often than once every min_command_interval seconds.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   409
        time_till_next_poll = CONF.ipmi.min_command_interval - (
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   410
            time.time() - LAST_CMD_TIME.get(driver_info['address'], 0))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   411
        if time_till_next_poll > 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   412
            time.sleep(time_till_next_poll)
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   413
        # Resetting the list that will be utilized so the password arguments
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   414
        # from any previous execution are preserved.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   415
        cmd_args = args[:]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   416
        # 'ipmitool' command will prompt password if there is no '-f'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   417
        # option, we set it to '\0' to write a password file to support
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   418
        # empty password
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   419
        with ipmitool._make_password_file(
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   420
                    driver_info['password'] or '\0'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   421
                ) as pw_file:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   422
            cmd_args.append('-f')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   423
            cmd_args.append(pw_file)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   424
            cmd_args = cmd_args + list(command)  # Append list, don't split
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   425
            try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   426
                out, err = utils.execute(*cmd_args)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   427
                return out, err
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   428
            except processutils.ProcessExecutionError as e:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   429
                with excutils.save_and_reraise_exception() as ctxt:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   430
                    err_list = [x for x in ipmitool.IPMITOOL_RETRYABLE_FAILURES
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   431
                                if x in six.text_type(e)]
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   432
                    if ((time.time() > end_time) or
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   433
                        (num_tries == 0) or
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   434
                            not err_list):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   435
                        LOG.error(_LE('IPMI Error while attempting '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   436
                                      '"%(cmd)s" for node %(node)s. '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   437
                                      'Error: %(error)s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   438
                                  {
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   439
                                      'node': driver_info['uuid'],
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   440
                                      'cmd': e.cmd,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   441
                                      'error': e
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   442
                                  })
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   443
                    else:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   444
                        ctxt.reraise = False
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   445
                        LOG.warning(_LW('IPMI Error encountered, retrying '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   446
                                        '"%(cmd)s" for node %(node)s. '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   447
                                        'Error: %(error)s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   448
                                    {
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   449
                                        'node': driver_info['uuid'],
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   450
                                        'cmd': e.cmd,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   451
                                        'error': e
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   452
                                    })
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   453
            finally:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   454
                LAST_CMD_TIME[driver_info['address']] = time.time()
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   455
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   456
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   457
def _get_node_architecture(node):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   458
    """Queries the node for architecture type
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   459
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   460
    :param node: the Node of interest.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   461
    :returns: SPARC or X86 depending on architecture discovered
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   462
    :raises: IPMIFailure if ipmitool command fails
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   463
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   464
    LOG.debug("SolarisDeploy._get_node_architecture")
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   465
    cpu_arch = node.properties.get('cpu_arch', None)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   466
    if cpu_arch is None:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   467
        LOG.info(_LI("Inspection not performed, retrieving architecture via "
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   468
                     "IPMI for node: %s"), node.uuid)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   469
        ipmi_cmd_args = ['sunoem', 'getval', '/System/Processors/architecture']
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   470
        driver_info = _parse_driver_info(node)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   471
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   472
            cpu_arch, _err = _exec_ipmitool(driver_info, ipmi_cmd_args)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   473
        except Exception as err:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   474
            LOG.error(_LE("Failed to get node architecture from IPMI : %s" %
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   475
                      (err)))
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   476
            raise exception.IPMIFailure(cmd=err)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   477
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   478
        propdict = {'cpu_arch': cpu_arch}
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   479
        node_properties = node.properties
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   480
        node_properties.update(propdict)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   481
        node.properties = node_properties
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   482
        node.save()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   483
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   484
        LOG.debug("SolarisDeploy._get_node_architecture: cpu_arch: '%s'"
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   485
                  % (cpu_arch))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   486
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   487
    if 'SPARC' in cpu_arch:
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   488
        return 'SPARC'
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   489
    elif 'x86' in cpu_arch:
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   490
        return 'x86'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   491
    else:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   492
        raise SolarisIPMIError(msg="Unknown node architecture: %s"
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   493
                               % (cpu_arch))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   494
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   495
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   496
def _check_deploy_state(task, node_uuid, deploy_thread):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   497
    """ Check deployment state of a running install
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   498
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   499
    Check the deployment status for this node ideally this will be
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   500
    achieved via communicating with the AI Server and querying the
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   501
    telemetry data returned by the AI Client install to the AI Server.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   502
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   503
    However until that is integrated we need to maintain a connection
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   504
    with the Serial Console of the node being installed and parse the
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   505
    output to the console made during an install.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   506
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   507
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   508
    :param deploy_thread: Threaded class monitor deployment status
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   509
    :returns: Nothing, raises loopingcall.LoopingCallDone() once
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   510
        node deployment status is determined as done or failed.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   511
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   512
    LOG.debug("_check_deploy_state()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   513
    LOG.debug("_check_deploy_state() deploy_thread_state: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   514
              (deploy_thread.state))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   515
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   516
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   517
        # Get current DB copy of node
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   518
        cur_node = objects.Node.get_by_uuid(task.context, node_uuid)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   519
    except exception.NodeNotFound:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   520
        LOG.info(_LI("During check_deploy_state, node %(node)s was not "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   521
                     "found and presumed deleted by another process.") %
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   522
                 {'node': node_uuid})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   523
        # Thread should have stopped already, but let's make sure.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   524
        deploy_thread.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   525
        if deploy_thread.state in [states.DEPLOYING, states.DEPLOYWAIT]:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   526
            # Update node with done/fail state
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   527
            if task.node:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   528
                task.node.provision_state = states.DEPLOYFAIL
5517
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   529
                task.node.last_error = "Failed to find node whilst " + \
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   530
                                       "transitioning to '%s' state." % \
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   531
                                       (task.node.target_provision_state)
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   532
                task.node.target_provision_state = states.NOSTATE
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   533
                task.node.save()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   534
        raise loopingcall.LoopingCallDone()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   535
    except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   536
        LOG.info(_LI("During check_deploy_state, node %(node)s could "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   537
                     "not be retrieved: %(err)s") %
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   538
                 {'node': node_uuid, 'err': err})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   539
        # Thread should have stopped already, but lets make sure.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   540
        deploy_thread.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   541
        if deploy_thread.state in [states.DEPLOYING, states.DEPLOYWAIT]:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   542
            # Update node with done/fail state
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   543
            if task.node:
5517
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   544
                task.node.last_error = "Failed to find node whilst " + \
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   545
                                       "transitioning to '%s' state." % \
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   546
                                       (task.node.target_provision_state)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   547
                task.node.provision_state = states.DEPLOYFAIL
5517
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   548
                task.node.target_provision_state = states.NOSTATE
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   549
                task.node.save()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   550
        raise loopingcall.LoopingCallDone()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   551
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   552
    LOG.debug("_check_deploy_state().cur_node.target_provision_state: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   553
              (cur_node.target_provision_state))
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   554
    LOG.debug("_check_deploy_state().cur_node.provision_state: %s" %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   555
              (cur_node.provision_state))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   556
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   557
    if deploy_thread.state not in [states.DEPLOYING, states.DEPLOYWAIT]:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   558
        LOG.debug("_check_deploy_state().done: %s" % (deploy_thread.state))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   559
        # Node has completed deployment, success or failure
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   560
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   561
        # Thread should have stopped already, but lets make sure.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   562
        deploy_thread.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   563
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   564
        # Update node with done/fail state
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   565
        if deploy_thread.state == states.DEPLOYDONE:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   566
            cur_node.provision_state = states.ACTIVE
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   567
        elif deploy_thread.state == states.DEPLOYFAIL:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   568
            if deploy_thread.error is not None:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   569
                cur_node.last_error = deploy_thread.error
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   570
            else:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   571
                cur_node.last_error = "Install failed; check install.log " + \
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   572
                                      "for more details."
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   573
            cur_node.provision_state = deploy_thread.state
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   574
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   575
            cur_node.provision_state = deploy_thread.state
5517
7758049098f4 22819808 target_provision_state should not be set to AVAILABLE
Matt Keenan <matt.keenan@oracle.com>
parents: 5446
diff changeset
   576
        cur_node.target_provision_state = states.NOSTATE
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   577
        cur_node.save()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   578
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   579
        # Raise LoopincCallDone to terminate deployment checking.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   580
        raise loopingcall.LoopingCallDone()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   581
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   582
    elif deploy_thread.state == states.DEPLOYING and \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   583
            cur_node.provision_state != states.DEPLOYING:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   584
        # Actual node deployment has initiated
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   585
        LOG.debug("_check_deploy_state().deploying: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   586
                  (deploy_thread.state))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   587
        cur_node.provision_state = states.DEPLOYING
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   588
        cur_node.save()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   589
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   590
    elif cur_node.target_provision_state == states.AVAILABLE or \
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   591
            cur_node.target_provision_state == states.NOSTATE:
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   592
        # Node was most likely deleted so end deployment completion checking
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   593
        LOG.debug("_check_deploy_state().deleted: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   594
                  (cur_node.target_provision_state))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   595
        deploy_thread.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   596
        raise loopingcall.LoopingCallDone()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   597
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   598
    elif cur_node.provision_state == states.DEPLOYFAIL:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   599
        # Node deployment has for some reason failed already, exit thread
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   600
        LOG.debug("_check_deploy_state().deploy_failed: %s" %
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   601
                  (cur_node.provision_state))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   602
        deploy_thread.stop()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   603
        raise loopingcall.LoopingCallDone()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   604
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   605
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   606
def _url_exists(url):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   607
    """Validate specific exists
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   608
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   609
    :param url: HTTP url
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   610
    :returns: boolean, True of exists, otherwise False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   611
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   612
    LOG.debug("_url_exists: url: %s" % (url.strip()))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   613
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   614
        _open_url = urllib2.urlopen(urllib2.Request(url))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   615
        return True
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   616
    except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   617
        LOG.debug(_("URL %s not reachable: %s") % (url, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   618
        return False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   619
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   620
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   621
def _image_refcount_acquire_lock(image_path):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   622
    """Acquire a lock on reference count image file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   623
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   624
    :param image_path: Path to image file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   625
    :returns: Acquired LockFile lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   626
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   627
    LOG.debug("_image_refcount_acquire_lock: image_path: %s" % (image_path))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   628
    ref_filename = image_path + ".ref"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   629
    lock = LockFile(ref_filename)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   630
    while not lock.i_am_locking():
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   631
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   632
            if os.path.exists(image_path):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   633
                image_size_1 = os.path.getsize(image_path)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   634
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   635
                image_size_1 = 0
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   636
            lock.acquire(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   637
                timeout=int(CONF.solaris_ipmi.imagecache_lock_timeout))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   638
        except LockTimeout:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   639
            # Check if image_path size has changed, due to still downloading
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   640
            if os.path.exists(image_path):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   641
                image_size_2 = os.path.getsize(image_path)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   642
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   643
                image_size_2 = 0
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   644
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   645
            if image_size_1 != image_size_2:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   646
                LOG.debug("_image_refcount_acquire_lock: Image downloading...")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   647
                continue
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   648
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   649
                # Assume lock is an old one, force it's removal
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   650
                LOG.debug("_image_refcount_acquire_lock: Breaking stale lock.")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   651
                lock.break_lock()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   652
                lock.acquire()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   653
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   654
    return lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   655
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   656
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   657
def _image_refcount_adjust(image_path, count, release=True):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   658
    """Adjust cached image file reference counter
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   659
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   660
    :param image_path: Path to image file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   661
    :param count: Integer count value to adjust reference by
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   662
    :param release: Release the acquired lock or return it.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   663
    :returns: Acquired lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   664
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   665
    LOG.debug("_image_refcount_adjust: image_path: %s, "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   666
              "count: %s" % (image_path, str(count)))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   667
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   668
    if count == 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   669
        # Adjusting by zero makes no sense just return
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   670
        err_msg = _LE("Zero reference count adjustment attempted "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   671
                      "on file: %s") % (image_path)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   672
        LOG.error(err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   673
        raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   674
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   675
    ref_filename = image_path + ".ref"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   676
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   677
    if not os.path.exists(ref_filename):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   678
        if count < 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   679
            # Cannot decrement reference on non-existent file
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   680
            err_msg = _LE("Negative reference count adjustment attempted on "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   681
                          "non-existent file: %s") % (image_path)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   682
            LOG.error(err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   683
            raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   684
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   685
        # Create reference count file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   686
        with open(ref_filename, "w") as fp:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   687
            fp.write("0")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   688
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   689
    # Acquire lock on refcount file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   690
    lock = _image_refcount_acquire_lock(image_path)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   691
    if lock is None:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   692
        err_msg = _LE("Failed to acquire lock on image: %s") % (image_path)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   693
        LOG.error(err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   694
        raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   695
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   696
    with open(ref_filename, "r+") as fp:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   697
        ref_count = fp.readline()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   698
        if len(ref_count) == 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   699
            ref_count = 1
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   700
        ref_count = str(int(ref_count) + count)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   701
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   702
        # Check if reference count is zero if so remove
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   703
        # refcount file and image file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   704
        if int(ref_count) <= 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   705
            lock.release()
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   706
            try:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   707
                os.remove(ref_filename)
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   708
            except OSError as err:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   709
                if err.errno != errno.ENOENT:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   710
                    raise
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   711
            try:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   712
                os.remove(image_path)
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   713
            except OSError as err:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   714
                if err.errno != errno.ENOENT:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   715
                    raise
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   716
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   717
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   718
            fp.seek(0)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   719
            fp.write(ref_count)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   720
            if release:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   721
                lock.release()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   722
    return lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   723
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   724
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   725
def _fetch_uri(task, uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   726
    """Retrieve the specified URI to local temporary file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   727
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   728
    Removal of locally fetched file is the responsibility of the
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   729
    caller.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   730
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   731
    :param task: a TaskManager instance
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   732
    :param uri: URI of file to fetch.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   733
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   734
    LOG.debug("SolarisDeploy._fetch_uri:uri: '%s'" % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   735
    url = urlparse(uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   736
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   737
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   738
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   739
            temp_uri = os.path.join(CONF.solaris_ipmi.imagecache_dirname,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   740
                                    url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   741
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   742
            # Check of image already in cache, retrieve if not
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   743
            if not os.path.isfile(temp_uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   744
                try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   745
                    # Increment reference, creates refcount file and returns
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   746
                    # the acquired lock.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   747
                    lock = _image_refcount_adjust(temp_uri, 1, release=False)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   748
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   749
                    # Fetch URI from Glance into local file.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   750
                    images.fetch(task.context, url.netloc, temp_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   751
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   752
                    # Release acquired lock now that file is retrieved
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   753
                    lock.release()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   754
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   755
                except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   756
                    LOG.error(_LE("Unable to fetch Glance image: id %s: %s")
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   757
                              % (url.netloc, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   758
                    raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   759
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   760
                # Increase reference count for this image
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   761
                _image_refcount_adjust(temp_uri, 1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   762
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   763
        else:   # http/file scheme handled directly by curl
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   764
            if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   765
                _fd, temp_uri = tempfile.mkstemp(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   766
                    dir=CONF.solaris_ipmi.imagecache_dirname)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   767
                cmd = ["/usr/bin/curl", "-sS", "-o", temp_uri, uri]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   768
                pc = Popen(cmd, stdout=PIPE, stderr=PIPE)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   769
                _stdout, err = pc.communicate()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   770
                if pc.returncode != 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   771
                    err_msg = _("Failed to retrieve image: %s") % err
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   772
                    raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   773
            else:  # Linux compat
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   774
                temp_uri = os.path.join(CONF.solaris_ipmi.imagecache_dirname,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   775
                                        url.path.replace("/", ""))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   776
                if not os.path.isfile(temp_uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   777
                    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   778
                        # Increment reference, creates refcount file and
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   779
                        # returns the acquired lock.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   780
                        lock = _image_refcount_adjust(temp_uri, 1,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   781
                                                      release=False)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   782
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   783
                        # Actually fetch the image
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   784
                        cmd = ["/usr/bin/curl", "-sS", "-o", temp_uri, uri]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   785
                        pc = Popen(cmd, stdout=PIPE, stderr=PIPE)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   786
                        _stdout, err = pc.communicate()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   787
                        if pc.returncode != 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   788
                            err_msg = _("Failed to retrieve image: %s") % err
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   789
                            _image_refcount_adjust(temp_uri, -1)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   790
                            raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   791
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   792
                        # Release acquired lock now that file is retrieved
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   793
                        lock.release()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   794
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   795
                    except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   796
                        LOG.error(_LE("Unable to fetch image: id %s: %s")
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   797
                                  % (url.netloc, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   798
                        raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   799
                else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   800
                    # Increase reference count for this image
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   801
                    _image_refcount_adjust(temp_uri, 1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   802
    except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   803
        # Only remove the temporary file if exception occurs
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   804
        # as noted above Caller is responsible for its removal
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   805
        LOG.error(_LE("Unable to fetch image: uri %s: %s") % (uri, err))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   806
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   807
            _image_refcount_adjust(temp_uri, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   808
        else:
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   809
            try:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   810
                os.remove(temp_uri)
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   811
            except OSError as err:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   812
                if err.errno != errno.ENOENT:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   813
                    raise
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   814
        raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   815
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   816
    return temp_uri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   817
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   818
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   819
def _get_archive_iso_and_uuid(mount_dir, extract_iso=False):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   820
    """Get ISO name and UUID
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   821
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   822
    Retrieved from mounted archive if on Solaris
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   823
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   824
    On non-Solaris systems we cannot mount a UAR so we need to parse the
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   825
    contents of the unified archive and extract ISO and UUID from
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   826
    cached UAR. In this scenario the caller is responsible for removing
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   827
    the extracted file.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   828
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   829
    :param mount_dir: Location of locally mounted UAR or locally cached UAR
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   830
    :param extract_iso: Whether to extract ISO file to temp file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   831
    :returns: Extracted ISO location and UUID
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   832
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   833
    LOG.debug("SolarisDeploy._get_archive_iso_and_uuid:mount_dir: '%s'" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   834
              (mount_dir))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   835
    uuid = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   836
    iso = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   837
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   838
    if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   839
        ovf_dir = os.path.join(mount_dir, "OVF")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   840
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   841
        for uar_file in os.listdir(ovf_dir):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   842
            if uar_file.endswith('.ovf'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   843
                uuid = uar_file.split('.ovf')[0]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   844
            elif uar_file.endswith('.iso'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   845
                iso = os.path.join(ovf_dir, uar_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   846
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   847
        tf = tarfile.open(name=mount_dir)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   848
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   849
        for ti in tf.getmembers():
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   850
            if ti.path.endswith('.ovf'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   851
                uuid = ti.path.split('.ovf')[0]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   852
            elif ti.path.endswith('.iso') and extract_iso:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   853
                try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   854
                    temp_tar_dir = tempfile.mkdtemp(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   855
                        dir=CONF.solaris_ipmi.imagecache_dirname)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   856
                    tf.extractall(path=temp_tar_dir, members=[ti])
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   857
                    iso = os.path.join(temp_tar_dir, ti.path)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   858
                except:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   859
                    # Remove temp_tar_dir and contents
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   860
                    shutil.rmtree(temp_tar_dir)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   861
                    raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   862
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   863
    return iso, uuid
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   864
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   865
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   866
def _mount_archive(task, archive_uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   867
    """Mount a unified archive
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   868
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   869
    :param archive_uri: URI of unified archive to mount
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   870
    :returns: Path to mounted unified archive
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   871
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   872
    LOG.debug("SolarisDeploy._mount_archive:archive_uri: '%s'" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   873
              (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   874
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   875
    if urlparse(archive_uri).scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   876
        # TODO(mattk):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   877
        # Ideally mounting the http ISO directly is preferred.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   878
        # However mount(1M), does not support auth_token
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   879
        # thus we must fetch the image locally and then mount the
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   880
        # local image.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   881
        # Tried putting a proxy in place to intercept the mount(1M)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   882
        # http request and adding an auth_token as it proceeds.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   883
        # However mount(1M) launches a new SMF instance for each HTTP
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   884
        # mount request, and each SMF instance has a minimal environment
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   885
        # set, which does not include http_proxy, thus the custom local
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   886
        # proxy never gets invoked.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   887
        # Would love to have a new mount(1M) option to accept either
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   888
        # a proxy e.g. -o proxy=<proxy> or to accept setting of http headers
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   889
        # e.g. -o http_header="X-Auth-Token: askdalksjdlakjsd"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   890
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   891
        # Retrieve UAR to local temp file for mounting
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   892
        temp_uar = _fetch_uri(task, archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   893
        archive_mount = temp_uar
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   894
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   895
        # Can mount archive directly
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   896
        temp_uar = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   897
        archive_mount = archive_uri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   898
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   899
    mount_dir = tempfile.mkdtemp(dir=CONF.solaris_ipmi.imagecache_dirname)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   900
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   901
    cmd = ["/usr/sbin/mount", "-F", "uvfs", "-o",
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   902
           "archive=%s" % (archive_mount), "/usr/lib/fs/uafs/uafs", mount_dir]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   903
    LOG.debug("SolarisDeploy._mount_archive:cmd: '%s'" % (cmd))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   904
    pc = Popen(cmd, stdout=PIPE, stderr=PIPE)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   905
    _stdout, err = pc.communicate()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   906
    if pc.returncode != 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   907
        err_msg = _("Failed to mount UAR %s: %s") % (archive_uri, err)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   908
        shutil.rmtree(mount_dir)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   909
        raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   910
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   911
    return mount_dir, temp_uar
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   912
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   913
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   914
def _umount_archive(mount_dir):
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   915
    """ Unmount archive and remove mount point directory
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   916
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   917
    :param mount_dir: Path to mounted archive
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   918
    :param temp_uar: Path to glance local uar to remove
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   919
    """
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   920
    LOG.debug("SolarisDeploy._umount_archive:mount_dir: '%s'" % (mount_dir))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   921
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   922
    cmd = ["/usr/sbin/umount", mount_dir]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   923
    pc = Popen(cmd, stdout=PIPE, stderr=PIPE)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   924
    _stdout, err = pc.communicate()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   925
    if pc.returncode != 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   926
        err_msg = _("Failed to unmount UAR %s: %s") % (mount_dir, err)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   927
        raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   928
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   929
    shutil.rmtree(mount_dir)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   930
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   931
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   932
def _get_archive_uuid(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   933
    """Get the UUID of an archive
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   934
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   935
    :param task: a TaskManager instance
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   936
    :returns: UUID string for an archive otherwise raise exception
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   937
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   938
    LOG.debug("SolarisDeploy._get_archive_uuid")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   939
    uuid = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   940
    archive_uri = task.node.driver_info['archive_uri']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   941
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   942
    if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   943
        mount_dir, temp_uar = _mount_archive(task, archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   944
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   945
            _iso, uuid = _get_archive_iso_and_uuid(mount_dir)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   946
        except:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   947
            _umount_archive(mount_dir)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   948
            raise
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   949
        _umount_archive(mount_dir)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   950
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   951
        temp_uar = _fetch_uri(task, archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   952
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   953
            _iso, uuid = _get_archive_iso_and_uuid(temp_uar)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   954
        except:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   955
            _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   956
            raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   957
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   958
    if uuid is None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   959
        err_msg = _("Failed to extract UUID from UAR: %s") % archive_uri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   960
        if PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   961
            _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   962
        raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   963
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   964
    LOG.debug("SolarisDeploy._get_archive_uuid: uuid: %s" % (uuid))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   965
    return uuid
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   966
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   967
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   968
def _validate_archive_uri(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   969
    """Validate archive_uri for reachable, format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   970
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   971
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   972
    :raises: InvalidParameterValie if invalid archive_uri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   973
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   974
    LOG.debug("SolarisDeploy._validate_archive_uri")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   975
    archive_uri = task.node.driver_info['archive_uri']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   976
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   977
    url = urlparse(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   978
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   979
    if url.scheme not in VALID_ARCHIVE_SCHEMES:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   980
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   981
            "Unsupported archive scheme (%s) referenced in archive_uri (%s).")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   982
            % (url.scheme, archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   983
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   984
    if not url.netloc and not url.path:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   985
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   986
            "Missing archive name in archive_uri (%s).") % (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   987
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   988
    if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   989
        # Glance schema only supported if using keystone authorization
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   990
        # otherwise ironic being used standalone
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   991
        if CONF.auth_strategy != "keystone":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   992
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   993
                "Glance scheme only supported when using Keystone (%s).")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   994
                % (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   995
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   996
        # Format : glance://<glance UUID>
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   997
        # When parsed by urlparse, Glance image uuid appears as netloc param
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   998
        if not url.netloc:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   999
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1000
                "Missing Glance image UUID archive_uri (%s).")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1001
                % (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1002
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1003
        # Validate glance image exists by attempting to get download size
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1004
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1005
            size = images.download_size(task.context, url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1006
            LOG.debug("Image %s size: %s" % (url.netloc, str(size)))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1007
            if not size:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1008
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1009
                    "Glance image not found: %s") % (url.netloc))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1010
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1011
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1012
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1013
                "Failed to validate Glance image '%s': %s") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1014
                (url.netloc, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1015
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1016
    elif url.scheme in ["http", "https"]:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1017
        # Presuming client authentication using HTTPS is not being used.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1018
        # Just a secure connection.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1019
        # TODO(mattk): Do I need to support client side HTTPS authentication
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1020
        if not _url_exists(archive_uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1021
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1022
                "archive_uri does not exist (%s).") % (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1023
    elif url.scheme == "file":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1024
        file_path = os.path.join(os.sep,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1025
                                 url.netloc.strip(os.sep),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1026
                                 url.path.strip(os.sep))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1027
        if not os.path.isfile(file_path):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1028
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1029
                "archive_uri does not exist (%s).") % (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1030
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1031
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1032
def _format_archive_uri(task, archive_uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1033
    """Format archive URL to be passed as boot argument to AI client
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1034
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1035
    Transformation of archive_uri is only required if URI scheme is glance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1036
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1037
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1038
    :param archive_uri: URI path to unified archive
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1039
    :returns: Formatted archive URI, and auth_token if needed
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1040
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1041
    LOG.debug("SolarisDeploy._format_archive_uri: archive_uri: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1042
              (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1043
    if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1044
        url = urlparse(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1045
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1046
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1047
            # Transform uri from glance://<UUID> to
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1048
            # direct glance URL glance://<GLANCE_REST_API>/<UUID>
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1049
            new_uri = "http://%s:%s/v2/images/%s/file" % \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1050
                (CONF.glance.glance_host, CONF.glance.glance_port,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1051
                 url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1052
            auth_token = task.context.auth_token
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1053
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1054
            new_uri = archive_uri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1055
            auth_token = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1056
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1057
        new_uri = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1058
        auth_token = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1059
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1060
    return new_uri, auth_token
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1061
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1062
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1063
def _validate_ai_manifest(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1064
    """Validate ai_manifest for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1065
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1066
    driver_info/ai_manifest is used to specify a path to a single
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1067
    AI manifest to be used instead of the default derived script.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1068
    e.g. http://path-to-manifest
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1069
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1070
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1071
    :raises: InvalidParameterValue if invalid ai_manifest
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1072
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1073
    LOG.debug("SolarisDeploy._validate_ai_manifest")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1074
    ai_manifest = task.node.driver_info['ai_manifest']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1075
    _validate_uri(task, ai_manifest)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1076
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1077
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1078
def _validate_profiles(task, profiles):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1079
    """Validate profiles for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1080
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1081
    Configuration profiles are specified as a plus(+) delimited list of paths
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1082
    e.g. http://path-to-profile+http://path-to-another-profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1083
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1084
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1085
    :param profiles: Plus(+) delimited list of configuration profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1086
    :raises: InvalidParameterValue if invalid configuration profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1087
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1088
    LOG.debug("SolarisDeploy._validate_profiles: %s" % (profiles))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1089
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1090
    # Split profiles into list of paths@environment elements
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1091
    prof_list = [prof.strip() for prof in profiles.split('+') if prof.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1092
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1093
    for profile in prof_list:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1094
        _validate_uri(task, profile)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1095
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1096
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1097
def _validate_uri(task, uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1098
    """Validate URI for AI Manifest or SC Profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1099
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1100
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1101
    :param uri: URI to AI Manifest or SC profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1102
    :raises: InvalidParameterValue if invalid manifest/profile URI
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1103
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1104
    LOG.debug("SolarisDeploy._validate_uri: URI: %s" % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1105
    url = urlparse(uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1106
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1107
    if url.scheme not in VALID_URI_SCHEMES:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1108
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1109
            "Unsupported uri scheme (%s) referenced"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1110
            " in URI (%s).") % (url.scheme, uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1111
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1112
    if not url.netloc and not url.path:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1113
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1114
            "Missing URI name (%s).") % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1115
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1116
    if url.scheme in ["http", "https"]:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1117
        # Presuming client authentication using HTTPS is not being used.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1118
        # Just a secure connection.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1119
        # TODO(mattk): Do I need to support client side HTTPS authentication
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1120
        if not _url_exists(uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1121
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1122
                "URI does not exist (%s).") % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1123
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1124
            LOG.debug("SolarisDeploy._validate_uri: %s exists." %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1125
                      (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1126
    elif url.scheme == "file":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1127
        file_path = os.path.join(os.sep,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1128
                                 url.netloc.strip(os.sep),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1129
                                 url.path.strip(os.sep))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1130
        if not os.path.isfile(file_path):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1131
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1132
                "URI does not exist (%s).") % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1133
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1134
            LOG.debug("SolarisDeploy._validate_uri: %s exists." %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1135
                      (url.scheme))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1136
    elif url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1137
        # Glance schema only supported if using keystone authorization
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1138
        # otherwise ironic being used standalone
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1139
        if CONF.auth_strategy != "keystone":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1140
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1141
                "Glance scheme only supported when using Keystone (%s).")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1142
                % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1143
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1144
        # Format : glance://<glance UUID>
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1145
        # When parsed by urlparse, Glance image uuid appears as netloc param
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1146
        if not url.netloc:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1147
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1148
                "Missing Glance image UUID for URI (%s).")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1149
                % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1150
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1151
        # Validate glance uri exists by attempting to get download size
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1152
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1153
            size = images.download_size(task.context, url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1154
            LOG.debug("Image %s size: %s" % (url.netloc, str(size)))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1155
            if not size:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1156
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1157
                    "Glance image not found: %s") % (url.netloc))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1158
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1159
                LOG.debug("SolarisDeploy._validate_uri: %s exists." %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1160
                          (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1161
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1162
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1163
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1164
                "Failed to validate Glance URI '%s': %s") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1165
                (url.netloc, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1166
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1167
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1168
def _validate_fmri(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1169
    """Validate fmri for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1170
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1171
    driver_info/fmri is a plus(+) delimited list of IPS package
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1172
    FMRIs to be installed. e.g. pkg:/pkg1+pkg:/pkg2
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1173
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1174
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1175
    :raises: InvalidParameterValue if invalid fmri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1176
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1177
    LOG.debug("SolarisDeploy._validate_fmri")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1178
    fmri = task.node.driver_info['fmri']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1179
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1180
    # Split fmri into list of possible packages
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1181
    pkg_list = [pkg.strip() for pkg in fmri.split('+') if pkg.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1182
    for fmri in pkg_list:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1183
        _validate_fmri_format(fmri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1184
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1185
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1186
def _validate_fmri_format(fmri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1187
    """Validate FMRI for format
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1188
    FMRI must not contain the publisher and must be of the format:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1189
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1190
            pkg:/<package path>
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1191
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1192
    Note the fmri only contains a single backslash.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1193
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1194
    :param fmri: IPS FMRI
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1195
    :raises: InvalidParameterValue if invalid FMRI
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1196
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1197
    LOG.debug("SolarisDeploy._validate_fmri_format: fmri: %s" % (fmri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1198
    url = urlparse(fmri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1199
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1200
    if url.scheme != "pkg":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1201
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1202
            "Unsupported IPS scheme (%s) referenced in fmri (%s).")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1203
            % (url.scheme, fmri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1204
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1205
    if url.netloc:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1206
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1207
            "Cannot specify publisher name in fmri (%s).") % (fmri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1208
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1209
    if not url.path:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1210
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1211
            "Missing IPS package name in fmri (%s).") % (fmri))
4590
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1212
    elif PLATFORM == "SunOS":
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1213
        # Validate package name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1214
        if not is_valid_pkg_name(url.path.strip("/")):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1215
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1216
                "Malformed IPS package name in fmri (%s).") % (fmri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1217
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1218
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1219
def _validate_publishers(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1220
    """Validate custom publisher name/origins for format
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1221
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1222
    publishers property is a plus(+) delimited list of IPS publishers
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1223
    to be installed from, in the format name@origin. e.g.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1224
        solaris@http://pkg.oracle.com/solaris+extra@http://int.co.com/extras
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1225
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1226
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1227
    :raises: InvalidParameterValue if invalid publisher
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1228
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1229
    LOG.debug("SolarisDeploy._validate_publishers")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1230
    pubs = task.node.driver_info['publishers']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1231
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1232
    # Split publishers into list of name@origin publishers
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1233
    pub_list = [pub.strip() for pub in pubs.split('+') if pub.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1234
    for pub in pub_list:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1235
        # Split into name origin
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1236
        name, origin = pub.split('@', 1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1237
        if not name or not origin:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1238
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1239
                "Malformed IPS publisher must be of format "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1240
                "name@origin (%s).") % (pub))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1241
4590
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1242
        if PLATFORM == "SunOS":
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1243
            if not valid_pub_prefix(name):
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1244
                raise exception.InvalidParameterValue(_(
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1245
                    "Malformed IPS publisher name (%s).") % (name))
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1246
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1247
            if not valid_pub_url(origin):
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1248
                raise exception.InvalidParameterValue(_(
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1249
                    "Malformed IPS publisher origin (%s).") % (origin))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1250
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1251
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1252
def _fetch_and_create(task, obj_type, obj_name, obj_uri, aiservice, mac,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1253
                      env=None):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1254
    """Fetch manifest/profile and create on AI Server
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1255
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1256
    :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1257
    :param obj_type: Type of AI object to create "manifest" or "profile"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1258
    :param obj_name: manifest/profile name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1259
    :param obj_uri: URI to manifest/profile to use
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1260
    :param aiservice: AI Service to create manifest/profile for
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1261
    :param mac: MAC address criteria to use
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1262
    :param env: Environment to apply profile to
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1263
    :raises: AICreateProfileFail or AICreateManifestFail
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1264
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1265
    # Fetch URI to local file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1266
    url = urlparse(obj_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1267
    temp_file = _fetch_uri(task, obj_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1268
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1269
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1270
        # scp temp file to AI Server
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1271
        remote_file = os.path.join("/tmp", obj_name) + ".xml"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1272
        aiservice.copy_remote_file(temp_file, remote_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1273
    except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1274
        LOG.error(_LE("Fetch and create failed for %s: name: %s: %s") %
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1275
                  (obj_type, obj_uri, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1276
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1277
            _image_refcount_adjust(temp_file, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1278
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1279
            os.remove(temp_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1280
        raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1281
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1282
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1283
        if obj_type == "manifest":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1284
            # Create AI Profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1285
            aiservice.create_manifest(obj_name, remote_file, mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1286
        elif obj_type == "profile":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1287
            # Create AI Profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1288
            aiservice.create_profile(obj_name, remote_file, mac, env)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1289
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1290
    except (AICreateManifestFail, AICreateProfileFail) as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1291
        aiservice.delete_remote_file(remote_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1292
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1293
            _image_refcount_adjust(temp_file, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1294
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1295
            os.remove(temp_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1296
        raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1297
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1298
    # Remove local and remote temporary profiles
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1299
    aiservice.delete_remote_file(remote_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1300
    if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1301
        _image_refcount_adjust(temp_file, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1302
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1303
        os.remove(temp_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1304
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1305
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1306
class DeployStateChecker(Thread):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1307
    """Thread class to check for deployment completion"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1308
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1309
    def __init__(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1310
        """Init method for thread class"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1311
        LOG.debug("DeployStateChecker.__init__()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1312
        Thread.__init__(self)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1313
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1314
        self.task = task
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1315
        self.node = task.node
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1316
        self._state = states.DEPLOYWAIT
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1317
        self._error = None
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1318
        self.ssh_connection = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1319
        self.running = True
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1320
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1321
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1322
    def state(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1323
        """Deployment state property"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1324
        return self._state
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1325
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1326
    @property
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1327
    def error(self):
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1328
        """Deployment error property"""
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1329
        return self._error
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1330
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1331
    def run(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1332
        """Start the thread """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1333
        LOG.debug("DeployStateChecker.run(): Connecting...")
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1334
        # Occasionally SSH connection fails, make three attempts
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1335
        # before returning failure.
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1336
        connection_attempt = 0
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1337
        while (connection_attempt < 3):
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1338
            try:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1339
                connection_attempt += 1
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1340
                client = utils.ssh_connect(self._get_ssh_dict())
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1341
                break
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1342
            except SSHException as err:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1343
                if connection_attempt < 3:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1344
                    continue
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1345
                else:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1346
                    self._state = states.DEPLOYFAIL
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1347
                    self._error = str(err)
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1348
                    self.stop()
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1349
                    return
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1350
        else:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1351
            self._state = states.DEPLOYFAIL
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1352
            self._error = "Failed to establish SSH Connection with node."
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1353
            self.stop()
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1354
            return
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1355
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1356
        channel = client.invoke_shell()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1357
        channel.settimeout(0.0)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1358
        channel.set_combine_stderr(True)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1359
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1360
        # Continuously read stdout from console and parse
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1361
        # specifically for success/failure output
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1362
        while self.running:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1363
            with tempfile.TemporaryFile(dir='/var/lib/ironic') as tf:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1364
                while True:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1365
                    rchans, _wchans, _echans = select.select([channel], [], [])
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1366
                    if channel in rchans:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1367
                        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1368
                            console_data = ""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1369
                            while channel.recv_ready():
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1370
                                console_data += channel.recv(1024)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1371
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1372
                            if len(console_data) == 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1373
                                tf.write("\n*** EOF\n")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1374
                                # Confirm string to search for on success
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1375
                                if self._string_in_file(tf, AI_SUCCESS_STRING):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1376
                                    self._state = states.DEPLOYDONE
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1377
                                else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1378
                                    # Didn't succeed so default to failure
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1379
                                    self._state = states.DEPLOYFAIL
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1380
                                self.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1381
                                break
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1382
                            tf.write(console_data)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1383
                            tf.flush()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1384
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1385
                            # Read input buffer for prompt
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1386
                            if re.search("->", console_data):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1387
                                # Send console start command
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1388
                                channel.send("start -script SP/Console\n")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1389
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1390
                            # Cater for Yes/No prompts always sending Yes
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1391
                            elif re.search("y/n", console_data):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1392
                                channel.send("y\n")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1393
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1394
                            # Confirm string to search for on success
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1395
                            elif self._string_in_file(tf, AI_SUCCESS_STRING):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1396
                                LOG.debug("DeployStateChecker.run(): Done")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1397
                                self._state = states.DEPLOYDONE
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1398
                                self.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1399
                                break
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1400
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1401
                            # Confirm string to search for on failure
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1402
                            elif self._string_in_file(tf, AI_FAILURE_STRING):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1403
                                LOG.debug("DeployStateChecker.run(): FAIL")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1404
                                self._state = states.DEPLOYFAIL
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1405
                                self.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1406
                                break
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1407
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1408
                            elif self._string_in_file(tf, AI_DEPLOY_STRING):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1409
                                LOG.debug(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1410
                                    "DeployStateChecker.run(): DEPLOYING")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1411
                                self._state = states.DEPLOYING
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1412
                        except socket.timeout:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1413
                            pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1414
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1415
    def stop(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1416
        """Stop the thread"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1417
        LOG.debug("DeployStateChecker.stop()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1418
        self.running = False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1419
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1420
    def _string_in_file(self, fp, string):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1421
        """Read all data from file checking for string presence
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1422
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1423
        :param fp: Open file pointer to read
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1424
        :param string: Specific string to check for
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1425
        :returns: boolean True of string present in file, False if not
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1426
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1427
        found_string = False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1428
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1429
        # Position read at start of file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1430
        fp.seek(0)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1431
        for line in fp:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1432
            if re.search(string, line):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1433
                found_string = True
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1434
                break
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1435
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1436
        # Return current read point to end of file for subsequent writes
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1437
        fp.seek(0, 2)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1438
        return found_string
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1439
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1440
    def _get_ssh_dict(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1441
        """Generate SSH Dictionary for SSH Connection via paramiko
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1442
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1443
        :returns: dictionary for paramiko connection
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1444
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1445
        LOG.debug("DeployStateChecker._get_ssh_dict()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1446
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1447
        driver_info = _parse_driver_info(self.node)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1448
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1449
        ssh_dict = {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1450
            'host': driver_info.get('address'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1451
            'username': driver_info.get('username'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1452
            'port': driver_info.get('port', 22)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1453
            }
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1454
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1455
        if ssh_dict.get('port') is not None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1456
            ssh_dict['port'] = int(ssh_dict.get('port'))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1457
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1458
            del ssh_dict['port']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1459
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1460
        if driver_info['password']:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1461
            ssh_dict['password'] = driver_info['password']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1462
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1463
        LOG.debug("DeployStateChecker._get_ssh_dict():ssh_dict: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1464
                  (ssh_dict))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1465
        return ssh_dict
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1466
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1467
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1468
class SolarisDeploy(base.DeployInterface):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1469
    """AI Deploy Interface """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1470
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1471
    def get_properties(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1472
        """Return Solaris driver properties"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1473
        return COMMON_PROPERTIES
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1474
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1475
    def validate(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1476
        """Validate the driver-specific Node deployment info.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1477
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1478
        :param task: a task from TaskManager.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1479
        :raises: InvalidParameterValue.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1480
        :raises: MissingParameterValue.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1481
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1482
        LOG.debug("SolarisDeploy.validate()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1483
        LOG.debug(task.context.auth_token)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1484
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1485
        # Validate IPMI credentials by getting node architecture
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1486
        try:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1487
            _cpu_arch = _get_node_architecture(task.node)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1488
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1489
            raise exception.InvalidParameterValue(_(err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1490
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1491
        if not driver_utils.get_node_mac_addresses(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1492
            raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1493
                _("Node %s does not have any port associated with it.") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1494
                (task.node.uuid))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1495
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1496
        # Ensure server configured
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1497
        if not CONF.ai.server or CONF.ai.server == "None":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1498
            raise exception.MissingParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1499
                _("AI Server not specified in configuration file."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1500
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1501
        # Ensure username configured
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1502
        if not CONF.ai.username or CONF.ai.username == "None":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1503
            raise exception.MissingParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1504
                _("AI Server user not specified in configuration file."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1505
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1506
        # One of ssh_key_file / ssh_key_contents / password must be configured
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1507
        if ((not CONF.ai.password or CONF.ai.password == "None") and
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1508
            (not CONF.ai.ssh_key_file or CONF.ai.ssh_key_file == "None") and
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1509
            (not CONF.ai.ssh_key_contents or
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1510
                CONF.ai.ssh_key_contents == "None")):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1511
            raise exception.MissingParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1512
                _("AI Server authentication not specified. One of password, "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1513
                  "ssh_key_file and ssh_key_contents must be present in "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1514
                  "configuration file."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1515
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1516
        # archive_uri, publishers or fmri are ignored if a ai_manifest is
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1517
        # defined. They should be contained within the custom manifest itself
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1518
        if (task.node.driver_info.get('ai_manifest') and
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1519
            (task.node.driver_info.get('archive_uri') or
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1520
            task.node.driver_info.get('publishers') or
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1521
                task.node.driver_info.get('fmri'))):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1522
            raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1523
                _("Custom Archive, Publishers or FMRI cannot be specified "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1524
                  "when specifying a custom AI Manifest. They should be "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1525
                  "contained within this custom AI Manifest."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1526
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1527
        # Ensure ai_service is valid if specified in driver
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1528
        if task.node.driver_info.get('ai_service'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1529
            aiservice = AIService(task,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1530
                                  task.node.driver_info.get('ai_service'))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1531
            if not aiservice.exists:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1532
                raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1533
                    _("AI Service %s does not exist.") % (aiservice.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1534
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1535
        # Ensure node archive_uri is valid if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1536
        if task.node.driver_info.get('archive_uri'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1537
            # Validate archive_uri for reachable, format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1538
            _validate_archive_uri(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1539
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1540
        # Ensure custom publisher provided if FMRI provided
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1541
        if task.node.driver_info.get('fmri') and \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1542
                not task.node.driver_info.get('publishers'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1543
            raise exception.MissingParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1544
                "Must specify custom publisher with custom fmri."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1545
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1546
        # Ensure node publishers are valid if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1547
        if task.node.driver_info.get('publishers'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1548
            # Validate publishers for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1549
            _validate_publishers(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1550
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1551
        # Ensure node fmri is valid if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1552
        if task.node.driver_info.get('fmri'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1553
            # Validate fmri for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1554
            _validate_fmri(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1555
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1556
        # Ensure node sc_profiles is valid if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1557
        if task.node.driver_info.get('sc_profiles'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1558
            # Validate sc_profiles for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1559
            _validate_profiles(task, task.node.driver_info.get('sc_profiles'))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1560
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1561
        # Ensure node install_profiles is valid if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1562
        if task.node.driver_info.get('install_profiles'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1563
            # Validate install_profiles for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1564
            _validate_profiles(task,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1565
                               task.node.driver_info.get('install_profiles'))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1566
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1567
        # Ensure node manifest is valid of specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1568
        if task.node.driver_info.get('ai_manifest'):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1569
            # Validate ai_manifest for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1570
            _validate_ai_manifest(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1571
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1572
        # Try to get the URL of the Ironic API
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1573
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1574
            CONF.conductor.api_url or keystone.get_service_url()
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1575
        except (exception.KeystoneFailure,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1576
                exception.KeystoneUnauthorized,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1577
                exception.CatalogNotFound):
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1578
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1579
                "Couldn't get the URL of the Ironic API service from the "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1580
                "configuration file or Keystone catalog."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1581
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1582
        # Validate driver_info by parsing contents
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1583
        _parse_driver_info(task.node)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1584
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1585
    @task_manager.require_exclusive_lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1586
    def deploy(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1587
        """Perform start deployment a node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1588
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1589
        For AI Deployment of x86 machines, we simply need to set the chassis
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1590
        boot device to pxe and reboot the physical node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1591
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1592
        For AI Deployment of SPARC Machines we need to supply a boot script
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1593
        indicating to perform a network DHCP boot.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1594
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1595
        AI Server settings for this node, e.g. client, manifest, boot args
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1596
        etc, will have been configured via prepare() method which is called
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1597
        before deploy().
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1598
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1599
        :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1600
        :returns: deploy state DEPLOYWAIT.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1601
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1602
        LOG.debug("SolarisDeploy.deploy()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1603
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1604
        cpu_arch = _get_node_architecture(task.node)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1605
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1606
        # Ensure persistence is false so net boot only occurs once
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1607
        if cpu_arch == 'x86':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1608
            # Set boot device to PXE network boot
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1609
            dev_cmd = 'pxe'
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1610
        elif cpu_arch == 'SPARC':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1611
            # Set bootmode script to network DHCP
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1612
            dev_cmd = 'wanboot'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1613
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1614
            raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1615
                _("Invalid node architecture of '%s'.") % (cpu_arch))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1616
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1617
        manager_utils.node_set_boot_device(task, dev_cmd,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1618
                                           persistent=False)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1619
        manager_utils.node_power_action(task, states.REBOOT)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1620
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1621
        deploy_thread = DeployStateChecker(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1622
        deploy_thread.start()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1623
        timer = loopingcall.FixedIntervalLoopingCall(_check_deploy_state,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1624
                                                     task, task.node.uuid,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1625
                                                     deploy_thread)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1626
        timer.start(interval=int(CONF.ai.deploy_interval))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1627
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1628
        return states.DEPLOYWAIT
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1629
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1630
    @task_manager.require_exclusive_lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1631
    def tear_down(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1632
        """Tear down a previous deployment.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1633
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1634
        Reset boot device or bootmode script and power off the node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1635
        All actual clean-up is done in the clean_up()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1636
        method which should be called separately.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1637
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1638
        :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1639
        :returns: deploy state DELETED.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1640
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1641
        LOG.debug("SolarisDeploy.tear_down()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1642
        manager_utils.node_set_boot_device(task, 'disk',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1643
                                           persistent=False)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1644
        manager_utils.node_power_action(task, states.POWER_OFF)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1645
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1646
        return states.DELETED
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1647
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1648
    def prepare(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1649
        """Prepare the deployment environment for this node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1650
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1651
        1. Ensure Node's AI Service is specified and it exists
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1652
        2. (Re)Create AI Clients for each port/Mac specified for this Node
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1653
        3. (Re)Create AI Manifest for each port/Mac specified for this Node
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1654
           with specific criteria of MAC address
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1655
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1656
        AI Service to use for installation is determined from
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1657
        driver_info properties archive_uri or ai_service. archive_uri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1658
        takes precedence over ai_service.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1659
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1660
        1. archive_uri specified.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1661
            Extract AI ISO from UAR and create a new AI service if service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1662
            for this ID does not exist.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1663
        2. ai_service specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1664
            AI Service must exist.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1665
        3. archive_uri & ai_service not specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1666
            Use default architecture specific service to perform IPS
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1667
            install.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1668
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1669
        :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1670
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1671
        LOG.debug("SolarisDeploy.prepare()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1672
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1673
        ai_manifest = task.node.driver_info.get('ai_manifest', None)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1674
        ai_service = task.node.driver_info.get('ai_service', None)
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1675
        cpu_arch = _get_node_architecture(task.node)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1676
        archive_uri = task.node.driver_info.get('archive_uri', None)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1677
        fmri = task.node.driver_info.get('fmri', None)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1678
        install_profiles = task.node.driver_info.get('install_profiles', None)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1679
        publishers = task.node.driver_info.get('publishers', None)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1680
        sc_profiles = task.node.driver_info.get('sc_profiles', None)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1681
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1682
        # Ensure cache dir exists
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1683
        if not os.path.exists(CONF.solaris_ipmi.imagecache_dirname):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1684
            os.makedirs(CONF.solaris_ipmi.imagecache_dirname)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1685
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1686
        # archive_uri, publishers or fmri are ignored if a ai_manifest is
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1687
        # defined. They should be contained within the custom manifest itself
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1688
        if ((ai_manifest) and (archive_uri or publishers or fmri)):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1689
            raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1690
                _("Custom Archive, Publishers or FMRI cannot be specified "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1691
                  "when specifying a custom AI Manifest. They should be "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1692
                  "contained within this custom AI Manifest."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1693
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1694
        # 1. Ensure Node's AI Service exists, if archive_uri then
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1695
        #    create a new service of UUID of archive does not already exist
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1696
        if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1697
            # Validate archive_uri, format, reachable, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1698
            _validate_archive_uri(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1699
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1700
            # Extract UUID from archive UAR and instantiate AIService
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1701
            ai_service = _get_archive_uuid(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1702
            aiservice = AIService(task, ai_service)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1703
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1704
        elif ai_service:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1705
            # Instantiate AIService object for this node/service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1706
            aiservice = AIService(task, ai_service)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1707
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1708
            # IPS Install, ensure default architecture service exists
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1709
            if cpu_arch == "x86":
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1710
                ai_service = "default-i386"
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1711
            elif cpu_arch == 'SPARC':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1712
                ai_service = "default-sparc"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1713
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1714
                raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1715
                    _("Invalid node architecture of '%s'.") % (cpu_arch))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1716
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1717
            # Instantiate AIService object for this node/service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1718
            aiservice = AIService(task, ai_service)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1719
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1720
        # Check if AI Service exists, raise exception of not
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1721
        if not aiservice.exists:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1722
            if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1723
                # Create this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1724
                aiservice.create_service(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1725
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1726
                raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1727
                    _("AI Service %s does not exist.") % (aiservice.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1728
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1729
        # Ensure custom publisher provided if FMRI provided
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1730
        if fmri and not publishers:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1731
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1732
                "Must specify custom publisher with custom fmri."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1733
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1734
        # Ensure node publishers are valid if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1735
        if publishers:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1736
            # Validate publishers for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1737
            _validate_publishers(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1738
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1739
        # Ensure node fmri is valid if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1740
        if fmri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1741
            # Validate fmri, format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1742
            _validate_fmri(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1743
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1744
        # Ensure node sc_profiles is of valid format if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1745
        if sc_profiles:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1746
            # Validate sc_profiles for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1747
            _validate_profiles(task, sc_profiles)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1748
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1749
        # Ensure node install_profiles is of valid format if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1750
        if install_profiles:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1751
            # Validate install_profiles for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1752
            _validate_profiles(task, install_profiles)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1753
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1754
        # Ensure node ai_manifest is valid if specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1755
        if ai_manifest:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1756
            # Validate ai_manifest for format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1757
            _validate_ai_manifest(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1758
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1759
        for mac in driver_utils.get_node_mac_addresses(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1760
            # 2. Recreate AI Clients for each port/Mac specified for this Node
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1761
            # Check if AI Client exists for this service and if so remove it
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1762
            if mac.lower() in aiservice.clients:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1763
                # Client exists remove it
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1764
                aiservice.delete_client(mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1765
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1766
            # Recreate new ai client for this mac address
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1767
            new_uri, auth_token = _format_archive_uri(task, archive_uri)
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1768
            aiservice.create_client(mac, cpu_arch, new_uri, auth_token,
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1769
                                    publishers, fmri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1770
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1771
            # 3. (Re)Create AI Manifest for each port/Mac specified for this
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1772
            #    Node. Manifest name will be MAC address stripped of colons
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1773
            manifest_name = mac.replace(':', '')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1774
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1775
            # Check if AI Manifest exists for this service and if so remove it
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1776
            if manifest_name in aiservice.manifests:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1777
                # Manifest exists remove it
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1778
                aiservice.delete_manifest(manifest_name)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1779
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1780
            # (Re)Create new ai Manifest for this mac address
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1781
            # If ai_manifest is specified use it as the manifest otherwise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1782
            # use derived manifest script specified by aiservice.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1783
            if ai_manifest is not None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1784
                # Fetch manifest locally, copy to AI Server so that
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1785
                # installadm create-manifest CLI works.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1786
                _fetch_and_create(task, "manifest", manifest_name, ai_manifest,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1787
                                  aiservice, mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1788
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1789
                _fetch_and_create(task, "manifest", manifest_name,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1790
                                  aiservice.derived_manifest, aiservice, mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1791
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1792
            # 4. (Re)Create AI Profiles for each port/MAC specified for this
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1793
            #   Node, adding a new profile for each SC Profile specified.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1794
            #   Profile Name will be MAC address prefix and counter suffix.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1795
            #   e.g. AAEEBBCCFF66-1
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1796
            profile_prefix = mac.replace(':', '') + "-"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1797
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1798
            # Remove all profiles associated with this MAC address and service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1799
            for profile_name in aiservice.profiles:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1800
                # Profile name starts with MAC address, assuming ironic
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1801
                # created this profile so remove it.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1802
                if profile_prefix in profile_name:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1803
                    aiservice.delete_profile(profile_name)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1804
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1805
            # Process both sc_profiles and install_profiles filtering into
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1806
            # unique list of profiles and environments to be applied to.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1807
            if install_profiles is not None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1808
                ins_list = [prof.strip() for prof in
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1809
                            install_profiles.split('+') if prof.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1810
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1811
                ins_list = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1812
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1813
            prof_dict = dict(((uri, "install") for uri in ins_list))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1814
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1815
            if sc_profiles is not None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1816
                sc_list = [prof.strip() for prof in sc_profiles.split('+')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1817
                           if prof.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1818
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1819
                sc_list = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1820
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1821
            for profile in sc_list:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1822
                if profile in prof_dict:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1823
                    prof_dict[profile] = "all"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1824
                else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1825
                    prof_dict[profile] = "system"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1826
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1827
            profile_index = 0
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1828
            for profile_uri, profile_env in prof_dict.iteritems():
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1829
                profile_index += 1
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1830
                profile_name = profile_prefix + str(profile_index)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1831
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1832
                # Fetch profile locally, copy to AI Server so that
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1833
                # installadm create-profile CLI works.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1834
                _fetch_and_create(task, "profile", profile_name, profile_uri,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1835
                                  aiservice, mac, env=profile_env)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1836
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1837
        # Ensure local copy of archive_uri is removed if not needed
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1838
        if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1839
            url = urlparse(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1840
            if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1841
                temp_uar = os.path.join(CONF.solaris_ipmi.imagecache_dirname,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1842
                                        url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1843
                _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1844
            elif PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1845
                temp_uar = os.path.join(CONF.solaris_ipmi.imagecache_dirname,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1846
                                        url.path.replace("/", ""))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1847
                _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1848
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1849
    def clean_up(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1850
        """Clean up the deployment environment for this node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1851
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1852
        As node is being torn down we need to clean up specific
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1853
        AI Clients and Manifests associated with MAC addresses
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1854
        associated with this node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1855
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1856
        1. Delete AI Clients for each port/Mac specified for this Node
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1857
        2. Delete AI Manifest for each port/Mac specified for this Node
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1858
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1859
        :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1860
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1861
        LOG.debug("SolarisDeploy.clean_up()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1862
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1863
        ai_service = task.node.driver_info.get('ai_service', None)
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1864
        cpu_arch = _get_node_architecture(task.node)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1865
        archive_uri = task.node.driver_info.get('archive_uri', None)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1866
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1867
        # Instantiate AIService object for this node/service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1868
        if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1869
            aiservice = AIService(task, _get_archive_uuid(task))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1870
        elif ai_service:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1871
            aiservice = AIService(task, ai_service)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1872
        else:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1873
            if cpu_arch == "x86":
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1874
                ai_service = "default-i386"
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1875
            elif cpu_arch == 'SPARC':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1876
                ai_service = "default-sparc"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1877
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1878
                raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1879
                    _("Invalid node architecture of '%s'.") % (cpu_arch))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1880
            aiservice = AIService(task, ai_service)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1881
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1882
        # Check if AI Service exists, log message if already removed
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1883
        if not aiservice.exists:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1884
            # There is nothing to clean up as service removed
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1885
            LOG.info(_LI("AI Service %s already removed.") % (aiservice.name))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1886
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1887
            for mac in driver_utils.get_node_mac_addresses(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1888
                # 1. Delete AI Client for this MAC Address
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1889
                if mac.lower() in aiservice.clients:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1890
                    aiservice.delete_client(mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1891
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1892
                # 2. Delete AI Manifest for this MAC Address
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1893
                manifest_name = mac.replace(':', '')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1894
                if manifest_name in aiservice.manifests:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1895
                    aiservice.delete_manifest(manifest_name)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1896
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1897
                # 3. Remove AI Profiles for this MAC Address
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1898
                profile_prefix = mac.replace(':', '') + "-"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1899
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1900
                # Remove all profiles associated with this MAC address
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1901
                for profile_name in aiservice.profiles:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1902
                    if profile_prefix in profile_name:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1903
                        aiservice.delete_profile(profile_name)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1904
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1905
        # Ensure local copy of archive_uri is removed if not needed
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1906
        if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1907
            url = urlparse(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1908
            if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1909
                temp_uar = os.path.join(CONF.solaris_ipmi.imagecache_dirname,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1910
                                        url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1911
                _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1912
            elif PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1913
                temp_uar = os.path.join(CONF.solaris_ipmi.imagecache_dirname,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1914
                                        url.path.replace("/", ""))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1915
                _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1916
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1917
    def take_over(self, _task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1918
        """Take over management of this task's node from a dead conductor."""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1919
        """ TODO(mattk): Determine if this is required"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1920
        LOG.debug("SolarisDeploy.take_over()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1921
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1922
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1923
class SolarisManagement(base.ManagementInterface):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1924
    """Management class for solaris nodes."""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1925
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1926
    def get_properties(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1927
        """Return Solaris driver properties"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1928
        return COMMON_PROPERTIES
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1929
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1930
    def __init__(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1931
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1932
            ipmitool._check_option_support(['timing', 'single_bridge',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1933
                                            'dual_bridge'])
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1934
        except OSError:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1935
            raise exception.DriverLoadError(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1936
                driver=self.__class__.__name__,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1937
                reason=_("Unable to locate usable ipmitool command in "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1938
                         "the system path when checking ipmitool version"))
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1939
        ipmitool._check_temp_dir()
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1940
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1941
    def validate(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1942
        """Check that 'driver_info' contains IPMI credentials.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1943
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1944
        Validates whether the 'driver_info' property of the supplied
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1945
        task's node contains the required credentials information.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1946
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1947
        :param task: a task from TaskManager.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1948
        :raises: InvalidParameterValue if required IPMI parameters
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1949
            are missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1950
        :raises: MissingParameterValue if a required parameter is missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1951
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1952
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1953
        _parse_driver_info(task.node)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1954
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1955
    def get_supported_boot_devices(self, task=None):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1956
        """Get a list of the supported boot devices.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1957
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1958
        :param task: a task from TaskManager.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1959
        :returns: A list with the supported boot devices defined
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1960
                  in :mod:`ironic.common.boot_devices`.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1961
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1962
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1963
        if task is None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1964
            return [boot_devices.PXE, boot_devices.DISK, boot_devices.CDROM,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1965
                    boot_devices.BIOS, boot_devices.SAFE]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1966
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1967
            # Get architecture of node and return supported boot devices
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1968
            cpu_arch = _get_node_architecture(task.node)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1969
            if cpu_arch == 'x86':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1970
                return [boot_devices.PXE, boot_devices.DISK,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1971
                        boot_devices.CDROM, boot_devices.BIOS,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1972
                        boot_devices.SAFE]
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1973
            elif cpu_arch == 'SPARC':
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1974
                return [boot_devices.DISK, boot_devices.WANBOOT]
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1975
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1976
                raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1977
                    _("Invalid node architecture of '%s'.") % (cpu_arch))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1978
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1979
    @task_manager.require_exclusive_lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1980
    def set_boot_device(self, task, device, persistent=False):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1981
        """Set the boot device for the task's node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1982
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1983
        Set the boot device to use on next reboot of the node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1984
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1985
        :param task: a task from TaskManager.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1986
        :param device: the boot device, one of
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1987
                       :mod:`ironic.common.boot_devices`.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1988
        :param persistent: Boolean value. True if the boot device will
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1989
                           persist to all future boots, False if not.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1990
                           Default: False.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1991
        :raises: InvalidParameterValue if an invalid boot device is specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1992
        :raises: MissingParameterValue if required ipmi parameters are missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1993
        :raises: IPMIFailure on an error from ipmitool.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1994
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1995
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1996
        LOG.debug("SolarisManagement.set_boot_device: %s" % device)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1997
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1998
        cpu_arch = _get_node_architecture(task.node)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1999
        archive_uri = task.node.driver_info.get('archive_uri')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2000
        publishers = task.node.driver_info.get('publishers')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2001
        fmri = task.node.driver_info.get('fmri')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2002
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2003
        if task.node.driver_info.get('ipmi_force_boot_device', False):
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2004
            driver_utils.force_persistent_boot(task,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2005
                                               device,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2006
                                               persistent)
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2007
            # Reset persistent to False, in case of BMC does not support
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2008
            # persistent or we do not have admin rights.
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2009
            persistent = False
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2010
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2011
        if cpu_arch == 'x86':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2012
            if device not in self.get_supported_boot_devices(task=task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2013
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2014
                    "Invalid boot device %s specified.") % device)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2015
            cmd = ["chassis", "bootdev", device]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2016
            if persistent:
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
  2017
                cmd.append("options=persistent")
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2018
        elif cpu_arch == 'SPARC':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2019
            # Set bootmode script to network DHCP or disk
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2020
            if device == boot_devices.WANBOOT:
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2021
                boot_cmd = 'set /HOST/bootmode script="'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2022
                script_str = 'boot net:dhcp - install'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2023
                if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2024
                    new_uri, auth_token = _format_archive_uri(task,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2025
                                                              archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2026
                    script_str += ' archive_uri=%s' % (new_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2027
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2028
                    if auth_token is not None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2029
                        # Add auth_token to boot arg, AI archive transfer will
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2030
                        # use this by setting X-Auth-Token header when using
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2031
                        # curl to retrieve archive from glance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2032
                        script_str += ' auth_token=%s' % \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2033
                            (task.context.auth_token)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2034
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2035
                if publishers:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2036
                    pub_list = [pub.strip() for pub in publishers.split('+')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2037
                                if pub.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2038
                    script_str += ' publishers=%s' % ('+'.join(pub_list))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2039
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2040
                if fmri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2041
                    pkg_list = [pkg.strip() for pkg in fmri.split('+')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2042
                                if pkg.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2043
                    script_str += ' fmri=%s' % ('+'.join(pkg_list))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2044
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2045
                # bootmode script property has a size restriction of 255
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2046
                # characters raise error if this is breached.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2047
                if len(script_str) > 255:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2048
                    raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2049
                        "SPARC firmware bootmode script length exceeds 255:"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2050
                        " %s") % script_str)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2051
                boot_cmd += script_str + '"'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2052
                cmd = ['sunoem', 'cli', boot_cmd]
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2053
            elif device == boot_devices.DISK:
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2054
                cmd = ['sunoem', 'cli',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2055
                       'set /HOST/bootmode script=""']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2056
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2057
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2058
                    "Invalid boot device %s specified.") % (device))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2059
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2060
            raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2061
                _("Invalid node architecture of '%s'.") % (cpu_arch))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2062
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2063
        driver_info = _parse_driver_info(task.node)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2064
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2065
            _out, _err = _exec_ipmitool(driver_info, cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2066
        except (exception.PasswordFileFailedToCreate,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2067
                processutils.ProcessExecutionError) as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2068
            LOG.warning(_LW('IPMI set boot device failed for node %(node)s '
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2069
                            'when executing "ipmitool %(cmd)s". '
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2070
                            'Error: %(error)s'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2071
                        {'node': driver_info['uuid'],
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2072
                         'cmd': cmd, 'error': err})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2073
            raise exception.IPMIFailure(cmd=cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2074
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2075
    def get_boot_device(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2076
        """Get the current boot device for the task's node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2077
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2078
        Returns the current boot device of the node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2079
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2080
        :param task: a task from TaskManager.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2081
        :raises: InvalidParameterValue if required IPMI parameters
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2082
            are missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2083
        :raises: IPMIFailure on an error from ipmitool.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2084
        :raises: MissingParameterValue if a required parameter is missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2085
        :returns: a dictionary containing:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2086
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2087
            :boot_device: the boot device, one of
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2088
                :mod:`ironic.common.boot_devices` or None if it is unknown.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2089
            :persistent: Whether the boot device will persist to all
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2090
                future boots or not, None if it is unknown.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2091
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2092
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2093
        LOG.debug("SolarisManagement.get_boot_device")
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2094
        driver_info = task.node.driver_info
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2095
        driver_internal_info = task.node.driver_internal_info
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2096
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2097
        if (driver_info.get('ipmi_force_boot_device', False) and
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2098
                driver_internal_info.get('persistent_boot_device') and
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2099
                driver_internal_info.get('is_next_boot_persistent', True)):
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2100
            return {
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2101
                'boot_device': driver_internal_info['persistent_boot_device'],
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2102
                'persistent': True
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2103
            }
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2104
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2105
        cpu_arch = _get_node_architecture(task.node)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2106
        driver_info = _parse_driver_info(task.node)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2107
        response = {'boot_device': None, 'persistent': None}
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2108
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2109
        if cpu_arch == 'x86':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2110
            cmd = ["chassis", "bootparam", "get", "5"]
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2111
        elif cpu_arch == 'SPARC':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2112
            cmd = ['sunoem', 'getval', '/HOST/bootmode/script']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2113
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2114
            raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2115
                _("Invalid node architecture of '%s'.") % (cpu_arch))
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2116
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2117
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2118
            out, _err = _exec_ipmitool(driver_info, cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2119
        except (exception.PasswordFileFailedToCreate,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2120
                processutils.ProcessExecutionError) as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2121
            LOG.warning(_LW('IPMI get boot device failed for node %(node)s '
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2122
                            'when executing "ipmitool %(cmd)s". '
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2123
                            'Error: %(error)s'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2124
                        {'node': driver_info['uuid'],
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2125
                         'cmd': cmd, 'error': err})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2126
            raise exception.IPMIFailure(cmd=cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2127
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2128
        if cpu_arch == 'x86':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2129
            re_obj = re.search('Boot Device Selector : (.+)?\n', out)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2130
            if re_obj:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2131
                boot_selector = re_obj.groups('')[0]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2132
                if 'PXE' in boot_selector:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2133
                    response['boot_device'] = boot_devices.PXE
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2134
                elif 'Hard-Drive' in boot_selector:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2135
                    if 'Safe-Mode' in boot_selector:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2136
                        response['boot_device'] = boot_devices.SAFE
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2137
                    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2138
                        response['boot_device'] = boot_devices.DISK
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2139
                elif 'BIOS' in boot_selector:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2140
                    response['boot_device'] = boot_devices.BIOS
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2141
                elif 'CD/DVD' in boot_selector:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2142
                    response['boot_device'] = boot_devices.CDROM
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2143
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2144
            response['persistent'] = 'Options apply to all future boots' in out
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2145
        elif cpu_arch == 'SPARC':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2146
            if "net:dhcp" in out:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2147
                response['boot_device'] = boot_devices.WANBOOT
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2148
            else:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2149
                response['boot_device'] = boot_devices.DISK
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2150
        LOG.debug(response)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2151
        return response
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2152
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2153
    def get_sensors_data(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2154
        """Get sensors data.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2155
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2156
        :param task: a TaskManager instance.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2157
        :raises: FailedToGetSensorData when getting the sensor data fails.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2158
        :raises: FailedToParseSensorData when parsing sensor data fails.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2159
        :raises: InvalidParameterValue if required ipmi parameters are missing
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2160
        :raises: MissingParameterValue if a required parameter is missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2161
        :returns: returns a dict of sensor data group by sensor type.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2162
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2163
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2164
        driver_info = _parse_driver_info(task.node)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2165
        # with '-v' option, we can get the entire sensor data including the
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2166
        # extended sensor informations
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2167
        cmd = ['sdr', '-v']
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2168
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2169
            out, _err = _exec_ipmitool(driver_info, cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2170
        except (exception.PasswordFileFailedToCreate,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2171
                processutils.ProcessExecutionError) as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2172
            raise exception.FailedToGetSensorData(node=task.node.uuid,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2173
                                                  error=err)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2174
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2175
        return ipmitool._parse_ipmi_sensors_data(task.node, out)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2176
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2177
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2178
class SolarisInspect(base.InspectInterface):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2179
    """Inspect class for solaris nodes."""
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2180
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2181
    def get_properties(self):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2182
        """Return Solaris driver properties"""
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2183
        return COMMON_PROPERTIES
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2184
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2185
    def validate(self, task):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2186
        """Validate driver_info containts IPMI credentials.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2187
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2188
        Ensure 'driver_info' containers the required IPMI
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2189
        properties used to access a nodes properties.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2190
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2191
        :param task: a TaskManager instance
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2192
        :raises: InvalidParameterValue if required IPMI parameters
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2193
            are missing.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2194
        :raises: MissingParameterValue if a required parameter is missing.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2195
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2196
        _parse_driver_info(task.node)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2197
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2198
    def inspect_hardware(self, task):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2199
        """Inspect hardware to get the hardware properties.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2200
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2201
        Inspects hardware to get the defined IPMI_PROPERTIES.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2202
        Failure occures if any of the defined IPMI_PROPERTIES are not
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2203
        determinable from the node.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2204
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2205
        :param task: a TaskManager instance
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2206
        :raises: HardwareInspectionFailure if properties could
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2207
                 not be retrieved successfully.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2208
        :returns: the resulting state of inspection.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2209
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2210
        LOG.debug("SolarisInspect.inspect_hardware")
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2211
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2212
        ipmi_props = self._get_ipmi_properties(task)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2213
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2214
        keys, _none = zip(*IPMI_PROPERTIES)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2215
        vallist = [line.split(': ')[1]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2216
                   for line in ipmi_props.strip().splitlines()]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2217
        propdict = dict(zip(keys, vallist))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2218
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2219
        # Installed memory size is returned in GB, Nova assumes this is MB
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2220
        # so convert if returned in GB
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2221
        try:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2222
            size_bytes = strutils.string_to_bytes(
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2223
                propdict['memory_mb'].replace(' ', ''))
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2224
            propdict['memory_mb'] = int(size_bytes / float(1 << 20))
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2225
        except ValueError:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2226
            # Size conversion failed, just ensure value is an int
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2227
            propdict['memory_mb'] = int(propdict['memory_mb'])
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2228
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2229
        if propdict['local_gb'] == 'Not Available':
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2230
            del propdict['local_gb']
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2231
        else:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2232
            # Local disk size can be returned with size type identifier
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2233
            # remove identifier as this needs to be an int value
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2234
            try:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2235
                size_bytes = strutils.string_to_bytes(
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2236
                    propdict['local_gb'].replace(' ', ''))
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2237
                propdict['local_gb'] = int(size_bytes / float(1 << 30))
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2238
            except ValueError:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2239
                # Size conversion failed, just ensure value is an int
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2240
                propdict['local_gb'] = int(propdict['local_gb'])
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2241
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2242
        cpu_props = self._get_cpu_cores(task, propdict['cpus'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2243
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2244
        vallist = [line.split(': ')[1]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2245
                   for line in cpu_props.strip().splitlines()]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2246
        total_cores = sum(map(int, vallist))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2247
        propdict['cores'] = total_cores
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2248
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2249
        node_properties = task.node.properties
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2250
        node_properties.update(propdict)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2251
        task.node.properties = node_properties
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2252
        task.node.save()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2253
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2254
        self._create_port_if_not_exist(task.node, node_properties['mac'])
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2255
        LOG.info(_LI("Node %s inspected."), task.node.uuid)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2256
        return states.MANAGEABLE
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2257
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2258
    def _get_ipmi_properties(self, task):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2259
        """Retrieve IPMI_PROPERTIES from node
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2260
        :param task: a TaskManager instance.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2261
        :returns: ipmitool retrieved property values
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2262
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2263
        fh = tempfile.NamedTemporaryFile()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2264
        for _none, prop in IPMI_PROPERTIES:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2265
            fh.write('sunoem getval %s\n' % prop)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2266
        fh.seek(0)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2267
        cmd = ["exec", fh.name]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2268
        driver_info = _parse_driver_info(task.node)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2269
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2270
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2271
            out, _err = _exec_ipmitool(driver_info, cmd)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2272
        except (exception.PasswordFileFailedToCreate,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2273
                processutils.ProcessExecutionError) as err:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2274
            LOG.warning(_LW('IPMI inspect properties failed for node %(node)s '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2275
                            'when executing "ipmitool %(cmd)s". '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2276
                            'Error: %(error)s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2277
                        {'node': task.node.uuid,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2278
                         'cmd': cmd, 'error': err})
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2279
            raise exception.IPMIFailure(cmd=cmd)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2280
        fh.close()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2281
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2282
        return out
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2283
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2284
    def _get_cpu_cores(self, task, cpus):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2285
        """Retrieve IPMI_PROPERTIES from node
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2286
        :param task: a TaskManager instance.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2287
        :param cpus: CPU numbers to use.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2288
        :returns: ipmitool retrieved property values
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2289
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2290
        fh = tempfile.NamedTemporaryFile()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2291
        for i in range(int(cpus)):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2292
            fh.write('sunoem getval %s\n' % (CPU_LOCATION % i))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2293
        fh.seek(0)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2294
        cmd = ["exec", fh.name]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2295
        driver_info = _parse_driver_info(task.node)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2296
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2297
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2298
            out, _err = _exec_ipmitool(driver_info, cmd)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2299
        except (exception.PasswordFileFailedToCreate,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2300
                processutils.ProcessExecutionError) as err:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2301
            LOG.warning(_LW('IPMI CPU inspection failed for node %(node)s '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2302
                            'when executing "ipmitool %(cmd)s". '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2303
                            'Error: %(error)s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2304
                        {'node': task.node.uuid,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2305
                         'cmd': cmd, 'error': err})
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2306
            raise exception.IPMIFailure(cmd=cmd)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2307
        fh.close()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2308
        return out
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2309
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2310
    def _create_port_if_not_exist(self, node, mac):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2311
        """Create ironic port if not existing for this MAC
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2312
        :param task: Node to creaate port for.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2313
        :param mac: MAC address to use for port.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2314
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2315
        node_id = node.id
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2316
        port_dict = {'address': mac, 'node_id': node_id}
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2317
        mydbapi = dbapi.get_instance()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2318
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2319
            mydbapi.create_port(port_dict)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2320
            LOG.info(_LI("Port created for MAC address %(mac)s for node "
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2321
                         "%(node)s."), {'mac': mac, 'node': node.uuid})
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2322
        except exception.MACAlreadyExists:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2323
            LOG.warn(_LW("Port already exists for MAC address %(mac)s "
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2324
                         "for node %(node)s."),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2325
                     {'mac': mac, 'node': node.uuid})
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2326
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2327
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2328
class AIService():
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2329
    """AI Service"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2330
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2331
    def __init__(self, task, name):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2332
        """Initialize AIService object
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2333
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2334
        :param task: a TaskManager instance
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2335
        :param name: AI Service name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2336
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2337
        LOG.debug("AIService.__init__()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2338
        self.task = task
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2339
        self.name = name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2340
        self._clients = list()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2341
        self._image_path = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2342
        self._manifests = list()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2343
        self._profiles = list()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2344
        self._ssh_obj = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2345
        self._derived_manifest = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2346
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2347
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2348
    def ssh_obj(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2349
        """paramiko.SSHClient active connection"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2350
        LOG.debug("AIService.ssh_obj")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2351
        if self._ssh_obj is None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2352
            self._ssh_obj = self._get_ssh_connection()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2353
        return self._ssh_obj
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2354
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2355
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2356
    def manifests(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2357
        """list() of manifest names for this service"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2358
        LOG.debug("AIService.manifests")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2359
        if not self._manifests:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2360
            self._manifests = self._get_manifest_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2361
        return self._manifests
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2362
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2363
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2364
    def profiles(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2365
        """list() of profile names for this service"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2366
        LOG.debug("AIService.profiles")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2367
        if not self._profiles:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2368
            self._profiles = self._get_profile_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2369
        return self._profiles
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2370
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2371
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2372
    def clients(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2373
        """list() of all client names(mac addresses) On AI Server"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2374
        LOG.debug("AIService.clients")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2375
        if not self._clients:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2376
            self._clients = self._get_all_client_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2377
        return self._clients
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2378
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2379
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2380
    def exists(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2381
        """True/False indicator of this service exists of not"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2382
        LOG.debug("AIService.exists")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2383
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm list -n " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2384
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2385
            stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2386
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2387
            return False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2388
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2389
        if self.name != self._parse_service_name(stdout):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2390
            return False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2391
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2392
            return True
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2393
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2394
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2395
    def image_path(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2396
        """image_path for this service"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2397
        LOG.debug("AIService.image_path")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2398
        if self._image_path is None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2399
            self._image_path = self._get_image_path()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2400
        return self._image_path
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2401
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2402
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2403
    def derived_manifest(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2404
        """Access default derived manifest URI"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2405
        LOG.debug("AIService.derived_manifest")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2406
        if not self._derived_manifest:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2407
            self._derived_manifest = CONF.ai.derived_manifest
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2408
        return self._derived_manifest
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2409
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2410
    def create_service(self, archive_uri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2411
        """Create a new AI Service for this object
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2412
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2413
        :param archive_uri: archive_uri to create service from
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2414
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2415
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2416
        LOG.debug("AIService.create_service(): %s" % (self.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2417
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2418
        if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2419
            # 1. Fetch archive
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2420
            mount_dir, temp_uar = _mount_archive(self.task, archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2421
            iso, uuid = _get_archive_iso_and_uuid(mount_dir)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2422
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2423
            # 1. Fetch archive and Extract ISO file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2424
            temp_uar = _fetch_uri(self.task, archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2425
            iso, uuid = _get_archive_iso_and_uuid(temp_uar, extract_iso=True)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2426
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2427
        # 2. scp AI ISO from archive to AI Server
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2428
        remote_iso = os.path.join("/tmp", uuid) + ".iso"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2429
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2430
            self.copy_remote_file(iso, remote_iso)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2431
        except:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2432
            if PLATFORM == "SunOS":
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2433
                _umount_archive(mount_dir)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2434
                if urlparse(archive_uri).scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2435
                    _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2436
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2437
                shutil.rmtree(os.path.dirname(iso))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2438
                _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2439
            raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2440
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2441
        if PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2442
            # Remove temp extracted ISO file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2443
            shutil.rmtree(os.path.dirname(iso))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2444
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2445
        # 3. Create a new AI Service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2446
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm create-service " + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2447
            " -y -n " + uuid + " -s " + remote_iso
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2448
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2449
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2450
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2451
            self.name = uuid
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2452
            self._clients = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2453
            self._manifests = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2454
            self._profiles = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2455
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2456
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2457
            self.delete_remote_file(remote_iso)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2458
            if PLATFORM == "SunOS":
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2459
                _umount_archive(mount_dir)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2460
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2461
                _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2462
            raise AICreateServiceFail(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2463
                _("Failed to create AI Service %s") % (uuid))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2464
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2465
        # 4. Remove copy of AI ISO on AI Server
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2466
        self.delete_remote_file(remote_iso)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2467
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2468
        if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2469
            # 5. Unmount UAR
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2470
            _umount_archive(mount_dir)
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2471
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2472
        # 6. Decrement reference count for image
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2473
        if temp_uar is not None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2474
            _image_refcount_adjust(temp_uar, -1)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2475
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2476
    def delete_service(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2477
        """Delete the current AI Service"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2478
        LOG.debug("AIService.delete_service():name: %s" % (self.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2479
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm delete-service" + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2480
            " -r -y -n " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2481
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2482
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2483
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2484
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2485
            raise AIDeleteServiceFail(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2486
                _("Failed to delete AI Service %s") % (self.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2487
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2488
    def create_client(self, mac, cpu_arch, archive_uri, auth_token,
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2489
                      publishers, fmri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2490
        """Create a client associated with this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2491
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2492
        :param mac: MAC Address of client to create
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2493
        :param cpu_arch: Machine architecture for this node
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2494
        :param archive_uri: URI of archive to install node from
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2495
        :param auth_token: Authorization token for glance UAR retrieval
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2496
        :param publishers: IPS publishers list in name@origin format
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2497
        :param fmri: IPS package FMRIs to install
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2498
        :returns: Nothing exception raised if deletion fails
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2499
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2500
        LOG.debug("AIService.create_client():mac: %s" % (mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2501
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm create-client -e " + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2502
            mac + " -n " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2503
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2504
        # Add specific boot arguments for 'x86' clients only
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2505
        if cpu_arch == 'x86':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2506
            ai_cmd += " -b install=true,console=ttya"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2507
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2508
            if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2509
                ai_cmd += ",archive_uri=%s" % (archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2510
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2511
            if auth_token:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2512
                ai_cmd += ",auth_token=%s" % (auth_token)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2513
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2514
            if publishers:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2515
                pub_list = [pub.strip() for pub in publishers.split('+')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2516
                            if pub.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2517
                ai_cmd += ",publishers='%s'" % ('+'.join(pub_list))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2518
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2519
            if fmri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2520
                pkg_list = [pkg.strip() for pkg in fmri.split('+')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2521
                            if pkg.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2522
                ai_cmd += ",fmri='%s'" % ('+'.join(pkg_list))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2523
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2524
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2525
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2526
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2527
            raise AICreateClientFail(_("Failed to create AI Client %s") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2528
                                     (mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2529
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2530
        # If cpu_arch x86 customize grub reducing grub menu timeout to 0
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2531
        if cpu_arch == 'x86':
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2532
            custom_grub = "/tmp/%s.grub" % (mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2533
            ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm export -e " + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2534
                mac + " -G | /usr/bin/sed -e 's/timeout=30/timeout=0/'" + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2535
                " > %s" % (custom_grub)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2536
            try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2537
                _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2538
            except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2539
                raise AICreateClientFail(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2540
                    _("Failed to create custom grub menu for %s.") % (mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2541
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2542
            ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm set-client -e " + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2543
                mac + " -G %s" % (custom_grub)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2544
            try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2545
                _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2546
            except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2547
                raise AICreateClientFail(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2548
                    _("Failed to customize AI Client %s grub menu.") % (mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2549
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2550
            self.delete_remote_file(custom_grub)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2551
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2552
        self._clients = self._get_all_client_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2553
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2554
    def delete_client(self, mac):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2555
        """Delete a specific client regardless of service association
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2556
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2557
        :param mac: MAC Address of client to remove
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2558
        :returns: Nothing exception raised if deletion fails
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2559
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2560
        LOG.debug("AIService.delete_client():mac: %s" % (mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2561
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm delete-client -e " + mac
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2562
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2563
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2564
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2565
            raise AIDeleteClientFail(_("Failed to delete AI Client %s") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2566
                                     (mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2567
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2568
        # update list of clients for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2569
        self._clients = self._get_all_client_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2570
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2571
    def create_manifest(self, manifest_name, manifest_path, mac):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2572
        """Create a manifest associated with this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2573
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2574
        :param manifest_name: manifest_name to create
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2575
        :param manifest_path: path to manifest file to use
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2576
        :param mac: MAC address to add as criteria
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2577
        :returns: Nothing exception raised if creation fails
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2578
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2579
        LOG.debug("AIService.create_manifest():manifest_name: "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2580
                  "'%s', manifest_path: '%s', mac: '%s'" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2581
                  (manifest_name, manifest_path, mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2582
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm create-manifest -n " + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2583
            self.name + " -m " + manifest_name + " -f " + manifest_path + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2584
            " -c mac=" + mac
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2585
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2586
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2587
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2588
            raise AICreateManifestFail(_("Failed to create AI Manifest %s.") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2589
                                       (manifest_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2590
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2591
        # Update list of manifests for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2592
        self._manifests = self._get_manifest_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2593
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2594
    def delete_manifest(self, manifest_name):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2595
        """Delete a specific manifest
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2596
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2597
        :param manifest_name: name of manifest to remove
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2598
        :returns: Nothing exception raised if deletion fails
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2599
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2600
        LOG.debug("AIService.delete_manifest():manifest_name: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2601
                  (manifest_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2602
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm delete-manifest -m " + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2603
            manifest_name + " -n " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2604
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2605
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2606
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2607
            raise AIDeleteManifestFail(_("Failed to delete AI Manifest %s") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2608
                                       (manifest_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2609
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2610
        # Update list of manifests for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2611
        self._manifests = self._get_manifest_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2612
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2613
    def create_profile(self, profile_name, profile_path, mac, env):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2614
        """Create a profile associated with this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2615
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2616
        :param profile)_name: profile name to create
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2617
        :param profile_path: path to profile file to use
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2618
        :param mac: MAC address to add as criteria
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2619
        :param env: Environment to apply profile to
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2620
        :returns: Nothing exception raised if creation fails
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2621
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2622
        LOG.debug("AIService.create_profile():profile_name: "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2623
                  "'%s', profile_path: '%s', mac: '%s'" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2624
                  (profile_name, profile_path, mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2625
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2626
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm create-profile -n " + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2627
            self.name + " -p " + profile_name + " -f " + profile_path + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2628
            " -c mac=" + mac
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2629
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2630
        if env is not None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2631
            ai_cmd = ai_cmd + " -e " + env
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2632
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2633
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2634
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2635
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2636
            raise AICreateProfileFail(_("Failed to create AI Profile %s.") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2637
                                      (profile_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2638
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2639
        # Update list of profiles for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2640
        self._profiles = self._get_profile_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2641
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2642
    def delete_profile(self, profile_name):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2643
        """Delete a specific profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2644
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2645
        :param profile_name: name of profile to remove
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2646
        :returns: Nothing exception raised if deletion fails
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2647
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2648
        LOG.debug("AIService.delete_profile():profile_name: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2649
                  (profile_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2650
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm delete-profile -p " + \
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2651
            profile_name + " -n " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2652
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2653
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2654
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2655
            raise AIDeleteProfileFail(_("Failed to delete AI Profile %s") %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2656
                                      (profile_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2657
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2658
        # Update list of profiles for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2659
        self._profiles = self._get_profile_names()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2660
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2661
    def copy_remote_file(self, local, remote):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2662
        """Using scp copy local file to remote location
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2663
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2664
        :param local: Local file path to copy
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2665
        :param remote: Remote file path to copy to
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2666
        :returns: Nothing, exception raised on failure
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2667
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2668
        LOG.debug("AIService.copy_remote_file():local: %s, remote: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2669
                  (local, remote))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2670
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2671
            scp = SCPClient(self.ssh_obj.get_transport())
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2672
            scp.put(local, remote)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2673
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2674
            err_msg = _("Failed to copy file to remote server: %s") % err
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2675
            raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2676
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2677
    def delete_remote_file(self, path):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2678
        """Remove remote file in AI Server
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2679
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2680
        :param path: Path of remote file to remove
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2681
        :return: Nothing exception raised on failure
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2682
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2683
        LOG.debug("AIService.delete_remote_file():path: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2684
                  (path))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2685
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2686
        ai_cmd = "/usr/bin/rm -f " + path
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2687
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2688
            _stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2689
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2690
            err_msg = _("Failed to delete remote file: %s") % err
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2691
            raise SolarisIPMIError(msg=err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2692
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2693
    def _get_image_path(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2694
        """Retrieve image_path for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2695
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2696
        :returns: image_path property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2697
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2698
        LOG.debug("AIService._get_image_path()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2699
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm list -vn " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2700
        stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2701
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2702
        for line in stdout.splitlines():
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2703
            words = line.split()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2704
            if len(words) > 2 and words[0] == "Image" and words[1] == "Path":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2705
                image_path = words[-1]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2706
        LOG.debug("AIService._get_image_path():image_path: %s" % (image_path))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2707
        return image_path
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2708
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2709
    def _parse_client(self, list_out):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2710
        """Return service name and client from installadm list -e output
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2711
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2712
        :param list_out: stdout from installadm list -e
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2713
        :returns: Service Name and MAC Address
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2714
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2715
        LOG.debug("AIService._parse_client():list_out: %s" % (list_out))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2716
        lines = list_out.splitlines()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2717
        service_name = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2718
        client_name = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2719
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2720
        if len(lines[2].split()[0]) > 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2721
            service_name = lines[2].split()[0]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2722
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2723
        if len(lines[2].split()[1]) > 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2724
            client_name = lines[2].split()[1]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2725
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2726
        LOG.debug("AIService._parse_client():service_name: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2727
                  (service_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2728
        LOG.debug("AIService._parse_client():client_name: %s" % (client_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2729
        return service_name, client_name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2730
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2731
    def _parse_service_name(self, list_out):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2732
        """Given installadm list -n output, parse out service name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2733
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2734
        :param list_out: stdout from installadm list -n
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2735
        :returns: Service Name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2736
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2737
        LOG.debug("AIService._parse_service_name():list_out: %s" % (list_out))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2738
        service_name = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2739
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2740
        lines = list_out.splitlines()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2741
        if len(lines[2].split()[0]) > 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2742
            service_name = lines[2].split()[0]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2743
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2744
        LOG.debug("AIService._parse_service_name():service_name: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2745
                  (service_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2746
        return service_name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2747
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2748
    def _get_ssh_connection(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2749
        """Returns an SSH client connected to a node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2750
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2751
        :returns: paramiko.SSHClient, an active ssh connection.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2752
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2753
        LOG.debug("AIService._get_ssh_connection()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2754
        return utils.ssh_connect(self._get_ssh_dict())
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2755
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2756
    def _get_ssh_dict(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2757
        """Generate SSH Dictionary for SSH Connection via paramiko
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2758
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2759
        :returns: dictionary for paramiko connection
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2760
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2761
        LOG.debug("AIService._get_ssh_dict()")
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
  2762
        if not CONF.ai.server or CONF.ai.server == "None" or \
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
  2763
                not CONF.ai.username or CONF.ai.username == "None":
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2764
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2765
                "SSH server and username must be set."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2766
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2767
        ssh_dict = {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2768
            'host': CONF.ai.server,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2769
            'username': CONF.ai.username,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2770
            'port': int(CONF.ai.port),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2771
            'timeout': int(CONF.ai.timeout)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2772
            }
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2773
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2774
        key_contents = key_filename = password = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2775
        if CONF.ai.ssh_key_contents and CONF.ai.ssh_key_contents != "None":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2776
            key_contents = CONF.ai.ssh_key_contents
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2777
        if CONF.ai.ssh_key_file and CONF.ai.ssh_key_file != "None":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2778
            key_filename = CONF.ai.ssh_key_file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2779
        if CONF.ai.password and CONF.ai.password != "None":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2780
            password = CONF.ai.password
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2781
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2782
        if len(filter(None, (key_filename, key_contents))) != 1:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2783
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2784
                "SSH requires one and only one of "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2785
                "ssh_key_file or ssh_key_contents to be set."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2786
        if password:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2787
            ssh_dict['password'] = password
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2788
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2789
        if key_contents:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2790
            ssh_dict['key_contents'] = key_contents
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2791
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2792
            if not os.path.isfile(key_filename):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2793
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2794
                    "SSH key file %s not found.") % key_filename)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2795
            ssh_dict['key_filename'] = key_filename
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2796
        LOG.debug("AIService._get_ssh_dict():ssh_dict: %s" % (ssh_dict))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2797
        return ssh_dict
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2798
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2799
    def _get_manifest_names(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2800
        """Get a list of manifest names for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2801
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2802
        :returns: list() of manifest names
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2803
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2804
        LOG.debug("AIService._get_manifest_names()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2805
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm list -mn " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2806
        stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2807
                                   err_msg=_("Failed to retrieve manifests"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2808
                                             " for service %s") % (self.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2809
        return self._parse_names(stdout)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2810
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2811
    def _get_profile_names(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2812
        """Get a list of profile names for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2813
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2814
        :returns: list() of profile names
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2815
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2816
        LOG.debug("AIService._get_profile_names()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2817
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm list -pn " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2818
        stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2819
                                   err_msg=_("Failed to retrieve profiles for "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2820
                                             "service %s") % (self.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2821
        return self._parse_names(stdout)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2822
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2823
    def _get_all_client_names(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2824
        """Get a list of client names for this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2825
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2826
        :returns: list() of client/mac names
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2827
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2828
        LOG.debug("AIService._get_all_client_names()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2829
        ai_cmd = "/usr/bin/pfexec /usr/sbin/installadm list -c"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2830
        stdout, _rc = _ssh_execute(self.ssh_obj, ai_cmd,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2831
                                   err_msg=_("Failed to retrieve clients for "
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2832
                                             "service %s") % (self.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2833
        # Store client names all in lower case
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2834
        return [client.lower() for client in self._parse_names(stdout)]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2835
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2836
    def _parse_names(self, list_out):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2837
        """Parse client/manifest/profile names from installadm list output
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2838
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2839
        Note: when we convert to using RAD, parsing installadm CLI output
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2840
            will not be required, as API will return a list of names.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2841
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2842
        :param list_out: stdout from installadm list -c or -mn or -pn
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2843
        :returns: a list of client/manifest/profile names
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2844
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2845
        LOG.debug("AIService._parse_names():list_out: %s" %
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2846
                  (list_out))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2847
        names = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2848
        lines = list_out.splitlines()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2849
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2850
        # Get index into string for client/manifest/profile names
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2851
        # client/manifest/profile names are all in 2nd column of output
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2852
        if len(lines) > 1:
4567
921fa080154a 21341088 Parsing manifest/profiles fails if multiple criteria present
Matt Keenan <matt.keenan@oracle.com>
parents: 4460
diff changeset
  2853
            col_start = lines[1].index(" --") + 1
921fa080154a 21341088 Parsing manifest/profiles fails if multiple criteria present
Matt Keenan <matt.keenan@oracle.com>
parents: 4460
diff changeset
  2854
            col_end = lines[1][col_start:].index(" --") + 1 + col_start
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2855
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2856
            for line in range(2, len(lines)):
4567
921fa080154a 21341088 Parsing manifest/profiles fails if multiple criteria present
Matt Keenan <matt.keenan@oracle.com>
parents: 4460
diff changeset
  2857
                if lines[line][col_start:col_end].strip():
921fa080154a 21341088 Parsing manifest/profiles fails if multiple criteria present
Matt Keenan <matt.keenan@oracle.com>
parents: 4460
diff changeset
  2858
                    names.append(lines[line][col_start:col_end].strip())
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2859
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2860
        LOG.debug("AIService._parse_names():names: %s" % (names))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2861
        return names
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2862
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2863
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2864
# Custom Exceptions
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2865
class AICreateServiceFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2866
    """Exception type for AI Service creation failure"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2867
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2868
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2869
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2870
class AIDeleteServiceFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2871
    """Exception type for AI Service deletion failure"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2872
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2873
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2874
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2875
class AICreateClientFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2876
    """Exception type for AI Client creation failure"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2877
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2878
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2879
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2880
class AIDeleteClientFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2881
    """Exception type for AI Client deletion failure"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2882
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2883
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2884
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2885
class AICreateManifestFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2886
    """Exception type for AI Manifest creation failure"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2887
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2888
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2889
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2890
class AIDeleteManifestFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2891
    """Exception type for AI Manifest deletion failure"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2892
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2893
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2894
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2895
class AICreateProfileFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2896
    """Exception type for AI Profile creation failure"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2897
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2898
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2899
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2900
class AIDeleteProfileFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2901
    """Exception type for AI Profile deletion failure"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2902
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2903
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2904
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2905
class SolarisIPMIError(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2906
    """Generic Solaris IPMI driver exception"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2907
    message = _("%(msg)s")