components/openstack/nova/files/nova-compute
author Elena Ouyang <elena.ouyang@oracle.com>
Fri, 14 Aug 2015 14:44:36 -0700
changeset 4781 93d68a5ece25
parent 4049 150852e281c4
child 5192 f5359fbbaadd
permissions -rw-r--r--
PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume 21630538 Nova driver should support suspend/resume
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
4049
150852e281c4 20816335 move the core OpenStack components to Python 2.7
Drew Fisher <drew.fisher@oracle.com>
parents: 1760
diff changeset
     3
# Copyright (c) 2013, 2015, 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
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    24
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
    25
    # 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
    26
    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
    27
    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
    28
        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
    29
        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
    30
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    31
    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
    32
    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
    33
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    34
    # retrieve the suspend path or just get the default
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    35
    default_path = '/var/share/suspend'
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    36
    try:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    37
        suspend_path = parser.get('DEFAULT', 'zones_suspend_path')
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    38
    except ConfigParser.NoOptionError:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    39
        suspend_path = default_path
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    40
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    41
    if not os.path.exists(suspend_path):
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    42
        if suspend_path == default_path:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    43
            # get the root pool name
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    44
            cmd = ['/usr/sbin/zfs', 'list', '-Ho', 'name', '/']
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    45
            p = Popen(cmd, stdout=PIPE, stderr=PIPE)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    46
            output, error = p.communicate()
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    47
            if p.returncode != 0:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    48
                print "unable to determine root pool name: %s" % (error)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    49
                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
    50
            rpool = output.split('/')[0]
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    51
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    52
            # the default directory doesn't exist, create a new dataset for it
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    53
            suspend_ds = os.path.join(rpool, 'VARSHARE/suspend')
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    54
            try:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    55
                check_call(['/usr/bin/pfexec', '/usr/sbin/zfs', 'create', '-p',
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    56
                            '-o', 'mountpoint=' + suspend_path, suspend_ds])
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    57
            except CalledProcessError as err:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    58
                print "unable to create %s: %s" % (suspend_ds, err)
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    59
                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
    60
        else:
93d68a5ece25 PSARC 2015/357 OpenStack Nova support for kernel zone suspend/resume
Elena Ouyang <elena.ouyang@oracle.com>
parents: 4049
diff changeset
    61
            # 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
    62
            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
    63
            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
    64
1760
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    65
    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
    66
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    67
if __name__ == "__main__":
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    68
    os.putenv("LC_ALL", "C")
353323c7bdc1 PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff changeset
    69
    smf_include.smf_main()