Merge from trunk
This commit is contained in:
@@ -34,10 +34,12 @@ if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
|
|||||||
|
|
||||||
from nova import service
|
from nova import service
|
||||||
from nova import twistd
|
from nova import twistd
|
||||||
|
from nova import utils
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
twistd.serve(__file__)
|
twistd.serve(__file__)
|
||||||
|
|
||||||
if __name__ == '__builtin__':
|
if __name__ == '__builtin__':
|
||||||
|
utils.default_flagfile()
|
||||||
application = service.Service.create() # pylint: disable=C0103
|
application = service.Service.create() # pylint: disable=C0103
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
|
|||||||
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
|
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
|
||||||
sys.path.insert(0, possible_topdir)
|
sys.path.insert(0, possible_topdir)
|
||||||
|
|
||||||
|
from nova import utils
|
||||||
from nova import twistd
|
from nova import twistd
|
||||||
from nova.compute import monitor
|
from nova.compute import monitor
|
||||||
|
|
||||||
@@ -44,6 +45,7 @@ if __name__ == '__main__':
|
|||||||
twistd.serve(__file__)
|
twistd.serve(__file__)
|
||||||
|
|
||||||
if __name__ == '__builtin__':
|
if __name__ == '__builtin__':
|
||||||
|
utils.default_flagfile()
|
||||||
logging.warn('Starting instance monitor')
|
logging.warn('Starting instance monitor')
|
||||||
# pylint: disable-msg=C0103
|
# pylint: disable-msg=C0103
|
||||||
monitor = monitor.InstanceMonitor()
|
monitor = monitor.InstanceMonitor()
|
||||||
|
|||||||
@@ -467,7 +467,7 @@ def methods_of(obj):
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""Parse options and call the appropriate class/method."""
|
"""Parse options and call the appropriate class/method."""
|
||||||
utils.default_flagfile('/etc/nova/nova-manage.conf')
|
utils.default_flagfile()
|
||||||
argv = FLAGS(sys.argv)
|
argv = FLAGS(sys.argv)
|
||||||
|
|
||||||
if FLAGS.verbose:
|
if FLAGS.verbose:
|
||||||
|
|||||||
@@ -34,10 +34,12 @@ if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
|
|||||||
|
|
||||||
from nova import service
|
from nova import service
|
||||||
from nova import twistd
|
from nova import twistd
|
||||||
|
from nova import utils
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
twistd.serve(__file__)
|
twistd.serve(__file__)
|
||||||
|
|
||||||
if __name__ == '__builtin__':
|
if __name__ == '__builtin__':
|
||||||
|
utils.default_flagfile()
|
||||||
application = service.Service.create() # pylint: disable-msg=C0103
|
application = service.Service.create() # pylint: disable-msg=C0103
|
||||||
|
|||||||
@@ -34,10 +34,12 @@ if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
|
|||||||
|
|
||||||
from nova import service
|
from nova import service
|
||||||
from nova import twistd
|
from nova import twistd
|
||||||
|
from nova import utils
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
twistd.serve(__file__)
|
twistd.serve(__file__)
|
||||||
|
|
||||||
if __name__ == '__builtin__':
|
if __name__ == '__builtin__':
|
||||||
|
utils.default_flagfile()
|
||||||
application = service.Service.create()
|
application = service.Service.create()
|
||||||
|
|||||||
@@ -34,10 +34,12 @@ if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
|
|||||||
|
|
||||||
from nova import service
|
from nova import service
|
||||||
from nova import twistd
|
from nova import twistd
|
||||||
|
from nova import utils
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
twistd.serve(__file__)
|
twistd.serve(__file__)
|
||||||
|
|
||||||
if __name__ == '__builtin__':
|
if __name__ == '__builtin__':
|
||||||
|
utils.default_flagfile()
|
||||||
application = service.Service.create() # pylint: disable-msg=C0103
|
application = service.Service.create() # pylint: disable-msg=C0103
|
||||||
|
|||||||
84
nova/auth/nova_openldap.schema
Normal file
84
nova/auth/nova_openldap.schema
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#
|
||||||
|
# Person object for Nova
|
||||||
|
# inetorgperson with extra attributes
|
||||||
|
# Author: Vishvananda Ishaya <vishvananda@yahoo.com>
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
# using internet experimental oid arc as per BP64 3.1
|
||||||
|
objectidentifier novaSchema 1.3.6.1.3.1.666.666
|
||||||
|
objectidentifier novaAttrs novaSchema:3
|
||||||
|
objectidentifier novaOCs novaSchema:4
|
||||||
|
|
||||||
|
attributetype (
|
||||||
|
novaAttrs:1
|
||||||
|
NAME 'accessKey'
|
||||||
|
DESC 'Key for accessing data'
|
||||||
|
EQUALITY caseIgnoreMatch
|
||||||
|
SUBSTR caseIgnoreSubstringsMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
|
||||||
|
SINGLE-VALUE
|
||||||
|
)
|
||||||
|
|
||||||
|
attributetype (
|
||||||
|
novaAttrs:2
|
||||||
|
NAME 'secretKey'
|
||||||
|
DESC 'Secret key'
|
||||||
|
EQUALITY caseIgnoreMatch
|
||||||
|
SUBSTR caseIgnoreSubstringsMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
|
||||||
|
SINGLE-VALUE
|
||||||
|
)
|
||||||
|
|
||||||
|
attributetype (
|
||||||
|
novaAttrs:3
|
||||||
|
NAME 'keyFingerprint'
|
||||||
|
DESC 'Fingerprint of private key'
|
||||||
|
EQUALITY caseIgnoreMatch
|
||||||
|
SUBSTR caseIgnoreSubstringsMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
|
||||||
|
SINGLE-VALUE
|
||||||
|
)
|
||||||
|
|
||||||
|
attributetype (
|
||||||
|
novaAttrs:4
|
||||||
|
NAME 'isAdmin'
|
||||||
|
DESC 'Is user an administrator?'
|
||||||
|
EQUALITY booleanMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
|
||||||
|
SINGLE-VALUE
|
||||||
|
)
|
||||||
|
|
||||||
|
attributetype (
|
||||||
|
novaAttrs:5
|
||||||
|
NAME 'projectManager'
|
||||||
|
DESC 'Project Managers of a project'
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
|
||||||
|
)
|
||||||
|
|
||||||
|
objectClass (
|
||||||
|
novaOCs:1
|
||||||
|
NAME 'novaUser'
|
||||||
|
DESC 'access and secret keys'
|
||||||
|
AUXILIARY
|
||||||
|
MUST ( uid )
|
||||||
|
MAY ( accessKey $ secretKey $ isAdmin )
|
||||||
|
)
|
||||||
|
|
||||||
|
objectClass (
|
||||||
|
novaOCs:2
|
||||||
|
NAME 'novaKeyPair'
|
||||||
|
DESC 'Key pair for User'
|
||||||
|
SUP top
|
||||||
|
STRUCTURAL
|
||||||
|
MUST ( cn $ sshPublicKey $ keyFingerprint )
|
||||||
|
)
|
||||||
|
|
||||||
|
objectClass (
|
||||||
|
novaOCs:3
|
||||||
|
NAME 'novaProject'
|
||||||
|
DESC 'Container for project'
|
||||||
|
SUP groupOfNames
|
||||||
|
STRUCTURAL
|
||||||
|
MUST ( cn $ projectManager )
|
||||||
|
)
|
||||||
16
nova/auth/nova_sun.schema
Normal file
16
nova/auth/nova_sun.schema
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# Person object for Nova
|
||||||
|
# inetorgperson with extra attributes
|
||||||
|
# Author: Vishvananda Ishaya <vishvananda@yahoo.com>
|
||||||
|
# Modified for strict RFC 4512 compatibility by: Ryan Lane <ryan@ryandlane.com>
|
||||||
|
#
|
||||||
|
# using internet experimental oid arc as per BP64 3.1
|
||||||
|
dn: cn=schema
|
||||||
|
attributeTypes: ( 1.3.6.1.3.1.666.666.3.1 NAME 'accessKey' DESC 'Key for accessing data' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
|
||||||
|
attributeTypes: ( 1.3.6.1.3.1.666.666.3.2 NAME 'secretKey' DESC 'Secret key' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
|
||||||
|
attributeTypes: ( 1.3.6.1.3.1.666.666.3.3 NAME 'keyFingerprint' DESC 'Fingerprint of private key' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE)
|
||||||
|
attributeTypes: ( 1.3.6.1.3.1.666.666.3.4 NAME 'isAdmin' DESC 'Is user an administrator?' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
|
||||||
|
attributeTypes: ( 1.3.6.1.3.1.666.666.3.5 NAME 'projectManager' DESC 'Project Managers of a project' SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 )
|
||||||
|
objectClasses: ( 1.3.6.1.3.1.666.666.4.1 NAME 'novaUser' DESC 'access and secret keys' SUP top AUXILIARY MUST ( uid ) MAY ( accessKey $ secretKey $ isAdmin ) )
|
||||||
|
objectClasses: ( 1.3.6.1.3.1.666.666.4.2 NAME 'novaKeyPair' DESC 'Key pair for User' SUP top STRUCTURAL MUST ( cn $ sshPublicKey $ keyFingerprint ) )
|
||||||
|
objectClasses: ( 1.3.6.1.3.1.666.666.4.3 NAME 'novaProject' DESC 'Container for project' SUP groupOfNames STRUCTURAL MUST ( cn $ projectManager ) )
|
||||||
19
nova/auth/openssh-lpk_openldap.schema
Normal file
19
nova/auth/openssh-lpk_openldap.schema
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#
|
||||||
|
# LDAP Public Key Patch schema for use with openssh-ldappubkey
|
||||||
|
# Author: Eric AUGE <eau@phear.org>
|
||||||
|
#
|
||||||
|
# Based on the proposal of : Mark Ruijter
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
# octetString SYNTAX
|
||||||
|
attributetype ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey'
|
||||||
|
DESC 'MANDATORY: OpenSSH Public key'
|
||||||
|
EQUALITY octetStringMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
|
||||||
|
|
||||||
|
# printableString SYNTAX yes|no
|
||||||
|
objectclass ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY
|
||||||
|
DESC 'MANDATORY: OpenSSH LPK objectclass'
|
||||||
|
MAY ( sshPublicKey $ uid )
|
||||||
|
)
|
||||||
10
nova/auth/openssh-lpk_sun.schema
Normal file
10
nova/auth/openssh-lpk_sun.schema
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#
|
||||||
|
# LDAP Public Key Patch schema for use with openssh-ldappubkey
|
||||||
|
# Author: Eric AUGE <eau@phear.org>
|
||||||
|
#
|
||||||
|
# Schema for Sun Directory Server.
|
||||||
|
# Based on the original schema, modified by Stefan Fischer.
|
||||||
|
#
|
||||||
|
dn: cn=schema
|
||||||
|
attributeTypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey' DESC 'MANDATORY: OpenSSH Public key' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
|
||||||
|
objectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY DESC 'MANDATORY: OpenSSH LPK objectclass' MAY ( sshPublicKey $ uid ) )
|
||||||
@@ -20,115 +20,9 @@
|
|||||||
|
|
||||||
apt-get install -y slapd ldap-utils python-ldap
|
apt-get install -y slapd ldap-utils python-ldap
|
||||||
|
|
||||||
cat >/etc/ldap/schema/openssh-lpk_openldap.schema <<LPK_SCHEMA_EOF
|
abspath=`dirname "$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"`
|
||||||
#
|
cp $abspath/openssh-lpk_openldap.schema /etc/ldap/schema/openssh-lpk_openldap.schema
|
||||||
# LDAP Public Key Patch schema for use with openssh-ldappubkey
|
cp $abspath/nova_openldap.schema /etc/ldap/schema/nova_openldap.schema
|
||||||
# Author: Eric AUGE <eau@phear.org>
|
|
||||||
#
|
|
||||||
# Based on the proposal of : Mark Ruijter
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
# octetString SYNTAX
|
|
||||||
attributetype ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey'
|
|
||||||
DESC 'MANDATORY: OpenSSH Public key'
|
|
||||||
EQUALITY octetStringMatch
|
|
||||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
|
|
||||||
|
|
||||||
# printableString SYNTAX yes|no
|
|
||||||
objectclass ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY
|
|
||||||
DESC 'MANDATORY: OpenSSH LPK objectclass'
|
|
||||||
MAY ( sshPublicKey $ uid )
|
|
||||||
)
|
|
||||||
LPK_SCHEMA_EOF
|
|
||||||
|
|
||||||
cat >/etc/ldap/schema/nova.schema <<NOVA_SCHEMA_EOF
|
|
||||||
#
|
|
||||||
# Person object for Nova
|
|
||||||
# inetorgperson with extra attributes
|
|
||||||
# Author: Vishvananda Ishaya <vishvananda@yahoo.com>
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
# using internet experimental oid arc as per BP64 3.1
|
|
||||||
objectidentifier novaSchema 1.3.6.1.3.1.666.666
|
|
||||||
objectidentifier novaAttrs novaSchema:3
|
|
||||||
objectidentifier novaOCs novaSchema:4
|
|
||||||
|
|
||||||
attributetype (
|
|
||||||
novaAttrs:1
|
|
||||||
NAME 'accessKey'
|
|
||||||
DESC 'Key for accessing data'
|
|
||||||
EQUALITY caseIgnoreMatch
|
|
||||||
SUBSTR caseIgnoreSubstringsMatch
|
|
||||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
|
|
||||||
SINGLE-VALUE
|
|
||||||
)
|
|
||||||
|
|
||||||
attributetype (
|
|
||||||
novaAttrs:2
|
|
||||||
NAME 'secretKey'
|
|
||||||
DESC 'Secret key'
|
|
||||||
EQUALITY caseIgnoreMatch
|
|
||||||
SUBSTR caseIgnoreSubstringsMatch
|
|
||||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
|
|
||||||
SINGLE-VALUE
|
|
||||||
)
|
|
||||||
|
|
||||||
attributetype (
|
|
||||||
novaAttrs:3
|
|
||||||
NAME 'keyFingerprint'
|
|
||||||
DESC 'Fingerprint of private key'
|
|
||||||
EQUALITY caseIgnoreMatch
|
|
||||||
SUBSTR caseIgnoreSubstringsMatch
|
|
||||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
|
|
||||||
SINGLE-VALUE
|
|
||||||
)
|
|
||||||
|
|
||||||
attributetype (
|
|
||||||
novaAttrs:4
|
|
||||||
NAME 'isAdmin'
|
|
||||||
DESC 'Is user an administrator?'
|
|
||||||
EQUALITY booleanMatch
|
|
||||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
|
|
||||||
SINGLE-VALUE
|
|
||||||
)
|
|
||||||
|
|
||||||
attributetype (
|
|
||||||
novaAttrs:5
|
|
||||||
NAME 'projectManager'
|
|
||||||
DESC 'Project Managers of a project'
|
|
||||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
|
|
||||||
)
|
|
||||||
|
|
||||||
objectClass (
|
|
||||||
novaOCs:1
|
|
||||||
NAME 'novaUser'
|
|
||||||
DESC 'access and secret keys'
|
|
||||||
AUXILIARY
|
|
||||||
MUST ( uid )
|
|
||||||
MAY ( accessKey $ secretKey $ isAdmin )
|
|
||||||
)
|
|
||||||
|
|
||||||
objectClass (
|
|
||||||
novaOCs:2
|
|
||||||
NAME 'novaKeyPair'
|
|
||||||
DESC 'Key pair for User'
|
|
||||||
SUP top
|
|
||||||
STRUCTURAL
|
|
||||||
MUST ( cn $ sshPublicKey $ keyFingerprint )
|
|
||||||
)
|
|
||||||
|
|
||||||
objectClass (
|
|
||||||
novaOCs:3
|
|
||||||
NAME 'novaProject'
|
|
||||||
DESC 'Container for project'
|
|
||||||
SUP groupOfNames
|
|
||||||
STRUCTURAL
|
|
||||||
MUST ( cn $ projectManager )
|
|
||||||
)
|
|
||||||
|
|
||||||
NOVA_SCHEMA_EOF
|
|
||||||
|
|
||||||
mv /etc/ldap/slapd.conf /etc/ldap/slapd.conf.orig
|
mv /etc/ldap/slapd.conf /etc/ldap/slapd.conf.orig
|
||||||
cat >/etc/ldap/slapd.conf <<SLAPD_CONF_EOF
|
cat >/etc/ldap/slapd.conf <<SLAPD_CONF_EOF
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ where they're used.
|
|||||||
import getopt
|
import getopt
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
|
import string
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import gflags
|
import gflags
|
||||||
@@ -38,11 +39,12 @@ class FlagValues(gflags.FlagValues):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, extra_context=None):
|
||||||
gflags.FlagValues.__init__(self)
|
gflags.FlagValues.__init__(self)
|
||||||
self.__dict__['__dirty'] = []
|
self.__dict__['__dirty'] = []
|
||||||
self.__dict__['__was_already_parsed'] = False
|
self.__dict__['__was_already_parsed'] = False
|
||||||
self.__dict__['__stored_argv'] = []
|
self.__dict__['__stored_argv'] = []
|
||||||
|
self.__dict__['__extra_context'] = extra_context
|
||||||
|
|
||||||
def __call__(self, argv):
|
def __call__(self, argv):
|
||||||
# We're doing some hacky stuff here so that we don't have to copy
|
# We're doing some hacky stuff here so that we don't have to copy
|
||||||
@@ -112,7 +114,7 @@ class FlagValues(gflags.FlagValues):
|
|||||||
def ParseNewFlags(self):
|
def ParseNewFlags(self):
|
||||||
if '__stored_argv' not in self.__dict__:
|
if '__stored_argv' not in self.__dict__:
|
||||||
return
|
return
|
||||||
new_flags = FlagValues()
|
new_flags = FlagValues(self)
|
||||||
for k in self.__dict__['__dirty']:
|
for k in self.__dict__['__dirty']:
|
||||||
new_flags[k] = gflags.FlagValues.__getitem__(self, k)
|
new_flags[k] = gflags.FlagValues.__getitem__(self, k)
|
||||||
|
|
||||||
@@ -134,9 +136,29 @@ class FlagValues(gflags.FlagValues):
|
|||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
if self.IsDirty(name):
|
if self.IsDirty(name):
|
||||||
self.ParseNewFlags()
|
self.ParseNewFlags()
|
||||||
return gflags.FlagValues.__getattr__(self, name)
|
val = gflags.FlagValues.__getattr__(self, name)
|
||||||
|
if type(val) is str:
|
||||||
|
tmpl = string.Template(val)
|
||||||
|
context = [self, self.__dict__['__extra_context']]
|
||||||
|
return tmpl.substitute(StrWrapper(context))
|
||||||
|
return val
|
||||||
|
|
||||||
|
|
||||||
|
class StrWrapper(object):
|
||||||
|
"""Wrapper around FlagValues objects
|
||||||
|
|
||||||
|
Wraps FlagValues objects for string.Template so that we're
|
||||||
|
sure to return strings."""
|
||||||
|
def __init__(self, context_objs):
|
||||||
|
self.context_objs = context_objs
|
||||||
|
|
||||||
|
def __getitem__(self, name):
|
||||||
|
for context in self.context_objs:
|
||||||
|
val = getattr(context, name, False)
|
||||||
|
if val:
|
||||||
|
return str(val)
|
||||||
|
raise KeyError(name)
|
||||||
|
|
||||||
FLAGS = FlagValues()
|
FLAGS = FlagValues()
|
||||||
gflags.FLAGS = FLAGS
|
gflags.FLAGS = FLAGS
|
||||||
gflags.DEFINE_flag(gflags.HelpFlag(), FLAGS)
|
gflags.DEFINE_flag(gflags.HelpFlag(), FLAGS)
|
||||||
@@ -222,8 +244,11 @@ DEFINE_string('vpn_key_suffix',
|
|||||||
|
|
||||||
DEFINE_integer('auth_token_ttl', 3600, 'Seconds for auth tokens to linger')
|
DEFINE_integer('auth_token_ttl', 3600, 'Seconds for auth tokens to linger')
|
||||||
|
|
||||||
|
DEFINE_string('state_path', os.path.join(os.path.dirname(__file__), '../'),
|
||||||
|
"Top-level directory for maintaining nova's state")
|
||||||
|
|
||||||
DEFINE_string('sql_connection',
|
DEFINE_string('sql_connection',
|
||||||
'sqlite:///%s/nova.sqlite' % os.path.abspath("./"),
|
'sqlite:///$state_path/nova.sqlite',
|
||||||
'connection string for sql database')
|
'connection string for sql database')
|
||||||
|
|
||||||
DEFINE_string('compute_manager', 'nova.compute.manager.ComputeManager',
|
DEFINE_string('compute_manager', 'nova.compute.manager.ComputeManager',
|
||||||
|
|||||||
Reference in New Issue
Block a user