components/openstack/nova/files/nova-compute
author Sean Wilcox <sean.wilcox@oracle.com>
Fri, 24 Mar 2017 14:28:46 -0600
changeset 7799 e35d3ee6d1b8
parent 6854 52081f923019
permissions -rw-r--r--
PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive 25615046 cloudbase-init should support configdrive on solaris 25027429 Enable cloudbase-init debug in config file
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4049
150852e281c4 20816335 move the core OpenStack components to Python 2.7
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
     1
#!/usr/bin/python2.7
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     2
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
     3
# Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     4
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     5
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     6
#    not use this file except in compliance with the License. You may obtain
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     7
#    a copy of the License at
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     8
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
     9
#         http://www.apache.org/licenses/LICENSE-2.0
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    10
#
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    11
#    Unless required by applicable law or agreed to in writing, software
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    12
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    13
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    14
#    License for the specific language governing permissions and limitations
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    15
#    under the License.
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    16
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    17
import ConfigParser
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    18
import os
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    19
from subprocess import CalledProcessError, Popen, PIPE, check_call
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    20
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    21
import smf_include
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    22
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    23
5609
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    24
def _create_dataset(path, poolname):
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    25
    # get the root pool name
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    26
    cmd = ['/usr/sbin/zfs', 'list', '-Ho', 'name', '/']
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    27
    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    28
    output, error = p.communicate()
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    29
    if p.returncode != 0:
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    30
        print "unable to determine root pool name: %s" % (error)
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    31
        return smf_include.SMF_EXIT_ERR_CONFIG
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    32
    rpool = output.split('/')[0]
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    33
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    34
    # the default directory doesn't exist, create a new dataset for it
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    35
    ds = os.path.join(rpool, poolname)
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    36
    try:
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    37
        check_call(['/usr/bin/pfexec', '/usr/sbin/zfs', 'create', '-p',
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    38
                    '-o', 'mountpoint=' + path, ds])
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    39
    except CalledProcessError as err:
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    40
        print "unable to create %s: %s" % (ds, err)
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    41
        return smf_include.SMF_EXIT_ERR_CONFIG
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    42
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    43
    return smf_include.SMF_EXIT_OK
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    44
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    45
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    46
def start():
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    47
    # retrieve dataset path for suspend images
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    48
    nova_conf = "/etc/nova/nova.conf"
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    49
    if not os.path.exists(nova_conf):
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    50
        print "%s doesn't exist" % nova_conf
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    51
        return smf_include.SMF_EXIT_ERR_CONFIG
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    52
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    53
    parser = ConfigParser.ConfigParser()
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    54
    parser.read(nova_conf)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    55
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    56
    # retrieve the suspend path or just get the default
5609
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    57
    suspend_default_path = '/var/share/zones/SYSsuspend'
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    58
    try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5609
diff changeset
    59
        suspend_path = parser.get('solariszones', 'zones_suspend_path')
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    60
    except ConfigParser.NoOptionError:
5609
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    61
        suspend_path = suspend_default_path
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    62
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    63
    if not os.path.exists(suspend_path):
5609
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    64
        if suspend_path == suspend_default_path:
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    65
            ret = _create_dataset(suspend_path, 'VARSHARE/zones/SYSsuspend')
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    66
            if ret != smf_include.SMF_EXIT_OK:
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    67
                return ret
4781
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    68
        else:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    69
            # the user specified a path, but it doesn't exist
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    70
            print "Zones suspend path %s does not exist" % (suspend_path)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    71
            return smf_include.SMF_EXIT_ERR_CONFIG
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    72
5609
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    73
    # retrieve the image cache path or just get the default
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    74
    imagecache_default_path = '/var/share/nova/images'
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    75
    try:
6854
52081f923019 24465850 Update Nova for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents: 5609
diff changeset
    76
        imagecache_path = parser.get('solariszones', 'glancecache_dirname')
5609
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    77
    except ConfigParser.NoOptionError:
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    78
        imagecache_path = imagecache_default_path
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    79
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    80
    if not os.path.exists(imagecache_path):
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    81
        if imagecache_path == imagecache_default_path:
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    82
            ret = _create_dataset(imagecache_path, 'VARSHARE/nova/images')
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    83
            if ret != smf_include.SMF_EXIT_OK:
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    84
                return ret
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    85
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    86
            check_call(['/usr/bin/pfexec', '/usr/bin/chown', 'nova:nova',
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    87
                        imagecache_path])
318813fd0ac2 PSARC/2016/172 Making OpenStack Nova's image cache sharable
Sean Wilcox <sean.wilcox@oracle.com>
parents: 5405
diff changeset
    88
7799
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    89
    configdrive_path = '/var/share/nova/configdrives'
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    90
    if not os.path.exists(configdrive_path):
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    91
        ret = _create_dataset(configdrive_path, "VARSHARE/nova/configdrives")
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    92
        if ret != smf_include.SMF_EXIT_OK:
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    93
            return ret
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    94
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    95
        check_call(['/usr/bin/pfexec', '/usr/bin/chown', 'nova:nova',
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    96
                    configdrive_path])
e35d3ee6d1b8 PSARC 2017/039 cloudbase-init: Portable cloud image initialization with ConfigDrive
Sean Wilcox <sean.wilcox@oracle.com>
parents: 6854
diff changeset
    97
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    98
    smf_include.smf_subprocess("/usr/bin/pfexec /usr/lib/nova/nova-compute")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    99
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   100
if __name__ == "__main__":
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   101
    os.putenv("LC_ALL", "C")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
   102
    smf_include.smf_main()