Pluto/ 000755 000765 000024 00000000000 12671554667 012457 5 ustar 00chris staff 000000 000000 Pluto/.project 000644 000765 000024 00000000547 12663144702 014116 0 ustar 00chris staff 000000 000000
Pluto
org.python.pydev.PyDevBuilder
org.python.pydev.pythonNature
Pluto/.pydevproject 000644 000765 000024 00000000653 12663144703 015165 0 ustar 00chris staff 000000 000000
/${PROJECT_DIR_NAME}/src
python 2.7
Default
Pluto/.settings/ 000755 000765 000024 00000000000 12664505721 014362 5 ustar 00chris staff 000000 000000 Pluto/batch-files/ 000755 000765 000024 00000000000 12671554630 014626 5 ustar 00chris staff 000000 000000 Pluto/conf-orig/ 000755 000765 000024 00000000000 12664405216 014325 5 ustar 00chris staff 000000 000000 Pluto/conf-test/ 000755 000765 000024 00000000000 12667673302 014352 5 ustar 00chris staff 000000 000000 Pluto/._README.TXT 000644 000765 000024 00000000253 12665612242 014215 0 ustar 00chris staff 000000 000000 Mac OS X 2 y « ATTR « com.apple.TextEncoding utf-8;134217984 Pluto/README.TXT 000644 000765 000024 00000074704 12665612242 014014 0 ustar 00chris staff 000000 000000 Pluto for Openstack - Readme
Feb 28 2016 - Christopher Hull
chrishull42@gmail.com
--------------------------------------------
What is this
--------------------------------------------
Pluto is a command line tool for managing Openstack .conf files. It allows you to view and edit these files in a familiar Openstack command line like way. Pluto keeps an audit trail of your changes within the files. The tool was designed to allow you to easily install new versions of Openstack based on the instructions provided for each release. Batch files are created straight out of the Openstack install guide. These files arerun and as a result update values in the various .conf files.
Database support coming soon.
--------------------------------------------
Contents
--------------------------------------------
README.TXT this text.
src
Source code containing pluto.py and supporting files.
About variables.py
A user editable file exists here as well, containing password and other variables which are
used in install (batch) files. See below.
To run, just type ./pluto.py -h for instructions.
batch-files
This contains a single change file which can be used to set up Glance for Liberty.
Read the contents of the file for details. It is designed to be a more or less cut and paste
of the instructions from the Openstack Liberty install guide. A lot better than searching and
replacing values in .conf files. It will configure for Glance all in one run. More files
are needed to complete a basic Liberty suite, but they follow the same pattern as the Glance file.
liberty-glance-install.txt
conf-orig
A set of "original" config files. Actually they have some junk in them, but can be used
to reset the test files.
conf-test
A set of .conf files to play with.
notes
Notes.
--------------------------------------------
Setup
--------------------------------------------
Pluto is dependent upon one shell variable, CONF_FILE_PATH. Like it says, it's the path to your Openstack
conf files. Set it to point just above nova/ neutron/ glance/ etc. So you won't do any harm to a real
system, you can play around with the files in conf-test.
---- Help
./pluto.py -h
usage: pluto.py [-h] [-v] [-s INSEC] [-k INKEY] [-d INVALUE] [-V]
func path [path ...]
pluto -- shortdesc
Created by Christopher Hull on 2016-02-27.
Copyright 2016 Spillikin Aerospace. All rights reserved.
http://www.spillikinaerospace.com
Licensed under the Apache License 2.0
http://www.apache.org/licenses/LICENSE-2.0
Distributed on an "AS IS" basis without warranties
or conditions of any kind, either express or implied.
--- Operation to perform ---
Like all other Openstack command line front ends, the first param is a function.
pluto show (followed by one or more conf file names separated by spaces)
pluto show-section (followed by one or more section names) shows sections for all files.
You can use this for comparison between files to be sure that, for instance,
authentication schemes are identical.
pluto list (no param) shows list of known conf files.
pluto set -s section -k key -d value file(s)
Sets a section, key to value within a file list.
Adds a new section if the specified section does not exist.
pluto set-section -k key -d value section(s)
Sets key value pairs for the given setcions in all the files thta have that section.
WILL NOT add the section to files that do not already have it (because that would be REALLY annoying).
pluto process (followed by a single path/file to a processing text file)
This will modify all .conf files in accordance with the instructions within.
These instructions are designed to look just like those found in the various
Openstack install guedes. See samples like liberty-glance-install.txt
When specifying a conf file name (nova.conf, etc) you may omit '.conf' if you choose.
USAGE
positional arguments:
func operation to perform, see above.
path param list for operation, see above.
optional arguments:
-h, --help show this help message and exit
-v, --verbose set verbosity level [default: None]
-s INSEC, --section INSEC
set command section
-k INKEY, --key INKEY
set command key
-d INVALUE, --data INVALUE
set command data (value, but v is taken)
-V, --version show program's version number and exit
--------------------------------------------
Sample Sessions
--------------------------------------------
-----------------------------
List existing conf files.
-----------------------------
./pluto.py list
List of all Openstack conf files found under: /Users/chris/git-projects/Pluto/conf-test/
glance-scrubber.conf
neutron.conf
glance-registry.conf
keystone.conf
cinder.conf
nova.conf
glance-cache.conf
rootwrap.conf
glance-api.conf
logging.conf
-----------------------------
Show the contents of a file(s)
-----------------------------
./pluto.py show cinder keystone
+-----------------------+--------------------+-------------------------------------------------+
| cinder: Section | Key | Value |
+-----------------------+--------------------+-------------------------------------------------+
| DEFAULT | logdir | /var/log/cinder |
| DEFAULT | state_path | /var/lib/cinder |
| DEFAULT | lock_path | /var/lib/cinder/tmp |
| DEFAULT | volumes_dir | /etc/cinder/volumes |
| DEFAULT | iscsi_helper | lioadm |
| DEFAULT | rootwrap_config | /etc/cinder/rootwrap.conf |
| DEFAULT | auth_strategy | keystone |
| DEFAULT | rpc_backend | rabbit |
| DEFAULT | my_ip | 172.22.10.5 |
| DEFAULT | verbose | True |
| DEFAULT | enabled_backends | lvm |
| DEFAULT | glance_host | controller |
| database | connection | mysql://cinder:openg00dle232@controller/cinder |
| oslo_messaging_rabbit | rabbit_host | controller |
| oslo_messaging_rabbit | rabbit_userid | openstack |
| oslo_messaging_rabbit | rabbit_password | openg00dle232 |
| keystone_authtoken | auth_uri | URI____URI |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | cinder |
| keystone_authtoken | password | sleestack |
| oslo_concurrency | lock_path | /var/lock/cinder |
| lvm | volume_driver | cinder.volume.drivers.lvm.LVMVolumeDriver |
| lvm | volume_group | cinder-volumes |
| lvm | iscsi_protocol | iscsi |
| lvm | iscsi_helper | lioadm |
+-----------------------+--------------------+-------------------------------------------------+
+-------------------+--------------+-------------------------------------------------------+
| keystone: Section | Key | Value |
+-------------------+--------------+-------------------------------------------------------+
| DEFAULT | admin_token | 97096da40e2475e71708 |
| DEFAULT | verbose | True |
| database | connection | mysql://keystone:KEYSTONE_DBPASS@controller/keystone |
| memcache | servers | localhost:11211 |
| revoke | driver | keystone.contrib.revoke.backends.sql.Revoke |
| token | provider | keystone.token.providers.uuid.Provider |
| token | driver | keystone.token.persistence.backends.memcache.Token |
+-------------------+--------------+-------------------------------------------------------+
Now That's worth the price of admission. :-)
-----------------------------
Show a given Section in All
files that have it.
-----------------------------
./pluto.py show-section keystone_authtoken
====== Showing all files that contain Section [keystone_authtoken]
An empty table indicates that the section exists but has no values.
+--------------------+--------------------+--------------------------+
| neutron: Section | Key | Value |
+--------------------+--------------------+--------------------------+
| keystone_authtoken | auth_uri | URI____URI |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | neutron |
| keystone_authtoken | password | sleestack |
+--------------------+--------------------+--------------------------+
+--------------------------+-------------------+-------------------------+
| glance-registry: Section | Key | Value |
+--------------------------+-------------------+-------------------------+
| keystone_authtoken | auth_uri | URI____URI |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | glance |
| keystone_authtoken | password | sleestack7 |
+--------------------------+-------------------+-------------------------+
+--------------------+--------------------+--------------------------+
| cinder: Section | Key | Value |
+--------------------+--------------------+--------------------------+
| keystone_authtoken | auth_uri | URI____URI |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | cinder |
| keystone_authtoken | password | sleestack |
+--------------------+--------------------+--------------------------+
-----------------------------
Set a Section, Key, Value
in a file.
-----------------------------
./pluto.py set -s keystone_authtoken -k auth_uri -d http/a/real/URI glance-api
+---------------------+--------------------------+------------------------------------------------+
| glance-api: Section | Key | Value |
+---------------------+--------------------------+------------------------------------------------+
| DEFAULT | verbose | True |
| DEFAULT | notification_driver | noop |
| database | connection | mysql://glance:openg00dle333@controller/glance |
| keystone_authtoken | password | sleestack7 |
| keystone_authtoken | username | glance |
| keystone_authtoken | project_name | service |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_uri | http/a/real/URI |
| paste_deploy | flavor | keystone |
| glance_store | default_store | file |
| glance_store | filesystem_store_datadir | /var/lib/glance/images/ |
+---------------------+--------------------------+------------------------------------------------+
-----------------------------
Synchronize a Section, Key,
Value across all files.
-----------------------------
./pluto.py set-section -k auth_uri -d http/synchronized/across/all/files keystone_authtoken
====== Setting values in all files that contain Section [keystone_authtoken]
+--------------------+--------------------+------------------------------------+
| neutron: Section | Key | Value |
+--------------------+--------------------+------------------------------------+
| keystone_authtoken | auth_uri | http/synchronized/across/all/files |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | neutron |
| keystone_authtoken | password | sleestack |
+--------------------+--------------------+------------------------------------+
+--------------------------+-------------------+------------------------------------+
| glance-registry: Section | Key | Value |
+--------------------------+-------------------+------------------------------------+
| keystone_authtoken | auth_uri | http/synchronized/across/all/files |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | glance |
| keystone_authtoken | password | sleestack7 |
+--------------------------+-------------------+------------------------------------+
+--------------------+--------------------+------------------------------------+
| cinder: Section | Key | Value |
+--------------------+--------------------+------------------------------------+
| keystone_authtoken | auth_uri | http/synchronized/across/all/files |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | cinder |
| keystone_authtoken | password | sleestack |
+--------------------+--------------------+------------------------------------+
-----------------------------
And finally
Run Openstack Installation
files.
-----------------------------
BEFORE
./pluto.py show glance-api glance-registry
+---------------------+---------------------------+---------------------------------------------+
| glance-api: Section | Key | Value |
+---------------------+---------------------------+---------------------------------------------+
| glance_store | default_store | file |
| glance_store | filesystem_store_datadir | /home/glance/images/total/nonsense/default |
+---------------------+---------------------------+---------------------------------------------+
+--------------------------+----------------------+--------------------------+
| glance-registry: Section | Key | Value |
+--------------------------+----------------------+--------------------------+
| DEFAULT | notification_driver | noop |
| keystone_authtoken | auth_uri | http://controller:5000 |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | glance |
| keystone_authtoken | password | oldsleestack123488 |
| paste_deploy | flavor | keystone |
+--------------------------+----------------------+--------------------------+
AFTER
./pluto.py process ../batch-files/liberty-glance-install.txt
Processing using file: ../batch-files/liberty-glance-install.txt
BatchFileProcessor Processing merge file: ../batch-files/liberty-glance-install.txt
BatchFileProcessor Running installation for: Liberty Glance service initial install
BatchFileProcessor Switching to .conf file glance-api.conf
BatchFileProcessor Set: File: glance-api.conf Section: database key: connection val: mysql://glance:GLANCE_DBPASS@controller/glance
BatchFileProcessor Set: File: glance-api.conf Section: keystone_authtoken key: auth_uri val: http://controller:5000
BatchFileProcessor Set: File: glance-api.conf Section: keystone_authtoken key: auth_url val: http://controller:35357
BatchFileProcessor Set: File: glance-api.conf Section: keystone_authtoken key: auth_plugin val: password
BatchFileProcessor Set: File: glance-api.conf Section: keystone_authtoken key: project_domain_id val: default
BatchFileProcessor Set: File: glance-api.conf Section: keystone_authtoken key: user_domain_id val: default
BatchFileProcessor Set: File: glance-api.conf Section: keystone_authtoken key: project_name val: service
BatchFileProcessor Set: File: glance-api.conf Section: keystone_authtoken key: username val: glance
BatchFileProcessor Set: File: glance-api.conf Section: keystone_authtoken key: password val: GLANCE_PASS
BatchFileProcessor Set: File: glance-api.conf Section: paste_deploy key: flavor val: keystone
BatchFileProcessor Set: File: glance-api.conf Section: glance_store key: default_store val: file
BatchFileProcessor Set: File: glance-api.conf Section: glance_store key: filesystem_store_datadir val: GLANCE_IMAGE_STORE
BatchFileProcessor Set: File: glance-api.conf Section: DEFAULT key: notification_driver val: noop
BatchFileProcessor Set: File: glance-api.conf Section: DEFAULT key: verbose val: True
BatchFileProcessor Switching to .conf file glance-registry.conf
BatchFileProcessor Set: File: glance-registry.conf Section: database key: connection val: mysql://glance:GLANCE_DBPASS@controller/glance
BatchFileProcessor Set: File: glance-registry.conf Section: keystone_authtoken key: auth_uri val: http://controller:5000
BatchFileProcessor Set: File: glance-registry.conf Section: keystone_authtoken key: auth_url val: http://controller:35357
BatchFileProcessor Set: File: glance-registry.conf Section: keystone_authtoken key: auth_plugin val: password
BatchFileProcessor Set: File: glance-registry.conf Section: keystone_authtoken key: project_domain_id val: default
BatchFileProcessor Set: File: glance-registry.conf Section: keystone_authtoken key: user_domain_id val: default
BatchFileProcessor Set: File: glance-registry.conf Section: keystone_authtoken key: project_name val: service
BatchFileProcessor Set: File: glance-registry.conf Section: keystone_authtoken key: username val: glance
BatchFileProcessor Set: File: glance-registry.conf Section: keystone_authtoken key: password val: GLANCE_PASS
BatchFileProcessor Set: File: glance-registry.conf Section: paste_deploy key: flavor val: keystone
BatchFileProcessor Set: File: glance-registry.conf Section: DEFAULT key: notification_driver val: noop
BatchFileProcessor Set: File: glance-registry.conf Section: DEFAULT key: verbose val: True
+--------------------------+---------------------+------------------------------------------------------------+
| glance-registry: Section | Key | Value |
+--------------------------+---------------------+------------------------------------------------------------+
| DEFAULT | verbose | True |
| DEFAULT | notification_driver | noop |
| database | connection | mysql://glance:changeThisPassword-glance@controller/glance |
| keystone_authtoken | auth_uri | http://controller:5000 |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_name | service |
| keystone_authtoken | username | glance |
| keystone_authtoken | password | sleestack7-glance |
| paste_deploy | flavor | keystone |
+--------------------------+---------------------+------------------------------------------------------------+
+---------------------+--------------------------+------------------------------------------------------------+
| glance-api: Section | Key | Value |
+---------------------+--------------------------+------------------------------------------------------------+
| DEFAULT | verbose | True |
| DEFAULT | notification_driver | noop |
| database | connection | mysql://glance:changeThisPassword-glance@controller/glance |
| keystone_authtoken | password | sleestack7-glance |
| keystone_authtoken | username | glance |
| keystone_authtoken | project_name | service |
| keystone_authtoken | user_domain_id | default |
| keystone_authtoken | project_domain_id | default |
| keystone_authtoken | auth_plugin | password |
| keystone_authtoken | auth_url | http://controller:35357 |
| keystone_authtoken | auth_uri | http://controller:5000 |
| paste_deploy | flavor | keystone |
| glance_store | default_store | file |
| glance_store | filesystem_store_datadir | /var/lib/glance/images/ |
+---------------------+--------------------------+------------------------------------------------------------+
-----------------------------
Audit Trails
-----------------------------
These appear within the .conf files so you can keep track of changes.
All changes to key value pairs are grouped together in order of occurrence.
# [pluto] added on 2016-02-28 19:18:31 for Liberty Glance service initial install
verbose=True
# [pluto] added on 2016-02-28 19:18:31 for Liberty Glance service initial install
connection=mysql://glance:changeThisPassword-glance@controller/glance
# [pluto] filesystem_store_datadir = /home/glance/images/total/nonsense/default changed on 2016-02-28 19:18:31 for Liberty Glance service initial install
filesystem_store_datadir=/var/lib/glance/images/
---------------------------------------------------
Sample Glance Liberty Installation file
---------------------------------------------------
liberty-glance-install.txt
# Pluto - Openstack Configuration Manager
# Batch file for Openstack Liberty Glance installation
#
# This batch file contains instructions for installing Liberty Glance as seen here.
# http://docs.openstack.org/liberty/install-guide-rdo/glance-install.html
# You can more or less cut and paste config file instructions from the above page.
# See below.
# Processor Directives
#
# There are a small number of processor directives in this file.
# They all begin with a "&"
# Processor Directive &INSTALL_NOTE
# This processor will automatically add comments to .conf files.
# This allows you to track changes and do some debugging if necessary.
# This note simply marks the initial installation.
&INSTALL_NOTE Liberty Glance service initial install
# Processor Directive &CONF_FILE_NAME
# All subsequent modifications will take place for the conf file specified here.
# No need for full path. File searches are constrained by a root spec plus list
# of known Openstack dirs ( /etc plus /nova, /glance, /neutron...)
# Variable Resolution
#
# Variables seen thruout the install guide, such as GLANCE_DBPASS are automatically resolved
# based on dictionary settings.
# Find them in variables.py OPENSTACK_VARIABLES and change them to your liking.
# You can cut and paste settings right out of the Openstack install instructions.
# We skip "..." and lines beginning with a '#' among others.
# ====================================================================================
# Start of instructions from Openstack Install Guide
# Edit the /etc/glance/glance-api.conf file and complete the following actions:
&CONF_FILE_NAME glance-api.conf
# In the [database] section, configure database access:
[database]
...
connection = mysql://glance:GLANCE_DBPASS@controller/glance
# In the [keystone_authtoken] and [paste_deploy] sections, configure Identity service access:
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = GLANCE_PASS
[paste_deploy]
...
flavor = keystone
# In the [glance_store] section, configure the local file system store and location of image files:
[glance_store]
...
default_store = file
filesystem_store_datadir = GLANCE_IMAGE_STORE
# In the [DEFAULT] section, configure the noop notification driver to disable
# notifications because they only pertain to the optional Telemetry service:
[DEFAULT]
...
notification_driver = noop
# (Optional) To assist with troubleshooting, enable verbose logging in the [DEFAULT] section:
[DEFAULT]
...
verbose = True
#--------------------------------------------------------------------------------------
# Edit the /etc/glance/glance-registry.conf file and complete the following actions:
&CONF_FILE_NAME glance-registry.conf
# In the [database] section, configure database access:
[database]
...
connection = mysql://glance:GLANCE_DBPASS@controller/glance
# In the [keystone_authtoken] and [paste_deploy] sections, configure Identity service access:
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = GLANCE_PASS
[paste_deploy]
...
flavor = keystone
# In the [DEFAULT] section, configure the noop notification driver to disable
# notifications because they only pertain to the optional Telemetry service:
[DEFAULT]
...
notification_driver = noop
# (Optional) To assist with troubleshooting, enable verbose logging in the [DEFAULT] section:
[DEFAULT]
...
verbose = True
Pluto/src/ 000755 000765 000024 00000000000 12671555514 013236 5 ustar 00chris staff 000000 000000 Pluto/src/admin-openrc.sh 000644 000765 000024 00000000442 12671555454 016151 0 ustar 00chris staff 000000 000000 export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=UNDEFINED
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
Pluto/src/demo-openrc.sh 000644 000765 000024 00000000437 12671555473 016012 0 ustar 00chris staff 000000 000000 export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=demo
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=UNDEFINED
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
Pluto/src/os-service-create.sh 000644 000765 000024 00000000654 12666407431 017115 0 ustar 00chris staff 000000 000000 # This appears as part of the initial keystone setup.
# http://docs.openstack.org/liberty/install-guide-rdo/keystone-services.html
#
# Source this file before calling
# openstack service create --name keystone --description "OpenStack Identity" identity
# Use the number generated earlier.
# OS_TOKEN=ADMIN_TOKEN
export OS_TOKEN=91121d2c109d7fc778e4
export OS_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
Pluto/src/osBatchClass.py 000755 000765 000024 00000010116 12667635334 016167 0 ustar 00chris staff 000000 000000 '''
Created on Feb 25, 2016
@author: chris
'''
from osFileClass import OSConfFile, OSConfigFileGroup, OSLogger
from variables import ResolveVars
# Batch Processor directives
MF_CONF_FILE = "&CONF_FILE_NAME"
MF_INSTALL_NAME = "&INSTALL_NOTE"
MF_ECHO = "&ECHO"
log = OSLogger(None, "BatchFileProcessor")
'''
Read in a batch file and modify config files and database entries accordingly.
'''
'''
This class contains an object representation of all the
OpenStack config files. It can process given merge files
over these config files. Once files have been processed
it can write the config files back out with their new contents.
'''
class OSBatchFileProcessor(object):
'''
@param Root directory where all config files can be found.
Files are read in and prepared for processing.
'''
def __init__(self, confFileRoot):
self.confFileSet = OSConfigFileGroup(confFileRoot)
'''
Process the given merge file and in turn
process relevant OpenStack config files.
'''
def process (self, mergeFileName):
currentSectionName = None
currentOSFileObject = None
currentInstallName = "none"
echoList = list()
log.message("Processing merge file: " + mergeFileName)
lines = [line.rstrip('\n') for line in open(mergeFileName)]
for line in lines:
if (len(line) > 0):
# SECTION declairation
if (line[0] == "["):
i = line.index("]")
if ( i < 1 ):
log.error("Syntax error. Unclosed section " + line)
log.error("Exiting due to error")
return
else:
currentSectionName = line[1:i]
continue
# else Merge File Directive
if (line[0] == "&"):
values = line.split()
# Switch to the given conf file
if ( values[0] == MF_CONF_FILE):
log.message("Updating configuration file: " + values[1])
currentOSFileObject = self.confFileSet.getFile(values[1])
if ( currentOSFileObject == None):
log.error("Can not fine conf file " + values[1])
log.error("Exiting due to error")
return
# Notes include the install name MF_INSTALL_NAME
if ( values[0] == MF_INSTALL_NAME):
line2 = line.split(' ', 1)[1]
log.message("Running installation for: " + line2)
currentInstallName = line2
# Echo to user
if ( values[0] == MF_ECHO):
line2 = line.split(' ', 1)[1]
echoList.append(line2)
continue
# else Process if not comment
if (line[0] != "#"):
nv = line.split("=")
if (len(nv) == 2):
fn = currentOSFileObject.getFileName()
#assume we have nv pairs
log.verbose("Set: File: " + fn + " Section: " +
currentSectionName + " key: " + nv[0] + " val: " + nv[1])
if ( (currentSectionName != None) & (currentOSFileObject != None)):
value = ResolveVars(nv[1])
currentOSFileObject.set(currentSectionName, nv[0], value, currentInstallName)
self.confFileSet.printChangedFiles()
self.confFileSet.writeChangedFiles()
if ( len(echoList) > 0 ):
print "-------------------------------------------------"
for line in echoList:
print line
# bp = OSBatchFileProcessor("/Users/chris/git-projects/Pluto/conf-test/")
# bp.process("/Users/chris/git-projects/Pluto/batch-files/liberty-glance-install.txt")
Pluto/src/osFileClass.py 000755 000765 000024 00000044002 12667406653 016026 0 ustar 00chris staff 000000 000000 '''
Created on Feb 23, 2016
Part of project Pluto. The Openstack Configuraton management tool.
@author: chris
'''
from variables import OPENSTACK_CONF_DIRS
import time
import datetime
from collections import OrderedDict
import json
import os
from prettytable import PrettyTable
# Tag to recognize ourselves
TAG_TEXT = "# [pluto] "
# Actions automatically noted in JSON comments
ACTION_REPLACE = "replace"
ACTION_NEW = "new"
ACTION_DELETE = "delete"
ACTION_ADD_SECTION = "add-section"
ACTION_DELETE_SECTION = "section-commented-out"
ACTION_NONE = "no-action-values-same"
'''
A simple logging container
'''
class OSLogger():
def __init__(self, logFileName, prefix):
self.logFileName = logFileName
self.prefix = prefix
self.m = True
self.d = False
self.v = False
def message(self, message):
if ( self.m ):
print self.prefix + " " + message
def debug(self, message):
if ( self.d ):
print self.prefix + " " + message
def verbose(self, message):
if ( self.v ):
print self.prefix + " " + message
def error(self, message):
print self.prefix + " ERROR: " + message
log = OSLogger("", "OSFileProcessor")
'''
Add change information to the config files.
'''
class OSTracker():
def __init__(self, json = False):
self.json = json
'''
Convert some data to JSON for recording in file comments for
history tracking. Might implement rollback, etc.
@param Action, add replace delete
@param key such as notification_driver
@param old value
@param new value
@param install Such as installing Cinder
@return JSON comment for config files to keep track of changes
'''
def makeJSONText (self, action, key, oldVal, newVal, install):
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
if json == True:
ss = TAG_TEXT + json.dumps(OrderedDict([("action", action),
("key", key), ("oldval", oldVal), ("newval", newVal),
("install", install), ("timestamp", st) ] ))
else:
ss = TAG_TEXT
if ( action == ACTION_NEW):
ss = ss + "added on " + st + " for " + install
if ( action == ACTION_REPLACE):
ss = ss + key + " = " + oldVal + " changed on " + st + " for " + install
if ( action == ACTION_DELETE):
ss = ss + key + " = " + oldVal + " deleted on " + st + " for " + install
if ( action == ACTION_ADD_SECTION):
ss = ss + "section [" + newVal + "] added on " + st + " for " + install
if ( action == ACTION_DELETE_SECTION):
ss = ss + "section [" + newVal + "] commented out on " + st + " for " + install
return ss
def addJSON (self, textList, action, key, oldVal, newVal, install):
ss = self.makeJSONText (action, key, oldVal, newVal, install)
# Insert JUST After the [SECTION] text
if ( action == ACTION_NEW):
textList.insert(1, ss)
return
textList.append(ss)
tracker = OSTracker()
'''
This class represents a section within an Openstack configuration
file. It contains all relevant NV pairs and mechanisms to
add, delete, and modify them.
'''
class OSConfFileSection(object):
def __init__(self, sectionName):
self.lines = list()
self.name = sectionName
def addLine (self, line):
self.lines.append(line)
'''
Given a NV pair, replace and note previous value in comment.
If none is found then add the nv pair
@param name of the nv pair
@param Value to set
@param Installation being set up, like Nova or Cinder
'''
def set (self, name, value, install):
name = name.strip()
value = value.strip()
nvAssign = name + "=" + value
deleteKey = False
if (len(value) == 0):
deleteKey = True
newLines = list()
found = False
for line in self.lines:
replaced = False
if (len(line) > 0):
if ( line[0] != "#"):
nv = line.split("=")
if (len(nv) == 2):
# Did we find it?
n = nv[0].strip()
v = nv[1].strip()
if ( name == n):
if ( deleteKey == False):
if ( v != value):
tracker.addJSON (newLines, ACTION_REPLACE, name, v, value, install)
newLines.append(nvAssign)
log.verbose("Replaced: " + nvAssign + " old value was " + v
+ " [" + self.name + "]")
else:
# Don't treack repeat entries, but log them is ok.
# tracker.addJSON (newLines, ACTION_NONE, name, v, value, install)
newLines.append(nvAssign)
log.verbose("Nothing done: " + nvAssign + " old value same as new"
+ " [" + self.name + "]")
else:
tracker.addJSON (newLines, ACTION_DELETE, name, nv[1], value, install)
log.verbose("Deleted: " + nvAssign + " new value was blank"
+ " [" + self.name + "]")
replaced = True
found = True
if ( replaced == False ):
newLines.append(line)
# If we are adding a new value, i.e. never found old one
if ( (found == False) & (deleteKey == False) ):
# Insert JUST After the [SECTION] text
newLines.insert(1, nvAssign)
tracker.addJSON (newLines, ACTION_NEW, name,"NONE", value, install)
newLines.insert(1, "")
log.verbose("Added new assignment: " + nvAssign + " [" + self.name + "]")
self.lines = newLines
'''
Delete this section by commenting out all NV pairs.
Add note that section was deleted. We will leave the opening tag.
'''
def delete (self, install):
newLines = list()
for line in self.lines:
needsComment = True
if (len(line) > 0):
if ( line[0] == "#"):
needsComment = False
# DO NOT comment out the section name
if ( line[0] == "["):
needsComment = False
if ( needsComment ):
newLines.append ("# " + line)
else:
newLines.append (line)
s = tracker.makeJSONText (ACTION_DELETE_SECTION, "section-name","NONE", self.name, install)
newLines.append(s)
self.lines = newLines
log.verbose("Section contents commented out: [" + self.name + "]")
'''
Return a string of name value pairs only.
'''
def getInfo (self):
ret = ""
for line in self.lines:
if (len(line) > 0):
if ( line[0] != "#"):
nv = line.split("=")
if (len(nv) == 2):
ret = ret + line + "\n"
return ret
'''
Return an array of name value pairs in List form.
NV pairs could possible repeat between sections so no Dict.
A list of pairs.
'''
def getNVPairs(self):
pairList = list()
for line in self.lines:
if (len(line) > 0):
if ( line[0] != "#"):
nv = line.split("=")
if (len(nv) == 2):
nvPair = [nv[0], nv[1]]
pairList.append(nvPair)
return pairList
'''
Return a string of this section as it would appear in a file.
'''
def __str__(self):
ret = ""
for line in self.lines:
ret = ret + line + "\n"
return ret
'''
This class represents an Openstack Configuration File.
It contains several OSConfFileSection objects.
'''
class OSConfFile(object):
def __init__(self, filePath, fileName):
self.filePath = filePath
self.fileName = fileName
self.fullPath = filePath + fileName
# Files have two lists
self.top = list()
self.sections = list()
self.processed = False
self.process()
'''
Parse file into comments, sections and NV pairs.
'''
def process(self):
# Should only ever need to be processed once, but just in case.
if ( self.processed == True):
return
# Set the changed flag to FALSE
self.changed = False
# States
currentSection = None
self.top = list()
lines = [line.rstrip('\n') for line in open(self.fullPath)]
for line in lines:
if (len(line) > 0):
if (line[0] == "["):
i = line.index("]")
if ( i < 1 ):
log.error("Syntax error. Unclosed section " + line)
log.error("Exiting due to error")
return
else:
s = line[1:i]
currentSection = OSConfFileSection(s)
self.sections.append(currentSection)
# Add whateve the line is to the current section
if (currentSection == None):
self.top.append(line)
else:
currentSection.addLine(line)
# Unless we bailed early, consider the file processed.
self.processed = True
'''
Replace a value given a section and a name / v pair
If section doesn't exist it will be created.
'''
def set (self, sectionName, name, value, install):
# Being conservative, we'll assume thsi will result in a change.
self.changed = True
sectionFound = False
for section in self.sections:
if ( section.name == sectionName):
section.set(name, value, install)
sectionFound = True
if ( sectionFound == False):
newSection = OSConfFileSection(sectionName)
newSection.addLine("[" + sectionName + "]")
s = tracker.makeJSONText (ACTION_ADD_SECTION, "section-name", "NONE", sectionName, install)
newSection.addLine(s)
newSection.set(name, value, install)
self.sections.append(newSection)
log.verbose("New section added: [" + sectionName + "]")
'''
Comment out the contents of an entire Section, leaving the
section intact.
'''
def delete (self, sectionName, install):
self.changed = True
for section in self.sections:
if ( section.name == sectionName):
section.delete(install)
'''
Did file change
'''
def hasFileChanged(self):
return self.changed
'''
Return a string of sections with name value pairs only.
'''
def getInfo(self):
ret = ""
for section in self.sections:
ret = ret + "[" + section.name + "]\n"
ret = ret + section.getInfo()
return ret
def getFileName(self):
return self.fileName
'''
Check to see if a section exists
'''
def hasSection (self, sectName):
for section in self.sections:
if (section.name == sectName):
return True
return False
'''
Print a pretty table of this file's nv pairs and sections
Thank you PrettyTable.py
Copyright (c) 2009-2013, Luke Maurits
All rights reserved.
With contributions from:
Chris Clark
Klein Stephane
'''
def printFile (self):
fn = self.getFileName()
fns = fn.split(".")
t = PrettyTable([fns[0] + ': Section', 'Key', 'Value'])
for section in self.sections:
nvPairs = section.getNVPairs()
for pair in nvPairs:
t.add_row([ section.name, pair[0], pair[1] ])
t.align = "l"
print t
'''
Print a pretty table of ONE SECTION in this file.
Thank you PrettyTable.py
Copyright (c) 2009-2013, Luke Maurits
All rights reserved.
With contributions from:
Chris Clark
Klein Stephane
'''
def printFileSection (self, sectionName):
fn = self.getFileName()
fns = fn.split(".")
t = PrettyTable([fns[0] + ': Section', 'Key', 'Value'])
found = False
for section in self.sections:
if (section.name == sectionName):
found = True
nvPairs = section.getNVPairs()
for pair in nvPairs:
t.add_row([ section.name, pair[0], pair[1] ])
if found:
t.align = "l"
print t
'''
Write out this file
'''
def writeFile (self):
log.verbose("Writing Openstack config file: " + self.fullPath)
f = open(self.fullPath, "w")
f.write( str(self) )
f.close
self.changed = False
'''
Return a string of this file object as it would
appear in an actual file.
'''
def __str__(self):
ret = ""
for line in self.top:
ret = ret + line + "\n"
for section in self.sections:
ret = ret + str(section)
return ret
'''
This class represents the entire group of OS config files
It serves as a simple container. Given a file name you can
extract an OSConfFile object.
XXX Check for duplicates. Someday nova-compute.conf may exist in two dirs.
'''
class OSConfigFileGroup ():
'''
@param The root file path to search for all files ending in
.conf
'''
def __init__(self, rootPath):
self.rootPath = rootPath
self.confFileDict = {}
confFileDict = {}
for osDir in OPENSTACK_CONF_DIRS:
rootPath2 = rootPath + osDir
for root, dirs, files in os.walk(rootPath2):
root = root + "/"
for f in files:
if f.endswith(".conf"):
o = OSConfFile( root, f )
confFileDict[f] = o
log.verbose("Read in file: " + f)
if f.endswith(".ini"):
o = OSConfFile( root, f )
confFileDict[f] = o
log.verbose("Read in file: " + f)
self.confFileDict = confFileDict
'''
Given a file name get the object.
'''
def getFile (self, fileName):
if ( len(fileName.split(".")) < 2):
fileName = fileName + ".conf"
f = self.confFileDict.get(fileName)
if ( f == None ):
log.error("No such Openstack config file: " + fileName)
return f
'''
Return str of all file names
'''
def getFileNames (self):
ret = list()
for key in self.confFileDict:
ret.append(key)
return ret
def printFileList (self):
t = PrettyTable(['Name', 'Full Path'])
for key in self.confFileDict:
# print key, self.confFileDict[key]
t.align = "l"
fileObj = self.confFileDict[key]
t.add_row( [key, fileObj.filePath + fileObj.fileName ] )
print t
'''
Print a nice table of all changed files
'''
def printChangedFiles(self):
fileObjList = self.confFileDict.values()
for fileObj in fileObjList:
if fileObj.hasFileChanged() == True:
fileObj.printFile()
'''
Write out all the config files that have changed
'''
def writeChangedFiles(self):
fileObjList = self.confFileDict.values()
for fileObj in fileObjList:
if fileObj.hasFileChanged() == True:
fileObj.writeFile()
'''
Test a specific file object
'''
def UnitTest1(f):
# f = OSConfFile("/Users/chris/git-projects/Pluto/glance-sample/", "test.conf")
print "---- showing"
print (f)
print "---- get info"
s = f.getInfo()
print s
f.set("DEFAULT", "test-replace", "new-value", "Test to see if first-val became new val DEF 1")
f.set("DEFAULT", "test-new-val", "completely new entry", "Test to see if we can enter a new val. DEF 2")
f.delete("TEST_DELETE_SECTION", "Section should be commented out TEST_DEL_SEC 3")
f.set("TEST_DELETE_SECTION", "post-delete", "new-value", "Adding a new value to TEST_DEL_SEC 4")
f.set("TEST_DELETE_SECTION", "post-delete", "replaced-value", "Replacing the new value TEST_DEL_SEC 5")
f.set("TEST_ADD_SECTION", "new-sec", "new-value", "Adding a new section TEST_ADD_SEC 6")
f.set("TEST_ADD_SECTION", "test-replace", "first-value", "Checking to be sure sec addressing works TEST_ADD_SEC 7")
f.set("TEST_ADD_SECTION", "test-replace", "replaced-value", "Checking to be sure sec addressing works TEST_ADD_SEC 8")
f.set("DEFAULT", "test-replace", "new-value", "Repeat value, should do nothing 9")
f.printFile()
print "---- showing whole file"
print (f)
'''
Test file container
'''
def UnitTest2():
ftree = OSConfigFileGroup("/Users/chris/git-projects/Pluto/conf-test/")
f = ftree.getFile("test.conf")
UnitTest1(f)
keyList = ftree.getFileNames("/Users/chris/git-projects/Pluto//")
for k in keyList:
print k
# f = OSConfFile("/Users/chris/git-projects/Pluto/test-conf-files/", "test-conf1.conf")
# UnitTest1(f)
Pluto/src/pluto.py 000755 000765 000024 00000022547 12666067202 014764 0 ustar 00chris staff 000000 000000 #!/usr/bin/python
# encoding: utf-8
'''
pluto -- Command line front end.
pluto is a configuration management and installation tool for Openstack.
@author: Christopher Hull
@copyright: 2016 Spillikin Aerospace. All rights reserved.
@license: Apache
@contact: chrishull42@gmail.com
@deffield updated: Updated
'''
import sys
import os
from osFileClass import OSConfFile, OSConfigFileGroup, OSLogger
from osBatchClass import OSBatchFileProcessor
from argparse import ArgumentParser
from argparse import RawDescriptionHelpFormatter
__all__ = []
__version__ = 0.2
__date__ = '2016-02-27'
__updated__ = '2016-03-02'
class CLIError(Exception):
'''Generic exception to raise and log different fatal errors.'''
def __init__(self, msg):
super(CLIError).__init__(type(self))
self.msg = "E: %s" % msg
def __str__(self):
return self.msg
def __unicode__(self):
return self.msg
def main(argv=None): # IGNORE:C0111
'''Command line options.'''
PLUTO_PATH = "CONF_FILE_PATH"
if argv is None:
argv = sys.argv
else:
sys.argv.extend(argv)
program_name = os.path.basename(sys.argv[0])
program_version = "v%s" % __version__
program_build_date = str(__updated__)
program_version_message = '%%(prog)s %s (%s)' % (program_version, program_build_date)
program_shortdesc = __import__('__main__').__doc__.split("\n")[1]
program_license = '''%s
Created by Christopher Hull on %s.
Copyright 2016 Spillikin Aerospace. All rights reserved.
http://www.chrishull.com
http://www.spillikinaerospace.com
Licensed under the Apache License 2.0
http://www.apache.org/licenses/LICENSE-2.0
Distributed on an "AS IS" basis without warranties
or conditions of any kind, either express or implied.
--- Operation to perform ---
Like all other Openstack command line front ends, the first param is a function.
All opearations require CONF_FILE_PATH env var point to the conf files, or
pass in --conf-file-path.
Example ./pluto.py --conf-file-path /etc (where /etc is the directory just above /nova etc)
pluto list
Shows list of known conf files and their locations.
Run this commend first to see if you are pointing to config.
Path passed in is typically /etc.
pluto show (followed by one or more conf file names separated by spaces)
pluto show-section (followed by one or more section names) shows sections for all files.
You can use this for comparison between files to be sure that, for instance,
authentication schemes are identical.
pluto set -s section -k key -d value followed by file(s)
Sets a section, key to value within a file list.
Adds a new section if the specified section does not exist.
pluto set-section -k key -d value followed by section(s)
Sets key value pairs for the given setcions in all the files thta have that section.
WILL NOT add the section to files that do not already have it (because that would be REALLY annoying).
pluto process (followed by a single path/file to a processing text file)
This will modify all .conf files in accordance with the instructions within.
These instructions are designed to look just like those found in the various
Openstack install guedes. See samples like liberty-glance-install.txt
When specifying a conf file name (nova.conf, etc) you may omit '.conf' if you choose.
USAGE
''' % (program_shortdesc, str(__date__))
try:
# Setup argument parser
parser = ArgumentParser(description=program_license, formatter_class=RawDescriptionHelpFormatter)
parser.add_argument(dest="func", help="operation to perform, see help.", metavar="func")
parser.add_argument("-v", "--verbose", dest="verbose", action="count", help="set verbosity level [default: %(default)s]")
parser.add_argument("-p", "--conf-file-path", dest="cpath", help="path to config file root [typically /etc]")
parser.add_argument("-s", "--section", dest="insec", help="set command section")
parser.add_argument("-k", "--key", dest="inkey", help="set command key")
parser.add_argument("-d", "--data", dest="invalue", help="set command data (value, but v is taken)")
parser.add_argument('-V', '--version', action='version', version=program_version_message)
parser.add_argument(dest="paramlist", help="param list for operation, see help.", metavar="params", nargs='+')
# Process arguments
# We need to fake out the parser in the case of list, a command with no params.
if ( len(argv) >= 2 ):
if ( argv[1] == "list"):
argv.append ("/not/a/path")
args = parser.parse_args()
# Handle special case, else raise
func = args.func
paths = args.paramlist
verbose = args.verbose
insec = args.insec
inkey = args.inkey
invalue = args.invalue
cpath = args.cpath
# Check to see if we have a path
if (cpath == None):
confFilePath = os.environ.get(PLUTO_PATH)
if ( confFilePath == None ):
print "Error. You must define the shell var: " + PLUTO_PATH
print "or pass the path in via --conf-file-path."
print "This is the path immediately above nova, neutron, glance, etc. Typically /etc"
return -1
else:
confFilePath = cpath
# Check to see if we have read write access to the path.
if( (os.access(confFilePath,os.R_OK) == False) | (os.access(confFilePath, os.W_OK) == False) ):
print("You do not have read/write permission for " + confFilePath)
print("Run as sudo, root, or a user with suitable permissions.")
print "Exiting"
return -1
if verbose > 0:
print("Verbose mode on")
# Show the given conf files in Openstack style tables
if ( func == "list"):
print "List of all Openstack conf files found under: " + confFilePath
ftree = OSConfigFileGroup(confFilePath)
ftree.printFileList()
return 0
# Show the given conf files in Openstack style tables
if ( func == "show"):
ftree = OSConfigFileGroup(confFilePath)
for fileName in paths:
f = ftree.getFile(fileName)
if ( f == None):
print "Configuration file not found: " + fileName
else:
f.printFile()
# Show giv en sections in all files
if ( func == "show-section"):
ftree = OSConfigFileGroup(confFilePath)
for sectionName in paths:
print "====== Showing all files that contain Section [" + sectionName +"]"
print " An empty table indicates that the section exists but has no values."
fileNameList = ftree.getFileNames()
for fileName in fileNameList:
f = ftree.getFile(fileName)
if ( f == None):
print "Configuration file not found: " + fileName
else:
f.printFileSection(sectionName)
if ( func == "process"):
bp = OSBatchFileProcessor(confFilePath)
thePath = None
for path in paths:
thePath = path
print "Processing using file: " + thePath
bp.process(thePath)
# Set a section, key, value in a file
# Show the given conf files in Openstack style tables
if ( func == "set"):
ftree = OSConfigFileGroup(confFilePath)
for fileName in paths:
f = ftree.getFile(fileName)
if ( f == None):
print "Configuration file not found: " + fileName
else:
f.set(insec, inkey, invalue, "set by command line")
f.printFile()
ftree.writeChangedFiles()
# Set n v pairs across all files in a given section.
if ( func == "set-section"):
ftree = OSConfigFileGroup(confFilePath)
for sectionName in paths:
print "====== Setting values in all files that contain Section [" + sectionName +"]"
fileNameList = ftree.getFileNames()
for fileName in fileNameList:
f = ftree.getFile(fileName)
if ( f == None):
print "Configuration file not found: " + fileName
else:
# ONLY add if the section already exists.
if (f.hasSection(sectionName)):
f.set(sectionName, inkey, invalue, "set by command line")
f.printFileSection(sectionName)
ftree.writeChangedFiles()
return 0
except KeyboardInterrupt:
### handle keyboard interrupt ###
return 0
except Exception, e:
raise(e)
indent = len(program_name) * " "
sys.stderr.write(program_name + ": " + repr(e) + "\n")
sys.stderr.write(indent + " for help use --help")
return 2
if __name__ == "__main__":
sys.exit(main())
Pluto/src/._prettytable.py 000755 000765 000024 00000000261 12130140526 016345 0 ustar 00chris staff 000000 000000 Mac OS X 2 ± ATTR ± com.apple.quarantine q/0001;56d27c73;Firefox; Pluto/src/prettytable.py 000755 000765 000024 00000151674 12130140526 016147 0 ustar 00chris staff 000000 000000 #!/usr/bin/env python
#
# Copyright (c) 2009-2013, Luke Maurits
# All rights reserved.
# With contributions from:
# * Chris Clark
# * Klein Stephane
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
__version__ = "0.7.2"
import copy
import csv
import random
import re
import sys
import textwrap
import itertools
import unicodedata
py3k = sys.version_info[0] >= 3
if py3k:
unicode = str
basestring = str
itermap = map
iterzip = zip
uni_chr = chr
from html.parser import HTMLParser
else:
itermap = itertools.imap
iterzip = itertools.izip
uni_chr = unichr
from HTMLParser import HTMLParser
if py3k and sys.version_info[1] >= 2:
from html import escape
else:
from cgi import escape
# hrule styles
FRAME = 0
ALL = 1
NONE = 2
HEADER = 3
# Table styles
DEFAULT = 10
MSWORD_FRIENDLY = 11
PLAIN_COLUMNS = 12
RANDOM = 20
_re = re.compile("\033\[[0-9;]*m")
def _get_size(text):
lines = text.split("\n")
height = len(lines)
width = max([_str_block_width(line) for line in lines])
return (width, height)
class PrettyTable(object):
def __init__(self, field_names=None, **kwargs):
"""Return a new PrettyTable instance
Arguments:
encoding - Unicode encoding scheme used to decode any encoded input
field_names - list or tuple of field names
fields - list or tuple of field names to include in displays
start - index of first data row to include in output
end - index of last data row to include in output PLUS ONE (list slice style)
header - print a header showing field names (True or False)
header_style - stylisation to apply to field names in header ("cap", "title", "upper", "lower" or None)
border - print a border around the table (True or False)
hrules - controls printing of horizontal rules after rows. Allowed values: FRAME, HEADER, ALL, NONE
vrules - controls printing of vertical rules between columns. Allowed values: FRAME, ALL, NONE
int_format - controls formatting of integer data
float_format - controls formatting of floating point data
padding_width - number of spaces on either side of column data (only used if left and right paddings are None)
left_padding_width - number of spaces on left hand side of column data
right_padding_width - number of spaces on right hand side of column data
vertical_char - single character string used to draw vertical lines
horizontal_char - single character string used to draw horizontal lines
junction_char - single character string used to draw line junctions
sortby - name of field to sort rows by
sort_key - sorting key function, applied to data points before sorting
valign - default valign for each row (None, "t", "m" or "b")
reversesort - True or False to sort in descending or ascending order"""
self.encoding = kwargs.get("encoding", "UTF-8")
# Data
self._field_names = []
self._align = {}
self._valign = {}
self._max_width = {}
self._rows = []
if field_names:
self.field_names = field_names
else:
self._widths = []
# Options
self._options = "start end fields header border sortby reversesort sort_key attributes format hrules vrules".split()
self._options.extend("int_format float_format padding_width left_padding_width right_padding_width".split())
self._options.extend("vertical_char horizontal_char junction_char header_style valign xhtml print_empty".split())
for option in self._options:
if option in kwargs:
self._validate_option(option, kwargs[option])
else:
kwargs[option] = None
self._start = kwargs["start"] or 0
self._end = kwargs["end"] or None
self._fields = kwargs["fields"] or None
if kwargs["header"] in (True, False):
self._header = kwargs["header"]
else:
self._header = True
self._header_style = kwargs["header_style"] or None
if kwargs["border"] in (True, False):
self._border = kwargs["border"]
else:
self._border = True
self._hrules = kwargs["hrules"] or FRAME
self._vrules = kwargs["vrules"] or ALL
self._sortby = kwargs["sortby"] or None
if kwargs["reversesort"] in (True, False):
self._reversesort = kwargs["reversesort"]
else:
self._reversesort = False
self._sort_key = kwargs["sort_key"] or (lambda x: x)
self._int_format = kwargs["int_format"] or {}
self._float_format = kwargs["float_format"] or {}
self._padding_width = kwargs["padding_width"] or 1
self._left_padding_width = kwargs["left_padding_width"] or None
self._right_padding_width = kwargs["right_padding_width"] or None
self._vertical_char = kwargs["vertical_char"] or self._unicode("|")
self._horizontal_char = kwargs["horizontal_char"] or self._unicode("-")
self._junction_char = kwargs["junction_char"] or self._unicode("+")
if kwargs["print_empty"] in (True, False):
self._print_empty = kwargs["print_empty"]
else:
self._print_empty = True
self._format = kwargs["format"] or False
self._xhtml = kwargs["xhtml"] or False
self._attributes = kwargs["attributes"] or {}
def _unicode(self, value):
if not isinstance(value, basestring):
value = str(value)
if not isinstance(value, unicode):
value = unicode(value, self.encoding, "strict")
return value
def _justify(self, text, width, align):
excess = width - _str_block_width(text)
if align == "l":
return text + excess * " "
elif align == "r":
return excess * " " + text
else:
if excess % 2:
# Uneven padding
# Put more space on right if text is of odd length...
if _str_block_width(text) % 2:
return (excess//2)*" " + text + (excess//2 + 1)*" "
# and more space on left if text is of even length
else:
return (excess//2 + 1)*" " + text + (excess//2)*" "
# Why distribute extra space this way? To match the behaviour of
# the inbuilt str.center() method.
else:
# Equal padding on either side
return (excess//2)*" " + text + (excess//2)*" "
def __getattr__(self, name):
if name == "rowcount":
return len(self._rows)
elif name == "colcount":
if self._field_names:
return len(self._field_names)
elif self._rows:
return len(self._rows[0])
else:
return 0
else:
raise AttributeError(name)
def __getitem__(self, index):
new = PrettyTable()
new.field_names = self.field_names
for attr in self._options:
setattr(new, "_"+attr, getattr(self, "_"+attr))
setattr(new, "_align", getattr(self, "_align"))
if isinstance(index, slice):
for row in self._rows[index]:
new.add_row(row)
elif isinstance(index, int):
new.add_row(self._rows[index])
else:
raise Exception("Index %s is invalid, must be an integer or slice" % str(index))
return new
if py3k:
def __str__(self):
return self.__unicode__()
else:
def __str__(self):
return self.__unicode__().encode(self.encoding)
def __unicode__(self):
return self.get_string()
##############################
# ATTRIBUTE VALIDATORS #
##############################
# The method _validate_option is all that should be used elsewhere in the code base to validate options.
# It will call the appropriate validation method for that option. The individual validation methods should
# never need to be called directly (although nothing bad will happen if they *are*).
# Validation happens in TWO places.
# Firstly, in the property setters defined in the ATTRIBUTE MANAGMENT section.
# Secondly, in the _get_options method, where keyword arguments are mixed with persistent settings
def _validate_option(self, option, val):
if option in ("field_names"):
self._validate_field_names(val)
elif option in ("start", "end", "max_width", "padding_width", "left_padding_width", "right_padding_width", "format"):
self._validate_nonnegative_int(option, val)
elif option in ("sortby"):
self._validate_field_name(option, val)
elif option in ("sort_key"):
self._validate_function(option, val)
elif option in ("hrules"):
self._validate_hrules(option, val)
elif option in ("vrules"):
self._validate_vrules(option, val)
elif option in ("fields"):
self._validate_all_field_names(option, val)
elif option in ("header", "border", "reversesort", "xhtml", "print_empty"):
self._validate_true_or_false(option, val)
elif option in ("header_style"):
self._validate_header_style(val)
elif option in ("int_format"):
self._validate_int_format(option, val)
elif option in ("float_format"):
self._validate_float_format(option, val)
elif option in ("vertical_char", "horizontal_char", "junction_char"):
self._validate_single_char(option, val)
elif option in ("attributes"):
self._validate_attributes(option, val)
else:
raise Exception("Unrecognised option: %s!" % option)
def _validate_field_names(self, val):
# Check for appropriate length
if self._field_names:
try:
assert len(val) == len(self._field_names)
except AssertionError:
raise Exception("Field name list has incorrect number of values, (actual) %d!=%d (expected)" % (len(val), len(self._field_names)))
if self._rows:
try:
assert len(val) == len(self._rows[0])
except AssertionError:
raise Exception("Field name list has incorrect number of values, (actual) %d!=%d (expected)" % (len(val), len(self._rows[0])))
# Check for uniqueness
try:
assert len(val) == len(set(val))
except AssertionError:
raise Exception("Field names must be unique!")
def _validate_header_style(self, val):
try:
assert val in ("cap", "title", "upper", "lower", None)
except AssertionError:
raise Exception("Invalid header style, use cap, title, upper, lower or None!")
def _validate_align(self, val):
try:
assert val in ["l","c","r"]
except AssertionError:
raise Exception("Alignment %s is invalid, use l, c or r!" % val)
def _validate_valign(self, val):
try:
assert val in ["t","m","b",None]
except AssertionError:
raise Exception("Alignment %s is invalid, use t, m, b or None!" % val)
def _validate_nonnegative_int(self, name, val):
try:
assert int(val) >= 0
except AssertionError:
raise Exception("Invalid value for %s: %s!" % (name, self._unicode(val)))
def _validate_true_or_false(self, name, val):
try:
assert val in (True, False)
except AssertionError:
raise Exception("Invalid value for %s! Must be True or False." % name)
def _validate_int_format(self, name, val):
if val == "":
return
try:
assert type(val) in (str, unicode)
assert val.isdigit()
except AssertionError:
raise Exception("Invalid value for %s! Must be an integer format string." % name)
def _validate_float_format(self, name, val):
if val == "":
return
try:
assert type(val) in (str, unicode)
assert "." in val
bits = val.split(".")
assert len(bits) <= 2
assert bits[0] == "" or bits[0].isdigit()
assert bits[1] == "" or bits[1].isdigit()
except AssertionError:
raise Exception("Invalid value for %s! Must be a float format string." % name)
def _validate_function(self, name, val):
try:
assert hasattr(val, "__call__")
except AssertionError:
raise Exception("Invalid value for %s! Must be a function." % name)
def _validate_hrules(self, name, val):
try:
assert val in (ALL, FRAME, HEADER, NONE)
except AssertionError:
raise Exception("Invalid value for %s! Must be ALL, FRAME, HEADER or NONE." % name)
def _validate_vrules(self, name, val):
try:
assert val in (ALL, FRAME, NONE)
except AssertionError:
raise Exception("Invalid value for %s! Must be ALL, FRAME, or NONE." % name)
def _validate_field_name(self, name, val):
try:
assert (val in self._field_names) or (val is None)
except AssertionError:
raise Exception("Invalid field name: %s!" % val)
def _validate_all_field_names(self, name, val):
try:
for x in val:
self._validate_field_name(name, x)
except AssertionError:
raise Exception("fields must be a sequence of field names!")
def _validate_single_char(self, name, val):
try:
assert _str_block_width(val) == 1
except AssertionError:
raise Exception("Invalid value for %s! Must be a string of length 1." % name)
def _validate_attributes(self, name, val):
try:
assert isinstance(val, dict)
except AssertionError:
raise Exception("attributes must be a dictionary of name/value pairs!")
##############################
# ATTRIBUTE MANAGEMENT #
##############################
def _get_field_names(self):
return self._field_names
"""The names of the fields
Arguments:
fields - list or tuple of field names"""
def _set_field_names(self, val):
val = [self._unicode(x) for x in val]
self._validate_option("field_names", val)
if self._field_names:
old_names = self._field_names[:]
self._field_names = val
if self._align and old_names:
for old_name, new_name in zip(old_names, val):
self._align[new_name] = self._align[old_name]
for old_name in old_names:
if old_name not in self._align:
self._align.pop(old_name)
else:
for field in self._field_names:
self._align[field] = "c"
if self._valign and old_names:
for old_name, new_name in zip(old_names, val):
self._valign[new_name] = self._valign[old_name]
for old_name in old_names:
if old_name not in self._valign:
self._valign.pop(old_name)
else:
for field in self._field_names:
self._valign[field] = "t"
field_names = property(_get_field_names, _set_field_names)
def _get_align(self):
return self._align
def _set_align(self, val):
self._validate_align(val)
for field in self._field_names:
self._align[field] = val
align = property(_get_align, _set_align)
def _get_valign(self):
return self._valign
def _set_valign(self, val):
self._validate_valign(val)
for field in self._field_names:
self._valign[field] = val
valign = property(_get_valign, _set_valign)
def _get_max_width(self):
return self._max_width
def _set_max_width(self, val):
self._validate_option("max_width", val)
for field in self._field_names:
self._max_width[field] = val
max_width = property(_get_max_width, _set_max_width)
def _get_fields(self):
"""List or tuple of field names to include in displays
Arguments:
fields - list or tuple of field names to include in displays"""
return self._fields
def _set_fields(self, val):
self._validate_option("fields", val)
self._fields = val
fields = property(_get_fields, _set_fields)
def _get_start(self):
"""Start index of the range of rows to print
Arguments:
start - index of first data row to include in output"""
return self._start
def _set_start(self, val):
self._validate_option("start", val)
self._start = val
start = property(_get_start, _set_start)
def _get_end(self):
"""End index of the range of rows to print
Arguments:
end - index of last data row to include in output PLUS ONE (list slice style)"""
return self._end
def _set_end(self, val):
self._validate_option("end", val)
self._end = val
end = property(_get_end, _set_end)
def _get_sortby(self):
"""Name of field by which to sort rows
Arguments:
sortby - field name to sort by"""
return self._sortby
def _set_sortby(self, val):
self._validate_option("sortby", val)
self._sortby = val
sortby = property(_get_sortby, _set_sortby)
def _get_reversesort(self):
"""Controls direction of sorting (ascending vs descending)
Arguments:
reveresort - set to True to sort by descending order, or False to sort by ascending order"""
return self._reversesort
def _set_reversesort(self, val):
self._validate_option("reversesort", val)
self._reversesort = val
reversesort = property(_get_reversesort, _set_reversesort)
def _get_sort_key(self):
"""Sorting key function, applied to data points before sorting
Arguments:
sort_key - a function which takes one argument and returns something to be sorted"""
return self._sort_key
def _set_sort_key(self, val):
self._validate_option("sort_key", val)
self._sort_key = val
sort_key = property(_get_sort_key, _set_sort_key)
def _get_header(self):
"""Controls printing of table header with field names
Arguments:
header - print a header showing field names (True or False)"""
return self._header
def _set_header(self, val):
self._validate_option("header", val)
self._header = val
header = property(_get_header, _set_header)
def _get_header_style(self):
"""Controls stylisation applied to field names in header
Arguments:
header_style - stylisation to apply to field names in header ("cap", "title", "upper", "lower" or None)"""
return self._header_style
def _set_header_style(self, val):
self._validate_header_style(val)
self._header_style = val
header_style = property(_get_header_style, _set_header_style)
def _get_border(self):
"""Controls printing of border around table
Arguments:
border - print a border around the table (True or False)"""
return self._border
def _set_border(self, val):
self._validate_option("border", val)
self._border = val
border = property(_get_border, _set_border)
def _get_hrules(self):
"""Controls printing of horizontal rules after rows
Arguments:
hrules - horizontal rules style. Allowed values: FRAME, ALL, HEADER, NONE"""
return self._hrules
def _set_hrules(self, val):
self._validate_option("hrules", val)
self._hrules = val
hrules = property(_get_hrules, _set_hrules)
def _get_vrules(self):
"""Controls printing of vertical rules between columns
Arguments:
vrules - vertical rules style. Allowed values: FRAME, ALL, NONE"""
return self._vrules
def _set_vrules(self, val):
self._validate_option("vrules", val)
self._vrules = val
vrules = property(_get_vrules, _set_vrules)
def _get_int_format(self):
"""Controls formatting of integer data
Arguments:
int_format - integer format string"""
return self._int_format
def _set_int_format(self, val):
# self._validate_option("int_format", val)
for field in self._field_names:
self._int_format[field] = val
int_format = property(_get_int_format, _set_int_format)
def _get_float_format(self):
"""Controls formatting of floating point data
Arguments:
float_format - floating point format string"""
return self._float_format
def _set_float_format(self, val):
# self._validate_option("float_format", val)
for field in self._field_names:
self._float_format[field] = val
float_format = property(_get_float_format, _set_float_format)
def _get_padding_width(self):
"""The number of empty spaces between a column's edge and its content
Arguments:
padding_width - number of spaces, must be a positive integer"""
return self._padding_width
def _set_padding_width(self, val):
self._validate_option("padding_width", val)
self._padding_width = val
padding_width = property(_get_padding_width, _set_padding_width)
def _get_left_padding_width(self):
"""The number of empty spaces between a column's left edge and its content
Arguments:
left_padding - number of spaces, must be a positive integer"""
return self._left_padding_width
def _set_left_padding_width(self, val):
self._validate_option("left_padding_width", val)
self._left_padding_width = val
left_padding_width = property(_get_left_padding_width, _set_left_padding_width)
def _get_right_padding_width(self):
"""The number of empty spaces between a column's right edge and its content
Arguments:
right_padding - number of spaces, must be a positive integer"""
return self._right_padding_width
def _set_right_padding_width(self, val):
self._validate_option("right_padding_width", val)
self._right_padding_width = val
right_padding_width = property(_get_right_padding_width, _set_right_padding_width)
def _get_vertical_char(self):
"""The charcter used when printing table borders to draw vertical lines
Arguments:
vertical_char - single character string used to draw vertical lines"""
return self._vertical_char
def _set_vertical_char(self, val):
val = self._unicode(val)
self._validate_option("vertical_char", val)
self._vertical_char = val
vertical_char = property(_get_vertical_char, _set_vertical_char)
def _get_horizontal_char(self):
"""The charcter used when printing table borders to draw horizontal lines
Arguments:
horizontal_char - single character string used to draw horizontal lines"""
return self._horizontal_char
def _set_horizontal_char(self, val):
val = self._unicode(val)
self._validate_option("horizontal_char", val)
self._horizontal_char = val
horizontal_char = property(_get_horizontal_char, _set_horizontal_char)
def _get_junction_char(self):
"""The charcter used when printing table borders to draw line junctions
Arguments:
junction_char - single character string used to draw line junctions"""
return self._junction_char
def _set_junction_char(self, val):
val = self._unicode(val)
self._validate_option("vertical_char", val)
self._junction_char = val
junction_char = property(_get_junction_char, _set_junction_char)
def _get_format(self):
"""Controls whether or not HTML tables are formatted to match styling options
Arguments:
format - True or False"""
return self._format
def _set_format(self, val):
self._validate_option("format", val)
self._format = val
format = property(_get_format, _set_format)
def _get_print_empty(self):
"""Controls whether or not empty tables produce a header and frame or just an empty string
Arguments:
print_empty - True or False"""
return self._print_empty
def _set_print_empty(self, val):
self._validate_option("print_empty", val)
self._print_empty = val
print_empty = property(_get_print_empty, _set_print_empty)
def _get_attributes(self):
"""A dictionary of HTML attribute name/value pairs to be included in the tag when printing HTML
Arguments:
attributes - dictionary of attributes"""
return self._attributes
def _set_attributes(self, val):
self._validate_option("attributes", val)
self._attributes = val
attributes = property(_get_attributes, _set_attributes)
##############################
# OPTION MIXER #
##############################
def _get_options(self, kwargs):
options = {}
for option in self._options:
if option in kwargs:
self._validate_option(option, kwargs[option])
options[option] = kwargs[option]
else:
options[option] = getattr(self, "_"+option)
return options
##############################
# PRESET STYLE LOGIC #
##############################
def set_style(self, style):
if style == DEFAULT:
self._set_default_style()
elif style == MSWORD_FRIENDLY:
self._set_msword_style()
elif style == PLAIN_COLUMNS:
self._set_columns_style()
elif style == RANDOM:
self._set_random_style()
else:
raise Exception("Invalid pre-set style!")
def _set_default_style(self):
self.header = True
self.border = True
self._hrules = FRAME
self._vrules = ALL
self.padding_width = 1
self.left_padding_width = 1
self.right_padding_width = 1
self.vertical_char = "|"
self.horizontal_char = "-"
self.junction_char = "+"
def _set_msword_style(self):
self.header = True
self.border = True
self._hrules = NONE
self.padding_width = 1
self.left_padding_width = 1
self.right_padding_width = 1
self.vertical_char = "|"
def _set_columns_style(self):
self.header = True
self.border = False
self.padding_width = 1
self.left_padding_width = 0
self.right_padding_width = 8
def _set_random_style(self):
# Just for fun!
self.header = random.choice((True, False))
self.border = random.choice((True, False))
self._hrules = random.choice((ALL, FRAME, HEADER, NONE))
self._vrules = random.choice((ALL, FRAME, NONE))
self.left_padding_width = random.randint(0,5)
self.right_padding_width = random.randint(0,5)
self.vertical_char = random.choice("~!@#$%^&*()_+|-=\{}[];':\",./;<>?")
self.horizontal_char = random.choice("~!@#$%^&*()_+|-=\{}[];':\",./;<>?")
self.junction_char = random.choice("~!@#$%^&*()_+|-=\{}[];':\",./;<>?")
##############################
# DATA INPUT METHODS #
##############################
def add_row(self, row):
"""Add a row to the table
Arguments:
row - row of data, should be a list with as many elements as the table
has fields"""
if self._field_names and len(row) != len(self._field_names):
raise Exception("Row has incorrect number of values, (actual) %d!=%d (expected)" %(len(row),len(self._field_names)))
if not self._field_names:
self.field_names = [("Field %d" % (n+1)) for n in range(0,len(row))]
self._rows.append(list(row))
def del_row(self, row_index):
"""Delete a row to the table
Arguments:
row_index - The index of the row you want to delete. Indexing starts at 0."""
if row_index > len(self._rows)-1:
raise Exception("Cant delete row at index %d, table only has %d rows!" % (row_index, len(self._rows)))
del self._rows[row_index]
def add_column(self, fieldname, column, align="c", valign="t"):
"""Add a column to the table.
Arguments:
fieldname - name of the field to contain the new column of data
column - column of data, should be a list with as many elements as the
table has rows
align - desired alignment for this column - "l" for left, "c" for centre and "r" for right
valign - desired vertical alignment for new columns - "t" for top, "m" for middle and "b" for bottom"""
if len(self._rows) in (0, len(column)):
self._validate_align(align)
self._validate_valign(valign)
self._field_names.append(fieldname)
self._align[fieldname] = align
self._valign[fieldname] = valign
for i in range(0, len(column)):
if len(self._rows) < i+1:
self._rows.append([])
self._rows[i].append(column[i])
else:
raise Exception("Column length %d does not match number of rows %d!" % (len(column), len(self._rows)))
def clear_rows(self):
"""Delete all rows from the table but keep the current field names"""
self._rows = []
def clear(self):
"""Delete all rows and field names from the table, maintaining nothing but styling options"""
self._rows = []
self._field_names = []
self._widths = []
##############################
# MISC PUBLIC METHODS #
##############################
def copy(self):
return copy.deepcopy(self)
##############################
# MISC PRIVATE METHODS #
##############################
def _format_value(self, field, value):
if isinstance(value, int) and field in self._int_format:
value = self._unicode(("%%%sd" % self._int_format[field]) % value)
elif isinstance(value, float) and field in self._float_format:
value = self._unicode(("%%%sf" % self._float_format[field]) % value)
return self._unicode(value)
def _compute_widths(self, rows, options):
if options["header"]:
widths = [_get_size(field)[0] for field in self._field_names]
else:
widths = len(self.field_names) * [0]
for row in rows:
for index, value in enumerate(row):
fieldname = self.field_names[index]
if fieldname in self.max_width:
widths[index] = max(widths[index], min(_get_size(value)[0], self.max_width[fieldname]))
else:
widths[index] = max(widths[index], _get_size(value)[0])
self._widths = widths
def _get_padding_widths(self, options):
if options["left_padding_width"] is not None:
lpad = options["left_padding_width"]
else:
lpad = options["padding_width"]
if options["right_padding_width"] is not None:
rpad = options["right_padding_width"]
else:
rpad = options["padding_width"]
return lpad, rpad
def _get_rows(self, options):
"""Return only those data rows that should be printed, based on slicing and sorting.
Arguments:
options - dictionary of option settings."""
# Make a copy of only those rows in the slice range
rows = copy.deepcopy(self._rows[options["start"]:options["end"]])
# Sort if necessary
if options["sortby"]:
sortindex = self._field_names.index(options["sortby"])
# Decorate
rows = [[row[sortindex]]+row for row in rows]
# Sort
rows.sort(reverse=options["reversesort"], key=options["sort_key"])
# Undecorate
rows = [row[1:] for row in rows]
return rows
def _format_row(self, row, options):
return [self._format_value(field, value) for (field, value) in zip(self._field_names, row)]
def _format_rows(self, rows, options):
return [self._format_row(row, options) for row in rows]
##############################
# PLAIN TEXT STRING METHODS #
##############################
def get_string(self, **kwargs):
"""Return string representation of table in current state.
Arguments:
start - index of first data row to include in output
end - index of last data row to include in output PLUS ONE (list slice style)
fields - names of fields (columns) to include
header - print a header showing field names (True or False)
border - print a border around the table (True or False)
hrules - controls printing of horizontal rules after rows. Allowed values: ALL, FRAME, HEADER, NONE
vrules - controls printing of vertical rules between columns. Allowed values: FRAME, ALL, NONE
int_format - controls formatting of integer data
float_format - controls formatting of floating point data
padding_width - number of spaces on either side of column data (only used if left and right paddings are None)
left_padding_width - number of spaces on left hand side of column data
right_padding_width - number of spaces on right hand side of column data
vertical_char - single character string used to draw vertical lines
horizontal_char - single character string used to draw horizontal lines
junction_char - single character string used to draw line junctions
sortby - name of field to sort rows by
sort_key - sorting key function, applied to data points before sorting
reversesort - True or False to sort in descending or ascending order
print empty - if True, stringify just the header for an empty table, if False return an empty string """
options = self._get_options(kwargs)
lines = []
# Don't think too hard about an empty table
# Is this the desired behaviour? Maybe we should still print the header?
if self.rowcount == 0 and (not options["print_empty"] or not options["border"]):
return ""
# Get the rows we need to print, taking into account slicing, sorting, etc.
rows = self._get_rows(options)
# Turn all data in all rows into Unicode, formatted as desired
formatted_rows = self._format_rows(rows, options)
# Compute column widths
self._compute_widths(formatted_rows, options)
# Add header or top of border
self._hrule = self._stringify_hrule(options)
if options["header"]:
lines.append(self._stringify_header(options))
elif options["border"] and options["hrules"] in (ALL, FRAME):
lines.append(self._hrule)
# Add rows
for row in formatted_rows:
lines.append(self._stringify_row(row, options))
# Add bottom of border
if options["border"] and options["hrules"] == FRAME:
lines.append(self._hrule)
return self._unicode("\n").join(lines)
def _stringify_hrule(self, options):
if not options["border"]:
return ""
lpad, rpad = self._get_padding_widths(options)
if options['vrules'] in (ALL, FRAME):
bits = [options["junction_char"]]
else:
bits = [options["horizontal_char"]]
# For tables with no data or fieldnames
if not self._field_names:
bits.append(options["junction_char"])
return "".join(bits)
for field, width in zip(self._field_names, self._widths):
if options["fields"] and field not in options["fields"]:
continue
bits.append((width+lpad+rpad)*options["horizontal_char"])
if options['vrules'] == ALL:
bits.append(options["junction_char"])
else:
bits.append(options["horizontal_char"])
if options["vrules"] == FRAME:
bits.pop()
bits.append(options["junction_char"])
return "".join(bits)
def _stringify_header(self, options):
bits = []
lpad, rpad = self._get_padding_widths(options)
if options["border"]:
if options["hrules"] in (ALL, FRAME):
bits.append(self._hrule)
bits.append("\n")
if options["vrules"] in (ALL, FRAME):
bits.append(options["vertical_char"])
else:
bits.append(" ")
# For tables with no data or field names
if not self._field_names:
if options["vrules"] in (ALL, FRAME):
bits.append(options["vertical_char"])
else:
bits.append(" ")
for field, width, in zip(self._field_names, self._widths):
if options["fields"] and field not in options["fields"]:
continue
if self._header_style == "cap":
fieldname = field.capitalize()
elif self._header_style == "title":
fieldname = field.title()
elif self._header_style == "upper":
fieldname = field.upper()
elif self._header_style == "lower":
fieldname = field.lower()
else:
fieldname = field
bits.append(" " * lpad + self._justify(fieldname, width, self._align[field]) + " " * rpad)
if options["border"]:
if options["vrules"] == ALL:
bits.append(options["vertical_char"])
else:
bits.append(" ")
# If vrules is FRAME, then we just appended a space at the end
# of the last field, when we really want a vertical character
if options["border"] and options["vrules"] == FRAME:
bits.pop()
bits.append(options["vertical_char"])
if options["border"] and options["hrules"] != NONE:
bits.append("\n")
bits.append(self._hrule)
return "".join(bits)
def _stringify_row(self, row, options):
for index, field, value, width, in zip(range(0,len(row)), self._field_names, row, self._widths):
# Enforce max widths
lines = value.split("\n")
new_lines = []
for line in lines:
if _str_block_width(line) > width:
line = textwrap.fill(line, width)
new_lines.append(line)
lines = new_lines
value = "\n".join(lines)
row[index] = value
row_height = 0
for c in row:
h = _get_size(c)[1]
if h > row_height:
row_height = h
bits = []
lpad, rpad = self._get_padding_widths(options)
for y in range(0, row_height):
bits.append([])
if options["border"]:
if options["vrules"] in (ALL, FRAME):
bits[y].append(self.vertical_char)
else:
bits[y].append(" ")
for field, value, width, in zip(self._field_names, row, self._widths):
valign = self._valign[field]
lines = value.split("\n")
dHeight = row_height - len(lines)
if dHeight:
if valign == "m":
lines = [""] * int(dHeight / 2) + lines + [""] * (dHeight - int(dHeight / 2))
elif valign == "b":
lines = [""] * dHeight + lines
else:
lines = lines + [""] * dHeight
y = 0
for l in lines:
if options["fields"] and field not in options["fields"]:
continue
bits[y].append(" " * lpad + self._justify(l, width, self._align[field]) + " " * rpad)
if options["border"]:
if options["vrules"] == ALL:
bits[y].append(self.vertical_char)
else:
bits[y].append(" ")
y += 1
# If vrules is FRAME, then we just appended a space at the end
# of the last field, when we really want a vertical character
for y in range(0, row_height):
if options["border"] and options["vrules"] == FRAME:
bits[y].pop()
bits[y].append(options["vertical_char"])
if options["border"] and options["hrules"]== ALL:
bits[row_height-1].append("\n")
bits[row_height-1].append(self._hrule)
for y in range(0, row_height):
bits[y] = "".join(bits[y])
return "\n".join(bits)
##############################
# HTML STRING METHODS #
##############################
def get_html_string(self, **kwargs):
"""Return string representation of HTML formatted version of table in current state.
Arguments:
start - index of first data row to include in output
end - index of last data row to include in output PLUS ONE (list slice style)
fields - names of fields (columns) to include
header - print a header showing field names (True or False)
border - print a border around the table (True or False)
hrules - controls printing of horizontal rules after rows. Allowed values: ALL, FRAME, HEADER, NONE
vrules - controls printing of vertical rules between columns. Allowed values: FRAME, ALL, NONE
int_format - controls formatting of integer data
float_format - controls formatting of floating point data
padding_width - number of spaces on either side of column data (only used if left and right paddings are None)
left_padding_width - number of spaces on left hand side of column data
right_padding_width - number of spaces on right hand side of column data
sortby - name of field to sort rows by
sort_key - sorting key function, applied to data points before sorting
attributes - dictionary of name/value pairs to include as HTML attributes in the tag
xhtml - print
tags if True,
tags if false"""
options = self._get_options(kwargs)
if options["format"]:
string = self._get_formatted_html_string(options)
else:
string = self._get_simple_html_string(options)
return string
def _get_simple_html_string(self, options):
lines = []
if options["xhtml"]:
linebreak = "
"
else:
linebreak = "
"
open_tag = []
open_tag.append("")
lines.append("".join(open_tag))
# Headers
if options["header"]:
lines.append(" ")
for field in self._field_names:
if options["fields"] and field not in options["fields"]:
continue
lines.append(" %s | " % escape(field).replace("\n", linebreak))
lines.append("
")
# Data
rows = self._get_rows(options)
formatted_rows = self._format_rows(rows, options)
for row in formatted_rows:
lines.append(" ")
for field, datum in zip(self._field_names, row):
if options["fields"] and field not in options["fields"]:
continue
lines.append(" %s | " % escape(datum).replace("\n", linebreak))
lines.append("
")
lines.append("
")
return self._unicode("\n").join(lines)
def _get_formatted_html_string(self, options):
lines = []
lpad, rpad = self._get_padding_widths(options)
if options["xhtml"]:
linebreak = "
"
else:
linebreak = "
"
open_tag = []
open_tag.append("")
lines.append("".join(open_tag))
# Headers
if options["header"]:
lines.append(" ")
for field in self._field_names:
if options["fields"] and field not in options["fields"]:
continue
lines.append(" %s | " % (lpad, rpad, escape(field).replace("\n", linebreak)))
lines.append("
")
# Data
rows = self._get_rows(options)
formatted_rows = self._format_rows(rows, options)
aligns = []
valigns = []
for field in self._field_names:
aligns.append({ "l" : "left", "r" : "right", "c" : "center" }[self._align[field]])
valigns.append({"t" : "top", "m" : "middle", "b" : "bottom"}[self._valign[field]])
for row in formatted_rows:
lines.append(" ")
for field, datum, align, valign in zip(self._field_names, row, aligns, valigns):
if options["fields"] and field not in options["fields"]:
continue
lines.append(" %s | " % (lpad, rpad, align, valign, escape(datum).replace("\n", linebreak)))
lines.append("
")
lines.append("
")
return self._unicode("\n").join(lines)
##############################
# UNICODE WIDTH FUNCTIONS #
##############################
def _char_block_width(char):
# Basic Latin, which is probably the most common case
#if char in xrange(0x0021, 0x007e):
#if char >= 0x0021 and char <= 0x007e:
if 0x0021 <= char <= 0x007e:
return 1
# Chinese, Japanese, Korean (common)
if 0x4e00 <= char <= 0x9fff:
return 2
# Hangul
if 0xac00 <= char <= 0xd7af:
return 2
# Combining?
if unicodedata.combining(uni_chr(char)):
return 0
# Hiragana and Katakana
if 0x3040 <= char <= 0x309f or 0x30a0 <= char <= 0x30ff:
return 2
# Full-width Latin characters
if 0xff01 <= char <= 0xff60:
return 2
# CJK punctuation
if 0x3000 <= char <= 0x303e:
return 2
# Backspace and delete
if char in (0x0008, 0x007f):
return -1
# Other control characters
elif char in (0x0000, 0x001f):
return 0
# Take a guess
return 1
def _str_block_width(val):
return sum(itermap(_char_block_width, itermap(ord, _re.sub("", val))))
##############################
# TABLE FACTORIES #
##############################
def from_csv(fp, field_names = None, **kwargs):
dialect = csv.Sniffer().sniff(fp.read(1024))
fp.seek(0)
reader = csv.reader(fp, dialect)
table = PrettyTable(**kwargs)
if field_names:
table.field_names = field_names
else:
if py3k:
table.field_names = [x.strip() for x in next(reader)]
else:
table.field_names = [x.strip() for x in reader.next()]
for row in reader:
table.add_row([x.strip() for x in row])
return table
def from_db_cursor(cursor, **kwargs):
if cursor.description:
table = PrettyTable(**kwargs)
table.field_names = [col[0] for col in cursor.description]
for row in cursor.fetchall():
table.add_row(row)
return table
class TableHandler(HTMLParser):
def __init__(self, **kwargs):
HTMLParser.__init__(self)
self.kwargs = kwargs
self.tables = []
self.last_row = []
self.rows = []
self.max_row_width = 0
self.active = None
self.last_content = ""
self.is_last_row_header = False
def handle_starttag(self,tag, attrs):
self.active = tag
if tag == "th":
self.is_last_row_header = True
def handle_endtag(self,tag):
if tag in ["th", "td"]:
stripped_content = self.last_content.strip()
self.last_row.append(stripped_content)
if tag == "tr":
self.rows.append(
(self.last_row, self.is_last_row_header))
self.max_row_width = max(self.max_row_width, len(self.last_row))
self.last_row = []
self.is_last_row_header = False
if tag == "table":
table = self.generate_table(self.rows)
self.tables.append(table)
self.rows = []
self.last_content = " "
self.active = None
def handle_data(self, data):
self.last_content += data
def generate_table(self, rows):
"""
Generates from a list of rows a PrettyTable object.
"""
table = PrettyTable(**self.kwargs)
for row in self.rows:
if len(row[0]) < self.max_row_width:
appends = self.max_row_width - len(row[0])
for i in range(1,appends):
row[0].append("-")
if row[1] == True:
self.make_fields_unique(row[0])
table.field_names = row[0]
else:
table.add_row(row[0])
return table
def make_fields_unique(self, fields):
"""
iterates over the row and make each field unique
"""
for i in range(0, len(fields)):
for j in range(i+1, len(fields)):
if fields[i] == fields[j]:
fields[j] += "'"
def from_html(html_code, **kwargs):
"""
Generates a list of PrettyTables from a string of HTML code. Each in
the HTML becomes one PrettyTable object.
"""
parser = TableHandler(**kwargs)
parser.feed(html_code)
return parser.tables
def from_html_one(html_code, **kwargs):
"""
Generates a PrettyTables from a string of HTML code which contains only a
single
"""
tables = from_html(html_code, **kwargs)
try:
assert len(tables) == 1
except AssertionError:
raise Exception("More than one in provided HTML code! Use from_html instead.")
return tables[0]
##############################
# MAIN (TEST FUNCTION) #
##############################
def main():
x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
x.sortby = "Population"
x.reversesort = True
x.int_format["Area"] = "04d"
x.float_format = "6.1f"
x.align["City name"] = "l" # Left align city names
x.add_row(["Adelaide", 1295, 1158259, 600.5])
x.add_row(["Brisbane", 5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])
print(x)
if __name__ == "__main__":
main()
Pluto/src/variables.py 000755 000765 000024 00000012321 12671555337 015565 0 ustar 00chris staff 000000 000000 '''
Global vairables as defined in the Openstack Liberty install pages.
See http://docs.openstack.org/liberty/install-guide-rdo/environment-security.html
for complete lists of DB passwords.
Created on Feb 27, 2016
@author: chris
'''
'''
Thruout the installation you will see variables mentioned such as GLANCE_DBPASS.
Change those values here. The values will be replaces as .conf files are updated.
Add any additional name value pairs here, but be careful. Make sure the key is
likely to be unique. use BIG_TEXT_LIKE_THIS as values are unlikely to look like that.
Then place those replacement values wherever you like in the processing fiels.
An example I've added is NOVA_INSTANCE_STORE, as you may want to chage this.
This is only useful if the same value appears in several places.
'''
OPENSTACK_VARIABLES = {
# The admin token is generated like this
# openssl rand -hex 10
"ADMIN_TOKEN":"91121d2c109d7fc778e4",
# Replace ADMIN_PASS with the password you chose for the admin user in the Identity service.
"ADMIN_PASS":"UNDEFINED",
# Same for demo
"DEMO_PASS":"UNDEFINED",
# (hmmm, just how many Openstack tools have subtle references to Land of the Lost?)
# Password of user guest of RabbitMQ (not identity, but Rabbit itself)
"RABBIT_PASS":"UNDEFINED",
# Replace GLANCE_DBPASS with the password you chose for the Image service database.
"GLANCE_DBPASS":"UNDEFINED",
# Replace GLANCE_PASS with the password you chose for the glance user in the Identity service.
"GLANCE_PASS":"UNDEFINED",
# Replace NEUTRON_DBPASS with the password you chose for the service database.
"NEUTRON_DBPASS":"UNDEFINED",
# Replace NEUTRON_PASS with the password you chose for the neutron user in the Identity service.
"NEUTRON_PASS":"UNDEFINED",
# Replace CINDER_DBPASS with the password you chose... well if you havn't figured it out by now...
"CINDER_DBPASS":"UNDEFINED",
# Replace CINDER_PASS with the password....
"CINDER_PASS":"UNDEFINED",
"HEAT_DBPASS":"UNDEFINED",
# Identity service password
"HEAT_PASS":"UNDEFINED",
# Password of Orchestration domain
"HEAT_DOMAIN_PASS":"UNDEFINED",
"CEILOMETER_DBPASS":"UNDEFINED",
# Identity service user password
"CEILOMETER_PASS":"UNDEFINED",
"NOVA_DBPASS":"UNDEFINED",
# Identity service user password
"NOVA_PASS":"UNDEFINED",
"KEYSTONE_DBPASS":"UNDEFINED",
# Identity service user password
"SWIFT_PASS":"UNDEFINED",
# You may want to specify a different location to store images, depending on
# partition space. A default CentOS install leaves little room in /var But /home works.
# If you change this, be sure to 1: Disable SELinux and 2: Create the directory
"GLANCE_IMAGE_STORE":"/var/lib/glance/images/",
# See above, instances are big too.
"NOVA_INSTANCE_STORE":"/var/lib/nova/instances/",
# This as seen in "my_ip" in nova.conf
"CONTROLLER_IP":"UNDEFINED",
# For use with neutron networking
"METADATA_SECRET":"UNDEFINED",
# Replace MANAGEMENT_INTERFACE_IP_ADDRESS with the IP address
# of the management network interface on your compute node,
# typically 10.0.0.31 for the first node in the example architecture.
"MANAGEMENT_INTERFACE_IP_ADDRESS":"UNDEFINED",
# Linux Bridge settings. linuxbridge_agent.ini
"OVERLAY_INTERFACE_IP_ADDRESS":"UNDEFINED",
"PUBLIC_INTERFACE_NAME":"enp3s0",
# Not sure how to deal with
# /etc/neutron/metadata_agent.ini
# But here is an interesting case. We will gry this
# We will replace these which exist in the file already.
# [DEFAULT]
# admin_tenant_name = %SERVICE_TENANT_NAME%
# admin_user = %SERVICE_USER%
# admin_password = %SERVICE_PASSWORD%
"SERVICE_TENANT_NAME":"admin",
"SERVICE_USER":"admin",
# Same as "UNDEFINED"
"SERVICE_PASSWORD":"UNDEFINED"
}
'''
The set of directories immediately under Root Path which are searched for .conf files.
SubDirectories are no problem, they are searched as well. Do not keep backups here.
'''
OPENSTACK_CONF_DIRS = ["/nova", "/glance", "/neutron","/keystone", "/cinder", "/swift"
, "/ceilometer", "/heat"]
'''
Given a string, locate any references to Openstack Vars and replace if found
@param Input string
@return String with var refs replaced.
'''
def ResolveVars (text):
for key in OPENSTACK_VARIABLES:
text = text.replace(key, OPENSTACK_VARIABLES[key])
return text
Pluto/conf-test/cinder/ 000755 000765 000024 00000000000 12663133336 015610 5 ustar 00chris staff 000000 000000 Pluto/conf-test/glance/ 000755 000765 000024 00000000000 12663133336 015575 5 ustar 00chris staff 000000 000000 Pluto/conf-test/keystone/ 000755 000765 000024 00000000000 12663133336 016205 5 ustar 00chris staff 000000 000000 Pluto/conf-test/neutron/ 000755 000765 000024 00000000000 12667673432 016050 5 ustar 00chris staff 000000 000000 Pluto/conf-test/nova/ 000755 000765 000024 00000000000 12663133336 015307 5 ustar 00chris staff 000000 000000 Pluto/conf-test/nova/api-paste.ini 000644 000765 000024 00000010042 12663133336 017670 0 ustar 00chris staff 000000 000000 ############
# Metadata #
############
[composite:metadata]
use = egg:Paste#urlmap
/: meta
[pipeline:meta]
pipeline = ec2faultwrap logrequest metaapp
[app:metaapp]
paste.app_factory = nova.api.metadata.handler:MetadataRequestHandler.factory
#######
# EC2 #
#######
[composite:ec2]
use = egg:Paste#urlmap
/: ec2cloud
[composite:ec2cloud]
use = call:nova.api.auth:pipeline_factory
noauth = ec2faultwrap logrequest ec2noauth cloudrequest validator ec2executor
noauth2 = ec2faultwrap logrequest ec2noauth cloudrequest validator ec2executor
keystone = ec2faultwrap logrequest ec2keystoneauth cloudrequest validator ec2executor
[filter:ec2faultwrap]
paste.filter_factory = nova.api.ec2:FaultWrapper.factory
[filter:logrequest]
paste.filter_factory = nova.api.ec2:RequestLogging.factory
[filter:ec2lockout]
paste.filter_factory = nova.api.ec2:Lockout.factory
[filter:ec2keystoneauth]
paste.filter_factory = nova.api.ec2:EC2KeystoneAuth.factory
[filter:ec2noauth]
paste.filter_factory = nova.api.ec2:NoAuth.factory
[filter:cloudrequest]
controller = nova.api.ec2.cloud.CloudController
paste.filter_factory = nova.api.ec2:Requestify.factory
[filter:authorizer]
paste.filter_factory = nova.api.ec2:Authorizer.factory
[filter:validator]
paste.filter_factory = nova.api.ec2:Validator.factory
[app:ec2executor]
paste.app_factory = nova.api.ec2:Executor.factory
#############
# OpenStack #
#############
[composite:osapi_compute]
use = call:nova.api.openstack.urlmap:urlmap_factory
/: oscomputeversions
/v1.1: openstack_compute_api_v2
/v2: openstack_compute_api_v2
/v2.1: openstack_compute_api_v21
/v3: openstack_compute_api_v3
[composite:openstack_compute_api_v2]
use = call:nova.api.auth:pipeline_factory
noauth = compute_req_id faultwrap sizelimit noauth ratelimit osapi_compute_app_v2
noauth2 = compute_req_id faultwrap sizelimit noauth2 ratelimit osapi_compute_app_v2
keystone = compute_req_id faultwrap sizelimit authtoken keystonecontext ratelimit osapi_compute_app_v2
keystone_nolimit = compute_req_id faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v2
[composite:openstack_compute_api_v21]
use = call:nova.api.auth:pipeline_factory_v21
noauth = compute_req_id faultwrap sizelimit noauth osapi_compute_app_v21
noauth2 = compute_req_id faultwrap sizelimit noauth2 osapi_compute_app_v21
keystone = compute_req_id faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v21
[composite:openstack_compute_api_v3]
use = call:nova.api.auth:pipeline_factory_v21
noauth = request_id faultwrap sizelimit noauth_v3 osapi_compute_app_v3
noauth2 = request_id faultwrap sizelimit noauth_v3 osapi_compute_app_v3
keystone = request_id faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v3
[filter:request_id]
paste.filter_factory = oslo.middleware:RequestId.factory
[filter:compute_req_id]
paste.filter_factory = nova.api.compute_req_id:ComputeReqIdMiddleware.factory
[filter:faultwrap]
paste.filter_factory = nova.api.openstack:FaultWrapper.factory
[filter:noauth]
paste.filter_factory = nova.api.openstack.auth:NoAuthMiddlewareOld.factory
[filter:noauth2]
paste.filter_factory = nova.api.openstack.auth:NoAuthMiddleware.factory
[filter:noauth_v3]
paste.filter_factory = nova.api.openstack.auth:NoAuthMiddlewareV3.factory
[filter:ratelimit]
paste.filter_factory = nova.api.openstack.compute.limits:RateLimitingMiddleware.factory
[filter:sizelimit]
paste.filter_factory = oslo.middleware:RequestBodySizeLimiter.factory
[app:osapi_compute_app_v2]
paste.app_factory = nova.api.openstack.compute:APIRouter.factory
[app:osapi_compute_app_v21]
paste.app_factory = nova.api.openstack.compute:APIRouterV21.factory
[app:osapi_compute_app_v3]
paste.app_factory = nova.api.openstack.compute:APIRouterV3.factory
[pipeline:oscomputeversions]
pipeline = faultwrap oscomputeversionapp
[app:oscomputeversionapp]
paste.app_factory = nova.api.openstack.compute.versions:Versions.factory
##########
# Shared #
##########
[filter:keystonecontext]
paste.filter_factory = nova.api.auth:NovaKeystoneContext.factory
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
Pluto/conf-test/nova/nova.conf 000644 000765 000024 00000332374 12663133336 017135 0 ustar 00chris staff 000000 000000 [DEFAULT]
# Requirements from Compute
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
# Requirements from Network Assuming we need a super set
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 172.22.10.5
# vncserver_listen = 172.22.10.5
vncserver_proxyclient_address = 172.22.10.5
verbose = True
# This appears in the second section
vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 172.22.10.5
novncproxy_base_url = http://controller:6080/vnc_auto.html
verbose = True
# This added later for Neutron Networking
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
#
# From oslo.messaging
#
# ZeroMQ bind address. Should be a wildcard (*), an ethernet interface, or IP.
# The "host" option should point or resolve to this address. (string value)
#rpc_zmq_bind_address=*
# MatchMaker driver. (string value)
#rpc_zmq_matchmaker=oslo_messaging._drivers.matchmaker.MatchMakerLocalhost
# ZeroMQ receiver listening port. (integer value)
#rpc_zmq_port=9501
# Number of ZeroMQ contexts, defaults to 1. (integer value)
#rpc_zmq_contexts=1
# Maximum number of ingress messages to locally buffer per topic. Default is
# unlimited. (integer value)
#rpc_zmq_topic_backlog=
# Directory for holding IPC sockets. (string value)
#rpc_zmq_ipc_dir=/var/run/openstack
# Name of this node. Must be a valid hostname, FQDN, or IP address. Must match
# "host" option, if running Nova. (string value)
#rpc_zmq_host=localhost
# Seconds to wait before a cast expires (TTL). Only supported by impl_zmq.
# (integer value)
#rpc_cast_timeout=30
# Heartbeat frequency. (integer value)
#matchmaker_heartbeat_freq=300
# Heartbeat time-to-live. (integer value)
#matchmaker_heartbeat_ttl=600
# Size of RPC thread pool. (integer value)
#rpc_thread_pool_size=64
# Driver or drivers to handle sending notifications. (multi valued)
#notification_driver =
# AMQP topic used for OpenStack notifications. (list value)
# Deprecated group;name - [rpc_notifier2]/topics
#notification_topics=notifications
# Seconds to wait for a response from a call. (integer value)
#rpc_response_timeout=60
# A URL representing the messaging driver to use and its full configuration. If
# not set, we fall back to the rpc_backend option and driver specific
# configuration. (string value)
#transport_url=
# The messaging driver to use, defaults to rabbit. Other drivers include qpid
# and zmq. (string value)
#rpc_backend=rabbit
# The default exchange under which topics are scoped. May be overridden by an
# exchange name specified in the transport_url option. (string value)
#control_exchange=openstack
#
# Options defined in nova.availability_zones
#
# The availability_zone to show internal services under
# (string value)
#internal_service_availability_zone=internal
# Default compute node availability_zone (string value)
#default_availability_zone=nova
#
# Options defined in nova.crypto
#
# Filename of root CA (string value)
#ca_file=cacert.pem
# Filename of private key (string value)
#key_file=private/cakey.pem
# Filename of root Certificate Revocation List (string value)
#crl_file=crl.pem
# Where we keep our keys (string value)
#keys_path=$state_path/keys
# Where we keep our root CA (string value)
#ca_path=$state_path/CA
# Should we use a CA for each project? (boolean value)
#use_project_ca=false
# Subject for certificate for users, %s for project, user,
# timestamp (string value)
#user_cert_subject=/C=US/ST=California/O=OpenStack/OU=NovaDev/CN=%.16s-%.16s-%s
# Subject for certificate for projects, %s for project,
# timestamp (string value)
#project_cert_subject=/C=US/ST=California/O=OpenStack/OU=NovaDev/CN=project-ca-%.16s-%s
#
# Options defined in nova.exception
#
# Make exception message format errors fatal (boolean value)
#fatal_exception_format_errors=false
#
# Options defined in nova.netconf
#
# IP address of this host (string value)
#my_ip=10.0.0.1
# Block storage IP address of this host (string value)
#my_block_storage_ip=$my_ip
# Name of this node. This can be an opaque identifier. It is
# not necessarily a hostname, FQDN, or IP address. However,
# the node name must be valid within an AMQP key, and if using
# ZeroMQ, a valid hostname, FQDN, or IP address (string value)
#host=nova
# Use IPv6 (boolean value)
#use_ipv6=false
#
# Options defined in nova.notifications
#
# If set, send compute.instance.update notifications on
# instance state changes. Valid values are None for no
# notifications, "vm_state" for notifications on VM state
# changes, or "vm_and_task_state" for notifications on VM and
# task state changes. (string value)
#notify_on_state_change=
# If set, send api.fault notifications on caught exceptions in
# the API service. (boolean value)
#notify_api_faults=false
# Default notification level for outgoing notifications
# (string value)
#default_notification_level=INFO
# Default publisher_id for outgoing notifications (string
# value)
#default_publisher_id=
#
# Options defined in nova.paths
#
# Directory where the nova python module is installed (string
# value)
#pybasedir=/usr/lib/python/site-packages
# Directory where nova binaries are installed (string value)
#bindir=/usr/local/bin
# Top-level directory for maintaining nova's state (string
# value)
#state_path=/var/lib/nova
#
# Options defined in nova.quota
#
# Number of instances allowed per project (integer value)
#quota_instances=10
# Number of instance cores allowed per project (integer value)
#quota_cores=20
# Megabytes of instance RAM allowed per project (integer
# value)
#quota_ram=51200
# Number of floating IPs allowed per project (integer value)
#quota_floating_ips=10
# Number of fixed IPs allowed per project (this should be at
# least the number of instances allowed) (integer value)
#quota_fixed_ips=-1
# Number of metadata items allowed per instance (integer
# value)
#quota_metadata_items=128
# Number of injected files allowed (integer value)
#quota_injected_files=5
# Number of bytes allowed per injected file (integer value)
#quota_injected_file_content_bytes=10240
# Length of injected file path (integer value)
#quota_injected_file_path_length=255
# Number of security groups per project (integer value)
#quota_security_groups=10
# Number of security rules per security group (integer value)
#quota_security_group_rules=20
# Number of key pairs per user (integer value)
#quota_key_pairs=100
# Number of server groups per project (integer value)
#quota_server_groups=10
# Number of servers per server group (integer value)
#quota_server_group_members=10
# Number of seconds until a reservation expires (integer
# value)
#reservation_expire=86400
# Count of reservations until usage is refreshed. This
# defaults to 0(off) to avoid additional load but it is useful
# to turn on to help keep quota usage up to date and reduce
# the impact of out of sync usage issues. (integer value)
#until_refresh=0
# Number of seconds between subsequent usage refreshes. This
# defaults to 0(off) to avoid additional load but it is useful
# to turn on to help keep quota usage up to date and reduce
# the impact of out of sync usage issues. Note that quotas are
# not updated on a periodic task, they will update on a new
# reservation if max_age has passed since the last reservation
# (integer value)
#max_age=0
# Default driver to use for quota checks (string value)
#quota_driver=nova.quota.DbQuotaDriver
#
# Options defined in nova.service
#
# Seconds between nodes reporting state to datastore (integer
# value)
#report_interval=10
# Enable periodic tasks (boolean value)
#periodic_enable=true
# Range of seconds to randomly delay when starting the
# periodic task scheduler to reduce stampeding. (Disable by
# setting to 0) (integer value)
#periodic_fuzzy_delay=60
# A list of APIs to enable by default (list value)
#enabled_apis=ec2,osapi_compute,metadata
# A list of APIs with enabled SSL (list value)
#enabled_ssl_apis=
# The IP address on which the EC2 API will listen. (string
# value)
#ec2_listen=0.0.0.0
# The port on which the EC2 API will listen. (integer value)
#ec2_listen_port=8773
# Number of workers for EC2 API service. The default will be
# equal to the number of CPUs available. (integer value)
#ec2_workers=
# The IP address on which the OpenStack API will listen.
# (string value)
#osapi_compute_listen=0.0.0.0
# The port on which the OpenStack API will listen. (integer
# value)
#osapi_compute_listen_port=8774
# Number of workers for OpenStack API service. The default
# will be the number of CPUs available. (integer value)
#osapi_compute_workers=
# OpenStack metadata service manager (string value)
#metadata_manager=nova.api.manager.MetadataManager
# The IP address on which the metadata API will listen.
# (string value)
#metadata_listen=0.0.0.0
# The port on which the metadata API will listen. (integer
# value)
#metadata_listen_port=8775
# Number of workers for metadata service. The default will be
# the number of CPUs available. (integer value)
#metadata_workers=
# Full class name for the Manager for compute (string value)
#compute_manager=nova.compute.manager.ComputeManager
# Full class name for the Manager for console proxy (string
# value)
#console_manager=nova.console.manager.ConsoleProxyManager
# Manager for console auth (string value)
#consoleauth_manager=nova.consoleauth.manager.ConsoleAuthManager
# Full class name for the Manager for cert (string value)
#cert_manager=nova.cert.manager.CertManager
# Full class name for the Manager for network (string value)
#network_manager=nova.network.manager.FlatDHCPManager
# Full class name for the Manager for scheduler (string value)
#scheduler_manager=nova.scheduler.manager.SchedulerManager
# Maximum time since last check-in for up service (integer
# value)
#service_down_time=60
#
# Options defined in nova.utils
#
# Whether to log monkey patching (boolean value)
#monkey_patch=false
# List of modules/decorators to monkey patch (list value)
#monkey_patch_modules=nova.api.ec2.cloud:nova.notifications.notify_decorator,nova.compute.api:nova.notifications.notify_decorator
# Length of generated instance admin passwords (integer value)
#password_length=12
# Time period to generate instance usages for. Time period
# must be hour, day, month or year (string value)
#instance_usage_audit_period=month
# Path to the rootwrap configuration file to use for running
# commands as root (string value)
#rootwrap_config=/etc/nova/rootwrap.conf
# Explicitly specify the temporary working directory (string
# value)
#tempdir=
#
# Options defined in nova.wsgi
#
# File name for the paste.deploy config for nova-api (string
# value)
#api_paste_config=api-paste.ini
# A python format string that is used as the template to
# generate log lines. The following values can be formatted
# into it: client_ip, date_time, request_line, status_code,
# body_length, wall_seconds. (string value)
#wsgi_log_format=%(client_ip)s "%(request_line)s" status: %(status_code)s len: %(body_length)s time: %(wall_seconds).7f
# CA certificate file to use to verify connecting clients
# (string value)
#ssl_ca_file=
# SSL certificate of API server (string value)
#ssl_cert_file=
# SSL private key of API server (string value)
#ssl_key_file=
# Sets the value of TCP_KEEPIDLE in seconds for each server
# socket. Not supported on OS X. (integer value)
#tcp_keepidle=600
# Size of the pool of greenthreads used by wsgi (integer
# value)
#wsgi_default_pool_size=1000
# Maximum line size of message headers to be accepted.
# max_header_line may need to be increased when using large
# tokens (typically those generated by the Keystone v3 API
# with big service catalogs). (integer value)
#max_header_line=16384
# If False, closes the client socket connection explicitly.
# (boolean value)
#wsgi_keep_alive=true
# Timeout for client connections' socket operations. If an
# incoming connection is idle for this number of seconds it
# will be closed. A value of '0' means wait forever. (integer
# value)
#client_socket_timeout=900
#
# Options defined in nova.api.auth
#
# Whether to use per-user rate limiting for the api. This
# option is only used by v2 api. Rate limiting is removed from
# v3 api. (boolean value)
#api_rate_limit=false
# The strategy to use for auth: keystone, noauth
# (deprecated), or noauth2. Both noauth and noauth2 are
# designed for testing only, as they do no actual credential
# checking. noauth provides administrative credentials
# regardless of the passed in user, noauth2 only does if
# 'admin' is specified as the username. (string value)
#auth_strategy=keystone
# Treat X-Forwarded-For as the canonical remote address. Only
# enable this if you have a sanitizing proxy. (boolean value)
#use_forwarded_for=false
#
# Options defined in nova.api.ec2
#
# Number of failed auths before lockout. (integer value)
#lockout_attempts=5
# Number of minutes to lockout if triggered. (integer value)
#lockout_minutes=15
# Number of minutes for lockout window. (integer value)
#lockout_window=15
# URL to get token from ec2 request. (string value)
#keystone_ec2_url=http://localhost:5000/v2.0/ec2tokens
# Return the IP address as private dns hostname in describe
# instances (boolean value)
#ec2_private_dns_show_ip=false
# Validate security group names according to EC2 specification
# (boolean value)
#ec2_strict_validation=true
# Time in seconds before ec2 timestamp expires (integer value)
#ec2_timestamp_expiry=300
# Disable SSL certificate verification. (boolean value)
#keystone_ec2_insecure=false
#
# Options defined in nova.api.ec2.cloud
#
# The IP address of the EC2 API server (string value)
#ec2_host=$my_ip
# The internal IP address of the EC2 API server (string value)
#ec2_dmz_host=$my_ip
# The port of the EC2 API server (integer value)
#ec2_port=8773
# The protocol to use when connecting to the EC2 API server
# (http, https) (string value)
#ec2_scheme=http
# The path prefix used to call the ec2 API server (string
# value)
#ec2_path=/
# List of region=fqdn pairs separated by commas (list value)
#region_list=
#
# Options defined in nova.api.metadata.base
#
# List of metadata versions to skip placing into the config
# drive (string value)
#config_drive_skip_versions=1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01
# Driver to use for vendor data (string value)
#vendordata_driver=nova.api.metadata.vendordata_json.JsonFileVendorData
#
# Options defined in nova.api.metadata.handler
#
# Time in seconds to cache metadata; 0 to disable metadata
# caching entirely (not recommended). Increasingthis should
# improve response times of the metadata API when under heavy
# load. Higher values may increase memoryusage and result in
# longer times for host metadata changes to take effect.
# (integer value)
#metadata_cache_expiration=15
#
# Options defined in nova.api.metadata.vendordata_json
#
# File to load JSON formatted vendor data from (string value)
#vendordata_jsonfile_path=
#
# Options defined in nova.api.openstack.common
#
# The maximum number of items returned in a single response
# from a collection resource (integer value)
#osapi_max_limit=1000
# Base URL that will be presented to users in links to the
# OpenStack Compute API (string value)
#osapi_compute_link_prefix=
# Base URL that will be presented to users in links to glance
# resources (string value)
#osapi_glance_link_prefix=
#
# Options defined in nova.api.openstack.compute
#
# Permit instance snapshot operations. (boolean value)
#allow_instance_snapshots=true
#
# Options defined in nova.api.openstack.compute.contrib
#
# Specify list of extensions to load when using
# osapi_compute_extension option with
# nova.api.openstack.compute.contrib.select_extensions (list
# value)
#osapi_compute_ext_list=
#
# Options defined in nova.api.openstack.compute.contrib.fping
#
# Full path to fping. (string value)
#fping_path=/usr/sbin/fping
#
# Options defined in nova.api.openstack.compute.contrib.os_tenant_networks
#
# Enables or disables quota checking for tenant networks
# (boolean value)
#enable_network_quota=false
# Control for checking for default networks (string value)
#use_neutron_default_nets=False
# Default tenant id when creating neutron networks (string
# value)
#neutron_default_tenant_id=default
# Number of private networks allowed per project (integer
# value)
#quota_networks=3
#
# Options defined in nova.api.openstack.compute.extensions
#
# osapi compute extension to load (multi valued)
#osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
#
# Options defined in nova.api.openstack.compute.plugins.v3.hide_server_addresses
#
# List of instance states that should hide network info (list
# value)
#osapi_hide_server_address_states=building
#
# Options defined in nova.api.openstack.compute.servers
#
# Enables returning of the instance password by the relevant
# server API calls such as create, rebuild or rescue, If the
# hypervisor does not support password injection then the
# password returned will not be correct (boolean value)
#enable_instance_password=true
#
# Options defined in nova.cert.rpcapi
#
# The topic cert nodes listen on (string value)
#cert_topic=cert
#
# Options defined in nova.cloudpipe.pipelib
#
# Image ID used when starting up a cloudpipe vpn server
# (string value)
#vpn_image_id=0
# Flavor for vpn instances (string value)
#vpn_flavor=m1.tiny
# Template for cloudpipe instance boot script (string value)
#boot_script_template=$pybasedir/nova/cloudpipe/bootscript.template
# Network to push into openvpn config (string value)
#dmz_net=10.0.0.0
# Netmask to push into openvpn config (string value)
#dmz_mask=255.255.255.0
# Suffix to add to project name for vpn key and secgroups
# (string value)
#vpn_key_suffix=-vpn
#
# Options defined in nova.cmd.novnc
#
# Record sessions to FILE.[session_number] (boolean value)
#record=false
# Become a daemon (background process) (boolean value)
#daemon=false
# Disallow non-encrypted connections (boolean value)
#ssl_only=false
# Source is ipv6 (boolean value)
#source_is_ipv6=false
# SSL certificate file (string value)
#cert=self.pem
# SSL key file (if separate from cert) (string value)
#key=
# Run webserver on same port. Serve files from DIR. (string
# value)
#web=/usr/share/spice-html5
#
# Options defined in nova.cmd.novncproxy
#
# Host on which to listen for incoming requests (string value)
#novncproxy_host=0.0.0.0
# Port on which to listen for incoming requests (integer
# value)
#novncproxy_port=6080
#
# Options defined in nova.compute.api
#
# Allow destination machine to match source for resize. Useful
# when testing in single-host environments. (boolean value)
#allow_resize_to_same_host=false
# Allow migrate machine to the same host. Useful when testing
# in single-host environments. (boolean value)
#allow_migrate_to_same_host=false
# Availability zone to use when user doesn't specify one
# (string value)
#default_schedule_zone=
# These are image properties which a snapshot should not
# inherit from an instance (list value)
#non_inheritable_image_properties=cache_in_nova,bittorrent
# Kernel image that indicates not to use a kernel, but to use
# a raw disk image instead (string value)
#null_kernel=nokernel
# When creating multiple instances with a single request using
# the os-multiple-create API extension, this template will be
# used to build the display name for each instance. The
# benefit is that the instances end up with different
# hostnames. To restore legacy behavior of every instance
# having the same name, set this option to "%(name)s". Valid
# keys for the template are: name, uuid, count. (string value)
#multi_instance_display_name_template=%(name)s-%(count)d
# Maximum number of devices that will result in a local image
# being created on the hypervisor node. Setting this to 0
# means nova will allow only boot from volume. A negative
# number means unlimited. (integer value)
#max_local_block_devices=3
#
# Options defined in nova.compute.flavors
#
# Default flavor to use for the EC2 API only. The Nova API
# does not support a default flavor. (string value)
#default_flavor=m1.small
#
# Options defined in nova.compute.manager
#
# Console proxy host to use to connect to instances on this
# host. (string value)
#console_host=nova
# Name of network to use to set access IPs for instances
# (string value)
#default_access_ip_network_name=
# Whether to batch up the application of IPTables rules during
# a host restart and apply all at the end of the init phase
# (boolean value)
#defer_iptables_apply=false
# Where instances are stored on disk (string value)
#instances_path=$state_path/instances
# Changed because / = 50G and /home =4TB CTH
instances_path=/home/nova/instances
# Generate periodic compute.instance.exists notifications
# (boolean value)
#instance_usage_audit=false
# Number of 1 second retries needed in live_migration (integer
# value)
#live_migration_retry_count=30
# Whether to start guests that were running before the host
# rebooted (boolean value)
#resume_guests_state_on_host_boot=false
# Number of times to retry network allocation on failures
# (integer value)
#network_allocate_retries=0
# Maximum number of instance builds to run concurrently
# (integer value)
#max_concurrent_builds=10
# Number of times to retry block device allocation on failures
# (integer value)
#block_device_allocate_retries=60
# The number of times to attempt to reap an instance's files.
# (integer value)
#maximum_instance_delete_attempts=5
# Interval to pull network bandwidth usage info. Not supported
# on all hypervisors. Set to -1 to disable. Setting this to 0
# will run at the default rate. (integer value)
#bandwidth_poll_interval=600
# Interval to sync power states between the database and the
# hypervisor. Set to -1 to disable. Setting this to 0 will run
# at the default rate. (integer value)
#sync_power_state_interval=600
# Number of seconds between instance network information cache
# updates (integer value)
#heal_instance_info_cache_interval=60
# Interval in seconds for reclaiming deleted instances
# (integer value)
#reclaim_instance_interval=0
# Interval in seconds for gathering volume usages (integer
# value)
#volume_usage_poll_interval=0
# Interval in seconds for polling shelved instances to
# offload. Set to -1 to disable.Setting this to 0 will run at
# the default rate. (integer value)
#shelved_poll_interval=3600
# Time in seconds before a shelved instance is eligible for
# removing from a host. -1 never offload, 0 offload when
# shelved (integer value)
#shelved_offload_time=0
# Interval in seconds for retrying failed instance file
# deletes. Set to -1 to disable. Setting this to 0 will run at
# the default rate. (integer value)
#instance_delete_interval=300
# Waiting time interval (seconds) between block device
# allocation retries on failures (integer value)
#block_device_allocate_retries_interval=3
# Waiting time interval (seconds) between sending the
# scheduler a list of current instance UUIDs to verify that
# its view of instances is in sync with nova. If the CONF
# option `scheduler_tracks_instance_changes` is False,
# changing this option will have no effect. (integer value)
#scheduler_instance_sync_interval=120
# Action to take if a running deleted instance is detected.
# Valid options are 'noop', 'log', 'shutdown', or 'reap'. Set
# to 'noop' to take no action. (string value)
#running_deleted_instance_action=reap
# Number of seconds to wait between runs of the cleanup task.
# (integer value)
#running_deleted_instance_poll_interval=1800
# Number of seconds after being deleted when a running
# instance should be considered eligible for cleanup. (integer
# value)
#running_deleted_instance_timeout=0
# Automatically hard reboot an instance if it has been stuck
# in a rebooting state longer than N seconds. Set to 0 to
# disable. (integer value)
#reboot_timeout=0
# Amount of time in seconds an instance can be in BUILD before
# going into ERROR status. Set to 0 to disable. (integer
# value)
#instance_build_timeout=0
# Automatically unrescue an instance after N seconds. Set to 0
# to disable. (integer value)
#rescue_timeout=0
# Automatically confirm resizes after N seconds. Set to 0 to
# disable. (integer value)
#resize_confirm_window=0
# Total amount of time to wait in seconds for an instance to
# perform a clean shutdown. (integer value)
#shutdown_timeout=60
#
# Options defined in nova.compute.monitors
#
# Monitor classes available to the compute which may be
# specified more than once. (multi valued)
#compute_available_monitors=nova.compute.monitors.all_monitors
# A list of monitors that can be used for getting compute
# metrics. (list value)
#compute_monitors=
#
# Options defined in nova.compute.resource_tracker
#
# Amount of disk in MB to reserve for the host (integer value)
#reserved_host_disk_mb=0
# Amount of memory in MB to reserve for the host (integer
# value)
#reserved_host_memory_mb=512
# Class that will manage stats for the local compute host
# (string value)
#compute_stats_class=nova.compute.stats.Stats
# The names of the extra resources to track. (list value)
#compute_resources=vcpu
#
# Options defined in nova.compute.rpcapi
#
# The topic compute nodes listen on (string value)
#compute_topic=compute
#
# Options defined in nova.conductor.tasks.live_migrate
#
# Number of times to retry live-migration before failing. If
# == -1, try until out of hosts. If == 0, only try once, no
# retries. (integer value)
#migrate_max_retries=-1
#
# Options defined in nova.console.manager
#
# Driver to use for the console proxy (string value)
#console_driver=nova.console.xvp.XVPConsoleProxy
# Stub calls to compute worker for tests (boolean value)
#stub_compute=false
# Publicly visible name for this console host (string value)
#console_public_hostname=nova
#
# Options defined in nova.console.rpcapi
#
# The topic console proxy nodes listen on (string value)
#console_topic=console
#
# Options defined in nova.console.xvp
#
# XVP conf template (string value)
#console_xvp_conf_template=$pybasedir/nova/console/xvp.conf.template
# Generated XVP conf file (string value)
#console_xvp_conf=/etc/xvp.conf
# XVP master process pid file (string value)
#console_xvp_pid=/var/run/xvp.pid
# XVP log file (string value)
#console_xvp_log=/var/log/xvp.log
# Port for XVP to multiplex VNC connections on (integer value)
#console_xvp_multiplex_port=5900
#
# Options defined in nova.consoleauth
#
# The topic console auth proxy nodes listen on (string value)
#consoleauth_topic=consoleauth
#
# Options defined in nova.consoleauth.manager
#
# How many seconds before deleting tokens (integer value)
#console_token_ttl=600
#
# Options defined in nova.db.api
#
# Services to be added to the available pool on create
# (boolean value)
#enable_new_services=true
# Template string to be used to generate instance names
# (string value)
#instance_name_template=instance-%08x
# Template string to be used to generate snapshot names
# (string value)
#snapshot_name_template=snapshot-%s
#
# Options defined in nova.db.base
#
# The driver to use for database access (string value)
#db_driver=nova.db
#
# Options defined in nova.db.sqlalchemy.api
#
# When set, compute API will consider duplicate hostnames
# invalid within the specified scope, regardless of case.
# Should be empty, "project" or "global". (string value)
#osapi_compute_unique_server_name_scope=
#
# Options defined in nova.image.s3
#
# Parent directory for tempdir used for image decryption
# (string value)
#image_decryption_dir=/tmp
# Hostname or IP for OpenStack to use when accessing the S3
# api (string value)
#s3_host=$my_ip
# Port used when accessing the S3 api (integer value)
#s3_port=3333
# Access key to use for S3 server for images (string value)
#s3_access_key=notchecked
# Secret key to use for S3 server for images (string value)
#s3_secret_key=notchecked
# Whether to use SSL when talking to S3 (boolean value)
#s3_use_ssl=false
# Whether to affix the tenant id to the access key when
# downloading from S3 (boolean value)
#s3_affix_tenant=false
#
# Options defined in nova.ipv6.api
#
# Backend to use for IPv6 generation (string value)
#ipv6_backend=rfc2462
#
# Options defined in nova.network
#
# The full class name of the network API class to use (string
# value)
#network_api_class=nova.network.api.API
#
# Options defined in nova.network.driver
#
# Driver to use for network creation (string value)
#network_driver=nova.network.linux_net
#
# Options defined in nova.network.floating_ips
#
# Default pool for floating IPs (string value)
#default_floating_pool=nova
# Autoassigning floating IP to VM (boolean value)
#auto_assign_floating_ip=false
# Full class name for the DNS Manager for floating IPs (string
# value)
#floating_ip_dns_manager=nova.network.noop_dns_driver.NoopDNSDriver
# Full class name for the DNS Manager for instance IPs (string
# value)
#instance_dns_manager=nova.network.noop_dns_driver.NoopDNSDriver
# Full class name for the DNS Zone for instance IPs (string
# value)
#instance_dns_domain=
#
# Options defined in nova.network.ldapdns
#
# URL for LDAP server which will store DNS entries (string
# value)
#ldap_dns_url=ldap://ldap.example.com:389
# User for LDAP DNS (string value)
#ldap_dns_user=uid=admin,ou=people,dc=example,dc=org
# Password for LDAP DNS (string value)
#ldap_dns_password=password
# Hostmaster for LDAP DNS driver Statement of Authority
# (string value)
#ldap_dns_soa_hostmaster=hostmaster@example.org
# DNS Servers for LDAP DNS driver (multi valued)
#ldap_dns_servers=dns.example.org
# Base DN for DNS entries in LDAP (string value)
#ldap_dns_base_dn=ou=hosts,dc=example,dc=org
# Refresh interval (in seconds) for LDAP DNS driver Statement
# of Authority (string value)
#ldap_dns_soa_refresh=1800
# Retry interval (in seconds) for LDAP DNS driver Statement of
# Authority (string value)
#ldap_dns_soa_retry=3600
# Expiry interval (in seconds) for LDAP DNS driver Statement
# of Authority (string value)
#ldap_dns_soa_expiry=86400
# Minimum interval (in seconds) for LDAP DNS driver Statement
# of Authority (string value)
#ldap_dns_soa_minimum=7200
#
# Options defined in nova.network.linux_net
#
# Location of flagfiles for dhcpbridge (multi valued)
#dhcpbridge_flagfile=/etc/nova/nova.conf
# Location to keep network config files (string value)
#networks_path=$state_path/networks
# Interface for public IP addresses (string value)
#public_interface=eth0
# Location of nova-dhcpbridge (string value)
#dhcpbridge=/usr/bin/nova-dhcpbridge
# Public IP of network host (string value)
#routing_source_ip=$my_ip
# Lifetime of a DHCP lease in seconds (integer value)
#dhcp_lease_time=86400
# If set, uses specific DNS server for dnsmasq. Can be
# specified multiple times. (multi valued)
#dns_server=
# If set, uses the dns1 and dns2 from the network ref. as dns
# servers. (boolean value)
#use_network_dns_servers=false
# A list of dmz ranges that should be accepted (list value)
#dmz_cidr=
# Traffic to this range will always be snatted to the fallback
# ip, even if it would normally be bridged out of the node.
# Can be specified multiple times. (multi valued)
#force_snat_range=
# Override the default dnsmasq settings with this file (string
# value)
#dnsmasq_config_file=
# Driver used to create ethernet devices. (string value)
#linuxnet_interface_driver=nova.network.linux_net.LinuxBridgeInterfaceDriver
# Name of Open vSwitch bridge used with linuxnet (string
# value)
#linuxnet_ovs_integration_bridge=br-int
# Send gratuitous ARPs for HA setup (boolean value)
#send_arp_for_ha=false
# Send this many gratuitous ARPs for HA setup (integer value)
#send_arp_for_ha_count=3
# Use single default gateway. Only first nic of vm will get
# default gateway from dhcp server (boolean value)
#use_single_default_gateway=false
# An interface that bridges can forward to. If this is set to
# all then all traffic will be forwarded. Can be specified
# multiple times. (multi valued)
#forward_bridge_interface=all
# The IP address for the metadata API server (string value)
#metadata_host=$my_ip
# The port for the metadata API port (integer value)
#metadata_port=8775
# Regular expression to match the iptables rule that should
# always be on the top. (string value)
#iptables_top_regex=
# Regular expression to match the iptables rule that should
# always be on the bottom. (string value)
#iptables_bottom_regex=
# The table that iptables to jump to when a packet is to be
# dropped. (string value)
#iptables_drop_action=DROP
# Amount of time, in seconds, that ovs_vsctl should wait for a
# response from the database. 0 is to wait forever. (integer
# value)
#ovs_vsctl_timeout=120
# If passed, use fake network devices and addresses (boolean
# value)
#fake_network=false
# Number of times to retry ebtables commands on failure.
# (integer value)
#ebtables_exec_attempts=3
# Number of seconds to wait between ebtables retries.
# (floating point value)
#ebtables_retry_interval=1.0
#
# Options defined in nova.network.manager
#
# Bridge for simple network instances (string value)
#flat_network_bridge=
# DNS server for simple network (string value)
#flat_network_dns=8.8.4.4
# Whether to attempt to inject network setup into guest
# (boolean value)
#flat_injected=false
# FlatDhcp will bridge into this interface if set (string
# value)
#flat_interface=
# First VLAN for private networks (integer value)
#vlan_start=100
# VLANs will bridge into this interface if set (string value)
#vlan_interface=
# Number of networks to support (integer value)
#num_networks=1
# Public IP for the cloudpipe VPN servers (string value)
#vpn_ip=$my_ip
# First Vpn port for private networks (integer value)
#vpn_start=1000
# Number of addresses in each private subnet (integer value)
#network_size=256
# Fixed IPv6 address block (string value)
#fixed_range_v6=fd00::/48
# Default IPv4 gateway (string value)
#gateway=
# Default IPv6 gateway (string value)
#gateway_v6=
# Number of addresses reserved for vpn clients (integer value)
#cnt_vpn_clients=0
# Seconds after which a deallocated IP is disassociated
# (integer value)
#fixed_ip_disassociate_timeout=600
# Number of attempts to create unique mac address (integer
# value)
#create_unique_mac_address_attempts=5
# If True, skip using the queue and make local calls (boolean
# value)
#fake_call=false
# If True, unused gateway devices (VLAN and bridge) are
# deleted in VLAN network mode with multi hosted networks
# (boolean value)
#teardown_unused_network_gateway=false
# If True, send a dhcp release on instance termination
# (boolean value)
#force_dhcp_release=True
# If True, when a DNS entry must be updated, it sends a fanout
# cast to all network hosts to update their DNS entries in
# multi host mode (boolean value)
#update_dns_entries=false
# Number of seconds to wait between runs of updates to DNS
# entries. (integer value)
#dns_update_periodic_interval=-1
# Domain to use for building the hostnames (string value)
#dhcp_domain=novalocal
# Indicates underlying L3 management library (string value)
#l3_lib=nova.network.l3.LinuxNetL3
#
# Options defined in nova.network.rpcapi
#
# The topic network nodes listen on (string value)
#network_topic=network
# Default value for multi_host in networks. Also, if set, some
# rpc network calls will be sent directly to host. (boolean
# value)
#multi_host=false
#
# Options defined in nova.network.security_group.openstack_driver
#
# The full class name of the security API class (string value)
#security_group_api=nova
#
# Options defined in nova.objects.network
#
# DEPRECATED: THIS VALUE SHOULD BE SET WHEN CREATING THE
# NETWORK. If True in multi_host mode, all compute hosts share
# the same dhcp address. The same IP address used for DHCP
# will be added on each nova-network node which is only
# visible to the vms on the same host. (boolean value)
#share_dhcp_address=false
# DEPRECATED: THIS VALUE SHOULD BE SET WHEN CREATING THE
# NETWORK. MTU setting for network interface. (integer value)
#network_device_mtu=
#
# Options defined in nova.objectstore.s3server
#
# Path to S3 buckets (string value)
#buckets_path=$state_path/buckets
# IP address for S3 API to listen (string value)
#s3_listen=0.0.0.0
# Port for S3 API to listen (integer value)
#s3_listen_port=3333
#
# From oslo.log
#
# Print debugging output (set logging level to DEBUG instead of default WARNING
# level). (boolean value)
#debug=false
# Print more verbose output (set logging level to INFO instead of default
# WARNING level). (boolean value)
#verbose=false
# The name of a logging configuration file. This file is appended to any
# existing logging configuration files. For details about logging configuration
# files, see the Python logging module documentation. (string value)
# Deprecated group;name - DEFAULT;log_config
#log_config_append=
# DEPRECATED. A logging.Formatter log message format string which may use any
# of the available logging.LogRecord attributes. This option is deprecated.
# Please use logging_context_format_string and logging_default_format_string
# instead. (string value)
#log_format=
# Format string for %%(asctime)s in log records. Default: %(default)s . (string
# value)
#log_date_format=%Y-%m-%d %H:%M:%S
# (Optional) Name of log file to output to. If no default is set, logging will
# go to stdout. (string value)
# Deprecated group;name - DEFAULT;logfile
#log_file=
# (Optional) The base directory used for relative --log-file paths. (string
# value)
# Deprecated group;name - DEFAULT;logdir
#log_dir=/var/log/nova
# Use syslog for logging. Existing syslog format is DEPRECATED during I, and
# will change in J to honor RFC5424. (boolean value)
#use_syslog=false
# (Optional) Enables or disables syslog rfc5424 format for logging. If enabled,
# prefixes the MSG part of the syslog message with APP-NAME (RFC5424). The
# format without the APP-NAME is deprecated in I, and will be removed in J.
# (boolean value)
#use_syslog_rfc_format=false
# Syslog facility to receive log lines. (string value)
#syslog_log_facility=LOG_USER
# Log output to standard error. (boolean value)
#use_stderr=False
# Format string to use for log messages with context. (string value)
#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
# Format string to use for log messages without context. (string value)
#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
# Data to append to log format when level is DEBUG. (string value)
#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
# Prefix each line of exception output with this format. (string value)
#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
# List of logger=LEVEL pairs. (list value)
#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN
# Enables or disables publication of error events. (boolean value)
#publish_errors=false
# Enables or disables fatal status of deprecations. (boolean value)
#fatal_deprecations=false
# The format for an instance that is passed with the log message. (string
# value)
#instance_format="[instance: %(uuid)s] "
# The format for an instance UUID that is passed with the log message. (string
# value)
#instance_uuid_format="[instance: %(uuid)s] "
#
# Options defined in nova.pci.request
#
# An alias for a PCI passthrough device requirement. This
# allows users to specify the alias in the extra_spec for a
# flavor, without needing to repeat all the PCI property
# requirements. For example: pci_alias = { "name":
# "QuicAssist", "product_id": "0443", "vendor_id": "8086",
# "device_type": "ACCEL" } defines an alias for the Intel
# QuickAssist card. (multi valued) (multi valued)
#pci_alias=
#
# Options defined in nova.pci.whitelist
#
# White list of PCI devices available to VMs. For example:
# pci_passthrough_whitelist = [{"vendor_id": "8086",
# "product_id": "0443"}] (multi valued)
#pci_passthrough_whitelist=
#
# Options defined in nova.scheduler.driver
#
# The scheduler host manager class to use (string value)
#scheduler_host_manager=nova.scheduler.host_manager.HostManager
#
# Options defined in nova.scheduler.filter_scheduler
#
# New instances will be scheduled on a host chosen randomly
# from a subset of the N best hosts. This property defines the
# subset size that a host is chosen from. A value of 1 chooses
# the first host returned by the weighing functions. This
# value must be at least 1. Any value less than 1 will be
# ignored, and 1 will be used instead (integer value)
#scheduler_host_subset_size=1
#
# Options defined in nova.scheduler.filters.aggregate_image_properties_isolation
#
# Force the filter to consider only keys matching the given
# namespace. (string value)
#aggregate_image_properties_isolation_namespace=
# The separator used between the namespace and keys (string
# value)
#aggregate_image_properties_isolation_separator=.
#
# Options defined in nova.scheduler.filters.core_filter
#
# Virtual CPU to physical CPU allocation ratio which affects
# all CPU filters. This configuration specifies a global ratio
# for CoreFilter. For AggregateCoreFilter, it will fall back
# to this configuration value if no per-aggregate setting
# found. (floating point value)
#cpu_allocation_ratio=16.0
#
# Options defined in nova.scheduler.filters.disk_filter
#
# Virtual disk to physical disk allocation ratio (floating
# point value)
#disk_allocation_ratio=1.0
#
# Options defined in nova.scheduler.filters.io_ops_filter
#
# Tells filters to ignore hosts that have this many or more
# instances currently in build, resize, snapshot, migrate,
# rescue or unshelve task states (integer value)
#max_io_ops_per_host=8
#
# Options defined in nova.scheduler.filters.isolated_hosts_filter
#
# Images to run on isolated host (list value)
#isolated_images=
# Host reserved for specific images (list value)
#isolated_hosts=
# Whether to force isolated hosts to run only isolated images
# (boolean value)
#restrict_isolated_hosts_to_isolated_images=true
#
# Options defined in nova.scheduler.filters.num_instances_filter
#
# Ignore hosts that have too many instances (integer value)
#max_instances_per_host=50
#
# Options defined in nova.scheduler.filters.ram_filter
#
# Virtual ram to physical ram allocation ratio which affects
# all ram filters. This configuration specifies a global ratio
# for RamFilter. For AggregateRamFilter, it will fall back to
# this configuration value if no per-aggregate setting found.
# (floating point value)
#ram_allocation_ratio=1.5
# The value #ram_allocation_ratio=1.5 was commented out by default.
# I get a No Hosts Avail if I try to create a second instance. StackOverflow
# suggests upping this value to 3 and then
# service openstack-nova-scheduler restart
# service openstack-nova-conductor restart
ram_allocation_ratio=3
#
# Options defined in nova.scheduler.host_manager
#
# Filter classes available to the scheduler which may be
# specified more than once. An entry of
# "nova.scheduler.filters.all_filters" maps to all filters
# included with nova. (multi valued)
#scheduler_available_filters=nova.scheduler.filters.all_filters
# Which filter class names to use for filtering hosts when not
# specified in the request. (list value)
#scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
# Which weight class names to use for weighing hosts (list
# value)
#scheduler_weight_classes=nova.scheduler.weights.all_weighers
# Determines if the Scheduler tracks changes to instances to
# help with its filtering decisions. (boolean value)
#scheduler_tracks_instance_changes=true
#
# Options defined in nova.scheduler.ironic_host_manager
#
# Which filter class names to use for filtering baremetal
# hosts when not specified in the request. (list value)
#baremetal_scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ExactRamFilter,ExactDiskFilter,ExactCoreFilter
# Flag to decide whether to use
# baremetal_scheduler_default_filters or not. (boolean value)
#scheduler_use_baremetal_filters=false
#
# Options defined in nova.scheduler.manager
#
# Default driver to use for the scheduler (string value)
#scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
# How often (in seconds) to run periodic tasks in the
# scheduler driver of your choice. Please note this is likely
# to interact with the value of service_down_time, but exactly
# how they interact will depend on your choice of scheduler
# driver. (integer value)
#scheduler_driver_task_period=60
#
# Options defined in nova.scheduler.rpcapi
#
# The topic scheduler nodes listen on (string value)
#scheduler_topic=scheduler
#
# Options defined in nova.scheduler.scheduler_options
#
# Absolute path to scheduler configuration JSON file. (string
# value)
#scheduler_json_config_location=
#
# Options defined in nova.scheduler.utils
#
# Maximum number of attempts to schedule an instance (integer
# value)
#scheduler_max_attempts=3
#
# Options defined in nova.scheduler.weights.io_ops
#
# Multiplier used for weighing host io ops. Negative numbers
# mean a preference to choose light workload compute hosts.
# (floating point value)
#io_ops_weight_multiplier=-1.0
#
# Options defined in nova.scheduler.weights.ram
#
# Multiplier used for weighing ram. Negative numbers mean to
# stack vs spread. (floating point value)
#ram_weight_multiplier=1.0
#
# Options defined in nova.servicegroup.api
#
# The driver for servicegroup service (valid options are: db,
# zk, mc) (string value)
#servicegroup_driver=db
#
# Options defined in nova.virt.configdrive
#
# Config drive format. One of iso9660 (default) or vfat
# (string value)
#config_drive_format=iso9660
# Set to "always" to force injection to take place on a config
# drive. NOTE: The "always" will be deprecated in the Liberty
# release cycle. (string value)
#force_config_drive=
# Name and optionally path of the tool used for ISO image
# creation (string value)
#mkisofs_cmd=genisoimage
#
# Options defined in nova.virt.disk.api
#
# Name of the mkfs commands for ephemeral device. The format
# is = (multi valued)
#virt_mkfs=
# Attempt to resize the filesystem by accessing the image over
# a block device. This is done by the host and may not be
# necessary if the image contains a recent version of cloud-
# init. Possible mechanisms require the nbd driver (for qcow
# and raw), or loop (for raw). (boolean value)
#resize_fs_using_block_device=false
#
# Options defined in nova.virt.disk.mount.nbd
#
# Amount of time, in seconds, to wait for NBD device start up.
# (integer value)
#timeout_nbd=10
#
# Options defined in nova.virt.driver
#
# Driver to use for controlling virtualization. Options
# include: libvirt.LibvirtDriver, xenapi.XenAPIDriver,
# fake.FakeDriver, baremetal.BareMetalDriver,
# vmwareapi.VMwareVCDriver, hyperv.HyperVDriver (string value)
#compute_driver=libvirt.LibvirtDriver
# The default format an ephemeral_volume will be formatted
# with on creation. (string value)
#default_ephemeral_format=
# VM image preallocation mode: "none" => no storage
# provisioning is done up front, "space" => storage is fully
# allocated at instance start (string value)
#preallocate_images=none
# Whether to use cow images (boolean value)
#use_cow_images=true
# Fail instance boot if vif plugging fails (boolean value)
#vif_plugging_is_fatal=true
# Number of seconds to wait for neutron vif plugging events to
# arrive before continuing or failing (see
# vif_plugging_is_fatal). If this is set to zero and
# vif_plugging_is_fatal is False, events should not be
# expected to arrive at all. (integer value)
#vif_plugging_timeout=300
#
# Options defined in nova.virt.firewall
#
# Firewall driver (defaults to hypervisor specific iptables
# driver) (string value)
#firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
# Whether to allow network traffic from same network (boolean
# value)
#allow_same_net_traffic=true
#
# Options defined in nova.virt.hardware
#
# Defines which pcpus that instance vcpus can use. For
# example, "4-12,^8,15" (string value)
#vcpu_pin_set=
#
# Options defined in nova.virt.imagecache
#
# Number of seconds to wait between runs of the image cache
# manager. Set to -1 to disable. Setting this to 0 will run at
# the default rate. (integer value)
#image_cache_manager_interval=2400
# Where cached images are stored under $instances_path. This
# is NOT the full path - just a folder name. For per-compute-
# host cached images, set to _base_$my_ip (string value)
#image_cache_subdirectory_name=_base
# Should unused base images be removed? (boolean value)
#remove_unused_base_images=true
# Unused unresized base images younger than this will not be
# removed (integer value)
#remove_unused_original_minimum_age_seconds=86400
#
# Options defined in nova.virt.images
#
# Force backing images to raw format (boolean value)
#force_raw_images=true
#
# Options defined in nova.virt.netutils
#
# Template file for injected network (string value)
#injected_network_template=/usr/share/nova/interfaces.template
#
# Options defined in nova.vnc
#
# Location of VNC console proxy, in the form
# "http://127.0.0.1:6080/vnc_auto.html" (string value)
#novncproxy_base_url=http://127.0.0.1:6080/vnc_auto.html
# Location of nova xvp VNC console proxy, in the form
# "http://127.0.0.1:6081/console" (string value)
#xvpvncproxy_base_url=http://127.0.0.1:6081/console
# IP address on which instance vncservers should listen
# (string value)
#vncserver_listen=127.0.0.1
# The address to which proxy clients (like nova-xvpvncproxy)
# should connect (string value)
#vncserver_proxyclient_address=127.0.0.1
# Enable VNC related features (boolean value)
#vnc_enabled=true
# Keymap for VNC (string value)
#vnc_keymap=en-us
#
# Options defined in nova.vnc.xvp_proxy
#
# Port that the XCP VNC proxy should bind to (integer value)
#xvpvncproxy_port=6081
# Address that the XCP VNC proxy should bind to (string value)
#xvpvncproxy_host=0.0.0.0
#
# Options defined in nova.volume
#
# The full class name of the volume API class to use (string
# value)
#volume_api_class=nova.volume.cinder.API
#
# Options defined in nova.openstack.common.eventlet_backdoor
#
# Enable eventlet backdoor. Acceptable values are 0, ,
# and :, where 0 results in listening on a random
# tcp port number; results in listening on the
# specified port number (and not enabling backdoor if that
# port is in use); and : results in listening on
# the smallest unused port number within the specified range
# of port numbers. The chosen port is displayed in the
# service's log file. (string value)
#backdoor_port=
#
# Options defined in nova.openstack.common.memorycache
#
# Memcached servers or None for in process cache. (list value)
#memcached_servers=
#
# Options defined in nova.openstack.common.periodic_task
#
# Some periodic tasks can be run in a separate process. Should
# we run them here? (boolean value)
#run_external_periodic_tasks=true
#
# Options defined in nova.openstack.common.policy
#
# The JSON file that defines policies. (string value)
#policy_file=policy.json
# Default rule. Enforced when a requested rule is not found.
# (string value)
#policy_default_rule=default
# Directories where policy configuration files are stored.
# They can be relative to any directory in the search path
# defined by the config_dir option, or absolute paths. The
# file defined by policy_file must exist for these directories
# to be searched. Missing or empty directories are ignored.
# (multi valued)
#policy_dirs=policy.d
#
# Options defined in nova.openstack.common.versionutils
#
# Enables or disables fatal status of deprecations. (boolean
# value)
#fatal_deprecations=false
[api_database]
#
# Options defined in nova.db.sqlalchemy.api
#
# The SQLAlchemy connection string to use to connect to the
# Nova API database. (string value)
#connection=mysql://nova:nova@localhost/nova
# If True, SQLite uses synchronous mode. (boolean value)
#sqlite_synchronous=true
# Timeout before idle SQL connections are reaped. (integer
# value)
#idle_timeout=3600
# Maximum number of SQL connections to keep open in a pool.
# (integer value)
#max_pool_size=
# Maximum number of database connection retries during
# startup. Set to -1 to specify an infinite retry count.
# (integer value)
#max_retries=-1
# Interval between retries of opening a SQL connection.
# (integer value)
#retry_interval=10
# If set, use this value for max_overflow with SQLAlchemy.
# (integer value)
#max_overflow=
# Verbosity of SQL debugging information: 0=None,
# 100=Everything. (integer value)
#connection_debug=0
# Add Python stack traces to SQL as comment strings. (boolean
# value)
#connection_trace=false
# If set, use this value for pool_timeout with SQLAlchemy.
# (integer value)
#pool_timeout=
[barbican]
#
# Options defined in nova.keymgr.barbican
#
# Info to match when looking for barbican in the service
# catalog. Format is: separated values of the form:
# :: (string value)
#catalog_info=key-manager:barbican:public
# Override service catalog lookup with template for barbican
# endpoint e.g. http://localhost:9311/v1/%(project_id)s
# (string value)
#endpoint_template=
# Region name of this node (string value)
#os_region_name=
#
# Options defined in nova.volume.cinder
#
# Region name of this node (string value)
#os_region_name=
[cells]
#
# Options defined in nova.cells.manager
#
# Cells communication driver to use (string value)
#driver=nova.cells.rpc_driver.CellsRPCDriver
# Number of seconds after an instance was updated or deleted
# to continue to update cells (integer value)
#instance_updated_at_threshold=3600
# Number of instances to update per periodic task run (integer
# value)
#instance_update_num_instances=1
#
# Options defined in nova.cells.messaging
#
# Maximum number of hops for cells routing. (integer value)
#max_hop_count=10
# Cells scheduler to use (string value)
#scheduler=nova.cells.scheduler.CellsScheduler
#
# Options defined in nova.cells.opts
#
# Enable cell functionality (boolean value)
#enable=false
# The topic cells nodes listen on (string value)
#topic=cells
# Manager for cells (string value)
#manager=nova.cells.manager.CellsManager
# Name of this cell (string value)
#name=nova
# Key/Multi-value list with the capabilities of the cell (list
# value)
#capabilities=hypervisor=xenserver;kvm,os=linux;windows
# Seconds to wait for response from a call to a cell. (integer
# value)
#call_timeout=60
# Percentage of cell capacity to hold in reserve. Affects both
# memory and disk utilization (floating point value)
#reserve_percent=10.0
# Type of cell: api or compute (string value)
#cell_type=compute
# Number of seconds after which a lack of capability and
# capacity updates signals the child cell is to be treated as
# a mute. (integer value)
#mute_child_interval=300
# Seconds between bandwidth updates for cells. (integer value)
#bandwidth_update_interval=600
#
# Options defined in nova.cells.rpc_driver
#
# Base queue name to use when communicating between cells.
# Various topics by message type will be appended to this.
# (string value)
#rpc_driver_queue_base=cells.intercell
#
# Options defined in nova.cells.scheduler
#
# Filter classes the cells scheduler should use. An entry of
# "nova.cells.filters.all_filters" maps to all cells filters
# included with nova. (list value)
#scheduler_filter_classes=nova.cells.filters.all_filters
# Weigher classes the cells scheduler should use. An entry of
# "nova.cells.weights.all_weighers" maps to all cell weighers
# included with nova. (list value)
#scheduler_weight_classes=nova.cells.weights.all_weighers
# How many retries when no cells are available. (integer
# value)
#scheduler_retries=10
# How often to retry in seconds when no cells are available.
# (integer value)
#scheduler_retry_delay=2
#
# Options defined in nova.cells.state
#
# Interval, in seconds, for getting fresh cell information
# from the database. (integer value)
#db_check_interval=60
# Configuration file from which to read cells configuration.
# If given, overrides reading cells from the database. (string
# value)
#cells_config=
#
# Options defined in nova.cells.weights.mute_child
#
# Multiplier used to weigh mute children. (The value should be
# negative.) (floating point value)
#mute_weight_multiplier=-10.0
# Weight value assigned to mute children. (The value should be
# positive.) (floating point value)
#mute_weight_value=1000.0
#
# Options defined in nova.cells.weights.ram_by_instance_type
#
# Multiplier used for weighing ram. Negative numbers mean to
# stack vs spread. (floating point value)
#ram_weight_multiplier=10.0
#
# Options defined in nova.cells.weights.weight_offset
#
# Multiplier used to weigh offset weigher. (floating point
# value)
#offset_weight_multiplier=1.0
[cinder]
#
# Options defined in nova.volume.cinder
#
# Info to match when looking for cinder in the service
# catalog. Format is: separated values of the form:
# :: (string value)
#catalog_info=volumev2:cinderv2:publicURL
# Override service catalog lookup with template for cinder
# endpoint e.g. http://localhost:8776/v1/%(project_id)s
# (string value)
#endpoint_template=
# Number of cinderclient retries on failed http calls (integer
# value)
#http_retries=3
# Allow attach between instance and volume in different
# availability zones. (boolean value)
#cross_az_attach=true
[conductor]
#
# Options defined in nova.conductor.api
#
# Perform nova-conductor operations locally (boolean value)
#use_local=false
# The topic on which conductor nodes listen (string value)
#topic=conductor
# Full class name for the Manager for conductor (string value)
#manager=nova.conductor.manager.ConductorManager
# Number of workers for OpenStack Conductor service. The
# default will be the number of CPUs available. (integer
# value)
#workers=
[database]
connection = mysql://nova:openg00dle@controller/nova
#
# From oslo.db
#
# The file name to use with SQLite. (string value)
# Deprecated group;name - DEFAULT;sqlite_db
#sqlite_db=oslo.sqlite
# If True, SQLite uses synchronous mode. (boolean value)
# Deprecated group;name - DEFAULT;sqlite_synchronous
#sqlite_synchronous=true
# The back end to use for the database. (string value)
# Deprecated group;name - DEFAULT;db_backend
#backend=sqlalchemy
# The SQLAlchemy connection string to use to connect to the database. (string
# value)
# Deprecated group;name - DEFAULT;sql_connection
# Deprecated group;name - [DATABASE]/sql_connection
# Deprecated group;name - [sql]/connection
#connection=
# The SQLAlchemy connection string to use to connect to the slave database.
# (string value)
#slave_connection=
# The SQL mode to be used for MySQL sessions. This option, including the
# default, overrides any server-set SQL mode. To use whatever SQL mode is set
# by the server configuration, set this to no value. Example: mysql_sql_mode=
# (string value)
#mysql_sql_mode=TRADITIONAL
# Timeout before idle SQL connections are reaped. (integer value)
# Deprecated group;name - DEFAULT;sql_idle_timeout
# Deprecated group;name - [DATABASE]/sql_idle_timeout
# Deprecated group;name - [sql]/idle_timeout
#idle_timeout=3600
# Minimum number of SQL connections to keep open in a pool. (integer value)
# Deprecated group;name - DEFAULT;sql_min_pool_size
# Deprecated group;name - [DATABASE]/sql_min_pool_size
#min_pool_size=1
# Maximum number of SQL connections to keep open in a pool. (integer value)
# Deprecated group;name - DEFAULT;sql_max_pool_size
# Deprecated group;name - [DATABASE]/sql_max_pool_size
#max_pool_size=
# Maximum number of database connection retries during startup. Set to -1 to
# specify an infinite retry count. (integer value)
# Deprecated group;name - DEFAULT;sql_max_retries
# Deprecated group;name - [DATABASE]/sql_max_retries
#max_retries=10
# Interval between retries of opening a SQL connection. (integer value)
# Deprecated group;name - DEFAULT;sql_retry_interval
# Deprecated group;name - [DATABASE]/reconnect_interval
#retry_interval=10
# If set, use this value for max_overflow with SQLAlchemy. (integer value)
# Deprecated group;name - DEFAULT;sql_max_overflow
# Deprecated group;name - [DATABASE]/sqlalchemy_max_overflow
#max_overflow=
# Verbosity of SQL debugging information: 0=None, 100=Everything. (integer
# value)
# Deprecated group;name - DEFAULT;sql_connection_debug
#connection_debug=0
# Add Python stack traces to SQL as comment strings. (boolean value)
# Deprecated group;name - DEFAULT;sql_connection_trace
#connection_trace=false
# If set, use this value for pool_timeout with SQLAlchemy. (integer value)
# Deprecated group;name - [DATABASE]/sqlalchemy_pool_timeout
#pool_timeout=
# Enable the experimental use of database reconnect on connection lost.
# (boolean value)
#use_db_reconnect=false
# Seconds between retries of a database transaction. (integer value)
#db_retry_interval=1
# If True, increases the interval between retries of a database operation up to
# db_max_retry_interval. (boolean value)
#db_inc_retry_interval=true
# If db_inc_retry_interval is set, the maximum seconds between retries of a
# database operation. (integer value)
#db_max_retry_interval=10
# Maximum retries in case of connection error or deadlock error before error is
# raised. Set to -1 to specify an infinite retry count. (integer value)
#db_max_retries=20
#
# Options defined in nova.db.sqlalchemy.api
#
# The SQLAlchemy connection string to use to connect to the
# slave database. (string value)
#slave_connection=
# The SQL mode to be used for MySQL sessions. This option,
# including the default, overrides any server-set SQL mode. To
# use whatever SQL mode is set by the server configuration,
# set this to no value. Example: mysql_sql_mode= (string
# value)
#mysql_sql_mode=TRADITIONAL
[ephemeral_storage_encryption]
#
# Options defined in nova.compute.api
#
# Whether to encrypt ephemeral storage (boolean value)
#enabled=false
# The cipher and mode to be used to encrypt ephemeral storage.
# Which ciphers are available ciphers depends on kernel
# support. See /proc/crypto for the list of available options.
# (string value)
#cipher=aes-xts-plain64
# The bit length of the encryption key to be used to encrypt
# ephemeral storage (in XTS mode only half of the bits are
# used for encryption key) (integer value)
#key_size=512
[glance]
host = controller
#
# Options defined in nova.image.glance
#
# Default glance hostname or IP address (string value)
#host=$my_ip
# Default glance port (integer value)
#port=9292
# Default protocol to use when connecting to glance. Set to
# https for SSL. (string value)
#protocol=http
# A list of the glance api servers available to nova. Prefix
# with https:// for ssl-based glance api servers.
# ([hostname|ip]:port) (list value)
#api_servers=
# Allow to perform insecure SSL (https) requests to glance
# (boolean value)
#api_insecure=false
# Number of retries when uploading / downloading an image to /
# from glance. (integer value)
#num_retries=0
# A list of url scheme that can be downloaded directly via the
# direct_url. Currently supported schemes: [file]. (list
# value)
#allowed_direct_url_schemes=
[guestfs]
#
# Options defined in nova.virt.disk.vfs.guestfs
#
# Enable guestfs debug (boolean value)
#debug=false
[hyperv]
#
# Options defined in nova.virt.hyperv.pathutils
#
# The name of a Windows share name mapped to the
# "instances_path" dir and used by the resize feature to copy
# files to the target host. If left blank, an administrative
# share will be used, looking for the same "instances_path"
# used locally (string value)
#instances_path_share=
#
# Options defined in nova.virt.hyperv.utilsfactory
#
# Force V1 WMI utility classes (boolean value)
#force_hyperv_utils_v1=false
# Force V1 volume utility class (boolean value)
#force_volumeutils_v1=false
#
# Options defined in nova.virt.hyperv.vif
#
# External virtual switch Name, if not provided, the first
# external virtual switch is used (string value)
#vswitch_name=
#
# Options defined in nova.virt.hyperv.vmops
#
# Required for live migration among hosts with different CPU
# features (boolean value)
#limit_cpu_features=false
# Sets the admin password in the config drive image (boolean
# value)
#config_drive_inject_password=false
# Path of qemu-img command which is used to convert between
# different image types (string value)
#qemu_img_cmd=qemu-img.exe
# Attaches the Config Drive image as a cdrom drive instead of
# a disk drive (boolean value)
#config_drive_cdrom=false
# Enables metrics collections for an instance by using
# Hyper-V's metric APIs. Collected data can by retrieved by
# other apps and services, e.g.: Ceilometer. Requires Hyper-V
# / Windows Server 2012 and above (boolean value)
#enable_instance_metrics_collection=false
# Enables dynamic memory allocation (ballooning) when set to a
# value greater than 1. The value expresses the ratio between
# the total RAM assigned to an instance and its startup RAM
# amount. For example a ratio of 2.0 for an instance with
# 1024MB of RAM implies 512MB of RAM allocated at startup
# (floating point value)
#dynamic_memory_ratio=1.0
# Number of seconds to wait for instance to shut down after
# soft reboot request is made. We fall back to hard reboot if
# instance does not shutdown within this window. (integer
# value)
#wait_soft_reboot_seconds=60
#
# Options defined in nova.virt.hyperv.volumeops
#
# The number of times to retry to attach a volume (integer
# value)
#volume_attach_retry_count=10
# Interval between volume attachment attempts, in seconds
# (integer value)
#volume_attach_retry_interval=5
# The number of times to retry checking for a disk mounted via
# iSCSI. (integer value)
#mounted_disk_query_retry_count=10
# Interval between checks for a mounted iSCSI disk, in
# seconds. (integer value)
#mounted_disk_query_retry_interval=5
[image_file_url]
#
# Options defined in nova.image.download.file
#
# List of file systems that are configured in this file in the
# image_file_url: sections (list value)
#filesystems=
[ironic]
#
# Options defined in nova.virt.ironic.driver
#
# Version of Ironic API service endpoint. (integer value)
#api_version=1
# URL for Ironic API endpoint. (string value)
#api_endpoint=
# Ironic keystone admin name (string value)
#admin_username=
# Ironic keystone admin password. (string value)
#admin_password=%SERVICE_PASSWORD%
# Ironic keystone auth token. (string value)
#admin_auth_token=
# Keystone public API endpoint. (string value)
#admin_url=
# Log level override for ironicclient. Set this in order to
# override the global "default_log_levels", "verbose", and
# "debug" settings. DEPRECATED: use standard logging
# configuration. (string value)
#client_log_level=
# Ironic keystone tenant name. (string value)
#admin_tenant_name=%SERVICE_TENANT_NAME%
# How many retries when a request does conflict. (integer
# value)
#api_max_retries=60
# How often to retry in seconds when a request does conflict
# (integer value)
#api_retry_interval=2
[keymgr]
#
# Options defined in nova.keymgr
#
# The full class name of the key manager API class (string
# value)
#api_class=nova.keymgr.conf_key_mgr.ConfKeyManager
#
# Options defined in nova.keymgr.conf_key_mgr
#
# Fixed key returned by key manager, specified in hex (string
# value)
#fixed_key=
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = nova
password = sleestack
#
# From keystonemiddleware.auth_token
#
# Complete public Identity API endpoint. (string value)
#auth_uri=
# API version of the admin Identity API endpoint. (string value)
#auth_version=v2.0
# Do not handle authorization requests within the middleware, but delegate the
# authorization decision to downstream WSGI components. (boolean value)
#delay_auth_decision=false
# Request timeout value for communicating with Identity API server. (integer
# value)
#http_connect_timeout=
# How many times are we trying to reconnect when communicating with Identity
# API Server. (integer value)
#http_request_max_retries=3
# Env key for the swift cache. (string value)
#cache=
# Required if identity server requires client certificate (string value)
#certfile=
# Required if identity server requires client certificate (string value)
#keyfile=
# A PEM encoded Certificate Authority to use when verifying HTTPs connections.
# Defaults to system CAs. (string value)
#cafile=
# Verify HTTPS connections. (boolean value)
#insecure=false
# Directory used to cache files related to PKI tokens. (string value)
#signing_dir=
# Optionally specify a list of memcached server(s) to use for caching. If left
# undefined, tokens will instead be cached in-process. (list value)
# Deprecated group;name - DEFAULT;memcache_servers
#memcached_servers=
# In order to prevent excessive effort spent validating tokens, the middleware
# caches previously-seen tokens for a configurable duration (in seconds). Set
# to -1 to disable caching completely. (integer value)
#token_cache_time=300
# Determines the frequency at which the list of revoked tokens is retrieved
# from the Identity service (in seconds). A high number of revocation events
# combined with a low cache duration may significantly reduce performance.
# (integer value)
#revocation_cache_time=10
# (Optional) If defined, indicate whether token data should be authenticated or
# authenticated and encrypted. Acceptable values are MAC or ENCRYPT. If MAC,
# token data is authenticated (with HMAC) in the cache. If ENCRYPT, token data
# is encrypted and authenticated in the cache. If the value is not one of these
# options or empty, auth_token will raise an exception on initialization.
# (string value)
#memcache_security_strategy=
# (Optional, mandatory if memcache_security_strategy is defined) This string is
# used for key derivation. (string value)
#memcache_secret_key=
# (Optional) Number of seconds memcached server is considered dead before it is
# tried again. (integer value)
#memcache_pool_dead_retry=300
# (Optional) Maximum total number of open connections to every memcached
# server. (integer value)
#memcache_pool_maxsize=10
# (Optional) Socket timeout in seconds for communicating with a memcache
# server. (integer value)
#memcache_pool_socket_timeout=3
# (Optional) Number of seconds a connection to memcached is held unused in the
# pool before it is closed. (integer value)
#memcache_pool_unused_timeout=60
# (Optional) Number of seconds that an operation will wait to get a memcache
# client connection from the pool. (integer value)
#memcache_pool_conn_get_timeout=10
# (Optional) Use the advanced (eventlet safe) memcache client pool. The
# advanced pool will only work under python 2.x. (boolean value)
#memcache_use_advanced_pool=false
# (Optional) Indicate whether to set the X-Service-Catalog header. If False,
# middleware will not ask for service catalog on token validation and will not
# set the X-Service-Catalog header. (boolean value)
#include_service_catalog=true
# Used to control the use and type of token binding. Can be set to: "disabled"
# to not check token binding. "permissive" (default) to validate binding
# information if the bind type is of a form known to the server and ignore it
# if not. "strict" like "permissive" but if the bind type is unknown the token
# will be rejected. "required" any form of token binding is needed to be
# allowed. Finally the name of a binding method that must be present in tokens.
# (string value)
#enforce_token_bind=permissive
# If true, the revocation list will be checked for cached tokens. This requires
# that PKI tokens are configured on the identity server. (boolean value)
#check_revocations_for_cached=false
# Hash algorithms to use for hashing PKI tokens. This may be a single algorithm
# or multiple. The algorithms are those supported by Python standard
# hashlib.new(). The hashes will be tried in the order given, so put the
# preferred one first for performance. The result of the first hash will be
# stored in the cache. This will typically be set to multiple values only while
# migrating from a less secure algorithm to a more secure one. Once all the old
# tokens are expired this option should be set to a single value for better
# performance. (list value)
#hash_algorithms=md5
# Prefix to prepend at the beginning of the path. Deprecated, use identity_uri.
# (string value)
#auth_admin_prefix =
# Host providing the admin Identity API endpoint. Deprecated, use identity_uri.
# (string value)
#auth_host=127.0.0.1
# Port of the admin Identity API endpoint. Deprecated, use identity_uri.
# (integer value)
#auth_port=35357
# Protocol of the admin Identity API endpoint (http or https). Deprecated, use
# identity_uri. (string value)
#auth_protocol=http
# Complete admin Identity API endpoint. This should specify the unversioned
# root endpoint e.g. https://localhost:35357/ (string value)
#identity_uri=
# This option is deprecated and may be removed in a future release. Single
# shared secret with the Keystone configuration used for bootstrapping a
# Keystone installation, or otherwise bypassing the normal authentication
# process. This option should not be used, use `admin_user` and
# `admin_password` instead. (string value)
#admin_token=
# Service username. (string value)
#admin_user=%SERVICE_USER%
# Service user password. (string value)
#admin_password=
# Service tenant name. (string value)
#admin_tenant_name=admin
[libvirt]
#
# Options defined in nova.virt.libvirt.driver
#
# Rescue ami image. This will not be used if an image id is
# provided by the user. (string value)
#rescue_image_id=
# Rescue aki image (string value)
#rescue_kernel_id=
# Rescue ari image (string value)
#rescue_ramdisk_id=
# Libvirt domain type (valid options are: kvm, lxc, qemu, uml,
# xen and parallels) (string value)
#virt_type=kvm
# Override the default libvirt URI (which is dependent on
# virt_type) (string value)
#connection_uri=
# Inject the admin password at boot time, without an agent.
# (boolean value)
#inject_password=false
# Inject the ssh public key at boot time (boolean value)
#inject_key=false
# The partition to inject to : -2 => disable, -1 => inspect
# (libguestfs only), 0 => not partitioned, >0 => partition
# number (integer value)
#inject_partition=-2
# Sync virtual and real mouse cursors in Windows VMs (boolean
# value)
#use_usb_tablet=true
# Migration target URI (any included "%s" is replaced with the
# migration target hostname) (string value)
#live_migration_uri=qemu+tcp://%s/system
# Migration flags to be set for live migration (string value)
#live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE, VIR_MIGRATE_TUNNELLED
# Migration flags to be set for block migration (string value)
#block_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE, VIR_MIGRATE_TUNNELLED, VIR_MIGRATE_NON_SHARED_INC
# Maximum bandwidth to be used during migration, in Mbps
# (integer value)
#live_migration_bandwidth=0
# Snapshot image format (valid options are : raw, qcow2, vmdk,
# vdi). Defaults to same as source image (string value)
#snapshot_image_format=
# Override the default disk prefix for the devices attached to
# a server, which is dependent on virt_type. (valid options
# are: sd, xvd, uvd, vd) (string value)
#disk_prefix=
# Number of seconds to wait for instance to shut down after
# soft reboot request is made. We fall back to hard reboot if
# instance does not shutdown within this window. (integer
# value)
#wait_soft_reboot_seconds=120
# Set to "host-model" to clone the host CPU feature flags; to
# "host-passthrough" to use the host CPU model exactly; to
# "custom" to use a named CPU model; to "none" to not set any
# CPU model. If virt_type="kvm|qemu", it will default to
# "host-model", otherwise it will default to "none" (string
# value)
#cpu_mode=
# Set to a named libvirt CPU model (see names listed in
# /usr/share/libvirt/cpu_map.xml). Only has effect if
# cpu_mode="custom" and virt_type="kvm|qemu" (string value)
#cpu_model=
# Location where libvirt driver will store snapshots before
# uploading them to image service (string value)
#snapshots_directory=$instances_path/snapshots
# Location where the Xen hvmloader is kept (string value)
#xen_hvmloader_path=/usr/lib/xen/boot/hvmloader
# Specific cachemodes to use for different disk types e.g:
# file=directsync,block=none (list value)
#disk_cachemodes=
# A path to a device that will be used as source of entropy on
# the host. Permitted options are: /dev/random or /dev/hwrng
# (string value)
#rng_dev_path=
# For qemu or KVM guests, set this option to specify a default
# machine type per host architecture. You can find a list of
# supported machine types in your environment by checking the
# output of the "virsh capabilities"command. The format of the
# value for this config option is host-arch=machine-type. For
# example: x86_64=machinetype1,armv7l=machinetype2 (list
# value)
#hw_machine_type=
# The data source used to the populate the host "serial" UUID
# exposed to guest in the virtual BIOS. Permitted options are
# "hardware", "os", "none" or "auto" (default). (string value)
#sysinfo_serial=auto
# A number of seconds to memory usage statistics period. Zero
# or negative value mean to disable memory usage statistics.
# (integer value)
#mem_stats_period_seconds=10
# List of uid targets and ranges.Syntax is guest-uid:host-
# uid:countMaximum of 5 allowed. (list value)
#uid_maps=
# List of guid targets and ranges.Syntax is guest-gid:host-
# gid:countMaximum of 5 allowed. (list value)
#gid_maps=
#
# Options defined in nova.virt.libvirt.imagebackend
#
# VM Images format. Acceptable values are: raw, qcow2, lvm,
# rbd, default. If default is specified, then use_cow_images
# flag is used instead of this one. (string value)
#images_type=default
# LVM Volume Group that is used for VM images, when you
# specify images_type=lvm. (string value)
#images_volume_group=
# Create sparse logical volumes (with virtualsize) if this
# flag is set to True. (boolean value)
#sparse_logical_volumes=false
# The RADOS pool in which rbd volumes are stored (string
# value)
#images_rbd_pool=rbd
# Path to the ceph configuration file to use (string value)
#images_rbd_ceph_conf=
# Discard option for nova managed disks (valid options are:
# ignore, unmap). Need Libvirt(1.0.6) Qemu1.5 (raw format)
# Qemu1.6(qcow2 format) (string value)
#hw_disk_discard=
#
# Options defined in nova.virt.libvirt.imagecache
#
# Allows image information files to be stored in non-standard
# locations (string value)
#image_info_filename_pattern=$instances_path/$image_cache_subdirectory_name/%(image)s.info
# Should unused kernel images be removed? This is only safe to
# enable if all compute nodes have been updated to support
# this option. This will be enabled by default in future.
# (boolean value)
#remove_unused_kernels=false
# Unused resized base images younger than this will not be
# removed (integer value)
#remove_unused_resized_minimum_age_seconds=3600
# Write a checksum for files in _base to disk (boolean value)
#checksum_base_images=false
# How frequently to checksum base images (integer value)
#checksum_interval_seconds=3600
#
# Options defined in nova.virt.libvirt.lvm
#
# Method used to wipe old volumes (valid options are: none,
# zero, shred) (string value)
#volume_clear=zero
# Size in MiB to wipe at start of old volumes. 0 => all
# (integer value)
#volume_clear_size=0
#
# Options defined in nova.virt.libvirt.utils
#
# Compress snapshot images when possible. This currently
# applies exclusively to qcow2 images (boolean value)
#snapshot_compression=false
#
# Options defined in nova.virt.libvirt.vif
#
# Use virtio for bridge interfaces with KVM/QEMU (boolean
# value)
#use_virtio_for_bridges=true
#
# Options defined in nova.virt.libvirt.volume
#
# Number of times to rescan iSCSI target to find volume
# (integer value)
#num_iscsi_scan_tries=5
# Number of times to rescan iSER target to find volume
# (integer value)
#num_iser_scan_tries=5
# The RADOS client name for accessing rbd volumes (string
# value)
#rbd_user=
# The libvirt UUID of the secret for the rbd_uservolumes
# (string value)
#rbd_secret_uuid=
# Directory where the NFS volume is mounted on the compute
# node (string value)
#nfs_mount_point_base=$state_path/mnt
# Mount options passed to the NFS client. See section of the
# nfs man page for details (string value)
#nfs_mount_options=
# Directory where the SMBFS shares are mounted on the compute
# node (string value)
#smbfs_mount_point_base=$state_path/mnt
# Mount options passed to the SMBFS client. See mount.cifs man
# page for details. Note that the libvirt-qemu uid and gid
# must be specified. (string value)
#smbfs_mount_options=
# Number of times to rediscover AoE target to find volume
# (integer value)
#num_aoe_discover_tries=3
# Directory where the glusterfs volume is mounted on the
# compute node (string value)
#glusterfs_mount_point_base=$state_path/mnt
# Use multipath connection of the iSCSI volume (boolean value)
#iscsi_use_multipath=false
# Use multipath connection of the iSER volume (boolean value)
#iser_use_multipath=false
# Path or URL to Scality SOFS configuration file (string
# value)
#scality_sofs_config=
# Base dir where Scality SOFS shall be mounted (string value)
#scality_sofs_mount_point=$state_path/scality
# Protocols listed here will be accessed directly from QEMU.
# Currently supported protocols: [gluster] (list value)
#qemu_allowed_storage_drivers=
# Directory where the Quobyte volume is mounted on the compute
# node (string value)
#quobyte_mount_point_base=$state_path/mnt
# Path to a Quobyte Client configuration file. (string value)
#quobyte_client_cfg=
# The iSCSI transport iface to use to connect to target in
# case offload support is desired. Supported transports are
# be2iscsi, bnx2i, cxgb3i, cxgb4i, qla4xxx and ocs. Default
# format is transport_name.hwaddress and can be generated
# manually or via iscsiadm -m iface (string value)
# Deprecated group;name - DEFAULT;iscsi_transport
#iscsi_iface=
[metrics]
#
# Options defined in nova.scheduler.weights.metrics
#
# Multiplier used for weighing metrics. (floating point value)
#weight_multiplier=1.0
# How the metrics are going to be weighed. This should be in
# the form of "=, =, ...", where
# is one of the metrics to be weighed, and is
# the corresponding ratio. So for "name1=1.0, name2=-1.0" The
# final weight would be name1.value * 1.0 + name2.value *
# -1.0. (list value)
#weight_setting=
# How to treat the unavailable metrics. When a metric is NOT
# available for a host, if it is set to be True, it would
# raise an exception, so it is recommended to use the
# scheduler filter MetricFilter to filter out those hosts. If
# it is set to be False, the unavailable metric would be
# treated as a negative factor in weighing process, the
# returned value would be set by the option
# weight_of_unavailable. (boolean value)
#required=true
# The final weight value to be returned if required is set to
# False and any one of the metrics set by weight_setting is
# unavailable. (floating point value)
#weight_of_unavailable=-10000.0
[neutron]
url = http://controller:9696
auth_strategy = keystone
admin_auth_url = http://controller:35357/v2.0
admin_tenant_name = service
admin_username = neutron
admin_password = sleestack
# Added later for DHCP
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SEKRIT
#
# Options defined in nova.api.metadata.handler
#
# Set flag to indicate Neutron will proxy metadata requests
# and resolve instance ids. (boolean value)
#service_metadata_proxy=false
# Shared secret to validate proxies Neutron metadata requests
# (string value)
#metadata_proxy_shared_secret=
#
# Options defined in nova.network.neutronv2.api
#
# URL for connecting to neutron (string value)
#url=http://127.0.0.1:9696
# User id for connecting to neutron in admin context.
# DEPRECATED: specify an auth_plugin and appropriate
# credentials instead. (string value)
#admin_user_id=
# Username for connecting to neutron in admin context
# DEPRECATED: specify an auth_plugin and appropriate
# credentials instead. (string value)
#admin_username=
# Password for connecting to neutron in admin context
# DEPRECATED: specify an auth_plugin and appropriate
# credentials instead. (string value)
#admin_password=
# Tenant id for connecting to neutron in admin context
# DEPRECATED: specify an auth_plugin and appropriate
# credentials instead. (string value)
#admin_tenant_id=
# Tenant name for connecting to neutron in admin context. This
# option will be ignored if neutron_admin_tenant_id is set.
# Note that with Keystone V3 tenant names are only unique
# within a domain. DEPRECATED: specify an auth_plugin and
# appropriate credentials instead. (string value)
#admin_tenant_name=
# Region name for connecting to neutron in admin context
# (string value)
#region_name=
# Authorization URL for connecting to neutron in admin
# context. DEPRECATED: specify an auth_plugin and appropriate
# credentials instead. (string value)
#admin_auth_url=http://localhost:5000/v2.0
# Authorization strategy for connecting to neutron in admin
# context. DEPRECATED: specify an auth_plugin and appropriate
# credentials instead. If an auth_plugin is specified strategy
# will be ignored. (string value)
#auth_strategy=keystone
# Name of Integration Bridge used by Open vSwitch (string
# value)
#ovs_bridge=br-int
# Number of seconds before querying neutron for extensions
# (integer value)
#extension_sync_interval=600
# DEPRECATED: Allow an instance to have multiple vNICs
# attached to the same Neutron network. This option is
# deprecated in the 2015.1 release and will be removed in the
# 2015.2 release where the default behavior will be to always
# allow multiple ports from the same network to be attached to
# an instance. (boolean value)
#allow_duplicate_networks=false
[osapi_v3]
#
# Options defined in nova.api.openstack
#
# Whether the V3 API is enabled or not (boolean value)
#enabled=false
# A list of v3 API extensions to never load. Specify the
# extension aliases here. (list value)
#extensions_blacklist=
# If the list is not empty then a v3 API extension will only
# be loaded if it exists in this list. Specify the extension
# aliases here. (list value)
#extensions_whitelist=
[rdp]
#
# Options defined in nova.rdp
#
# Location of RDP html5 console proxy, in the form
# "http://127.0.0.1:6083/" (string value)
#html5_proxy_base_url=http://127.0.0.1:6083/
# Enable RDP related features (boolean value)
#enabled=false
[serial_console]
#
# Options defined in nova.cmd.serialproxy
#
# Host on which to listen for incoming requests (string value)
#serialproxy_host=0.0.0.0
# Port on which to listen for incoming requests (integer
# value)
#serialproxy_port=6083
#
# Options defined in nova.console.serial
#
# Enable serial console related features (boolean value)
#enabled=false
# Range of TCP ports to use for serial ports on compute hosts
# (string value)
#port_range=10000:20000
# Location of serial console proxy. (string value)
#base_url=ws://127.0.0.1:6083/
# IP address on which instance serial console should listen
# (string value)
#listen=127.0.0.1
# The address to which proxy clients (like nova-serialproxy)
# should connect (string value)
#proxyclient_address=127.0.0.1
[spice]
#
# Options defined in nova.cmd.spicehtml5proxy
#
# Host on which to listen for incoming requests (string value)
#html5proxy_host=0.0.0.0
# Port on which to listen for incoming requests (integer
# value)
#html5proxy_port=6082
#
# Options defined in nova.spice
#
# Location of spice HTML5 console proxy, in the form
# "http://127.0.0.1:6082/spice_auto.html" (string value)
#html5proxy_base_url=http://127.0.0.1:6082/spice_auto.html
# IP address on which instance spice server should listen
# (string value)
#server_listen=127.0.0.1
# The address to which proxy clients (like nova-
# spicehtml5proxy) should connect (string value)
#server_proxyclient_address=127.0.0.1
# Enable spice related features (boolean value)
#enabled=false
# Enable spice guest agent support (boolean value)
#agent_enabled=true
# Keymap for spice (string value)
#keymap=en-us
[ssl]
#
# Options defined in nova.openstack.common.sslutils
#
# CA certificate file to use to verify connecting clients.
# (string value)
#ca_file=
# Certificate file to use when starting the server securely.
# (string value)
#cert_file=
# Private key file to use when starting the server securely.
# (string value)
#key_file=
[trusted_computing]
#
# Options defined in nova.scheduler.filters.trusted_filter
#
# Attestation server HTTP (string value)
#attestation_server=
# Attestation server Cert file for Identity verification
# (string value)
#attestation_server_ca_file=
# Attestation server port (string value)
#attestation_port=8443
# Attestation web API URL (string value)
#attestation_api_url=/OpenAttestationWebServices/V1.0
# Attestation authorization blob - must change (string value)
#attestation_auth_blob=
# Attestation status cache valid period length (integer value)
#attestation_auth_timeout=60
# Disable SSL cert verification for Attestation service
# (boolean value)
#attestation_insecure_ssl=false
[upgrade_levels]
#
# Options defined in nova.baserpc
#
# Set a version cap for messages sent to the base api in any
# service (string value)
#baseapi=
#
# Options defined in nova.cells.rpc_driver
#
# Set a version cap for messages sent between cells services
# (string value)
#intercell=
#
# Options defined in nova.cells.rpcapi
#
# Set a version cap for messages sent to local cells services
# (string value)
#cells=
#
# Options defined in nova.cert.rpcapi
#
# Set a version cap for messages sent to cert services (string
# value)
#cert=
#
# Options defined in nova.compute.rpcapi
#
# Set a version cap for messages sent to compute services. If
# you plan to do a live upgrade from havana to icehouse, you
# should set this option to "icehouse-compat" before beginning
# the live upgrade procedure. (string value)
#compute=
#
# Options defined in nova.conductor.rpcapi
#
# Set a version cap for messages sent to conductor services
# (string value)
#conductor=
#
# Options defined in nova.console.rpcapi
#
# Set a version cap for messages sent to console services
# (string value)
#console=
#
# Options defined in nova.consoleauth.rpcapi
#
# Set a version cap for messages sent to consoleauth services
# (string value)
#consoleauth=
#
# Options defined in nova.network.rpcapi
#
# Set a version cap for messages sent to network services
# (string value)
#network=
#
# Options defined in nova.scheduler.rpcapi
#
# Set a version cap for messages sent to scheduler services
# (string value)
#scheduler=
[vmware]
#
# Options defined in nova.virt.vmwareapi.driver
#
# The PBM status. (boolean value)
#pbm_enabled=false
# PBM service WSDL file location URL. e.g.
# file:///opt/SDK/spbm/wsdl/pbmService.wsdl Not setting this
# will disable storage policy based placement of instances.
# (string value)
#pbm_wsdl_location=
# The PBM default policy. If pbm_wsdl_location is set and
# there is no defined storage policy for the specific request
# then this policy will be used. (string value)
#pbm_default_policy=
# Hostname or IP address for connection to VMware VC host.
# (string value)
#host_ip=
# Port for connection to VMware VC host. (integer value)
#host_port=443
# Username for connection to VMware VC host. (string value)
#host_username=
# Password for connection to VMware VC host. (string value)
#host_password=
# Name of a VMware Cluster ComputeResource. (multi valued)
#cluster_name=
# Regex to match the name of a datastore. (string value)
#datastore_regex=
# The interval used for polling of remote tasks. (floating
# point value)
#task_poll_interval=0.5
# The number of times we retry on failures, e.g., socket
# error, etc. (integer value)
#api_retry_count=10
# VNC starting port (integer value)
#vnc_port=5900
# Total number of VNC ports (integer value)
#vnc_port_total=10000
# Whether to use linked clone (boolean value)
#use_linked_clone=true
# Optional VIM Service WSDL Location e.g
# http:///vimService.wsdl. Optional over-ride to
# default location for bug work-arounds (string value)
#wsdl_location=
#
# Options defined in nova.virt.vmwareapi.vif
#
# Physical ethernet adapter name for vlan networking (string
# value)
#vlan_interface=vmnic0
# Name of Integration Bridge (string value)
#integration_bridge=br-int
#
# Options defined in nova.virt.vmwareapi.vim_util
#
# The maximum number of ObjectContent data objects that should
# be returned in a single result. A positive value will cause
# the operation to suspend the retrieval when the count of
# objects reaches the specified maximum. The server may still
# limit the count to something less than the configured value.
# Any remaining objects may be retrieved with additional
# requests. (integer value)
#maximum_objects=100
#
# Options defined in nova.virt.vmwareapi.vmops
#
# The prefix for Where cached images are stored. This is NOT
# the full path - just a folder prefix. This should only be
# used when a datastore cache should be shared between compute
# nodes. Note: this should only be used when the compute nodes
# have a shared file system. (string value)
#cache_prefix=
[workarounds]
#
# Options defined in nova.utils
#
# This option allows a fallback to sudo for performance
# reasons. For example see
# https://bugs.launchpad.net/nova/+bug/1415106 (boolean value)
#disable_rootwrap=false
# When using libvirt 1.2.2 fails live snapshots intermittently
# under load. This config option provides mechanism to
# disable livesnapshot while this is resolved. See
# https://bugs.launchpad.net/nova/+bug/1334398 (boolean value)
#disable_libvirt_livesnapshot=true
# Whether to destroy instances on startup when we suspect they
# have previously been evacuated. This can result in data loss
# if undesired. See https://launchpad.net/bugs/1419785
# (boolean value)
#destroy_after_evacuate=true
[xenserver]
#
# Options defined in nova.virt.xenapi.agent
#
# Number of seconds to wait for agent reply (integer value)
#agent_timeout=30
# Number of seconds to wait for agent to be fully operational
# (integer value)
#agent_version_timeout=300
# Number of seconds to wait for agent reply to resetnetwork
# request (integer value)
#agent_resetnetwork_timeout=60
# Specifies the path in which the XenAPI guest agent should be
# located. If the agent is present, network configuration is
# not injected into the image. Used if
# compute_driver=xenapi.XenAPIDriver and flat_injected=True
# (string value)
#agent_path=usr/sbin/xe-update-networking
# Disables the use of the XenAPI agent in any image regardless
# of what image properties are present. (boolean value)
#disable_agent=false
# Determines if the XenAPI agent should be used when the image
# used does not contain a hint to declare if the agent is
# present or not. The hint is a glance property
# "xenapi_use_agent" that has the value "True" or "False".
# Note that waiting for the agent when it is not present will
# significantly increase server boot times. (boolean value)
#use_agent_default=false
#
# Options defined in nova.virt.xenapi.client.session
#
# Timeout in seconds for XenAPI login. (integer value)
#login_timeout=10
# Maximum number of concurrent XenAPI connections. Used only
# if compute_driver=xenapi.XenAPIDriver (integer value)
#connection_concurrent=5
#
# Options defined in nova.virt.xenapi.driver
#
# URL for connection to XenServer/Xen Cloud Platform. A
# special value of unix://local can be used to connect to the
# local unix socket. Required if
# compute_driver=xenapi.XenAPIDriver (string value)
#connection_url=
# Username for connection to XenServer/Xen Cloud Platform.
# Used only if compute_driver=xenapi.XenAPIDriver (string
# value)
#connection_username=root
# Password for connection to XenServer/Xen Cloud Platform.
# Used only if compute_driver=xenapi.XenAPIDriver (string
# value)
#connection_password=
# The interval used for polling of coalescing vhds. Used only
# if compute_driver=xenapi.XenAPIDriver (floating point value)
#vhd_coalesce_poll_interval=5.0
# Ensure compute service is running on host XenAPI connects
# to. (boolean value)
#check_host=true
# Max number of times to poll for VHD to coalesce. Used only
# if compute_driver=xenapi.XenAPIDriver (integer value)
#vhd_coalesce_max_attempts=20
# Base path to the storage repository (string value)
#sr_base_path=/var/run/sr-mount
# The iSCSI Target Host (string value)
#target_host=
# The iSCSI Target Port, default is port 3260 (string value)
#target_port=3260
# IQN Prefix (string value)
#iqn_prefix=iqn.2010-10.org.openstack
# Used to enable the remapping of VBD dev (Works around an
# issue in Ubuntu Maverick) (boolean value)
#remap_vbd_dev=false
# Specify prefix to remap VBD dev to (ex. /dev/xvdb ->
# /dev/sdb) (string value)
#remap_vbd_dev_prefix=sd
#
# Options defined in nova.virt.xenapi.image.bittorrent
#
# Base URL for torrent files. (string value)
#torrent_base_url=
# Probability that peer will become a seeder. (1.0 = 100%)
# (floating point value)
#torrent_seed_chance=1.0
# Number of seconds after downloading an image via BitTorrent
# that it should be seeded for other peers. (integer value)
#torrent_seed_duration=3600
# Cached torrent files not accessed within this number of
# seconds can be reaped (integer value)
#torrent_max_last_accessed=86400
# Beginning of port range to listen on (integer value)
#torrent_listen_port_start=6881
# End of port range to listen on (integer value)
#torrent_listen_port_end=6891
# Number of seconds a download can remain at the same progress
# percentage w/o being considered a stall (integer value)
#torrent_download_stall_cutoff=600
# Maximum number of seeder processes to run concurrently
# within a given dom0. (-1 = no limit) (integer value)
#torrent_max_seeder_processes_per_host=1
#
# Options defined in nova.virt.xenapi.pool
#
# To use for hosts with different CPUs (boolean value)
#use_join_force=true
#
# Options defined in nova.virt.xenapi.vif
#
# Name of Integration Bridge used by Open vSwitch (string
# value)
#ovs_integration_bridge=xapi1
#
# Options defined in nova.virt.xenapi.vm_utils
#
# Cache glance images locally. `all` will cache all images,
# `some` will only cache images that have the image_property
# `cache_in_nova=True`, and `none` turns off caching entirely
# (string value)
#cache_images=all
# Compression level for images, e.g., 9 for gzip -9. Range is
# 1-9, 9 being most compressed but most CPU intensive on dom0.
# (integer value)
#image_compression_level=
# Default OS type (string value)
#default_os_type=linux
# Time to wait for a block device to be created (integer
# value)
#block_device_creation_timeout=10
# Maximum size in bytes of kernel or ramdisk images (integer
# value)
#max_kernel_ramdisk_size=16777216
# Filter for finding the SR to be used to install guest
# instances on. To use the Local Storage in default
# XenServer/XCP installations set this flag to other-config
# :i18n-key=local-storage. To select an SR with a different
# matching criteria, you could set it to other-
# config:my_favorite_sr=true. On the other hand, to fall back
# on the Default SR, as displayed by XenCenter, set this flag
# to: default-sr:true (string value)
#sr_matching_filter=default-sr:true
# Whether to use sparse_copy for copying data on a resize down
# (False will use standard dd). This speeds up resizes down
# considerably since large runs of zeros won't have to be
# rsynced (boolean value)
#sparse_copy=true
# Maximum number of retries to unplug VBD. if <=0, should try
# once and no retry (integer value)
#num_vbd_unplug_retries=10
# Whether or not to download images via Bit Torrent
# (all|some|none). (string value)
#torrent_images=none
# Name of network to use for booting iPXE ISOs (string value)
#ipxe_network_name=
# URL to the iPXE boot menu (string value)
#ipxe_boot_menu_url=
# Name and optionally path of the tool used for ISO image
# creation (string value)
#ipxe_mkisofs_cmd=mkisofs
#
# Options defined in nova.virt.xenapi.vmops
#
# Number of seconds to wait for instance to go to running
# state (integer value)
#running_timeout=60
# The XenAPI VIF driver using XenServer Network APIs. (string
# value)
#vif_driver=nova.virt.xenapi.vif.XenAPIBridgeDriver
# Dom0 plugin driver used to handle image uploads. (string
# value)
#image_upload_handler=nova.virt.xenapi.image.glance.GlanceStore
#
# Options defined in nova.virt.xenapi.volume_utils
#
# Number of seconds to wait for an SR to settle if the VDI
# does not exist when first introduced (integer value)
#introduce_vdi_retry_wait=20
[zookeeper]
#
# Options defined in nova.servicegroup.drivers.zk
#
# The ZooKeeper addresses for servicegroup service in the
# format of host1:port,host2:port,host3:port (string value)
#address=
# The recv_timeout parameter for the zk session (integer
# value)
#recv_timeout=4000
# The prefix used in ZooKeeper to store ephemeral nodes
# (string value)
#sg_prefix=/servicegroups
# Number of seconds to wait until retrying to join the session
# (integer value)
#sg_retry_interval=5
[matchmaker_redis]
#
# From oslo.messaging
#
# Host to locate redis. (string value)
#host=127.0.0.1
# Use this port to connect to redis host. (integer value)
#port=6379
# Password for Redis server (optional). (string value)
#password=
[matchmaker_ring]
#
# From oslo.messaging
#
# Matchmaker ring file (JSON). (string value)
# Deprecated group;name - DEFAULT;matchmaker_ringfile
#ringfile=/etc/oslo/matchmaker_ring.json
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
#
# From oslo.concurrency
#
# Enables or disables inter-process locks. (boolean value)
# Deprecated group;name - DEFAULT;disable_process_locking
#disable_process_locking=false
# Directory to use for lock files. For security, the specified directory
# should only be writable by the user running the processes that need locking.
# Defaults to environment variable OSLO_LOCK_PATH. If external locks are used,
# a lock path must be set. (string value)
# Deprecated group;name - DEFAULT;lock_path
#lock_path=/var/lib/nova/tmp
[oslo_messaging_amqp]
#
# From oslo.messaging
#
# address prefix used when sending to a specific server (string value)
# Deprecated group;name - [amqp1]/server_request_prefix
#server_request_prefix=exclusive
# address prefix used when broadcasting to all servers (string value)
# Deprecated group;name - [amqp1]/broadcast_prefix
#broadcast_prefix=broadcast
# address prefix when sending to any server in group (string value)
# Deprecated group;name - [amqp1]/group_request_prefix
#group_request_prefix=unicast
# Name for the AMQP container (string value)
# Deprecated group;name - [amqp1]/container_name
#container_name=
# Timeout for inactive connections (in seconds) (integer value)
# Deprecated group;name - [amqp1]/idle_timeout
#idle_timeout=0
# Debug: dump AMQP frames to stdout (boolean value)
# Deprecated group;name - [amqp1]/trace
#trace=false
# CA certificate PEM file for verifing server certificate (string value)
# Deprecated group;name - [amqp1]/ssl_ca_file
#ssl_ca_file =
# Identifying certificate PEM file to present to clients (string value)
# Deprecated group;name - [amqp1]/ssl_cert_file
#ssl_cert_file =
# Private key PEM file used to sign cert_file certificate (string value)
# Deprecated group;name - [amqp1]/ssl_key_file
#ssl_key_file =
# Password for decrypting ssl_key_file (if encrypted) (string value)
# Deprecated group;name - [amqp1]/ssl_key_password
#ssl_key_password=
# Accept clients using either SSL or plain TCP (boolean value)
# Deprecated group;name - [amqp1]/allow_insecure_clients
#allow_insecure_clients=false
[oslo_messaging_qpid]
#
# From oslo.messaging
#
# Use durable queues in AMQP. (boolean value)
# Deprecated group;name - DEFAULT;rabbit_durable_queues
#amqp_durable_queues=false
# Auto-delete queues in AMQP. (boolean value)
# Deprecated group;name - DEFAULT;amqp_auto_delete
#amqp_auto_delete=false
# Size of RPC connection pool. (integer value)
# Deprecated group;name - DEFAULT;rpc_conn_pool_size
#rpc_conn_pool_size=30
# Qpid broker hostname. (string value)
# Deprecated group;name - DEFAULT;qpid_hostname
#qpid_hostname=localhost
# Qpid broker port. (integer value)
# Deprecated group;name - DEFAULT;qpid_port
#qpid_port=5672
# Qpid HA cluster host:port pairs. (list value)
# Deprecated group;name - DEFAULT;qpid_hosts
#qpid_hosts=$qpid_hostname:$qpid_port
# Username for Qpid connection. (string value)
# Deprecated group;name - DEFAULT;qpid_username
#qpid_username =
# Password for Qpid connection. (string value)
# Deprecated group;name - DEFAULT;qpid_password
#qpid_password =
# Space separated list of SASL mechanisms to use for auth. (string value)
# Deprecated group;name - DEFAULT;qpid_sasl_mechanisms
#qpid_sasl_mechanisms =
# Seconds between connection keepalive heartbeats. (integer value)
# Deprecated group;name - DEFAULT;qpid_heartbeat
#qpid_heartbeat=60
# Transport to use, either 'tcp' or 'ssl'. (string value)
# Deprecated group;name - DEFAULT;qpid_protocol
#qpid_protocol=tcp
# Whether to disable the Nagle algorithm. (boolean value)
# Deprecated group;name - DEFAULT;qpid_tcp_nodelay
#qpid_tcp_nodelay=true
# The number of prefetched messages held by receiver. (integer value)
# Deprecated group;name - DEFAULT;qpid_receiver_capacity
#qpid_receiver_capacity=1
# The qpid topology version to use. Version 1 is what was originally used by
# impl_qpid. Version 2 includes some backwards-incompatible changes that allow
# broker federation to work. Users should update to version 2 when they are
# able to take everything down, as it requires a clean break. (integer value)
# Deprecated group;name - DEFAULT;qpid_topology_version
#qpid_topology_version=1
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openg00dle232
#
# From oslo.messaging
#
# Use durable queues in AMQP. (boolean value)
# Deprecated group;name - DEFAULT;rabbit_durable_queues
#amqp_durable_queues=false
# Auto-delete queues in AMQP. (boolean value)
# Deprecated group;name - DEFAULT;amqp_auto_delete
#amqp_auto_delete=false
# Size of RPC connection pool. (integer value)
# Deprecated group;name - DEFAULT;rpc_conn_pool_size
#rpc_conn_pool_size=30
# SSL version to use (valid only if SSL enabled). Valid values are TLSv1 and
# SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may be available on some
# distributions. (string value)
# Deprecated group;name - DEFAULT;kombu_ssl_version
#kombu_ssl_version =
# SSL key file (valid only if SSL enabled). (string value)
# Deprecated group;name - DEFAULT;kombu_ssl_keyfile
#kombu_ssl_keyfile =
# SSL cert file (valid only if SSL enabled). (string value)
# Deprecated group;name - DEFAULT;kombu_ssl_certfile
#kombu_ssl_certfile =
# SSL certification authority file (valid only if SSL enabled). (string value)
# Deprecated group;name - DEFAULT;kombu_ssl_ca_certs
#kombu_ssl_ca_certs =
# How long to wait before reconnecting in response to an AMQP consumer cancel
# notification. (floating point value)
# Deprecated group;name - DEFAULT;kombu_reconnect_delay
#kombu_reconnect_delay=1.0
# The RabbitMQ broker address where a single node is used. (string value)
# Deprecated group;name - DEFAULT;rabbit_host
#rabbit_host=localhost
# The RabbitMQ broker port where a single node is used. (integer value)
# Deprecated group;name - DEFAULT;rabbit_port
#rabbit_port=5672
# RabbitMQ HA cluster host:port pairs. (list value)
# Deprecated group;name - DEFAULT;rabbit_hosts
#rabbit_hosts=$rabbit_host:$rabbit_port
# Connect over SSL for RabbitMQ. (boolean value)
# Deprecated group;name - DEFAULT;rabbit_use_ssl
#rabbit_use_ssl=false
# The RabbitMQ userid. (string value)
# Deprecated group;name - DEFAULT;rabbit_userid
#rabbit_userid=guest
# The RabbitMQ password. (string value)
# Deprecated group;name - DEFAULT;rabbit_password
#rabbit_password=guest
# The RabbitMQ login method. (string value)
# Deprecated group;name - DEFAULT;rabbit_login_method
#rabbit_login_method=AMQPLAIN
# The RabbitMQ virtual host. (string value)
# Deprecated group;name - DEFAULT;rabbit_virtual_host
#rabbit_virtual_host=/
# How frequently to retry connecting with RabbitMQ. (integer value)
#rabbit_retry_interval=1
# How long to backoff for between retries when connecting to RabbitMQ. (integer
# value)
# Deprecated group;name - DEFAULT;rabbit_retry_backoff
#rabbit_retry_backoff=2
# Maximum number of RabbitMQ connection retries. Default is 0 (infinite retry
# count). (integer value)
# Deprecated group;name - DEFAULT;rabbit_max_retries
#rabbit_max_retries=0
# Use HA queues in RabbitMQ (x-ha-policy: all). If you change this option, you
# must wipe the RabbitMQ database. (boolean value)
# Deprecated group;name - DEFAULT;rabbit_ha_queues
#rabbit_ha_queues=false
# Number of seconds after which the Rabbit broker is considered down if
# heartbeat's keep-alive fails (0 disable the heartbeat). (integer value)
#heartbeat_timeout_threshold=60
# How often times during the heartbeat_timeout_threshold we check the
# heartbeat. (integer value)
#heartbeat_rate=2
# Deprecated, use rpc_backend=kombu+memory or rpc_backend=fake (boolean value)
# Deprecated group;name - DEFAULT;fake_rabbit
#fake_rabbit=false
Pluto/conf-test/nova/nova.conf.rpmsave 000644 000765 000024 00000331575 12663133336 020613 0 ustar 00chris staff 000000 000000 [DEFAULT]
# Requirements from Compute
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
# Requirements from Network Assuming we need a super set
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 172.22.10.5
# vncserver_listen = 172.22.10.5
vncserver_proxyclient_address = 172.22.10.5
verbose = True
# This appears in the second section
vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 172.22.10.5
novncproxy_base_url = http://controller:6080/vnc_auto.html
verbose = True
# This added later for Neutron Networking
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
#
# From oslo.messaging
#
# ZeroMQ bind address. Should be a wildcard (*), an ethernet interface, or IP.
# The "host" option should point or resolve to this address. (string value)
#rpc_zmq_bind_address=*
# MatchMaker driver. (string value)
#rpc_zmq_matchmaker=oslo_messaging._drivers.matchmaker.MatchMakerLocalhost
# ZeroMQ receiver listening port. (integer value)
#rpc_zmq_port=9501
# Number of ZeroMQ contexts, defaults to 1. (integer value)
#rpc_zmq_contexts=1
# Maximum number of ingress messages to locally buffer per topic. Default is
# unlimited. (integer value)
#rpc_zmq_topic_backlog=
# Directory for holding IPC sockets. (string value)
#rpc_zmq_ipc_dir=/var/run/openstack
# Name of this node. Must be a valid hostname, FQDN, or IP address. Must match
# "host" option, if running Nova. (string value)
#rpc_zmq_host=localhost
# Seconds to wait before a cast expires (TTL). Only supported by impl_zmq.
# (integer value)
#rpc_cast_timeout=30
# Heartbeat frequency. (integer value)
#matchmaker_heartbeat_freq=300
# Heartbeat time-to-live. (integer value)
#matchmaker_heartbeat_ttl=600
# Size of RPC thread pool. (integer value)
#rpc_thread_pool_size=64
# Driver or drivers to handle sending notifications. (multi valued)
#notification_driver =
# AMQP topic used for OpenStack notifications. (list value)
# Deprecated group;name - [rpc_notifier2]/topics
#notification_topics=notifications
# Seconds to wait for a response from a call. (integer value)
#rpc_response_timeout=60
# A URL representing the messaging driver to use and its full configuration. If
# not set, we fall back to the rpc_backend option and driver specific
# configuration. (string value)
#transport_url=
# The messaging driver to use, defaults to rabbit. Other drivers include qpid
# and zmq. (string value)
#rpc_backend=rabbit
# The default exchange under which topics are scoped. May be overridden by an
# exchange name specified in the transport_url option. (string value)
#control_exchange=openstack
#
# Options defined in nova.availability_zones
#
# The availability_zone to show internal services under
# (string value)
#internal_service_availability_zone=internal
# Default compute node availability_zone (string value)
#default_availability_zone=nova
#
# Options defined in nova.crypto
#
# Filename of root CA (string value)
#ca_file=cacert.pem
# Filename of private key (string value)
#key_file=private/cakey.pem
# Filename of root Certificate Revocation List (string value)
#crl_file=crl.pem
# Where we keep our keys (string value)
#keys_path=$state_path/keys
# Where we keep our root CA (string value)
#ca_path=$state_path/CA
# Should we use a CA for each project? (boolean value)
#use_project_ca=false
# Subject for certificate for users, %s for project, user,
# timestamp (string value)
#user_cert_subject=/C=US/ST=California/O=OpenStack/OU=NovaDev/CN=%.16s-%.16s-%s
# Subject for certificate for projects, %s for project,
# timestamp (string value)
#project_cert_subject=/C=US/ST=California/O=OpenStack/OU=NovaDev/CN=project-ca-%.16s-%s
#
# Options defined in nova.exception
#
# Make exception message format errors fatal (boolean value)
#fatal_exception_format_errors=false
#
# Options defined in nova.netconf
#
# IP address of this host (string value)
#my_ip=10.0.0.1
# Block storage IP address of this host (string value)
#my_block_storage_ip=$my_ip
# Name of this node. This can be an opaque identifier. It is
# not necessarily a hostname, FQDN, or IP address. However,
# the node name must be valid within an AMQP key, and if using
# ZeroMQ, a valid hostname, FQDN, or IP address (string value)
#host=nova
# Use IPv6 (boolean value)
#use_ipv6=false
#
# Options defined in nova.notifications
#
# If set, send compute.instance.update notifications on
# instance state changes. Valid values are None for no
# notifications, "vm_state" for notifications on VM state
# changes, or "vm_and_task_state" for notifications on VM and
# task state changes. (string value)
#notify_on_state_change=
# If set, send api.fault notifications on caught exceptions in
# the API service. (boolean value)
#notify_api_faults=false
# Default notification level for outgoing notifications
# (string value)
#default_notification_level=INFO
# Default publisher_id for outgoing notifications (string
# value)
#default_publisher_id=
#
# Options defined in nova.paths
#
# Directory where the nova python module is installed (string
# value)
#pybasedir=/usr/lib/python/site-packages
# Directory where nova binaries are installed (string value)
#bindir=/usr/local/bin
# Top-level directory for maintaining nova's state (string
# value)
#state_path=/var/lib/nova
#
# Options defined in nova.quota
#
# Number of instances allowed per project (integer value)
#quota_instances=10
# Number of instance cores allowed per project (integer value)
#quota_cores=20
# Megabytes of instance RAM allowed per project (integer
# value)
#quota_ram=51200
# Number of floating IPs allowed per project (integer value)
#quota_floating_ips=10
# Number of fixed IPs allowed per project (this should be at
# least the number of instances allowed) (integer value)
#quota_fixed_ips=-1
# Number of metadata items allowed per instance (integer
# value)
#quota_metadata_items=128
# Number of injected files allowed (integer value)
#quota_injected_files=5
# Number of bytes allowed per injected file (integer value)
#quota_injected_file_content_bytes=10240
# Length of injected file path (integer value)
#quota_injected_file_path_length=255
# Number of security groups per project (integer value)
#quota_security_groups=10
# Number of security rules per security group (integer value)
#quota_security_group_rules=20
# Number of key pairs per user (integer value)
#quota_key_pairs=100
# Number of server groups per project (integer value)
#quota_server_groups=10
# Number of servers per server group (integer value)
#quota_server_group_members=10
# Number of seconds until a reservation expires (integer
# value)
#reservation_expire=86400
# Count of reservations until usage is refreshed. This
# defaults to 0(off) to avoid additional load but it is useful
# to turn on to help keep quota usage up to date and reduce
# the impact of out of sync usage issues. (integer value)
#until_refresh=0
# Number of seconds between subsequent usage refreshes. This
# defaults to 0(off) to avoid additional load but it is useful
# to turn on to help keep quota usage up to date and reduce
# the impact of out of sync usage issues. Note that quotas are
# not updated on a periodic task, they will update on a new
# reservation if max_age has passed since the last reservation
# (integer value)
#max_age=0
# Default driver to use for quota checks (string value)
#quota_driver=nova.quota.DbQuotaDriver
#
# Options defined in nova.service
#
# Seconds between nodes reporting state to datastore (integer
# value)
#report_interval=10
# Enable periodic tasks (boolean value)
#periodic_enable=true
# Range of seconds to randomly delay when starting the
# periodic task scheduler to reduce stampeding. (Disable by
# setting to 0) (integer value)
#periodic_fuzzy_delay=60
# A list of APIs to enable by default (list value)
#enabled_apis=ec2,osapi_compute,metadata
# A list of APIs with enabled SSL (list value)
#enabled_ssl_apis=
# The IP address on which the EC2 API will listen. (string
# value)
#ec2_listen=0.0.0.0
# The port on which the EC2 API will listen. (integer value)
#ec2_listen_port=8773
# Number of workers for EC2 API service. The default will be
# equal to the number of CPUs available. (integer value)
#ec2_workers=
# The IP address on which the OpenStack API will listen.
# (string value)
#osapi_compute_listen=0.0.0.0
# The port on which the OpenStack API will listen. (integer
# value)
#osapi_compute_listen_port=8774
# Number of workers for OpenStack API service. The default
# will be the number of CPUs available. (integer value)
#osapi_compute_workers=
# OpenStack metadata service manager (string value)
#metadata_manager=nova.api.manager.MetadataManager
# The IP address on which the metadata API will listen.
# (string value)
#metadata_listen=0.0.0.0
# The port on which the metadata API will listen. (integer
# value)
#metadata_listen_port=8775
# Number of workers for metadata service. The default will be
# the number of CPUs available. (integer value)
#metadata_workers=
# Full class name for the Manager for compute (string value)
#compute_manager=nova.compute.manager.ComputeManager
# Full class name for the Manager for console proxy (string
# value)
#console_manager=nova.console.manager.ConsoleProxyManager
# Manager for console auth (string value)
#consoleauth_manager=nova.consoleauth.manager.ConsoleAuthManager
# Full class name for the Manager for cert (string value)
#cert_manager=nova.cert.manager.CertManager
# Full class name for the Manager for network (string value)
#network_manager=nova.network.manager.FlatDHCPManager
# Full class name for the Manager for scheduler (string value)
#scheduler_manager=nova.scheduler.manager.SchedulerManager
# Maximum time since last check-in for up service (integer
# value)
#service_down_time=60
#
# Options defined in nova.utils
#
# Whether to log monkey patching (boolean value)
#monkey_patch=false
# List of modules/decorators to monkey patch (list value)
#monkey_patch_modules=nova.api.ec2.cloud:nova.notifications.notify_decorator,nova.compute.api:nova.notifications.notify_decorator
# Length of generated instance admin passwords (integer value)
#password_length=12
# Time period to generate instance usages for. Time period
# must be hour, day, month or year (string value)
#instance_usage_audit_period=month
# Path to the rootwrap configuration file to use for running
# commands as root (string value)
#rootwrap_config=/etc/nova/rootwrap.conf
# Explicitly specify the temporary working directory (string
# value)
#tempdir=
#
# Options defined in nova.wsgi
#
# File name for the paste.deploy config for nova-api (string
# value)
#api_paste_config=api-paste.ini
# A python format string that is used as the template to
# generate log lines. The following values can be formatted
# into it: client_ip, date_time, request_line, status_code,
# body_length, wall_seconds. (string value)
#wsgi_log_format=%(client_ip)s "%(request_line)s" status: %(status_code)s len: %(body_length)s time: %(wall_seconds).7f
# CA certificate file to use to verify connecting clients
# (string value)
#ssl_ca_file=
# SSL certificate of API server (string value)
#ssl_cert_file=
# SSL private key of API server (string value)
#ssl_key_file=
# Sets the value of TCP_KEEPIDLE in seconds for each server
# socket. Not supported on OS X. (integer value)
#tcp_keepidle=600
# Size of the pool of greenthreads used by wsgi (integer
# value)
#wsgi_default_pool_size=1000
# Maximum line size of message headers to be accepted.
# max_header_line may need to be increased when using large
# tokens (typically those generated by the Keystone v3 API
# with big service catalogs). (integer value)
#max_header_line=16384
# If False, closes the client socket connection explicitly.
# (boolean value)
#wsgi_keep_alive=true
# Timeout for client connections' socket operations. If an
# incoming connection is idle for this number of seconds it
# will be closed. A value of '0' means wait forever. (integer
# value)
#client_socket_timeout=900
#
# Options defined in nova.api.auth
#
# Whether to use per-user rate limiting for the api. This
# option is only used by v2 api. Rate limiting is removed from
# v3 api. (boolean value)
#api_rate_limit=false
# The strategy to use for auth: keystone, noauth
# (deprecated), or noauth2. Both noauth and noauth2 are
# designed for testing only, as they do no actual credential
# checking. noauth provides administrative credentials
# regardless of the passed in user, noauth2 only does if
# 'admin' is specified as the username. (string value)
#auth_strategy=keystone
# Treat X-Forwarded-For as the canonical remote address. Only
# enable this if you have a sanitizing proxy. (boolean value)
#use_forwarded_for=false
#
# Options defined in nova.api.ec2
#
# Number of failed auths before lockout. (integer value)
#lockout_attempts=5
# Number of minutes to lockout if triggered. (integer value)
#lockout_minutes=15
# Number of minutes for lockout window. (integer value)
#lockout_window=15
# URL to get token from ec2 request. (string value)
#keystone_ec2_url=http://localhost:5000/v2.0/ec2tokens
# Return the IP address as private dns hostname in describe
# instances (boolean value)
#ec2_private_dns_show_ip=false
# Validate security group names according to EC2 specification
# (boolean value)
#ec2_strict_validation=true
# Time in seconds before ec2 timestamp expires (integer value)
#ec2_timestamp_expiry=300
# Disable SSL certificate verification. (boolean value)
#keystone_ec2_insecure=false
#
# Options defined in nova.api.ec2.cloud
#
# The IP address of the EC2 API server (string value)
#ec2_host=$my_ip
# The internal IP address of the EC2 API server (string value)
#ec2_dmz_host=$my_ip
# The port of the EC2 API server (integer value)
#ec2_port=8773
# The protocol to use when connecting to the EC2 API server
# (http, https) (string value)
#ec2_scheme=http
# The path prefix used to call the ec2 API server (string
# value)
#ec2_path=/
# List of region=fqdn pairs separated by commas (list value)
#region_list=
#
# Options defined in nova.api.metadata.base
#
# List of metadata versions to skip placing into the config
# drive (string value)
#config_drive_skip_versions=1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01
# Driver to use for vendor data (string value)
#vendordata_driver=nova.api.metadata.vendordata_json.JsonFileVendorData
#
# Options defined in nova.api.metadata.handler
#
# Time in seconds to cache metadata; 0 to disable metadata
# caching entirely (not recommended). Increasingthis should
# improve response times of the metadata API when under heavy
# load. Higher values may increase memoryusage and result in
# longer times for host metadata changes to take effect.
# (integer value)
#metadata_cache_expiration=15
#
# Options defined in nova.api.metadata.vendordata_json
#
# File to load JSON formatted vendor data from (string value)
#vendordata_jsonfile_path=
#
# Options defined in nova.api.openstack.common
#
# The maximum number of items returned in a single response
# from a collection resource (integer value)
#osapi_max_limit=1000
# Base URL that will be presented to users in links to the
# OpenStack Compute API (string value)
#osapi_compute_link_prefix=
# Base URL that will be presented to users in links to glance
# resources (string value)
#osapi_glance_link_prefix=
#
# Options defined in nova.api.openstack.compute
#
# Permit instance snapshot operations. (boolean value)
#allow_instance_snapshots=true
#
# Options defined in nova.api.openstack.compute.contrib
#
# Specify list of extensions to load when using
# osapi_compute_extension option with
# nova.api.openstack.compute.contrib.select_extensions (list
# value)
#osapi_compute_ext_list=
#
# Options defined in nova.api.openstack.compute.contrib.fping
#
# Full path to fping. (string value)
#fping_path=/usr/sbin/fping
#
# Options defined in nova.api.openstack.compute.contrib.os_tenant_networks
#
# Enables or disables quota checking for tenant networks
# (boolean value)
#enable_network_quota=false
# Control for checking for default networks (string value)
#use_neutron_default_nets=False
# Default tenant id when creating neutron networks (string
# value)
#neutron_default_tenant_id=default
# Number of private networks allowed per project (integer
# value)
#quota_networks=3
#
# Options defined in nova.api.openstack.compute.extensions
#
# osapi compute extension to load (multi valued)
#osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
#
# Options defined in nova.api.openstack.compute.plugins.v3.hide_server_addresses
#
# List of instance states that should hide network info (list
# value)
#osapi_hide_server_address_states=building
#
# Options defined in nova.api.openstack.compute.servers
#
# Enables returning of the instance password by the relevant
# server API calls such as create, rebuild or rescue, If the
# hypervisor does not support password injection then the
# password returned will not be correct (boolean value)
#enable_instance_password=true
#
# Options defined in nova.cert.rpcapi
#
# The topic cert nodes listen on (string value)
#cert_topic=cert
#
# Options defined in nova.cloudpipe.pipelib
#
# Image ID used when starting up a cloudpipe vpn server
# (string value)
#vpn_image_id=0
# Flavor for vpn instances (string value)
#vpn_flavor=m1.tiny
# Template for cloudpipe instance boot script (string value)
#boot_script_template=$pybasedir/nova/cloudpipe/bootscript.template
# Network to push into openvpn config (string value)
#dmz_net=10.0.0.0
# Netmask to push into openvpn config (string value)
#dmz_mask=255.255.255.0
# Suffix to add to project name for vpn key and secgroups
# (string value)
#vpn_key_suffix=-vpn
#
# Options defined in nova.cmd.novnc
#
# Record sessions to FILE.[session_number] (boolean value)
#record=false
# Become a daemon (background process) (boolean value)
#daemon=false
# Disallow non-encrypted connections (boolean value)
#ssl_only=false
# Source is ipv6 (boolean value)
#source_is_ipv6=false
# SSL certificate file (string value)
#cert=self.pem
# SSL key file (if separate from cert) (string value)
#key=
# Run webserver on same port. Serve files from DIR. (string
# value)
#web=/usr/share/spice-html5
#
# Options defined in nova.cmd.novncproxy
#
# Host on which to listen for incoming requests (string value)
#novncproxy_host=0.0.0.0
# Port on which to listen for incoming requests (integer
# value)
#novncproxy_port=6080
#
# Options defined in nova.compute.api
#
# Allow destination machine to match source for resize. Useful
# when testing in single-host environments. (boolean value)
#allow_resize_to_same_host=false
# Allow migrate machine to the same host. Useful when testing
# in single-host environments. (boolean value)
#allow_migrate_to_same_host=false
# Availability zone to use when user doesn't specify one
# (string value)
#default_schedule_zone=
# These are image properties which a snapshot should not
# inherit from an instance (list value)
#non_inheritable_image_properties=cache_in_nova,bittorrent
# Kernel image that indicates not to use a kernel, but to use
# a raw disk image instead (string value)
#null_kernel=nokernel
# When creating multiple instances with a single request using
# the os-multiple-create API extension, this template will be
# used to build the display name for each instance. The
# benefit is that the instances end up with different
# hostnames. To restore legacy behavior of every instance
# having the same name, set this option to "%(name)s". Valid
# keys for the template are: name, uuid, count. (string value)
#multi_instance_display_name_template=%(name)s-%(count)d
# Maximum number of devices that will result in a local image
# being created on the hypervisor node. Setting this to 0
# means nova will allow only boot from volume. A negative
# number means unlimited. (integer value)
#max_local_block_devices=3
#
# Options defined in nova.compute.flavors
#
# Default flavor to use for the EC2 API only. The Nova API
# does not support a default flavor. (string value)
#default_flavor=m1.small
#
# Options defined in nova.compute.manager
#
# Console proxy host to use to connect to instances on this
# host. (string value)
#console_host=nova
# Name of network to use to set access IPs for instances
# (string value)
#default_access_ip_network_name=
# Whether to batch up the application of IPTables rules during
# a host restart and apply all at the end of the init phase
# (boolean value)
#defer_iptables_apply=false
# Where instances are stored on disk (string value)
#instances_path=$state_path/instances
# Generate periodic compute.instance.exists notifications
# (boolean value)
#instance_usage_audit=false
# Number of 1 second retries needed in live_migration (integer
# value)
#live_migration_retry_count=30
# Whether to start guests that were running before the host
# rebooted (boolean value)
#resume_guests_state_on_host_boot=false
# Number of times to retry network allocation on failures
# (integer value)
#network_allocate_retries=0
# Maximum number of instance builds to run concurrently
# (integer value)
#max_concurrent_builds=10
# Number of times to retry block device allocation on failures
# (integer value)
#block_device_allocate_retries=60
# The number of times to attempt to reap an instance's files.
# (integer value)
#maximum_instance_delete_attempts=5
# Interval to pull network bandwidth usage info. Not supported
# on all hypervisors. Set to -1 to disable. Setting this to 0
# will run at the default rate. (integer value)
#bandwidth_poll_interval=600
# Interval to sync power states between the database and the
# hypervisor. Set to -1 to disable. Setting this to 0 will run
# at the default rate. (integer value)
#sync_power_state_interval=600
# Number of seconds between instance network information cache
# updates (integer value)
#heal_instance_info_cache_interval=60
# Interval in seconds for reclaiming deleted instances
# (integer value)
#reclaim_instance_interval=0
# Interval in seconds for gathering volume usages (integer
# value)
#volume_usage_poll_interval=0
# Interval in seconds for polling shelved instances to
# offload. Set to -1 to disable.Setting this to 0 will run at
# the default rate. (integer value)
#shelved_poll_interval=3600
# Time in seconds before a shelved instance is eligible for
# removing from a host. -1 never offload, 0 offload when
# shelved (integer value)
#shelved_offload_time=0
# Interval in seconds for retrying failed instance file
# deletes. Set to -1 to disable. Setting this to 0 will run at
# the default rate. (integer value)
#instance_delete_interval=300
# Waiting time interval (seconds) between block device
# allocation retries on failures (integer value)
#block_device_allocate_retries_interval=3
# Waiting time interval (seconds) between sending the
# scheduler a list of current instance UUIDs to verify that
# its view of instances is in sync with nova. If the CONF
# option `scheduler_tracks_instance_changes` is False,
# changing this option will have no effect. (integer value)
#scheduler_instance_sync_interval=120
# Action to take if a running deleted instance is detected.
# Valid options are 'noop', 'log', 'shutdown', or 'reap'. Set
# to 'noop' to take no action. (string value)
#running_deleted_instance_action=reap
# Number of seconds to wait between runs of the cleanup task.
# (integer value)
#running_deleted_instance_poll_interval=1800
# Number of seconds after being deleted when a running
# instance should be considered eligible for cleanup. (integer
# value)
#running_deleted_instance_timeout=0
# Automatically hard reboot an instance if it has been stuck
# in a rebooting state longer than N seconds. Set to 0 to
# disable. (integer value)
#reboot_timeout=0
# Amount of time in seconds an instance can be in BUILD before
# going into ERROR status. Set to 0 to disable. (integer
# value)
#instance_build_timeout=0
# Automatically unrescue an instance after N seconds. Set to 0
# to disable. (integer value)
#rescue_timeout=0
# Automatically confirm resizes after N seconds. Set to 0 to
# disable. (integer value)
#resize_confirm_window=0
# Total amount of time to wait in seconds for an instance to
# perform a clean shutdown. (integer value)
#shutdown_timeout=60
#
# Options defined in nova.compute.monitors
#
# Monitor classes available to the compute which may be
# specified more than once. (multi valued)
#compute_available_monitors=nova.compute.monitors.all_monitors
# A list of monitors that can be used for getting compute
# metrics. (list value)
#compute_monitors=
#
# Options defined in nova.compute.resource_tracker
#
# Amount of disk in MB to reserve for the host (integer value)
#reserved_host_disk_mb=0
# Amount of memory in MB to reserve for the host (integer
# value)
#reserved_host_memory_mb=512
# Class that will manage stats for the local compute host
# (string value)
#compute_stats_class=nova.compute.stats.Stats
# The names of the extra resources to track. (list value)
#compute_resources=vcpu
#
# Options defined in nova.compute.rpcapi
#
# The topic compute nodes listen on (string value)
#compute_topic=compute
#
# Options defined in nova.conductor.tasks.live_migrate
#
# Number of times to retry live-migration before failing. If
# == -1, try until out of hosts. If == 0, only try once, no
# retries. (integer value)
#migrate_max_retries=-1
#
# Options defined in nova.console.manager
#
# Driver to use for the console proxy (string value)
#console_driver=nova.console.xvp.XVPConsoleProxy
# Stub calls to compute worker for tests (boolean value)
#stub_compute=false
# Publicly visible name for this console host (string value)
#console_public_hostname=nova
#
# Options defined in nova.console.rpcapi
#
# The topic console proxy nodes listen on (string value)
#console_topic=console
#
# Options defined in nova.console.xvp
#
# XVP conf template (string value)
#console_xvp_conf_template=$pybasedir/nova/console/xvp.conf.template
# Generated XVP conf file (string value)
#console_xvp_conf=/etc/xvp.conf
# XVP master process pid file (string value)
#console_xvp_pid=/var/run/xvp.pid
# XVP log file (string value)
#console_xvp_log=/var/log/xvp.log
# Port for XVP to multiplex VNC connections on (integer value)
#console_xvp_multiplex_port=5900
#
# Options defined in nova.consoleauth
#
# The topic console auth proxy nodes listen on (string value)
#consoleauth_topic=consoleauth
#
# Options defined in nova.consoleauth.manager
#
# How many seconds before deleting tokens (integer value)
#console_token_ttl=600
#
# Options defined in nova.db.api
#
# Services to be added to the available pool on create
# (boolean value)
#enable_new_services=true
# Template string to be used to generate instance names
# (string value)
#instance_name_template=instance-%08x
# Template string to be used to generate snapshot names
# (string value)
#snapshot_name_template=snapshot-%s
#
# Options defined in nova.db.base
#
# The driver to use for database access (string value)
#db_driver=nova.db
#
# Options defined in nova.db.sqlalchemy.api
#
# When set, compute API will consider duplicate hostnames
# invalid within the specified scope, regardless of case.
# Should be empty, "project" or "global". (string value)
#osapi_compute_unique_server_name_scope=
#
# Options defined in nova.image.s3
#
# Parent directory for tempdir used for image decryption
# (string value)
#image_decryption_dir=/tmp
# Hostname or IP for OpenStack to use when accessing the S3
# api (string value)
#s3_host=$my_ip
# Port used when accessing the S3 api (integer value)
#s3_port=3333
# Access key to use for S3 server for images (string value)
#s3_access_key=notchecked
# Secret key to use for S3 server for images (string value)
#s3_secret_key=notchecked
# Whether to use SSL when talking to S3 (boolean value)
#s3_use_ssl=false
# Whether to affix the tenant id to the access key when
# downloading from S3 (boolean value)
#s3_affix_tenant=false
#
# Options defined in nova.ipv6.api
#
# Backend to use for IPv6 generation (string value)
#ipv6_backend=rfc2462
#
# Options defined in nova.network
#
# The full class name of the network API class to use (string
# value)
#network_api_class=nova.network.api.API
#
# Options defined in nova.network.driver
#
# Driver to use for network creation (string value)
#network_driver=nova.network.linux_net
#
# Options defined in nova.network.floating_ips
#
# Default pool for floating IPs (string value)
#default_floating_pool=nova
# Autoassigning floating IP to VM (boolean value)
#auto_assign_floating_ip=false
# Full class name for the DNS Manager for floating IPs (string
# value)
#floating_ip_dns_manager=nova.network.noop_dns_driver.NoopDNSDriver
# Full class name for the DNS Manager for instance IPs (string
# value)
#instance_dns_manager=nova.network.noop_dns_driver.NoopDNSDriver
# Full class name for the DNS Zone for instance IPs (string
# value)
#instance_dns_domain=
#
# Options defined in nova.network.ldapdns
#
# URL for LDAP server which will store DNS entries (string
# value)
#ldap_dns_url=ldap://ldap.example.com:389
# User for LDAP DNS (string value)
#ldap_dns_user=uid=admin,ou=people,dc=example,dc=org
# Password for LDAP DNS (string value)
#ldap_dns_password=password
# Hostmaster for LDAP DNS driver Statement of Authority
# (string value)
#ldap_dns_soa_hostmaster=hostmaster@example.org
# DNS Servers for LDAP DNS driver (multi valued)
#ldap_dns_servers=dns.example.org
# Base DN for DNS entries in LDAP (string value)
#ldap_dns_base_dn=ou=hosts,dc=example,dc=org
# Refresh interval (in seconds) for LDAP DNS driver Statement
# of Authority (string value)
#ldap_dns_soa_refresh=1800
# Retry interval (in seconds) for LDAP DNS driver Statement of
# Authority (string value)
#ldap_dns_soa_retry=3600
# Expiry interval (in seconds) for LDAP DNS driver Statement
# of Authority (string value)
#ldap_dns_soa_expiry=86400
# Minimum interval (in seconds) for LDAP DNS driver Statement
# of Authority (string value)
#ldap_dns_soa_minimum=7200
#
# Options defined in nova.network.linux_net
#
# Location of flagfiles for dhcpbridge (multi valued)
#dhcpbridge_flagfile=/etc/nova/nova.conf
# Location to keep network config files (string value)
#networks_path=$state_path/networks
# Interface for public IP addresses (string value)
#public_interface=eth0
# Location of nova-dhcpbridge (string value)
#dhcpbridge=/usr/bin/nova-dhcpbridge
# Public IP of network host (string value)
#routing_source_ip=$my_ip
# Lifetime of a DHCP lease in seconds (integer value)
#dhcp_lease_time=86400
# If set, uses specific DNS server for dnsmasq. Can be
# specified multiple times. (multi valued)
#dns_server=
# If set, uses the dns1 and dns2 from the network ref. as dns
# servers. (boolean value)
#use_network_dns_servers=false
# A list of dmz ranges that should be accepted (list value)
#dmz_cidr=
# Traffic to this range will always be snatted to the fallback
# ip, even if it would normally be bridged out of the node.
# Can be specified multiple times. (multi valued)
#force_snat_range=
# Override the default dnsmasq settings with this file (string
# value)
#dnsmasq_config_file=
# Driver used to create ethernet devices. (string value)
#linuxnet_interface_driver=nova.network.linux_net.LinuxBridgeInterfaceDriver
# Name of Open vSwitch bridge used with linuxnet (string
# value)
#linuxnet_ovs_integration_bridge=br-int
# Send gratuitous ARPs for HA setup (boolean value)
#send_arp_for_ha=false
# Send this many gratuitous ARPs for HA setup (integer value)
#send_arp_for_ha_count=3
# Use single default gateway. Only first nic of vm will get
# default gateway from dhcp server (boolean value)
#use_single_default_gateway=false
# An interface that bridges can forward to. If this is set to
# all then all traffic will be forwarded. Can be specified
# multiple times. (multi valued)
#forward_bridge_interface=all
# The IP address for the metadata API server (string value)
#metadata_host=$my_ip
# The port for the metadata API port (integer value)
#metadata_port=8775
# Regular expression to match the iptables rule that should
# always be on the top. (string value)
#iptables_top_regex=
# Regular expression to match the iptables rule that should
# always be on the bottom. (string value)
#iptables_bottom_regex=
# The table that iptables to jump to when a packet is to be
# dropped. (string value)
#iptables_drop_action=DROP
# Amount of time, in seconds, that ovs_vsctl should wait for a
# response from the database. 0 is to wait forever. (integer
# value)
#ovs_vsctl_timeout=120
# If passed, use fake network devices and addresses (boolean
# value)
#fake_network=false
# Number of times to retry ebtables commands on failure.
# (integer value)
#ebtables_exec_attempts=3
# Number of seconds to wait between ebtables retries.
# (floating point value)
#ebtables_retry_interval=1.0
#
# Options defined in nova.network.manager
#
# Bridge for simple network instances (string value)
#flat_network_bridge=
# DNS server for simple network (string value)
#flat_network_dns=8.8.4.4
# Whether to attempt to inject network setup into guest
# (boolean value)
#flat_injected=false
# FlatDhcp will bridge into this interface if set (string
# value)
#flat_interface=
# First VLAN for private networks (integer value)
#vlan_start=100
# VLANs will bridge into this interface if set (string value)
#vlan_interface=
# Number of networks to support (integer value)
#num_networks=1
# Public IP for the cloudpipe VPN servers (string value)
#vpn_ip=$my_ip
# First Vpn port for private networks (integer value)
#vpn_start=1000
# Number of addresses in each private subnet (integer value)
#network_size=256
# Fixed IPv6 address block (string value)
#fixed_range_v6=fd00::/48
# Default IPv4 gateway (string value)
#gateway=
# Default IPv6 gateway (string value)
#gateway_v6=
# Number of addresses reserved for vpn clients (integer value)
#cnt_vpn_clients=0
# Seconds after which a deallocated IP is disassociated
# (integer value)
#fixed_ip_disassociate_timeout=600
# Number of attempts to create unique mac address (integer
# value)
#create_unique_mac_address_attempts=5
# If True, skip using the queue and make local calls (boolean
# value)
#fake_call=false
# If True, unused gateway devices (VLAN and bridge) are
# deleted in VLAN network mode with multi hosted networks
# (boolean value)
#teardown_unused_network_gateway=false
# If True, send a dhcp release on instance termination
# (boolean value)
#force_dhcp_release=True
# If True, when a DNS entry must be updated, it sends a fanout
# cast to all network hosts to update their DNS entries in
# multi host mode (boolean value)
#update_dns_entries=false
# Number of seconds to wait between runs of updates to DNS
# entries. (integer value)
#dns_update_periodic_interval=-1
# Domain to use for building the hostnames (string value)
#dhcp_domain=novalocal
# Indicates underlying L3 management library (string value)
#l3_lib=nova.network.l3.LinuxNetL3
#
# Options defined in nova.network.rpcapi
#
# The topic network nodes listen on (string value)
#network_topic=network
# Default value for multi_host in networks. Also, if set, some
# rpc network calls will be sent directly to host. (boolean
# value)
#multi_host=false
#
# Options defined in nova.network.security_group.openstack_driver
#
# The full class name of the security API class (string value)
#security_group_api=nova
#
# Options defined in nova.objects.network
#
# DEPRECATED: THIS VALUE SHOULD BE SET WHEN CREATING THE
# NETWORK. If True in multi_host mode, all compute hosts share
# the same dhcp address. The same IP address used for DHCP
# will be added on each nova-network node which is only
# visible to the vms on the same host. (boolean value)
#share_dhcp_address=false
# DEPRECATED: THIS VALUE SHOULD BE SET WHEN CREATING THE
# NETWORK. MTU setting for network interface. (integer value)
#network_device_mtu=
#
# Options defined in nova.objectstore.s3server
#
# Path to S3 buckets (string value)
#buckets_path=$state_path/buckets
# IP address for S3 API to listen (string value)
#s3_listen=0.0.0.0
# Port for S3 API to listen (integer value)
#s3_listen_port=3333
#
# From oslo.log
#
# Print debugging output (set logging level to DEBUG instead of default WARNING
# level). (boolean value)
#debug=false
# Print more verbose output (set logging level to INFO instead of default
# WARNING level). (boolean value)
#verbose=false
# The name of a logging configuration file. This file is appended to any
# existing logging configuration files. For details about logging configuration
# files, see the Python logging module documentation. (string value)
# Deprecated group;name - DEFAULT;log_config
#log_config_append=
# DEPRECATED. A logging.Formatter log message format string which may use any
# of the available logging.LogRecord attributes. This option is deprecated.
# Please use logging_context_format_string and logging_default_format_string
# instead. (string value)
#log_format=
# Format string for %%(asctime)s in log records. Default: %(default)s . (string
# value)
#log_date_format=%Y-%m-%d %H:%M:%S
# (Optional) Name of log file to output to. If no default is set, logging will
# go to stdout. (string value)
# Deprecated group;name - DEFAULT;logfile
#log_file=
# (Optional) The base directory used for relative --log-file paths. (string
# value)
# Deprecated group;name - DEFAULT;logdir
#log_dir=/var/log/nova
# Use syslog for logging. Existing syslog format is DEPRECATED during I, and
# will change in J to honor RFC5424. (boolean value)
#use_syslog=false
# (Optional) Enables or disables syslog rfc5424 format for logging. If enabled,
# prefixes the MSG part of the syslog message with APP-NAME (RFC5424). The
# format without the APP-NAME is deprecated in I, and will be removed in J.
# (boolean value)
#use_syslog_rfc_format=false
# Syslog facility to receive log lines. (string value)
#syslog_log_facility=LOG_USER
# Log output to standard error. (boolean value)
#use_stderr=False
# Format string to use for log messages with context. (string value)
#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
# Format string to use for log messages without context. (string value)
#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
# Data to append to log format when level is DEBUG. (string value)
#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
# Prefix each line of exception output with this format. (string value)
#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
# List of logger=LEVEL pairs. (list value)
#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN
# Enables or disables publication of error events. (boolean value)
#publish_errors=false
# Enables or disables fatal status of deprecations. (boolean value)
#fatal_deprecations=false
# The format for an instance that is passed with the log message. (string
# value)
#instance_format="[instance: %(uuid)s] "
# The format for an instance UUID that is passed with the log message. (string
# value)
#instance_uuid_format="[instance: %(uuid)s] "
#
# Options defined in nova.pci.request
#
# An alias for a PCI passthrough device requirement. This
# allows users to specify the alias in the extra_spec for a
# flavor, without needing to repeat all the PCI property
# requirements. For example: pci_alias = { "name":
# "QuicAssist", "product_id": "0443", "vendor_id": "8086",
# "device_type": "ACCEL" } defines an alias for the Intel
# QuickAssist card. (multi valued) (multi valued)
#pci_alias=
#
# Options defined in nova.pci.whitelist
#
# White list of PCI devices available to VMs. For example:
# pci_passthrough_whitelist = [{"vendor_id": "8086",
# "product_id": "0443"}] (multi valued)
#pci_passthrough_whitelist=
#
# Options defined in nova.scheduler.driver
#
# The scheduler host manager class to use (string value)
#scheduler_host_manager=nova.scheduler.host_manager.HostManager
#
# Options defined in nova.scheduler.filter_scheduler
#
# New instances will be scheduled on a host chosen randomly
# from a subset of the N best hosts. This property defines the
# subset size that a host is chosen from. A value of 1 chooses
# the first host returned by the weighing functions. This
# value must be at least 1. Any value less than 1 will be
# ignored, and 1 will be used instead (integer value)
#scheduler_host_subset_size=1
#
# Options defined in nova.scheduler.filters.aggregate_image_properties_isolation
#
# Force the filter to consider only keys matching the given
# namespace. (string value)
#aggregate_image_properties_isolation_namespace=
# The separator used between the namespace and keys (string
# value)
#aggregate_image_properties_isolation_separator=.
#
# Options defined in nova.scheduler.filters.core_filter
#
# Virtual CPU to physical CPU allocation ratio which affects
# all CPU filters. This configuration specifies a global ratio
# for CoreFilter. For AggregateCoreFilter, it will fall back
# to this configuration value if no per-aggregate setting
# found. (floating point value)
#cpu_allocation_ratio=16.0
#
# Options defined in nova.scheduler.filters.disk_filter
#
# Virtual disk to physical disk allocation ratio (floating
# point value)
#disk_allocation_ratio=1.0
#
# Options defined in nova.scheduler.filters.io_ops_filter
#
# Tells filters to ignore hosts that have this many or more
# instances currently in build, resize, snapshot, migrate,
# rescue or unshelve task states (integer value)
#max_io_ops_per_host=8
#
# Options defined in nova.scheduler.filters.isolated_hosts_filter
#
# Images to run on isolated host (list value)
#isolated_images=
# Host reserved for specific images (list value)
#isolated_hosts=
# Whether to force isolated hosts to run only isolated images
# (boolean value)
#restrict_isolated_hosts_to_isolated_images=true
#
# Options defined in nova.scheduler.filters.num_instances_filter
#
# Ignore hosts that have too many instances (integer value)
#max_instances_per_host=50
#
# Options defined in nova.scheduler.filters.ram_filter
#
# Virtual ram to physical ram allocation ratio which affects
# all ram filters. This configuration specifies a global ratio
# for RamFilter. For AggregateRamFilter, it will fall back to
# this configuration value if no per-aggregate setting found.
# (floating point value)
#ram_allocation_ratio=1.5
#
# Options defined in nova.scheduler.host_manager
#
# Filter classes available to the scheduler which may be
# specified more than once. An entry of
# "nova.scheduler.filters.all_filters" maps to all filters
# included with nova. (multi valued)
#scheduler_available_filters=nova.scheduler.filters.all_filters
# Which filter class names to use for filtering hosts when not
# specified in the request. (list value)
#scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
# Which weight class names to use for weighing hosts (list
# value)
#scheduler_weight_classes=nova.scheduler.weights.all_weighers
# Determines if the Scheduler tracks changes to instances to
# help with its filtering decisions. (boolean value)
#scheduler_tracks_instance_changes=true
#
# Options defined in nova.scheduler.ironic_host_manager
#
# Which filter class names to use for filtering baremetal
# hosts when not specified in the request. (list value)
#baremetal_scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ExactRamFilter,ExactDiskFilter,ExactCoreFilter
# Flag to decide whether to use
# baremetal_scheduler_default_filters or not. (boolean value)
#scheduler_use_baremetal_filters=false
#
# Options defined in nova.scheduler.manager
#
# Default driver to use for the scheduler (string value)
#scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
# How often (in seconds) to run periodic tasks in the
# scheduler driver of your choice. Please note this is likely
# to interact with the value of service_down_time, but exactly
# how they interact will depend on your choice of scheduler
# driver. (integer value)
#scheduler_driver_task_period=60
#
# Options defined in nova.scheduler.rpcapi
#
# The topic scheduler nodes listen on (string value)
#scheduler_topic=scheduler
#
# Options defined in nova.scheduler.scheduler_options
#
# Absolute path to scheduler configuration JSON file. (string
# value)
#scheduler_json_config_location=
#
# Options defined in nova.scheduler.utils
#
# Maximum number of attempts to schedule an instance (integer
# value)
#scheduler_max_attempts=3
#
# Options defined in nova.scheduler.weights.io_ops
#
# Multiplier used for weighing host io ops. Negative numbers
# mean a preference to choose light workload compute hosts.
# (floating point value)
#io_ops_weight_multiplier=-1.0
#
# Options defined in nova.scheduler.weights.ram
#
# Multiplier used for weighing ram. Negative numbers mean to
# stack vs spread. (floating point value)
#ram_weight_multiplier=1.0
#
# Options defined in nova.servicegroup.api
#
# The driver for servicegroup service (valid options are: db,
# zk, mc) (string value)
#servicegroup_driver=db
#
# Options defined in nova.virt.configdrive
#
# Config drive format. One of iso9660 (default) or vfat
# (string value)
#config_drive_format=iso9660
# Set to "always" to force injection to take place on a config
# drive. NOTE: The "always" will be deprecated in the Liberty
# release cycle. (string value)
#force_config_drive=
# Name and optionally path of the tool used for ISO image
# creation (string value)
#mkisofs_cmd=genisoimage
#
# Options defined in nova.virt.disk.api
#
# Name of the mkfs commands for ephemeral device. The format
# is = (multi valued)
#virt_mkfs=
# Attempt to resize the filesystem by accessing the image over
# a block device. This is done by the host and may not be
# necessary if the image contains a recent version of cloud-
# init. Possible mechanisms require the nbd driver (for qcow
# and raw), or loop (for raw). (boolean value)
#resize_fs_using_block_device=false
#
# Options defined in nova.virt.disk.mount.nbd
#
# Amount of time, in seconds, to wait for NBD device start up.
# (integer value)
#timeout_nbd=10
#
# Options defined in nova.virt.driver
#
# Driver to use for controlling virtualization. Options
# include: libvirt.LibvirtDriver, xenapi.XenAPIDriver,
# fake.FakeDriver, baremetal.BareMetalDriver,
# vmwareapi.VMwareVCDriver, hyperv.HyperVDriver (string value)
#compute_driver=libvirt.LibvirtDriver
# The default format an ephemeral_volume will be formatted
# with on creation. (string value)
#default_ephemeral_format=
# VM image preallocation mode: "none" => no storage
# provisioning is done up front, "space" => storage is fully
# allocated at instance start (string value)
#preallocate_images=none
# Whether to use cow images (boolean value)
#use_cow_images=true
# Fail instance boot if vif plugging fails (boolean value)
#vif_plugging_is_fatal=true
# Number of seconds to wait for neutron vif plugging events to
# arrive before continuing or failing (see
# vif_plugging_is_fatal). If this is set to zero and
# vif_plugging_is_fatal is False, events should not be
# expected to arrive at all. (integer value)
#vif_plugging_timeout=300
#
# Options defined in nova.virt.firewall
#
# Firewall driver (defaults to hypervisor specific iptables
# driver) (string value)
#firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
# Whether to allow network traffic from same network (boolean
# value)
#allow_same_net_traffic=true
#
# Options defined in nova.virt.hardware
#
# Defines which pcpus that instance vcpus can use. For
# example, "4-12,^8,15" (string value)
#vcpu_pin_set=
#
# Options defined in nova.virt.imagecache
#
# Number of seconds to wait between runs of the image cache
# manager. Set to -1 to disable. Setting this to 0 will run at
# the default rate. (integer value)
#image_cache_manager_interval=2400
# Where cached images are stored under $instances_path. This
# is NOT the full path - just a folder name. For per-compute-
# host cached images, set to _base_$my_ip (string value)
#image_cache_subdirectory_name=_base
# Should unused base images be removed? (boolean value)
#remove_unused_base_images=true
# Unused unresized base images younger than this will not be
# removed (integer value)
#remove_unused_original_minimum_age_seconds=86400
#
# Options defined in nova.virt.images
#
# Force backing images to raw format (boolean value)
#force_raw_images=true
#
# Options defined in nova.virt.netutils
#
# Template file for injected network (string value)
#injected_network_template=/usr/share/nova/interfaces.template
#
# Options defined in nova.vnc
#
# Location of VNC console proxy, in the form
# "http://127.0.0.1:6080/vnc_auto.html" (string value)
#novncproxy_base_url=http://127.0.0.1:6080/vnc_auto.html
# Location of nova xvp VNC console proxy, in the form
# "http://127.0.0.1:6081/console" (string value)
#xvpvncproxy_base_url=http://127.0.0.1:6081/console
# IP address on which instance vncservers should listen
# (string value)
#vncserver_listen=127.0.0.1
# The address to which proxy clients (like nova-xvpvncproxy)
# should connect (string value)
#vncserver_proxyclient_address=127.0.0.1
# Enable VNC related features (boolean value)
#vnc_enabled=true
# Keymap for VNC (string value)
#vnc_keymap=en-us
#
# Options defined in nova.vnc.xvp_proxy
#
# Port that the XCP VNC proxy should bind to (integer value)
#xvpvncproxy_port=6081
# Address that the XCP VNC proxy should bind to (string value)
#xvpvncproxy_host=0.0.0.0
#
# Options defined in nova.volume
#
# The full class name of the volume API class to use (string
# value)
#volume_api_class=nova.volume.cinder.API
#
# Options defined in nova.openstack.common.eventlet_backdoor
#
# Enable eventlet backdoor. Acceptable values are 0, ,
# and :, where 0 results in listening on a random
# tcp port number; results in listening on the
# specified port number (and not enabling backdoor if that
# port is in use); and : results in listening on
# the smallest unused port number within the specified range
# of port numbers. The chosen port is displayed in the
# service's log file. (string value)
#backdoor_port=
#
# Options defined in nova.openstack.common.memorycache
#
# Memcached servers or None for in process cache. (list value)
#memcached_servers=
#
# Options defined in nova.openstack.common.periodic_task
#
# Some periodic tasks can be run in a separate process. Should
# we run them here? (boolean value)
#run_external_periodic_tasks=true
#
# Options defined in nova.openstack.common.policy
#
# The JSON file that defines policies. (string value)
#policy_file=policy.json
# Default rule. Enforced when a requested rule is not found.
# (string value)
#policy_default_rule=default
# Directories where policy configuration files are stored.
# They can be relative to any directory in the search path
# defined by the config_dir option, or absolute paths. The
# file defined by policy_file must exist for these directories
# to be searched. Missing or empty directories are ignored.
# (multi valued)
#policy_dirs=policy.d
#
# Options defined in nova.openstack.common.versionutils
#
# Enables or disables fatal status of deprecations. (boolean
# value)
#fatal_deprecations=false
[api_database]
#
# Options defined in nova.db.sqlalchemy.api
#
# The SQLAlchemy connection string to use to connect to the
# Nova API database. (string value)
#connection=mysql://nova:nova@localhost/nova
# If True, SQLite uses synchronous mode. (boolean value)
#sqlite_synchronous=true
# Timeout before idle SQL connections are reaped. (integer
# value)
#idle_timeout=3600
# Maximum number of SQL connections to keep open in a pool.
# (integer value)
#max_pool_size=
# Maximum number of database connection retries during
# startup. Set to -1 to specify an infinite retry count.
# (integer value)
#max_retries=-1
# Interval between retries of opening a SQL connection.
# (integer value)
#retry_interval=10
# If set, use this value for max_overflow with SQLAlchemy.
# (integer value)
#max_overflow=
# Verbosity of SQL debugging information: 0=None,
# 100=Everything. (integer value)
#connection_debug=0
# Add Python stack traces to SQL as comment strings. (boolean
# value)
#connection_trace=false
# If set, use this value for pool_timeout with SQLAlchemy.
# (integer value)
#pool_timeout=
[barbican]
#
# Options defined in nova.keymgr.barbican
#
# Info to match when looking for barbican in the service
# catalog. Format is: separated values of the form:
# :: (string value)
#catalog_info=key-manager:barbican:public
# Override service catalog lookup with template for barbican
# endpoint e.g. http://localhost:9311/v1/%(project_id)s
# (string value)
#endpoint_template=
# Region name of this node (string value)
#os_region_name=
#
# Options defined in nova.volume.cinder
#
# Region name of this node (string value)
#os_region_name=
[cells]
#
# Options defined in nova.cells.manager
#
# Cells communication driver to use (string value)
#driver=nova.cells.rpc_driver.CellsRPCDriver
# Number of seconds after an instance was updated or deleted
# to continue to update cells (integer value)
#instance_updated_at_threshold=3600
# Number of instances to update per periodic task run (integer
# value)
#instance_update_num_instances=1
#
# Options defined in nova.cells.messaging
#
# Maximum number of hops for cells routing. (integer value)
#max_hop_count=10
# Cells scheduler to use (string value)
#scheduler=nova.cells.scheduler.CellsScheduler
#
# Options defined in nova.cells.opts
#
# Enable cell functionality (boolean value)
#enable=false
# The topic cells nodes listen on (string value)
#topic=cells
# Manager for cells (string value)
#manager=nova.cells.manager.CellsManager
# Name of this cell (string value)
#name=nova
# Key/Multi-value list with the capabilities of the cell (list
# value)
#capabilities=hypervisor=xenserver;kvm,os=linux;windows
# Seconds to wait for response from a call to a cell. (integer
# value)
#call_timeout=60
# Percentage of cell capacity to hold in reserve. Affects both
# memory and disk utilization (floating point value)
#reserve_percent=10.0
# Type of cell: api or compute (string value)
#cell_type=compute
# Number of seconds after which a lack of capability and
# capacity updates signals the child cell is to be treated as
# a mute. (integer value)
#mute_child_interval=300
# Seconds between bandwidth updates for cells. (integer value)
#bandwidth_update_interval=600
#
# Options defined in nova.cells.rpc_driver
#
# Base queue name to use when communicating between cells.
# Various topics by message type will be appended to this.
# (string value)
#rpc_driver_queue_base=cells.intercell
#
# Options defined in nova.cells.scheduler
#
# Filter classes the cells scheduler should use. An entry of
# "nova.cells.filters.all_filters" maps to all cells filters
# included with nova. (list value)
#scheduler_filter_classes=nova.cells.filters.all_filters
# Weigher classes the cells scheduler should use. An entry of
# "nova.cells.weights.all_weighers" maps to all cell weighers
# included with nova. (list value)
#scheduler_weight_classes=nova.cells.weights.all_weighers
# How many retries when no cells are available. (integer
# value)
#scheduler_retries=10
# How often to retry in seconds when no cells are available.
# (integer value)
#scheduler_retry_delay=2
#
# Options defined in nova.cells.state
#
# Interval, in seconds, for getting fresh cell information
# from the database. (integer value)
#db_check_interval=60
# Configuration file from which to read cells configuration.
# If given, overrides reading cells from the database. (string
# value)
#cells_config=
#
# Options defined in nova.cells.weights.mute_child
#
# Multiplier used to weigh mute children. (The value should be
# negative.) (floating point value)
#mute_weight_multiplier=-10.0
# Weight value assigned to mute children. (The value should be
# positive.) (floating point value)
#mute_weight_value=1000.0
#
# Options defined in nova.cells.weights.ram_by_instance_type
#
# Multiplier used for weighing ram. Negative numbers mean to
# stack vs spread. (floating point value)
#ram_weight_multiplier=10.0
#
# Options defined in nova.cells.weights.weight_offset
#
# Multiplier used to weigh offset weigher. (floating point
# value)
#offset_weight_multiplier=1.0
[cinder]
#
# Options defined in nova.volume.cinder
#
# Info to match when looking for cinder in the service
# catalog. Format is: separated values of the form:
# :: (string value)
#catalog_info=volumev2:cinderv2:publicURL
# Override service catalog lookup with template for cinder
# endpoint e.g. http://localhost:8776/v1/%(project_id)s
# (string value)
#endpoint_template=
# Number of cinderclient retries on failed http calls (integer
# value)
#http_retries=3
# Allow attach between instance and volume in different
# availability zones. (boolean value)
#cross_az_attach=true
[conductor]
#
# Options defined in nova.conductor.api
#
# Perform nova-conductor operations locally (boolean value)
#use_local=false
# The topic on which conductor nodes listen (string value)
#topic=conductor
# Full class name for the Manager for conductor (string value)
#manager=nova.conductor.manager.ConductorManager
# Number of workers for OpenStack Conductor service. The
# default will be the number of CPUs available. (integer
# value)
#workers=
[database]
connection = mysql://nova:openg00dle@controller/nova
#
# From oslo.db
#
# The file name to use with SQLite. (string value)
# Deprecated group;name - DEFAULT;sqlite_db
#sqlite_db=oslo.sqlite
# If True, SQLite uses synchronous mode. (boolean value)
# Deprecated group;name - DEFAULT;sqlite_synchronous
#sqlite_synchronous=true
# The back end to use for the database. (string value)
# Deprecated group;name - DEFAULT;db_backend
#backend=sqlalchemy
# The SQLAlchemy connection string to use to connect to the database. (string
# value)
# Deprecated group;name - DEFAULT;sql_connection
# Deprecated group;name - [DATABASE]/sql_connection
# Deprecated group;name - [sql]/connection
#connection=
# The SQLAlchemy connection string to use to connect to the slave database.
# (string value)
#slave_connection=
# The SQL mode to be used for MySQL sessions. This option, including the
# default, overrides any server-set SQL mode. To use whatever SQL mode is set
# by the server configuration, set this to no value. Example: mysql_sql_mode=
# (string value)
#mysql_sql_mode=TRADITIONAL
# Timeout before idle SQL connections are reaped. (integer value)
# Deprecated group;name - DEFAULT;sql_idle_timeout
# Deprecated group;name - [DATABASE]/sql_idle_timeout
# Deprecated group;name - [sql]/idle_timeout
#idle_timeout=3600
# Minimum number of SQL connections to keep open in a pool. (integer value)
# Deprecated group;name - DEFAULT;sql_min_pool_size
# Deprecated group;name - [DATABASE]/sql_min_pool_size
#min_pool_size=1
# Maximum number of SQL connections to keep open in a pool. (integer value)
# Deprecated group;name - DEFAULT;sql_max_pool_size
# Deprecated group;name - [DATABASE]/sql_max_pool_size
#max_pool_size=
# Maximum number of database connection retries during startup. Set to -1 to
# specify an infinite retry count. (integer value)
# Deprecated group;name - DEFAULT;sql_max_retries
# Deprecated group;name - [DATABASE]/sql_max_retries
#max_retries=10
# Interval between retries of opening a SQL connection. (integer value)
# Deprecated group;name - DEFAULT;sql_retry_interval
# Deprecated group;name - [DATABASE]/reconnect_interval
#retry_interval=10
# If set, use this value for max_overflow with SQLAlchemy. (integer value)
# Deprecated group;name - DEFAULT;sql_max_overflow
# Deprecated group;name - [DATABASE]/sqlalchemy_max_overflow
#max_overflow=
# Verbosity of SQL debugging information: 0=None, 100=Everything. (integer
# value)
# Deprecated group;name - DEFAULT;sql_connection_debug
#connection_debug=0
# Add Python stack traces to SQL as comment strings. (boolean value)
# Deprecated group;name - DEFAULT;sql_connection_trace
#connection_trace=false
# If set, use this value for pool_timeout with SQLAlchemy. (integer value)
# Deprecated group;name - [DATABASE]/sqlalchemy_pool_timeout
#pool_timeout=
# Enable the experimental use of database reconnect on connection lost.
# (boolean value)
#use_db_reconnect=false
# Seconds between retries of a database transaction. (integer value)
#db_retry_interval=1
# If True, increases the interval between retries of a database operation up to
# db_max_retry_interval. (boolean value)
#db_inc_retry_interval=true
# If db_inc_retry_interval is set, the maximum seconds between retries of a
# database operation. (integer value)
#db_max_retry_interval=10
# Maximum retries in case of connection error or deadlock error before error is
# raised. Set to -1 to specify an infinite retry count. (integer value)
#db_max_retries=20
#
# Options defined in nova.db.sqlalchemy.api
#
# The SQLAlchemy connection string to use to connect to the
# slave database. (string value)
#slave_connection=
# The SQL mode to be used for MySQL sessions. This option,
# including the default, overrides any server-set SQL mode. To
# use whatever SQL mode is set by the server configuration,
# set this to no value. Example: mysql_sql_mode= (string
# value)
#mysql_sql_mode=TRADITIONAL
[ephemeral_storage_encryption]
#
# Options defined in nova.compute.api
#
# Whether to encrypt ephemeral storage (boolean value)
#enabled=false
# The cipher and mode to be used to encrypt ephemeral storage.
# Which ciphers are available ciphers depends on kernel
# support. See /proc/crypto for the list of available options.
# (string value)
#cipher=aes-xts-plain64
# The bit length of the encryption key to be used to encrypt
# ephemeral storage (in XTS mode only half of the bits are
# used for encryption key) (integer value)
#key_size=512
[glance]
host = controller
#
# Options defined in nova.image.glance
#
# Default glance hostname or IP address (string value)
#host=$my_ip
# Default glance port (integer value)
#port=9292
# Default protocol to use when connecting to glance. Set to
# https for SSL. (string value)
#protocol=http
# A list of the glance api servers available to nova. Prefix
# with https:// for ssl-based glance api servers.
# ([hostname|ip]:port) (list value)
#api_servers=
# Allow to perform insecure SSL (https) requests to glance
# (boolean value)
#api_insecure=false
# Number of retries when uploading / downloading an image to /
# from glance. (integer value)
#num_retries=0
# A list of url scheme that can be downloaded directly via the
# direct_url. Currently supported schemes: [file]. (list
# value)
#allowed_direct_url_schemes=
[guestfs]
#
# Options defined in nova.virt.disk.vfs.guestfs
#
# Enable guestfs debug (boolean value)
#debug=false
[hyperv]
#
# Options defined in nova.virt.hyperv.pathutils
#
# The name of a Windows share name mapped to the
# "instances_path" dir and used by the resize feature to copy
# files to the target host. If left blank, an administrative
# share will be used, looking for the same "instances_path"
# used locally (string value)
#instances_path_share=
#
# Options defined in nova.virt.hyperv.utilsfactory
#
# Force V1 WMI utility classes (boolean value)
#force_hyperv_utils_v1=false
# Force V1 volume utility class (boolean value)
#force_volumeutils_v1=false
#
# Options defined in nova.virt.hyperv.vif
#
# External virtual switch Name, if not provided, the first
# external virtual switch is used (string value)
#vswitch_name=
#
# Options defined in nova.virt.hyperv.vmops
#
# Required for live migration among hosts with different CPU
# features (boolean value)
#limit_cpu_features=false
# Sets the admin password in the config drive image (boolean
# value)
#config_drive_inject_password=false
# Path of qemu-img command which is used to convert between
# different image types (string value)
#qemu_img_cmd=qemu-img.exe
# Attaches the Config Drive image as a cdrom drive instead of
# a disk drive (boolean value)
#config_drive_cdrom=false
# Enables metrics collections for an instance by using
# Hyper-V's metric APIs. Collected data can by retrieved by
# other apps and services, e.g.: Ceilometer. Requires Hyper-V
# / Windows Server 2012 and above (boolean value)
#enable_instance_metrics_collection=false
# Enables dynamic memory allocation (ballooning) when set to a
# value greater than 1. The value expresses the ratio between
# the total RAM assigned to an instance and its startup RAM
# amount. For example a ratio of 2.0 for an instance with
# 1024MB of RAM implies 512MB of RAM allocated at startup
# (floating point value)
#dynamic_memory_ratio=1.0
# Number of seconds to wait for instance to shut down after
# soft reboot request is made. We fall back to hard reboot if
# instance does not shutdown within this window. (integer
# value)
#wait_soft_reboot_seconds=60
#
# Options defined in nova.virt.hyperv.volumeops
#
# The number of times to retry to attach a volume (integer
# value)
#volume_attach_retry_count=10
# Interval between volume attachment attempts, in seconds
# (integer value)
#volume_attach_retry_interval=5
# The number of times to retry checking for a disk mounted via
# iSCSI. (integer value)
#mounted_disk_query_retry_count=10
# Interval between checks for a mounted iSCSI disk, in
# seconds. (integer value)
#mounted_disk_query_retry_interval=5
[image_file_url]
#
# Options defined in nova.image.download.file
#
# List of file systems that are configured in this file in the
# image_file_url: sections (list value)
#filesystems=
[ironic]
#
# Options defined in nova.virt.ironic.driver
#
# Version of Ironic API service endpoint. (integer value)
#api_version=1
# URL for Ironic API endpoint. (string value)
#api_endpoint=
# Ironic keystone admin name (string value)
#admin_username=
# Ironic keystone admin password. (string value)
#admin_password=%SERVICE_PASSWORD%
# Ironic keystone auth token. (string value)
#admin_auth_token=
# Keystone public API endpoint. (string value)
#admin_url=
# Log level override for ironicclient. Set this in order to
# override the global "default_log_levels", "verbose", and
# "debug" settings. DEPRECATED: use standard logging
# configuration. (string value)
#client_log_level=
# Ironic keystone tenant name. (string value)
#admin_tenant_name=%SERVICE_TENANT_NAME%
# How many retries when a request does conflict. (integer
# value)
#api_max_retries=60
# How often to retry in seconds when a request does conflict
# (integer value)
#api_retry_interval=2
[keymgr]
#
# Options defined in nova.keymgr
#
# The full class name of the key manager API class (string
# value)
#api_class=nova.keymgr.conf_key_mgr.ConfKeyManager
#
# Options defined in nova.keymgr.conf_key_mgr
#
# Fixed key returned by key manager, specified in hex (string
# value)
#fixed_key=
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = nova
password = sleestack
#
# From keystonemiddleware.auth_token
#
# Complete public Identity API endpoint. (string value)
#auth_uri=
# API version of the admin Identity API endpoint. (string value)
#auth_version=v2.0
# Do not handle authorization requests within the middleware, but delegate the
# authorization decision to downstream WSGI components. (boolean value)
#delay_auth_decision=false
# Request timeout value for communicating with Identity API server. (integer
# value)
#http_connect_timeout=
# How many times are we trying to reconnect when communicating with Identity
# API Server. (integer value)
#http_request_max_retries=3
# Env key for the swift cache. (string value)
#cache=
# Required if identity server requires client certificate (string value)
#certfile=
# Required if identity server requires client certificate (string value)
#keyfile=
# A PEM encoded Certificate Authority to use when verifying HTTPs connections.
# Defaults to system CAs. (string value)
#cafile=
# Verify HTTPS connections. (boolean value)
#insecure=false
# Directory used to cache files related to PKI tokens. (string value)
#signing_dir=
# Optionally specify a list of memcached server(s) to use for caching. If left
# undefined, tokens will instead be cached in-process. (list value)
# Deprecated group;name - DEFAULT;memcache_servers
#memcached_servers=
# In order to prevent excessive effort spent validating tokens, the middleware
# caches previously-seen tokens for a configurable duration (in seconds). Set
# to -1 to disable caching completely. (integer value)
#token_cache_time=300
# Determines the frequency at which the list of revoked tokens is retrieved
# from the Identity service (in seconds). A high number of revocation events
# combined with a low cache duration may significantly reduce performance.
# (integer value)
#revocation_cache_time=10
# (Optional) If defined, indicate whether token data should be authenticated or
# authenticated and encrypted. Acceptable values are MAC or ENCRYPT. If MAC,
# token data is authenticated (with HMAC) in the cache. If ENCRYPT, token data
# is encrypted and authenticated in the cache. If the value is not one of these
# options or empty, auth_token will raise an exception on initialization.
# (string value)
#memcache_security_strategy=
# (Optional, mandatory if memcache_security_strategy is defined) This string is
# used for key derivation. (string value)
#memcache_secret_key=
# (Optional) Number of seconds memcached server is considered dead before it is
# tried again. (integer value)
#memcache_pool_dead_retry=300
# (Optional) Maximum total number of open connections to every memcached
# server. (integer value)
#memcache_pool_maxsize=10
# (Optional) Socket timeout in seconds for communicating with a memcache
# server. (integer value)
#memcache_pool_socket_timeout=3
# (Optional) Number of seconds a connection to memcached is held unused in the
# pool before it is closed. (integer value)
#memcache_pool_unused_timeout=60
# (Optional) Number of seconds that an operation will wait to get a memcache
# client connection from the pool. (integer value)
#memcache_pool_conn_get_timeout=10
# (Optional) Use the advanced (eventlet safe) memcache client pool. The
# advanced pool will only work under python 2.x. (boolean value)
#memcache_use_advanced_pool=false
# (Optional) Indicate whether to set the X-Service-Catalog header. If False,
# middleware will not ask for service catalog on token validation and will not
# set the X-Service-Catalog header. (boolean value)
#include_service_catalog=true
# Used to control the use and type of token binding. Can be set to: "disabled"
# to not check token binding. "permissive" (default) to validate binding
# information if the bind type is of a form known to the server and ignore it
# if not. "strict" like "permissive" but if the bind type is unknown the token
# will be rejected. "required" any form of token binding is needed to be
# allowed. Finally the name of a binding method that must be present in tokens.
# (string value)
#enforce_token_bind=permissive
# If true, the revocation list will be checked for cached tokens. This requires
# that PKI tokens are configured on the identity server. (boolean value)
#check_revocations_for_cached=false
# Hash algorithms to use for hashing PKI tokens. This may be a single algorithm
# or multiple. The algorithms are those supported by Python standard
# hashlib.new(). The hashes will be tried in the order given, so put the
# preferred one first for performance. The result of the first hash will be
# stored in the cache. This will typically be set to multiple values only while
# migrating from a less secure algorithm to a more secure one. Once all the old
# tokens are expired this option should be set to a single value for better
# performance. (list value)
#hash_algorithms=md5
# Prefix to prepend at the beginning of the path. Deprecated, use identity_uri.
# (string value)
#auth_admin_prefix =
# Host providing the admin Identity API endpoint. Deprecated, use identity_uri.
# (string value)
#auth_host=127.0.0.1
# Port of the admin Identity API endpoint. Deprecated, use identity_uri.
# (integer value)
#auth_port=35357
# Protocol of the admin Identity API endpoint (http or https). Deprecated, use
# identity_uri. (string value)
#auth_protocol=http
# Complete admin Identity API endpoint. This should specify the unversioned
# root endpoint e.g. https://localhost:35357/ (string value)
#identity_uri=
# This option is deprecated and may be removed in a future release. Single
# shared secret with the Keystone configuration used for bootstrapping a
# Keystone installation, or otherwise bypassing the normal authentication
# process. This option should not be used, use `admin_user` and
# `admin_password` instead. (string value)
#admin_token=
# Service username. (string value)
#admin_user=%SERVICE_USER%
# Service user password. (string value)
#admin_password=
# Service tenant name. (string value)
#admin_tenant_name=admin
[libvirt]
#
# Options defined in nova.virt.libvirt.driver
#
# Rescue ami image. This will not be used if an image id is
# provided by the user. (string value)
#rescue_image_id=
# Rescue aki image (string value)
#rescue_kernel_id=
# Rescue ari image (string value)
#rescue_ramdisk_id=
# Libvirt domain type (valid options are: kvm, lxc, qemu, uml,
# xen and parallels) (string value)
#virt_type=kvm
# Override the default libvirt URI (which is dependent on
# virt_type) (string value)
#connection_uri=
# Inject the admin password at boot time, without an agent.
# (boolean value)
#inject_password=false
# Inject the ssh public key at boot time (boolean value)
#inject_key=false
# The partition to inject to : -2 => disable, -1 => inspect
# (libguestfs only), 0 => not partitioned, >0 => partition
# number (integer value)
#inject_partition=-2
# Sync virtual and real mouse cursors in Windows VMs (boolean
# value)
#use_usb_tablet=true
# Migration target URI (any included "%s" is replaced with the
# migration target hostname) (string value)
#live_migration_uri=qemu+tcp://%s/system
# Migration flags to be set for live migration (string value)
#live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE, VIR_MIGRATE_TUNNELLED
# Migration flags to be set for block migration (string value)
#block_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE, VIR_MIGRATE_TUNNELLED, VIR_MIGRATE_NON_SHARED_INC
# Maximum bandwidth to be used during migration, in Mbps
# (integer value)
#live_migration_bandwidth=0
# Snapshot image format (valid options are : raw, qcow2, vmdk,
# vdi). Defaults to same as source image (string value)
#snapshot_image_format=
# Override the default disk prefix for the devices attached to
# a server, which is dependent on virt_type. (valid options
# are: sd, xvd, uvd, vd) (string value)
#disk_prefix=
# Number of seconds to wait for instance to shut down after
# soft reboot request is made. We fall back to hard reboot if
# instance does not shutdown within this window. (integer
# value)
#wait_soft_reboot_seconds=120
# Set to "host-model" to clone the host CPU feature flags; to
# "host-passthrough" to use the host CPU model exactly; to
# "custom" to use a named CPU model; to "none" to not set any
# CPU model. If virt_type="kvm|qemu", it will default to
# "host-model", otherwise it will default to "none" (string
# value)
#cpu_mode=
# Set to a named libvirt CPU model (see names listed in
# /usr/share/libvirt/cpu_map.xml). Only has effect if
# cpu_mode="custom" and virt_type="kvm|qemu" (string value)
#cpu_model=
# Location where libvirt driver will store snapshots before
# uploading them to image service (string value)
#snapshots_directory=$instances_path/snapshots
# Location where the Xen hvmloader is kept (string value)
#xen_hvmloader_path=/usr/lib/xen/boot/hvmloader
# Specific cachemodes to use for different disk types e.g:
# file=directsync,block=none (list value)
#disk_cachemodes=
# A path to a device that will be used as source of entropy on
# the host. Permitted options are: /dev/random or /dev/hwrng
# (string value)
#rng_dev_path=
# For qemu or KVM guests, set this option to specify a default
# machine type per host architecture. You can find a list of
# supported machine types in your environment by checking the
# output of the "virsh capabilities"command. The format of the
# value for this config option is host-arch=machine-type. For
# example: x86_64=machinetype1,armv7l=machinetype2 (list
# value)
#hw_machine_type=
# The data source used to the populate the host "serial" UUID
# exposed to guest in the virtual BIOS. Permitted options are
# "hardware", "os", "none" or "auto" (default). (string value)
#sysinfo_serial=auto
# A number of seconds to memory usage statistics period. Zero
# or negative value mean to disable memory usage statistics.
# (integer value)
#mem_stats_period_seconds=10
# List of uid targets and ranges.Syntax is guest-uid:host-
# uid:countMaximum of 5 allowed. (list value)
#uid_maps=
# List of guid targets and ranges.Syntax is guest-gid:host-
# gid:countMaximum of 5 allowed. (list value)
#gid_maps=
#
# Options defined in nova.virt.libvirt.imagebackend
#
# VM Images format. Acceptable values are: raw, qcow2, lvm,
# rbd, default. If default is specified, then use_cow_images
# flag is used instead of this one. (string value)
#images_type=default
# LVM Volume Group that is used for VM images, when you
# specify images_type=lvm. (string value)
#images_volume_group=
# Create sparse logical volumes (with virtualsize) if this
# flag is set to True. (boolean value)
#sparse_logical_volumes=false
# The RADOS pool in which rbd volumes are stored (string
# value)
#images_rbd_pool=rbd
# Path to the ceph configuration file to use (string value)
#images_rbd_ceph_conf=
# Discard option for nova managed disks (valid options are:
# ignore, unmap). Need Libvirt(1.0.6) Qemu1.5 (raw format)
# Qemu1.6(qcow2 format) (string value)
#hw_disk_discard=
#
# Options defined in nova.virt.libvirt.imagecache
#
# Allows image information files to be stored in non-standard
# locations (string value)
#image_info_filename_pattern=$instances_path/$image_cache_subdirectory_name/%(image)s.info
# Should unused kernel images be removed? This is only safe to
# enable if all compute nodes have been updated to support
# this option. This will be enabled by default in future.
# (boolean value)
#remove_unused_kernels=false
# Unused resized base images younger than this will not be
# removed (integer value)
#remove_unused_resized_minimum_age_seconds=3600
# Write a checksum for files in _base to disk (boolean value)
#checksum_base_images=false
# How frequently to checksum base images (integer value)
#checksum_interval_seconds=3600
#
# Options defined in nova.virt.libvirt.lvm
#
# Method used to wipe old volumes (valid options are: none,
# zero, shred) (string value)
#volume_clear=zero
# Size in MiB to wipe at start of old volumes. 0 => all
# (integer value)
#volume_clear_size=0
#
# Options defined in nova.virt.libvirt.utils
#
# Compress snapshot images when possible. This currently
# applies exclusively to qcow2 images (boolean value)
#snapshot_compression=false
#
# Options defined in nova.virt.libvirt.vif
#
# Use virtio for bridge interfaces with KVM/QEMU (boolean
# value)
#use_virtio_for_bridges=true
#
# Options defined in nova.virt.libvirt.volume
#
# Number of times to rescan iSCSI target to find volume
# (integer value)
#num_iscsi_scan_tries=5
# Number of times to rescan iSER target to find volume
# (integer value)
#num_iser_scan_tries=5
# The RADOS client name for accessing rbd volumes (string
# value)
#rbd_user=
# The libvirt UUID of the secret for the rbd_uservolumes
# (string value)
#rbd_secret_uuid=
# Directory where the NFS volume is mounted on the compute
# node (string value)
#nfs_mount_point_base=$state_path/mnt
# Mount options passed to the NFS client. See section of the
# nfs man page for details (string value)
#nfs_mount_options=
# Directory where the SMBFS shares are mounted on the compute
# node (string value)
#smbfs_mount_point_base=$state_path/mnt
# Mount options passed to the SMBFS client. See mount.cifs man
# page for details. Note that the libvirt-qemu uid and gid
# must be specified. (string value)
#smbfs_mount_options=
# Number of times to rediscover AoE target to find volume
# (integer value)
#num_aoe_discover_tries=3
# Directory where the glusterfs volume is mounted on the
# compute node (string value)
#glusterfs_mount_point_base=$state_path/mnt
# Use multipath connection of the iSCSI volume (boolean value)
#iscsi_use_multipath=false
# Use multipath connection of the iSER volume (boolean value)
#iser_use_multipath=false
# Path or URL to Scality SOFS configuration file (string
# value)
#scality_sofs_config=