components/openstack/ironic/files/drivers/modules/solaris_ipmitool.py
author Drew Fisher <drew.fisher@oracle.com>
Wed, 18 Jan 2017 09:07:36 -0800
changeset 7598 d30cc5fc0cf0
parent 7410 544ee1480a82
permissions -rw-r--r--
25415541 Path to ipmitool hardcoded for Solaris
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
#
7598
d30cc5fc0cf0 25415541 Path to ipmitool hardcoded for Solaris
Drew Fisher <drew.fisher@oracle.com>
parents: 7410
diff changeset
     8
# Copyright (c) 2014, 2017, 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
7598
d30cc5fc0cf0 25415541 Path to ipmitool hardcoded for Solaris
Drew Fisher <drew.fisher@oracle.com>
parents: 7410
diff changeset
    62
    IPMITOOL = '/usr/bin/ipmitool'
4590
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
    63
else:
7410
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
    64
    from pkg.fmri import IllegalFmri, PkgFmri
4590
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
    65
    from pkg.misc import valid_pub_prefix, valid_pub_url
7598
d30cc5fc0cf0 25415541 Path to ipmitool hardcoded for Solaris
Drew Fisher <drew.fisher@oracle.com>
parents: 7410
diff changeset
    66
    IPMITOOL = '/usr/sbin/ipmitool'
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    67
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    68
AI_OPTS = [
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    69
    cfg.StrOpt('server',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    70
               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
    71
    cfg.StrOpt('username',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    72
               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
    73
    cfg.StrOpt('password',
5446
27d201e3362b 22694592 Several configuration files should be more aligned with the upstream
david.comay@oracle.com
parents: 5405
diff changeset
    74
               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
    75
                    '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
    76
                    '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
    77
                    '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
    78
    cfg.StrOpt('port',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    79
               default='22',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    80
               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
    81
    cfg.StrOpt('timeout',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    82
               default='10',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    83
               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
    84
    cfg.StrOpt('deploy_interval',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    85
               default='10',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    86
               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
    87
    cfg.StrOpt('derived_manifest',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    88
               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
    89
               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
    90
    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
    91
               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
    92
    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
    93
               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
    94
    ]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    95
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    96
SOLARIS_IPMI_OPTS = [
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    97
    cfg.StrOpt('imagecache_dirname',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
    98
               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
    99
               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
   100
    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
   101
               default='60',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   102
               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
   103
]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   104
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   105
LOG = logging.getLogger(__name__)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   106
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   107
CONF = cfg.CONF
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   108
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
   109
                         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
   110
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
   111
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
   112
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
   113
    name="solaris_ipmi",
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   114
    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
   115
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
   116
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
   117
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   118
VALID_ARCH = ['x86', 'SPARC']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   119
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
   120
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
   121
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
   122
AI_STRING = "Automated Installation"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   123
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
   124
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
   125
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
   126
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   127
REQUIRED_PROPERTIES = {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   128
    '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
   129
    '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
   130
    '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
   131
}
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   132
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   133
OPTIONAL_PROPERTIES = {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   134
    '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
   135
                     "Optional."),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   136
    '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
   137
    '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
   138
    '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
   139
              "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
   140
    '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
   141
                          "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
   142
                          "Optional."),
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   143
    '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
   144
                    "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
   145
    '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
   146
                     "to an installed system. Optional."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   147
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   148
    '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
   149
    'ipmi_priv_level':
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   150
        _("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
   151
          "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
   152
    '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
   153
                       "\"dual\", \"no\". Optional."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   154
    '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
   155
                              "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
   156
    '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
   157
                              "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
   158
    '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
   159
                             "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
   160
                             "\"single\" or \"dual\"."),
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   161
    '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
   162
                             "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
   163
                             "to \"single\" or \"dual\"."),
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   164
    '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
   165
                            "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
   166
                            "to \"single\" or \"dual\". Optional."),
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   167
    '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
   168
                               '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
   169
    '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
   170
                                "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
   171
                                "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
   172
                                "capable of remembering the selected boot "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   173
                                "device across power cycles; default value "
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   174
                                "is False. Optional.")
4460
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   177
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
   178
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
   179
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   180
IPMI_PROPERTIES = [
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   181
    ('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
   182
    ('serial', '/System/serial_number'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   183
    ('model', '/System/model'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   184
    ('cpu_arch', '/System/Processors/architecture'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   185
    ('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
   186
    ('cpus', '/System/Processors/installed_cpus'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   187
    ('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
   188
    ('disks', '/System/Storage/installed_disks'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   189
    ('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
   190
]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   191
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   192
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
   193
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   194
LAST_CMD_TIME = {}
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   197
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
   198
    """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
   199
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   200
    :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
   201
    :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
   202
    :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
   203
    :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
   204
    :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
   205
    :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
   206
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   207
    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
   208
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   209
    returncode = 0
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   210
    stdout = None
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   211
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   212
        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
   213
    except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   214
        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
   215
                  {'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
   216
        returncode = 1
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   217
        if raise_exception:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   218
            if err_msg:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   219
                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
   220
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   221
                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
   222
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   223
    return stdout, returncode
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   226
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
   227
    """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
   228
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   229
    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
   230
    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
   231
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   232
    :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
   233
    :returns: dictionary of parameters.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   234
    :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
   235
    :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
   236
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   237
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   238
    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
   239
    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
   240
    bridging_types = ['single', 'dual']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   241
    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
   242
    if missing_info:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   243
        raise exception.MissingParameterValue(_(
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   244
            "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
   245
            " 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
   246
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   247
    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
   248
    username = info.get('ipmi_username')
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   249
    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
   250
    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
   251
    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
   252
    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
   253
    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
   254
    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
   255
    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
   256
    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
   257
    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
   258
    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
   259
    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
   260
    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
   261
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   262
    if not username:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   263
        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
   264
                        '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
   265
    if not password:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   266
        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
   267
                        '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
   268
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   269
    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
   270
        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
   271
        raise exception.InvalidParameterValue(_(
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   272
            "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
   273
            "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
   274
            {'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
   275
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   276
    if port is not None:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   277
        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
   278
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   279
    if dest_port is not None:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   280
        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
   281
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   282
    # 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
   283
    if bridging_type == 'no':
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   284
        # 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
   285
        (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
   286
         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
   287
    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
   288
        # 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
   289
        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
   290
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   291
                "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
   292
                "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
   293
                "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
   294
            ) % bridging_type)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   295
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   296
        # 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
   297
        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
   298
            ("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
   299
            ('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
   300
        if bridging_type == 'dual':
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   301
            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
   302
                ("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
   303
                ('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
   304
            ] if value is None]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   305
            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
   306
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   307
            # 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
   308
            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
   309
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   310
        # 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
   311
        # raise an exception
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   312
        if params_undefined:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   313
            raise exception.MissingParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   314
                "%(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
   315
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   316
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   317
            "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
   318
            " 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
   319
        ) % {'bridging_type': bridging_type,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   320
             '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
   321
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   322
    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
   323
        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
   324
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   325
            "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
   326
            " 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
   327
            {'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
   328
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   329
    return {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   330
        'address': address,
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   331
        '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
   332
        'username': username,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   333
        'password': password,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   334
        'port': port,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   335
        'uuid': node.uuid,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   336
        'priv_level': priv_level,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   337
        'local_address': local_address,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   338
        'transit_channel': transit_channel,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   339
        'transit_address': transit_address,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   340
        'target_channel': target_channel,
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   341
        'target_address': target_address,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   342
        'protocol_version': protocol_version,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   343
        'force_boot_device': force_boot_device
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   344
    }
4460
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   347
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
   348
    """Execute the ipmitool command.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   349
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   350
    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
   351
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   352
    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
   353
    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
   354
    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
   355
    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
   356
    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
   357
    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
   358
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   359
    :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
   360
    :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
   361
    :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
   362
    :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
   363
             temporary file.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   364
    :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
   365
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   366
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   367
    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
   368
              "command: '%s'" % (driver_info, command))
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   369
    ipmi_version = ('lanplus'
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   370
                    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
   371
                    else 'lan')
7598
d30cc5fc0cf0 25415541 Path to ipmitool hardcoded for Solaris
Drew Fisher <drew.fisher@oracle.com>
parents: 7410
diff changeset
   372
    args = [IPMITOOL,
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   373
            '-I',
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   374
            ipmi_version,
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   375
            '-H',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   376
            driver_info['address'],
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   377
            '-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
   378
            ]
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   379
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   380
    if driver_info['dest_port']:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   381
        args.append('-p')
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   382
        args.append(driver_info['dest_port'])
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   383
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   384
    if driver_info['username']:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   385
        args.append('-U')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   386
        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
   387
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   388
    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
   389
        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
   390
            args.append(option)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   391
            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
   392
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   393
    # 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
   394
    num_tries = max(
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   395
        (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
   396
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   397
    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
   398
        args.append('-R')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   399
        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
   400
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   401
        args.append('-N')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   402
        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
   403
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   404
    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
   405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   406
    while True:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   407
        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
   408
        # 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
   409
        #             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
   410
        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
   411
            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
   412
        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
   413
            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
   414
        # 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
   415
        # 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
   416
        cmd_args = args[:]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   417
        # '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
   418
        # 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
   419
        # empty password
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   420
        with ipmitool._make_password_file(
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   421
                    driver_info['password'] or '\0'
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   422
                ) as pw_file:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   423
            cmd_args.append('-f')
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   424
            cmd_args.append(pw_file)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   425
            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
   426
            try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   427
                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
   428
                return out, err
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   429
            except processutils.ProcessExecutionError as e:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   430
                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
   431
                    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
   432
                                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
   433
                    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
   434
                        (num_tries == 0) or
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   435
                            not err_list):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   436
                        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
   437
                                      '"%(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
   438
                                      'Error: %(error)s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   439
                                  {
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   440
                                      'node': driver_info['uuid'],
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   441
                                      'cmd': e.cmd,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   442
                                      'error': e
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   443
                                  })
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   444
                    else:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   445
                        ctxt.reraise = False
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   446
                        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
   447
                                        '"%(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
   448
                                        'Error: %(error)s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   449
                                    {
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   450
                                        'node': driver_info['uuid'],
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   451
                                        'cmd': e.cmd,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   452
                                        'error': e
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   453
                                    })
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   454
            finally:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   455
                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
   456
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   457
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   458
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
   459
    """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
   460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   461
    :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
   462
    :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
   463
    :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
   464
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   465
    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
   466
    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
   467
    if cpu_arch is None:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   468
        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
   469
                     "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
   470
        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
   471
        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
   472
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   473
            cpu_arch, _err = _exec_ipmitool(driver_info, ipmi_cmd_args)
7350
7cd865fc284a 25107146 newline not snipped from cpu_arch property value
Matt Keenan <matt.keenan@oracle.com>
parents: 6855
diff changeset
   474
            propdict = {'cpu_arch': cpu_arch.split(":")[1].strip()}
7cd865fc284a 25107146 newline not snipped from cpu_arch property value
Matt Keenan <matt.keenan@oracle.com>
parents: 6855
diff changeset
   475
            node_properties = node.properties
7cd865fc284a 25107146 newline not snipped from cpu_arch property value
Matt Keenan <matt.keenan@oracle.com>
parents: 6855
diff changeset
   476
            node_properties.update(propdict)
7cd865fc284a 25107146 newline not snipped from cpu_arch property value
Matt Keenan <matt.keenan@oracle.com>
parents: 6855
diff changeset
   477
            node.properties = node_properties
7cd865fc284a 25107146 newline not snipped from cpu_arch property value
Matt Keenan <matt.keenan@oracle.com>
parents: 6855
diff changeset
   478
            node.save()
7cd865fc284a 25107146 newline not snipped from cpu_arch property value
Matt Keenan <matt.keenan@oracle.com>
parents: 6855
diff changeset
   479
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   480
        except Exception as err:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   481
            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
   482
                      (err)))
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   483
            raise exception.IPMIFailure(cmd=err)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   484
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   485
        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
   486
                  % (cpu_arch))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   487
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   488
    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
   489
        return 'SPARC'
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   490
    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
   491
        return 'x86'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   492
    else:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   493
        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
   494
                               % (cpu_arch))
4460
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   497
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
   498
    """ 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
   499
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   500
    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
   501
    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
   502
    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
   503
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   504
    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
   505
    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
   506
    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
   507
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   508
    :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
   509
    :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
   510
    :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
   511
        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
   512
    """
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()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   514
    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
   515
              (deploy_thread.state))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   516
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   517
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   518
        # 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
   519
        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
   520
    except exception.NodeNotFound:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   521
        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
   522
                     "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
   523
                 {'node': node_uuid})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   524
        # 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
   525
        deploy_thread.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   526
        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
   527
            # 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
   528
            if task.node:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   529
                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
   530
                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
   531
                                       "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
   532
                                       (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
   533
                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
   534
                task.node.save()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   535
        raise loopingcall.LoopingCallDone()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   536
    except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   537
        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
   538
                     "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
   539
                 {'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
   540
        # 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
   541
        deploy_thread.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   542
        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
   543
            # 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
   544
            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
   545
                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
   546
                                       "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
   547
                                       (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
   548
                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
   549
                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
   550
                task.node.save()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   551
        raise loopingcall.LoopingCallDone()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   552
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   553
    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
   554
              (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
   555
    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
   556
              (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
   557
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   558
    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
   559
        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
   560
        # 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
   561
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   562
        # 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
   563
        deploy_thread.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   564
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   565
        # 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
   566
        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
   567
            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
   568
        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
   569
            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
   570
                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
   571
            else:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   572
                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
   573
                                      "for more details."
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   574
            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
   575
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   576
            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
   577
        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
   578
        cur_node.save()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   579
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   580
        # 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
   581
        raise loopingcall.LoopingCallDone()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   582
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   583
    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
   584
            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
   585
        # 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
   586
        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
   587
                  (deploy_thread.state))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   588
        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
   589
        cur_node.save()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   590
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   591
    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
   592
            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
   593
        # 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
   594
        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
   595
                  (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
   596
        deploy_thread.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   597
        raise loopingcall.LoopingCallDone()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   598
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   599
    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
   600
        # 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
   601
        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
   602
                  (cur_node.provision_state))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   603
        deploy_thread.stop()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   604
        raise loopingcall.LoopingCallDone()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   605
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   606
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   607
def _url_exists(url):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   608
    """Validate specific exists
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   609
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   610
    :param url: HTTP url
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   611
    :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
   612
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   613
    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
   614
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   615
        _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
   616
        return True
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   617
    except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   618
        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
   619
        return False
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   622
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
   623
    """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
   624
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   625
    :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
   626
    :returns: Acquired LockFile lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   627
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   628
    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
   629
    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
   630
    lock = LockFile(ref_filename)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   631
    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
   632
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   633
            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
   634
                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
   635
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   636
                image_size_1 = 0
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   637
            lock.acquire(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   638
                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
   639
        except LockTimeout:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   640
            # 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
   641
            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
   642
                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
   643
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   644
                image_size_2 = 0
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   645
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   646
            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
   647
                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
   648
                continue
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   649
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   650
                # 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
   651
                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
   652
                lock.break_lock()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   653
                lock.acquire()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   654
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   655
    return lock
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   658
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
   659
    """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
   660
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   661
    :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
   662
    :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
   663
    :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
   664
    :returns: Acquired lock
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   665
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   666
    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
   667
              "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
   668
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   669
    if count == 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   670
        # 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
   671
        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
   672
                      "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
   673
        LOG.error(err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   674
        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
   675
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   676
    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
   677
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   678
    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
   679
        if count < 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   680
            # 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
   681
            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
   682
                          "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
   683
            LOG.error(err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   684
            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
   685
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   686
        # Create reference count file
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   687
        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
   688
            fp.write("0")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   689
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   690
    # 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
   691
    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
   692
    if lock is None:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   693
        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
   694
        LOG.error(err_msg)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   695
        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
   696
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   697
    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
   698
        ref_count = fp.readline()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   699
        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
   700
            ref_count = 1
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   701
        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
   702
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   703
        # 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
   704
        # 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
   705
        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
   706
            lock.release()
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   707
            try:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   708
                os.remove(ref_filename)
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   709
            except OSError as err:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   710
                if err.errno != errno.ENOENT:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   711
                    raise
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   712
            try:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   713
                os.remove(image_path)
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   714
            except OSError as err:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   715
                if err.errno != errno.ENOENT:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   716
                    raise
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   717
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   718
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   719
            fp.seek(0)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   720
            fp.write(ref_count)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   721
            if release:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   722
                lock.release()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   723
    return lock
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   726
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
   727
    """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
   728
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   729
    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
   730
    caller.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   731
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   732
    :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
   733
    :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
   734
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   735
    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
   736
    url = urlparse(uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   737
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   738
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   739
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   740
            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
   741
                                    url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   742
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   743
            # 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
   744
            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
   745
                try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   746
                    # 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
   747
                    # the acquired lock.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   748
                    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
   749
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   750
                    # 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
   751
                    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
   752
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   753
                    # 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
   754
                    lock.release()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   755
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   756
                except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   757
                    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
   758
                              % (url.netloc, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   759
                    raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   760
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   761
                # 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
   762
                _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
   763
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   764
        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
   765
            if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   766
                _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
   767
                    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
   768
                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
   769
                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
   770
                _stdout, err = pc.communicate()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   771
                if pc.returncode != 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   772
                    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
   773
                    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
   774
            else:  # Linux compat
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   775
                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
   776
                                        url.path.replace("/", ""))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   777
                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
   778
                    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   779
                        # 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
   780
                        # returns the acquired lock.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   781
                        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
   782
                                                      release=False)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   783
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   784
                        # Actually fetch the image
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   785
                        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
   786
                        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
   787
                        _stdout, err = pc.communicate()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   788
                        if pc.returncode != 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   789
                            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
   790
                            _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
   791
                            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
   792
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   793
                        # 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
   794
                        lock.release()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   795
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   796
                    except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
   797
                        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
   798
                                  % (url.netloc, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   799
                        raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   800
                else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   801
                    # 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
   802
                    _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
   803
    except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   804
        # 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
   805
        # 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
   806
        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
   807
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   808
            _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
   809
        else:
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   810
            try:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   811
                os.remove(temp_uri)
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   812
            except OSError as err:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   813
                if err.errno != errno.ENOENT:
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
   814
                    raise
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   815
        raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   816
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   817
    return temp_uri
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   820
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
   821
    """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
   822
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   823
    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
   824
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   825
    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
   826
    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
   827
    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
   828
    the extracted file.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   829
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   830
    :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
   831
    :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
   832
    :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
   833
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   834
    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
   835
              (mount_dir))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   836
    uuid = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   837
    iso = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   838
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   839
    if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   840
        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
   841
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   842
        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
   843
            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
   844
                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
   845
            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
   846
                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
   847
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   848
        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
   849
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   850
        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
   851
            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
   852
                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
   853
            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
   854
                try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   855
                    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
   856
                        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
   857
                    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
   858
                    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
   859
                except:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   860
                    # 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
   861
                    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
   862
                    raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   863
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   864
    return iso, uuid
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   867
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
   868
    """Mount a unified archive
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   869
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   870
    :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
   871
    :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
   872
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   873
    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
   874
              (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   875
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   876
    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
   877
        # TODO(mattk):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   878
        # 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
   879
        # 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
   880
        # 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
   881
        # local image.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   882
        # 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
   883
        # 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
   884
        # 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
   885
        # 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
   886
        # 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
   887
        # proxy never gets invoked.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   888
        # 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
   889
        # 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
   890
        # 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
   891
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   892
        # 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
   893
        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
   894
        archive_mount = temp_uar
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   895
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   896
        # Can mount archive directly
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   897
        temp_uar = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   898
        archive_mount = archive_uri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   899
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   900
    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
   901
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   902
    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
   903
           "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
   904
    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
   905
    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
   906
    _stdout, err = pc.communicate()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   907
    if pc.returncode != 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   908
        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
   909
        shutil.rmtree(mount_dir)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   910
        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
   911
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   912
    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
   913
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   914
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   915
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
   916
    """ 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
   917
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   918
    :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
   919
    :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
   920
    """
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   921
    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
   922
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   923
    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
   924
    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
   925
    _stdout, err = pc.communicate()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   926
    if pc.returncode != 0:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   927
        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
   928
        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
   929
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   930
    shutil.rmtree(mount_dir)
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   933
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
   934
    """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
   935
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   936
    :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
   937
    :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
   938
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   939
    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
   940
    uuid = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   941
    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
   942
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   943
    if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   944
        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
   945
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   946
            _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
   947
        except:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   948
            _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
   949
            raise
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
   950
        _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
   951
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   952
        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
   953
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   954
            _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
   955
        except:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   956
            _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
   957
            raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   958
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   959
    if uuid is None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   960
        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
   961
        if PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   962
            _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
   963
        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
   964
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   965
    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
   966
    return uuid
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   969
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
   970
    """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
   971
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   972
    :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
   973
    :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
   974
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   975
    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
   976
    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
   977
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   978
    url = urlparse(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   979
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   980
    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
   981
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   982
            "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
   983
            % (url.scheme, archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   984
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   985
    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
   986
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   987
            "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
   988
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   989
    if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   990
        # 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
   991
        # 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
   992
        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
   993
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   994
                "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
   995
                % (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   996
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   997
        # Format : glance://<glance UUID>
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
   998
        # 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
   999
        if not url.netloc:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1000
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1001
                "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
  1002
                % (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1003
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1004
        # 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
  1005
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1006
            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
  1007
            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
  1008
            if not size:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1009
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1010
                    "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
  1011
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1012
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1013
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1014
                "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
  1015
                (url.netloc, err))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1016
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1017
    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
  1018
        # 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
  1019
        # Just a secure connection.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1020
        # 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
  1021
        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
  1022
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1023
                "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
  1024
    elif url.scheme == "file":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1025
        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
  1026
                                 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
  1027
                                 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
  1028
        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
  1029
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1030
                "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
  1031
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1032
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1033
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
  1034
    """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
  1035
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1036
    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
  1037
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1038
    :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
  1039
    :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
  1040
    :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
  1041
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1042
    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
  1043
              (archive_uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1044
    if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1045
        url = urlparse(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1046
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1047
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1048
            # 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
  1049
            # 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
  1050
            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
  1051
                (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
  1052
                 url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1053
            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
  1054
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1055
            new_uri = archive_uri
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1056
            auth_token = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1057
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1058
        new_uri = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1059
        auth_token = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1060
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1061
    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
  1062
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1063
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1064
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
  1065
    """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
  1066
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1067
    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
  1068
    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
  1069
    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
  1070
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1071
    :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
  1072
    :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
  1073
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1074
    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
  1075
    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
  1076
    _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
  1077
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1078
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1079
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
  1080
    """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
  1081
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1082
    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
  1083
    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
  1084
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1085
    :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
  1086
    :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
  1087
    :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
  1088
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1089
    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
  1090
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1091
    # 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
  1092
    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
  1093
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1094
    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
  1095
        _validate_uri(task, profile)
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1098
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
  1099
    """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
  1100
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1101
    :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
  1102
    :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
  1103
    :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
  1104
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1105
    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
  1106
    url = urlparse(uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1107
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1108
    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
  1109
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1110
            "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
  1111
            " 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
  1112
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1113
    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
  1114
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1115
            "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
  1116
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1117
    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
  1118
        # 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
  1119
        # Just a secure connection.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1120
        # 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
  1121
        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
  1122
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1123
                "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
  1124
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1125
            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
  1126
                      (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1127
    elif url.scheme == "file":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1128
        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
  1129
                                 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
  1130
                                 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
  1131
        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
  1132
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1133
                "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
  1134
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1135
            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
  1136
                      (url.scheme))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1137
    elif url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1138
        # 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
  1139
        # 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
  1140
        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
  1141
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1142
                "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
  1143
                % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1144
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1145
        # Format : glance://<glance UUID>
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1146
        # 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
  1147
        if not url.netloc:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1148
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1149
                "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
  1150
                % (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1151
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1152
        # 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
  1153
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1154
            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
  1155
            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
  1156
            if not size:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1157
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1158
                    "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
  1159
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1160
                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
  1161
                          (uri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1162
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1163
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1164
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1165
                "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
  1166
                (url.netloc, err))
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1169
def _validate_fmri(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1170
    """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
  1171
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1172
    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
  1173
    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
  1174
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1175
    :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
  1176
    :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
  1177
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1178
    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
  1179
    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
  1180
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1181
    # 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
  1182
    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
  1183
    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
  1184
        _validate_fmri_format(fmri)
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1187
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
  1188
    """Validate FMRI for format
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1189
    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
  1190
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1191
            pkg:/<package path>
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1192
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1193
    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
  1194
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1195
    :param fmri: IPS FMRI
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1196
    :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
  1197
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1198
    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
  1199
    url = urlparse(fmri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1200
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1201
    if url.scheme != "pkg":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1202
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1203
            "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
  1204
            % (url.scheme, fmri))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1205
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1206
    if url.netloc:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1207
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1208
            "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
  1209
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1210
    if not url.path:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1211
        raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1212
            "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
  1213
    elif PLATFORM == "SunOS":
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1214
        # Validate package name
7410
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1215
        try:
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1216
            # PkgFmri object does not like the @latest special case so
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1217
            # strip it off if it's there.
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1218
            _pkgfmri = PkgFmri(fmri.strip('@latest'))
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1219
        except IllegalFmri as err:
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1220
            raise exception.InvalidParameterValue(err)
4460
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
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1223
def _validate_publishers(task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1224
    """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
  1225
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1226
    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
  1227
    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
  1228
        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
  1229
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1230
    :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
  1231
    :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
  1232
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1233
    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
  1234
    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
  1235
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1236
    # 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
  1237
    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
  1238
    for pub in pub_list:
7410
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1239
        try:
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1240
            # Split into name origin
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1241
            name, origin = pub.split('@', 1)
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1242
        except ValueError:
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1243
            raise exception.InvalidParameterValue(_(
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1244
                "Malformed IPS publisher, must be of format "
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1245
                "name@origin (%s).") % (pub))
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1246
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1247
        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
  1248
            raise exception.InvalidParameterValue(_(
7410
544ee1480a82 25166316 vague expection due to incomplete driver_info/publishers value
Matt Keenan <matt.keenan@oracle.com>
parents: 7388
diff changeset
  1249
                "Malformed IPS publisher, must be of format "
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1250
                "name@origin (%s).") % (pub))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1251
4590
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1252
        if PLATFORM == "SunOS":
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1253
            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
  1254
                raise exception.InvalidParameterValue(_(
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1255
                    "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
  1256
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1257
            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
  1258
                raise exception.InvalidParameterValue(_(
d39971eb17ab 21255932 Only use pkg validation routines if available
Matt Keenan <matt.keenan@oracle.com>
parents: 4586
diff changeset
  1259
                    "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
  1260
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1261
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1262
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
  1263
                      env=None):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1264
    """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
  1265
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1266
    :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
  1267
    :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
  1268
    :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
  1269
    :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
  1270
    :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
  1271
    :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
  1272
    :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
  1273
    :raises: AICreateProfileFail or AICreateManifestFail
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1274
    """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1275
    # 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
  1276
    url = urlparse(obj_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1277
    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
  1278
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1279
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1280
        # 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
  1281
        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
  1282
        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
  1283
    except Exception as err:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1284
        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
  1285
                  (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
  1286
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1287
            _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
  1288
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1289
            os.remove(temp_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1290
        raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1291
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1292
    try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1293
        if obj_type == "manifest":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1294
            # Create AI Profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1295
            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
  1296
        elif obj_type == "profile":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1297
            # Create AI Profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1298
            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
  1299
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1300
    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
  1301
        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
  1302
        if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1303
            _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
  1304
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1305
            os.remove(temp_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1306
        raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1307
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1308
    # 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
  1309
    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
  1310
    if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1311
        _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
  1312
    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1313
        os.remove(temp_file)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1314
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1315
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1316
class DeployStateChecker(Thread):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1317
    """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
  1318
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1319
    def __init__(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1320
        """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
  1321
        LOG.debug("DeployStateChecker.__init__()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1322
        Thread.__init__(self)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1323
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1324
        self.task = task
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1325
        self.node = task.node
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1326
        self._state = states.DEPLOYWAIT
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1327
        self._error = None
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1328
        self.ssh_connection = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1329
        self.running = True
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1330
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1331
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1332
    def state(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1333
        """Deployment state property"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1334
        return self._state
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1335
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1336
    @property
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1337
    def error(self):
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1338
        """Deployment error property"""
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1339
        return self._error
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1340
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1341
    def run(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1342
        """Start the thread """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1343
        LOG.debug("DeployStateChecker.run(): Connecting...")
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1344
        # 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
  1345
        # before returning failure.
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1346
        connection_attempt = 0
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1347
        while (connection_attempt < 3):
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1348
            try:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1349
                connection_attempt += 1
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1350
                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
  1351
                break
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1352
            except SSHException as err:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1353
                if connection_attempt < 3:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1354
                    continue
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1355
                else:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1356
                    self._state = states.DEPLOYFAIL
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1357
                    self._error = str(err)
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1358
                    self.stop()
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1359
                    return
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1360
        else:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1361
            self._state = states.DEPLOYFAIL
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1362
            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
  1363
            self.stop()
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1364
            return
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1365
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1366
        channel = client.invoke_shell()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1367
        channel.settimeout(0.0)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1368
        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
  1369
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1370
        # 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
  1371
        # 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
  1372
        while self.running:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1373
            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
  1374
                while True:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1375
                    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
  1376
                    if channel in rchans:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1377
                        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1378
                            console_data = ""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1379
                            while channel.recv_ready():
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1380
                                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
  1381
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1382
                            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
  1383
                                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
  1384
                                # 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
  1385
                                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
  1386
                                    self._state = states.DEPLOYDONE
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1387
                                else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1388
                                    # 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
  1389
                                    self._state = states.DEPLOYFAIL
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1390
                                self.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1391
                                break
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1392
                            tf.write(console_data)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1393
                            tf.flush()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1394
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1395
                            # 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
  1396
                            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
  1397
                                # Send console start command
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1398
                                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
  1399
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1400
                            # 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
  1401
                            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
  1402
                                channel.send("y\n")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1403
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1404
                            # 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
  1405
                            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
  1406
                                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
  1407
                                self._state = states.DEPLOYDONE
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1408
                                self.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1409
                                break
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1410
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1411
                            # 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
  1412
                            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
  1413
                                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
  1414
                                self._state = states.DEPLOYFAIL
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1415
                                self.stop()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1416
                                break
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1417
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1418
                            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
  1419
                                LOG.debug(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1420
                                    "DeployStateChecker.run(): DEPLOYING")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1421
                                self._state = states.DEPLOYING
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1422
                        except socket.timeout:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1423
                            pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1424
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1425
    def stop(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1426
        """Stop the thread"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1427
        LOG.debug("DeployStateChecker.stop()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1428
        self.running = False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1429
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1430
    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
  1431
        """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
  1432
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1433
        :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
  1434
        :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
  1435
        :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
  1436
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1437
        found_string = False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1438
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1439
        # 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
  1440
        fp.seek(0)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1441
        for line in fp:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1442
            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
  1443
                found_string = True
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1444
                break
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1445
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1446
        # 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
  1447
        fp.seek(0, 2)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1448
        return found_string
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1449
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1450
    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
  1451
        """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
  1452
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1453
        :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
  1454
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1455
        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
  1456
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1457
        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
  1458
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1459
        ssh_dict = {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1460
            '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
  1461
            '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
  1462
            '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
  1463
            }
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1464
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1465
        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
  1466
            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
  1467
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1468
            del ssh_dict['port']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1469
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1470
        if driver_info['password']:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1471
            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
  1472
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1473
        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
  1474
                  (ssh_dict))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1475
        return ssh_dict
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1476
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
class SolarisDeploy(base.DeployInterface):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1479
    """AI Deploy Interface """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1480
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1481
    def get_properties(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1482
        """Return Solaris driver properties"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1483
        return COMMON_PROPERTIES
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
    def validate(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1486
        """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
  1487
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1488
        :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
  1489
        :raises: InvalidParameterValue.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1490
        :raises: MissingParameterValue.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1491
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1492
        LOG.debug("SolarisDeploy.validate()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1493
        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
  1494
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1495
        # 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
  1496
        try:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1497
            _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
  1498
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1499
            raise exception.InvalidParameterValue(_(err))
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
        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
  1502
            raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1503
                _("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
  1504
                (task.node.uuid))
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
        # Ensure server 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.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
  1508
            raise exception.MissingParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1509
                _("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
  1510
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1511
        # Ensure username configured
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1512
        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
  1513
            raise exception.MissingParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1514
                _("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
  1515
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1516
        # 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
  1517
        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
  1518
            (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
  1519
            (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
  1520
                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
  1521
            raise exception.MissingParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1522
                _("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
  1523
                  "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
  1524
                  "configuration file."))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1525
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1526
        # 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
  1527
        # 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
  1528
        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
  1529
            (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
  1530
            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
  1531
                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
  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
                _("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
  1534
                  "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
  1535
                  "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
  1536
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1537
        # 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
  1538
        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
  1539
            aiservice = AIService(task,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1540
                                  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
  1541
            if not aiservice.exists:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1542
                raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1543
                    _("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
  1544
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1545
        # 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
  1546
        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
  1547
            # 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
  1548
            _validate_archive_uri(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1549
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1550
        # 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
  1551
        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
  1552
                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
  1553
            raise exception.MissingParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1554
                "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
  1555
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1556
        # 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
  1557
        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
  1558
            # 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
  1559
            _validate_publishers(task)
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 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
  1562
        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
  1563
            # 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
  1564
            _validate_fmri(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1565
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1566
        # 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
  1567
        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
  1568
            # 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
  1569
            _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
  1570
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1571
        # 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
  1572
        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
  1573
            # 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
  1574
            _validate_profiles(task,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1575
                               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
  1576
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1577
        # 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
  1578
        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
  1579
            # 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
  1580
            _validate_ai_manifest(task)
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
        # 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
  1583
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1584
            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
  1585
        except (exception.KeystoneFailure,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1586
                exception.KeystoneUnauthorized,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1587
                exception.CatalogNotFound):
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1588
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1589
                "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
  1590
                "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
  1591
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1592
        # 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
  1593
        _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
  1594
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1595
    @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
  1596
    def deploy(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1597
        """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
  1598
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1599
        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
  1600
        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
  1601
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1602
        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
  1603
        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
  1604
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1605
        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
  1606
        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
  1607
        before deploy().
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1608
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1609
        :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
  1610
        :returns: deploy state DEPLOYWAIT.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1611
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1612
        LOG.debug("SolarisDeploy.deploy()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1613
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1614
        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
  1615
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1616
        # 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
  1617
        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
  1618
            # 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
  1619
            dev_cmd = 'pxe'
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1620
        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
  1621
            # 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
  1622
            dev_cmd = 'wanboot'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1623
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1624
            raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1625
                _("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
  1626
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1627
        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
  1628
                                           persistent=False)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1629
        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
  1630
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1631
        deploy_thread = DeployStateChecker(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1632
        deploy_thread.start()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1633
        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
  1634
                                                     task, task.node.uuid,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1635
                                                     deploy_thread)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1636
        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
  1637
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1638
        return states.DEPLOYWAIT
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1639
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1640
    @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
  1641
    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
  1642
        """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
  1643
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1644
        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
  1645
        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
  1646
        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
  1647
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1648
        :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
  1649
        :returns: deploy state DELETED.
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
        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
  1652
        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
  1653
                                           persistent=False)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1654
        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
  1655
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1656
        return states.DELETED
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1657
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1658
    def prepare(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1659
        """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
  1660
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1661
        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
  1662
        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
  1663
        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
  1664
           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
  1665
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1666
        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
  1667
        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
  1668
        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
  1669
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1670
        1. archive_uri specified.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1671
            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
  1672
            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
  1673
        2. ai_service specified
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1674
            AI Service must exist.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1675
        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
  1676
            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
  1677
            install.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1678
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1679
        :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
  1680
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1681
        LOG.debug("SolarisDeploy.prepare()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1682
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1683
        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
  1684
        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
  1685
        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
  1686
        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
  1687
        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
  1688
        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
  1689
        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
  1690
        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
  1691
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1692
        # Ensure cache dir exists
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1693
        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
  1694
            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
  1695
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1696
        # 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
  1697
        # 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
  1698
        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
  1699
            raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1700
                _("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
  1701
                  "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
  1702
                  "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
  1703
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1704
        # 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
  1705
        #    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
  1706
        if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1707
            # 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
  1708
            _validate_archive_uri(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1709
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1710
            # 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
  1711
            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
  1712
            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
  1713
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1714
        elif ai_service:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1715
            # 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
  1716
            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
  1717
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1718
            # 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
  1719
            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
  1720
                ai_service = "default-i386"
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1721
            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
  1722
                ai_service = "default-sparc"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1723
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1724
                raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1725
                    _("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
  1726
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1727
            # 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
  1728
            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
  1729
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1730
        # 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
  1731
        if not aiservice.exists:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1732
            if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1733
                # Create this service
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1734
                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
  1735
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1736
                raise exception.InvalidParameterValue(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1737
                    _("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
  1738
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1739
        # 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
  1740
        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
  1741
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1742
                "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
  1743
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1744
        # 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
  1745
        if publishers:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1746
            # 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
  1747
            _validate_publishers(task)
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 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
  1750
        if fmri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1751
            # Validate fmri, format, etc
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1752
            _validate_fmri(task)
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 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
  1755
        if sc_profiles:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1756
            # 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
  1757
            _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
  1758
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1759
        # 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
  1760
        if install_profiles:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1761
            # 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
  1762
            _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
  1763
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1764
        # 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
  1765
        if ai_manifest:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1766
            # 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
  1767
            _validate_ai_manifest(task)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1768
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1769
        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
  1770
            # 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
  1771
            # 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
  1772
            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
  1773
                # Client exists remove it
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1774
                aiservice.delete_client(mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1775
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1776
            # 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
  1777
            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
  1778
            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
  1779
                                    publishers, fmri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1780
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1781
            # 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
  1782
            #    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
  1783
            manifest_name = mac.replace(':', '')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1784
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1785
            # 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
  1786
            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
  1787
                # Manifest exists remove it
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1788
                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
  1789
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1790
            # (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
  1791
            # 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
  1792
            # 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
  1793
            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
  1794
                # 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
  1795
                # 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
  1796
                _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
  1797
                                  aiservice, mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1798
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1799
                _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
  1800
                                  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
  1801
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1802
            # 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
  1803
            #   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
  1804
            #   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
  1805
            #   e.g. AAEEBBCCFF66-1
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1806
            profile_prefix = mac.replace(':', '') + "-"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1807
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1808
            # 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
  1809
            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
  1810
                # 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
  1811
                # 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
  1812
                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
  1813
                    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
  1814
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1815
            # 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
  1816
            # 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
  1817
            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
  1818
                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
  1819
                            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
  1820
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1821
                ins_list = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1822
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1823
            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
  1824
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1825
            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
  1826
                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
  1827
                           if prof.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1828
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1829
                sc_list = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1830
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1831
            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
  1832
                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
  1833
                    prof_dict[profile] = "all"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1834
                else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1835
                    prof_dict[profile] = "system"
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
            profile_index = 0
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1838
            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
  1839
                profile_index += 1
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1840
                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
  1841
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1842
                # 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
  1843
                # 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
  1844
                _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
  1845
                                  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
  1846
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1847
        # 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
  1848
        if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1849
            url = urlparse(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1850
            if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1851
                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
  1852
                                        url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1853
                _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
  1854
            elif PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1855
                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
  1856
                                        url.path.replace("/", ""))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1857
                _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
  1858
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1859
    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
  1860
        """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
  1861
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1862
        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
  1863
        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
  1864
        associated with this node.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1865
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1866
        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
  1867
        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
  1868
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1869
        :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
  1870
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1871
        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
  1872
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1873
        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
  1874
        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
  1875
        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
  1876
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1877
        # 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
  1878
        if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1879
            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
  1880
        elif ai_service:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1881
            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
  1882
        else:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1883
            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
  1884
                ai_service = "default-i386"
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1885
            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
  1886
                ai_service = "default-sparc"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1887
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1888
                raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1889
                    _("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
  1890
            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
  1891
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1892
        # 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
  1893
        if not aiservice.exists:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1894
            # 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
  1895
            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
  1896
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1897
            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
  1898
                # 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
  1899
                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
  1900
                    aiservice.delete_client(mac)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1901
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1902
                # 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
  1903
                manifest_name = mac.replace(':', '')
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1904
                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
  1905
                    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
  1906
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1907
                # 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
  1908
                profile_prefix = mac.replace(':', '') + "-"
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1909
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1910
                # 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
  1911
                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
  1912
                    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
  1913
                        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
  1914
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1915
        # 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
  1916
        if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1917
            url = urlparse(archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1918
            if url.scheme == "glance":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1919
                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
  1920
                                        url.netloc)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1921
                _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
  1922
            elif PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1923
                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
  1924
                                        url.path.replace("/", ""))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1925
                _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
  1926
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1927
    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
  1928
        """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
  1929
        """ 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
  1930
        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
  1931
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1932
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1933
class SolarisManagement(base.ManagementInterface):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1934
    """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
  1935
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1936
    def get_properties(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1937
        """Return Solaris driver properties"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1938
        return COMMON_PROPERTIES
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1939
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1940
    def __init__(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1941
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1942
            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
  1943
                                            'dual_bridge'])
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1944
        except OSError:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1945
            raise exception.DriverLoadError(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1946
                driver=self.__class__.__name__,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1947
                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
  1948
                         "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
  1949
        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
  1950
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1951
    def validate(self, task):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1952
        """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
  1953
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1954
        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
  1955
        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
  1956
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1957
        :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
  1958
        :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
  1959
            are missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1960
        :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
  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
        _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
  1964
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1965
    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
  1966
        """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
  1967
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1968
        :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
  1969
        :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
  1970
                  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
  1971
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1972
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1973
        if task is None:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1974
            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
  1975
                    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
  1976
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1977
            # 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
  1978
            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
  1979
            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
  1980
                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
  1981
                        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
  1982
                        boot_devices.SAFE]
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1983
            elif cpu_arch == 'SPARC':
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  1984
                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
  1985
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1986
                raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  1987
                    _("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
  1988
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1989
    @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
  1990
    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
  1991
        """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
  1992
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1993
        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
  1994
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  1995
        :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
  1996
        :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
  1997
                       :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
  1998
        :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
  1999
                           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
  2000
                           Default: False.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2001
        :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
  2002
        :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
  2003
        :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
  2004
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2005
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2006
        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
  2007
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2008
        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
  2009
        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
  2010
        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
  2011
        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
  2012
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2013
        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
  2014
            driver_utils.force_persistent_boot(task,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2015
                                               device,
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2016
                                               persistent)
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2017
            # 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
  2018
            # 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
  2019
            persistent = False
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2020
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2021
        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
  2022
            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
  2023
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2024
                    "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
  2025
            cmd = ["chassis", "bootdev", device]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2026
            if persistent:
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
  2027
                cmd.append("options=persistent")
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2028
        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
  2029
            # 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
  2030
            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
  2031
                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
  2032
                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
  2033
                if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2034
                    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
  2035
                                                              archive_uri)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2036
                    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
  2037
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2038
                    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
  2039
                        # 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
  2040
                        # 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
  2041
                        # 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
  2042
                        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
  2043
                            (task.context.auth_token)
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
                if publishers:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2046
                    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
  2047
                                if pub.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2048
                    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
  2049
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2050
                if fmri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2051
                    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
  2052
                                if pkg.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2053
                    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
  2054
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2055
                # 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
  2056
                # 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
  2057
                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
  2058
                    raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2059
                        "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
  2060
                        " %s") % script_str)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2061
                boot_cmd += script_str + '"'
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2062
                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
  2063
            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
  2064
                cmd = ['sunoem', 'cli',
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2065
                       'set /HOST/bootmode script=""']
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2066
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2067
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2068
                    "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
  2069
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2070
            raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2071
                _("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
  2072
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2073
        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
  2074
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2075
            _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
  2076
        except (exception.PasswordFileFailedToCreate,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2077
                processutils.ProcessExecutionError) as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2078
            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
  2079
                            '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
  2080
                            'Error: %(error)s'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2081
                        {'node': driver_info['uuid'],
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2082
                         'cmd': cmd, 'error': err})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2083
            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
  2084
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2085
    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
  2086
        """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
  2087
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2088
        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
  2089
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2090
        :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
  2091
        :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
  2092
            are missing.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2093
        :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
  2094
        :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
  2095
        :returns: a dictionary containing:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2096
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2097
            :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
  2098
                :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
  2099
            :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
  2100
                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
  2101
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2102
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2103
        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
  2104
        driver_info = task.node.driver_info
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2105
        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
  2106
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2107
        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
  2108
                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
  2109
                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
  2110
            return {
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2111
                '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
  2112
                'persistent': True
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2113
            }
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2114
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2115
        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
  2116
        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
  2117
        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
  2118
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2119
        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
  2120
            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
  2121
        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
  2122
            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
  2123
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2124
            raise exception.InvalidParameterValue(
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2125
                _("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
  2126
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2127
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2128
            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
  2129
        except (exception.PasswordFileFailedToCreate,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2130
                processutils.ProcessExecutionError) as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2131
            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
  2132
                            '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
  2133
                            'Error: %(error)s'),
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2134
                        {'node': driver_info['uuid'],
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2135
                         'cmd': cmd, 'error': err})
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2136
            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
  2137
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2138
        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
  2139
            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
  2140
            if re_obj:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2141
                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
  2142
                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
  2143
                    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
  2144
                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
  2145
                    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
  2146
                        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
  2147
                    else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2148
                        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
  2149
                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
  2150
                    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
  2151
                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
  2152
                    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
  2153
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2154
            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
  2155
        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
  2156
            if "net:dhcp" in out:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2157
                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
  2158
            else:
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2159
                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
  2160
        LOG.debug(response)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2161
        return response
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
    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
  2164
        """Get sensors data.
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2165
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2166
        :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
  2167
        :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
  2168
        :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
  2169
        :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
  2170
        :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
  2171
        :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
  2172
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2173
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2174
        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
  2175
        # 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
  2176
        # extended sensor informations
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2177
        cmd = ['sdr', '-v']
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2178
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2179
            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
  2180
        except (exception.PasswordFileFailedToCreate,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2181
                processutils.ProcessExecutionError) as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2182
            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
  2183
                                                  error=err)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2184
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2185
        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
  2186
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2187
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2188
class SolarisInspect(base.InspectInterface):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2189
    """Inspect class for solaris nodes."""
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
    def get_properties(self):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2192
        """Return Solaris driver properties"""
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2193
        return COMMON_PROPERTIES
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2194
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2195
    def validate(self, task):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2196
        """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
  2197
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2198
        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
  2199
        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
  2200
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2201
        :param task: a TaskManager instance
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2202
        :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
  2203
            are missing.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2204
        :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
  2205
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2206
        _parse_driver_info(task.node)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2207
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2208
    def inspect_hardware(self, task):
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2209
        """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
  2210
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2211
        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
  2212
        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
  2213
        determinable from the node.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2214
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2215
        :param task: a TaskManager instance
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2216
        :raises: HardwareInspectionFailure if properties could
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2217
                 not be retrieved successfully.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2218
        :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
  2219
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2220
        LOG.debug("SolarisInspect.inspect_hardware")
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2221
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2222
        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
  2223
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2224
        keys, _none = zip(*IPMI_PROPERTIES)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2225
        vallist = [line.split(': ')[1]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2226
                   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
  2227
        propdict = dict(zip(keys, vallist))
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2228
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2229
        # 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
  2230
        # 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
  2231
        try:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2232
            size_bytes = strutils.string_to_bytes(
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2233
                propdict['memory_mb'].replace(' ', ''))
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2234
            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
  2235
        except ValueError:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2236
            # 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
  2237
            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
  2238
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2239
        if propdict['local_gb'] == 'Not Available':
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2240
            del propdict['local_gb']
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2241
        else:
6855
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2242
            # 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
  2243
            # 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
  2244
            try:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2245
                size_bytes = strutils.string_to_bytes(
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2246
                    propdict['local_gb'].replace(' ', ''))
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2247
                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
  2248
            except ValueError:
ea44e7e0ca98 24465791 Update Ironic for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5517
diff changeset
  2249
                # 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
  2250
                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
  2251
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2252
        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
  2253
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2254
        vallist = [line.split(': ')[1]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2255
                   for line in cpu_props.strip().splitlines()]
7388
96cdbc229c1f 25099680 Inspection fails when total_cores is Not Available
Matt Keenan <matt.keenan@oracle.com>
parents: 7350
diff changeset
  2256
96cdbc229c1f 25099680 Inspection fails when total_cores is Not Available
Matt Keenan <matt.keenan@oracle.com>
parents: 7350
diff changeset
  2257
        try:
96cdbc229c1f 25099680 Inspection fails when total_cores is Not Available
Matt Keenan <matt.keenan@oracle.com>
parents: 7350
diff changeset
  2258
            total_cores = sum(map(int, vallist))
96cdbc229c1f 25099680 Inspection fails when total_cores is Not Available
Matt Keenan <matt.keenan@oracle.com>
parents: 7350
diff changeset
  2259
            propdict['cores'] = total_cores
96cdbc229c1f 25099680 Inspection fails when total_cores is Not Available
Matt Keenan <matt.keenan@oracle.com>
parents: 7350
diff changeset
  2260
        except ValueError:
96cdbc229c1f 25099680 Inspection fails when total_cores is Not Available
Matt Keenan <matt.keenan@oracle.com>
parents: 7350
diff changeset
  2261
            propdict['cores'] = 'N/A'
5405
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
        node_properties = task.node.properties
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2264
        node_properties.update(propdict)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2265
        task.node.properties = node_properties
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2266
        task.node.save()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2267
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2268
        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
  2269
        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
  2270
        return states.MANAGEABLE
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2271
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2272
    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
  2273
        """Retrieve IPMI_PROPERTIES from node
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2274
        :param task: a TaskManager instance.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2275
        :returns: ipmitool retrieved property values
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2276
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2277
        fh = tempfile.NamedTemporaryFile()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2278
        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
  2279
            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
  2280
        fh.seek(0)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2281
        cmd = ["exec", fh.name]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2282
        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
  2283
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2284
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2285
            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
  2286
        except (exception.PasswordFileFailedToCreate,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2287
                processutils.ProcessExecutionError) as err:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2288
            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
  2289
                            'when executing "ipmitool %(cmd)s". '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2290
                            'Error: %(error)s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2291
                        {'node': task.node.uuid,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2292
                         'cmd': cmd, 'error': err})
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2293
            raise exception.IPMIFailure(cmd=cmd)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2294
        fh.close()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2295
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2296
        return out
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2297
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2298
    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
  2299
        """Retrieve IPMI_PROPERTIES from node
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2300
        :param task: a TaskManager instance.
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2301
        :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
  2302
        :returns: ipmitool retrieved property values
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2303
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2304
        fh = tempfile.NamedTemporaryFile()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2305
        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
  2306
            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
  2307
        fh.seek(0)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2308
        cmd = ["exec", fh.name]
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2309
        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
  2310
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2311
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2312
            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
  2313
        except (exception.PasswordFileFailedToCreate,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2314
                processutils.ProcessExecutionError) as err:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2315
            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
  2316
                            'when executing "ipmitool %(cmd)s". '
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2317
                            'Error: %(error)s'),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2318
                        {'node': task.node.uuid,
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2319
                         'cmd': cmd, 'error': err})
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2320
            raise exception.IPMIFailure(cmd=cmd)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2321
        fh.close()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2322
        return out
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2323
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2324
    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
  2325
        """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
  2326
        :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
  2327
        :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
  2328
        """
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2329
        node_id = node.id
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2330
        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
  2331
        mydbapi = dbapi.get_instance()
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2332
        try:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2333
            mydbapi.create_port(port_dict)
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2334
            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
  2335
                         "%(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
  2336
        except exception.MACAlreadyExists:
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2337
            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
  2338
                         "for node %(node)s."),
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2339
                     {'mac': mac, 'node': node.uuid})
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2340
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2341
4460
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2342
class AIService():
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2343
    """AI Service"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2344
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2345
    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
  2346
        """Initialize AIService object
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2347
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2348
        :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
  2349
        :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
  2350
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2351
        LOG.debug("AIService.__init__()")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2352
        self.task = task
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2353
        self.name = name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2354
        self._clients = list()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2355
        self._image_path = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2356
        self._manifests = list()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2357
        self._profiles = list()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2358
        self._ssh_obj = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2359
        self._derived_manifest = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2360
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2361
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2362
    def ssh_obj(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2363
        """paramiko.SSHClient active connection"""
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2364
        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
  2365
        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
  2366
            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
  2367
        return self._ssh_obj
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2368
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2369
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2370
    def manifests(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2371
        """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
  2372
        LOG.debug("AIService.manifests")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2373
        if not self._manifests:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2374
            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
  2375
        return self._manifests
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2376
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2377
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2378
    def profiles(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2379
        """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
  2380
        LOG.debug("AIService.profiles")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2381
        if not self._profiles:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2382
            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
  2383
        return self._profiles
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2384
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2385
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2386
    def clients(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2387
        """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
  2388
        LOG.debug("AIService.clients")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2389
        if not self._clients:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2390
            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
  2391
        return self._clients
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2392
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2393
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2394
    def exists(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2395
        """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
  2396
        LOG.debug("AIService.exists")
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2397
        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
  2398
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2399
            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
  2400
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2401
            return False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2402
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2403
        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
  2404
            return False
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2405
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2406
            return True
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2407
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2408
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2409
    def image_path(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2410
        """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
  2411
        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
  2412
        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
  2413
            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
  2414
        return self._image_path
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
    @property
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2417
    def derived_manifest(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2418
        """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
  2419
        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
  2420
        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
  2421
            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
  2422
        return self._derived_manifest
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2423
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2424
    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
  2425
        """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
  2426
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2427
        :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
  2428
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2429
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2430
        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
  2431
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2432
        if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2433
            # 1. Fetch archive
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2434
            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
  2435
            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
  2436
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2437
            # 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
  2438
            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
  2439
            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
  2440
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2441
        # 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
  2442
        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
  2443
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2444
            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
  2445
        except:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2446
            if PLATFORM == "SunOS":
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2447
                _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
  2448
                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
  2449
                    _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
  2450
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2451
                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
  2452
                _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
  2453
            raise
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2454
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2455
        if PLATFORM != "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2456
            # 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
  2457
            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
  2458
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2459
        # 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
  2460
        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
  2461
            " -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
  2462
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2463
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2464
            _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
  2465
            self.name = uuid
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2466
            self._clients = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2467
            self._manifests = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2468
            self._profiles = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2469
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2470
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2471
            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
  2472
            if PLATFORM == "SunOS":
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2473
                _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
  2474
            else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2475
                _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
  2476
            raise AICreateServiceFail(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2477
                _("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
  2478
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2479
        # 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
  2480
        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
  2481
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2482
        if PLATFORM == "SunOS":
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2483
            # 5. Unmount UAR
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2484
            _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
  2485
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2486
        # 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
  2487
        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
  2488
            _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
  2489
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2490
    def delete_service(self):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2491
        """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
  2492
        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
  2493
        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
  2494
            " -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
  2495
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2496
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2497
            _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
  2498
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2499
            raise AIDeleteServiceFail(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2500
                _("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
  2501
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2502
    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
  2503
                      publishers, fmri):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2504
        """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
  2505
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2506
        :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
  2507
        :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
  2508
        :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
  2509
        :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
  2510
        :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
  2511
        :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
  2512
        :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
  2513
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2514
        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
  2515
        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
  2516
            mac + " -n " + self.name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2517
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2518
        # 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
  2519
        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
  2520
            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
  2521
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2522
            if archive_uri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2523
                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
  2524
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2525
            if auth_token:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2526
                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
  2527
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2528
            if publishers:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2529
                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
  2530
                            if pub.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2531
                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
  2532
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2533
            if fmri:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2534
                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
  2535
                            if pkg.strip()]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2536
                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
  2537
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2538
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2539
            _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
  2540
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2541
            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
  2542
                                     (mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2543
5405
66fd59fecd68 PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents: 4590
diff changeset
  2544
        # 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
  2545
        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
  2546
            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
  2547
            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
  2548
                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
  2549
                " > %s" % (custom_grub)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2550
            try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2551
                _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
  2552
            except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2553
                raise AICreateClientFail(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2554
                    _("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
  2555
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2556
            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
  2557
                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
  2558
            try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2559
                _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
  2560
            except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2561
                raise AICreateClientFail(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2562
                    _("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
  2563
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2564
            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
  2565
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2566
        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
  2567
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2568
    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
  2569
        """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
  2570
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2571
        :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
  2572
        :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
  2573
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2574
        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
  2575
        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
  2576
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2577
            _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
  2578
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2579
            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
  2580
                                     (mac))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2581
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2582
        # 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
  2583
        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
  2584
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2585
    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
  2586
        """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
  2587
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2588
        :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
  2589
        :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
  2590
        :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
  2591
        :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
  2592
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2593
        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
  2594
                  "'%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
  2595
                  (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
  2596
        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
  2597
            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
  2598
            " -c mac=" + mac
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2599
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2600
            _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
  2601
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2602
            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
  2603
                                       (manifest_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2604
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2605
        # 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
  2606
        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
  2607
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2608
    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
  2609
        """Delete a specific manifest
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2610
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2611
        :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
  2612
        :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
  2613
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2614
        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
  2615
                  (manifest_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2616
        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
  2617
            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
  2618
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2619
            _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
  2620
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2621
            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
  2622
                                       (manifest_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2623
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2624
        # 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
  2625
        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
  2626
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2627
    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
  2628
        """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
  2629
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2630
        :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
  2631
        :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
  2632
        :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
  2633
        :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
  2634
        :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
  2635
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2636
        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
  2637
                  "'%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
  2638
                  (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
  2639
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2640
        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
  2641
            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
  2642
            " -c mac=" + mac
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2643
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2644
        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
  2645
            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
  2646
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2647
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2648
            _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
  2649
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2650
            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
  2651
                                      (profile_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2652
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2653
        # 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
  2654
        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
  2655
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2656
    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
  2657
        """Delete a specific profile
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2658
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2659
        :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
  2660
        :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
  2661
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2662
        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
  2663
                  (profile_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2664
        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
  2665
            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
  2666
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2667
            _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
  2668
        except Exception as _err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2669
            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
  2670
                                      (profile_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2671
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2672
        # 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
  2673
        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
  2674
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2675
    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
  2676
        """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
  2677
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2678
        :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
  2679
        :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
  2680
        :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
  2681
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2682
        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
  2683
                  (local, remote))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2684
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2685
            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
  2686
            scp.put(local, remote)
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2687
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2688
            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
  2689
            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
  2690
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2691
    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
  2692
        """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
  2693
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2694
        :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
  2695
        :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
  2696
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2697
        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
  2698
                  (path))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2699
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2700
        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
  2701
        try:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2702
            _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
  2703
        except Exception as err:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2704
            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
  2705
            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
  2706
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2707
    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
  2708
        """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
  2709
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2710
        :returns: image_path property
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
        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
  2713
        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
  2714
        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
  2715
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2716
        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
  2717
            words = line.split()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2718
            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
  2719
                image_path = words[-1]
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2720
        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
  2721
        return image_path
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
    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
  2724
        """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
  2725
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2726
        :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
  2727
        :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
  2728
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2729
        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
  2730
        lines = list_out.splitlines()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2731
        service_name = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2732
        client_name = None
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
        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
  2735
            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
  2736
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2737
        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
  2738
            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
  2739
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2740
        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
  2741
                  (service_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2742
        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
  2743
        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
  2744
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2745
    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
  2746
        """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
  2747
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2748
        :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
  2749
        :returns: Service Name
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
        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
  2752
        service_name = None
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2753
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2754
        lines = list_out.splitlines()
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2755
        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
  2756
            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
  2757
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2758
        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
  2759
                  (service_name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2760
        return service_name
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2761
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2762
    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
  2763
        """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
  2764
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2765
        :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
  2766
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2767
        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
  2768
        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
  2769
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2770
    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
  2771
        """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
  2772
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2773
        :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
  2774
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2775
        LOG.debug("AIService._get_ssh_dict()")
4586
fb450945adf7 21348400 Issues encountered via unit testing
Matt Keenan <matt.keenan@oracle.com>
parents: 4567
diff changeset
  2776
        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
  2777
                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
  2778
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2779
                "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
  2780
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2781
        ssh_dict = {
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2782
            'host': CONF.ai.server,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2783
            'username': CONF.ai.username,
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2784
            '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
  2785
            '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
  2786
            }
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2787
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2788
        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
  2789
        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
  2790
            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
  2791
        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
  2792
            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
  2793
        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
  2794
            password = CONF.ai.password
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2795
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2796
        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
  2797
            raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2798
                "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
  2799
                "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
  2800
        if password:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2801
            ssh_dict['password'] = password
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2802
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2803
        if key_contents:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2804
            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
  2805
        else:
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2806
            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
  2807
                raise exception.InvalidParameterValue(_(
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2808
                    "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
  2809
            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
  2810
        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
  2811
        return ssh_dict
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2812
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2813
    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
  2814
        """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
  2815
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2816
        :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
  2817
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2818
        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
  2819
        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
  2820
        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
  2821
                                   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
  2822
                                             " 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
  2823
        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
  2824
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2825
    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
  2826
        """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
  2827
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2828
        :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
  2829
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2830
        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
  2831
        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
  2832
        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
  2833
                                   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
  2834
                                             "service %s") % (self.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2835
        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
  2836
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2837
    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
  2838
        """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
  2839
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2840
        :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
  2841
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2842
        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
  2843
        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
  2844
        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
  2845
                                   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
  2846
                                             "service %s") % (self.name))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2847
        # 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
  2848
        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
  2849
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2850
    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
  2851
        """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
  2852
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2853
        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
  2854
            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
  2855
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2856
        :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
  2857
        :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
  2858
        """
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2859
        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
  2860
                  (list_out))
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2861
        names = []
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2862
        lines = list_out.splitlines()
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
        # 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
  2865
        # 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
  2866
        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
  2867
            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
  2868
            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
  2869
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2870
            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
  2871
                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
  2872
                    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
  2873
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2874
        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
  2875
        return names
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2876
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2877
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2878
# Custom Exceptions
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2879
class AICreateServiceFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2880
    """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
  2881
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2882
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
class AIDeleteServiceFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2885
    """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
  2886
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2887
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
class AICreateClientFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2890
    """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
  2891
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2892
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
class AIDeleteClientFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2895
    """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
  2896
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2897
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
class AICreateManifestFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2900
    """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
  2901
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2902
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
class AIDeleteManifestFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2905
    """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
  2906
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2907
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2908
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2909
class AICreateProfileFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2910
    """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
  2911
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2912
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2913
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2914
class AIDeleteProfileFail(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2915
    """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
  2916
    pass
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2917
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2918
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2919
class SolarisIPMIError(exception.IronicException):
e5811789e2fb PSARC 2015/172 OpenStack Ironic (OpenStack Bare Metal Provisioning Service)
Matt Keenan <matt.keenan@oracle.com>
parents:
diff changeset
  2920
    """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
  2921
    message = _("%(msg)s")