Add support for post-deployment provisioning.
* This change adds provisioning for: - demo usage - adds demo tenant, cirros image, and configures quantum networking - tempest configuration - checks out the tempest tree and configures tempest.conf to work with resources provisioned for demo usage - ovs external bridge configuration - ensures that the ovs external bridge is correctly configured to support VM connectivity via floating ips * Only a single-host deployment is supported at present, due to: - the openstack puppet modules presuming local access to the different services' configuration files (e.g. /etc/nova/nova.conf) - the ovs bridge configuration only being valid for a single-host deployment. Change-Id: I485baedfe63ba90d221b6e376eb5d5aeb14e0d93
This commit is contained in:
parent
19c61951d5
commit
8c92bf4bc1
|
@ -67,3 +67,9 @@
|
|||
[submodule "packstack/puppet/modules/quantum"]
|
||||
path = packstack/puppet/modules/quantum
|
||||
url = https://github.com/stackforge/puppet-quantum.git
|
||||
[submodule "packstack/puppet/modules/tempest"]
|
||||
path = packstack/puppet/modules/tempest
|
||||
url = git://github.com/stackforge/puppet-tempest.git
|
||||
[submodule "packstack/puppet/modules/vcsrepo"]
|
||||
path = packstack/puppet/modules/vcsrepo
|
||||
url = https://github.com/puppetlabs/puppetlabs-vcsrepo.git
|
||||
|
|
|
@ -0,0 +1,156 @@
|
|||
"""
|
||||
Installs and configures quantum
|
||||
"""
|
||||
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import uuid
|
||||
|
||||
from packstack.installer import utils
|
||||
from packstack.installer import validators
|
||||
|
||||
from packstack.modules.ospluginutils import (
|
||||
appendManifestFile,
|
||||
getManifestTemplate,
|
||||
gethostlist,
|
||||
)
|
||||
|
||||
|
||||
# Controller object will be initialized from main flow
|
||||
controller = None
|
||||
|
||||
# Plugin name
|
||||
PLUGIN_NAME = "OS-Provision"
|
||||
|
||||
logging.debug("plugin %s loaded", __name__)
|
||||
|
||||
|
||||
def initConfig(controllerObject):
|
||||
global controller
|
||||
controller = controllerObject
|
||||
|
||||
logging.debug("Provisioning OpenStack resources for demo usage and testing")
|
||||
|
||||
conf_params = {
|
||||
"PROVISION_DEMO" : [
|
||||
{"CMD_OPTION" : "provision-demo",
|
||||
"USAGE" : "Whether to provision for demo usage and testing",
|
||||
"PROMPT" : "Would you like to provision for demo usage and testing?",
|
||||
"OPTION_LIST" : ["y", "n"],
|
||||
"VALIDATORS" : [validators.validate_options],
|
||||
"DEFAULT_VALUE" : "n",
|
||||
"MASK_INPUT" : False,
|
||||
"LOOSE_VALIDATION": True,
|
||||
"CONF_NAME" : "CONFIG_PROVISION_DEMO",
|
||||
"USE_DEFAULT" : False,
|
||||
"NEED_CONFIRM" : False,
|
||||
"CONDITION" : False },
|
||||
],
|
||||
"PROVISION_TEMPEST" : [
|
||||
{"CMD_OPTION" : "provision-tempest",
|
||||
"USAGE" : "Whether to configure tempest for testing",
|
||||
"PROMPT" : "Would you like to configure Tempest (OpenStack test suite)?",
|
||||
"OPTION_LIST" : ["y", "n"],
|
||||
"VALIDATORS" : [validators.validate_options],
|
||||
"DEFAULT_VALUE" : "n",
|
||||
"MASK_INPUT" : False,
|
||||
"LOOSE_VALIDATION": True,
|
||||
"CONF_NAME" : "CONFIG_PROVISION_TEMPEST",
|
||||
"USE_DEFAULT" : False,
|
||||
"NEED_CONFIRM" : False,
|
||||
"CONDITION" : False },
|
||||
],
|
||||
"PROVISION_ALL_IN_ONE_OVS_BRIDGE" : [
|
||||
{"CMD_OPTION" : "provision-all-in-one-ovs-bridge",
|
||||
"USAGE" : "Whether to configure the ovs external bridge in an all-in-one deployment",
|
||||
"PROMPT" : "Would you like to configure the external ovs bridge?",
|
||||
"OPTION_LIST" : ["y", "n"],
|
||||
"VALIDATORS" : [validators.validate_options],
|
||||
"DEFAULT_VALUE" : "n",
|
||||
"MASK_INPUT" : False,
|
||||
"LOOSE_VALIDATION": True,
|
||||
"CONF_NAME" : "CONFIG_PROVISION_ALL_IN_ONE_OVS_BRIDGE",
|
||||
"USE_DEFAULT" : False,
|
||||
"NEED_CONFIRM" : False,
|
||||
"CONDITION" : False },
|
||||
],
|
||||
}
|
||||
|
||||
def is_all_in_one(config):
|
||||
return len(gethostlist(config)) == 1
|
||||
|
||||
def allow_provisioning(config):
|
||||
# Provisioning is currently supported only for all-in-one (due
|
||||
# to a limitation with how the custom types for OpenStack
|
||||
# resources are implemented) and quantum with namespaces (due
|
||||
# to the provisioning manifest assuming this configuration).
|
||||
return is_all_in_one(config) and \
|
||||
config['CONFIG_QUANTUM_INSTALL'] == 'y' and \
|
||||
config['CONFIG_QUANTUM_USE_NAMESPACES'] == 'y'
|
||||
|
||||
def allow_all_in_one_ovs_bridge(config):
|
||||
return allow_provisioning(config) and \
|
||||
config['CONFIG_QUANTUM_L2_PLUGIN'] == 'openvswitch'
|
||||
|
||||
conf_groups = [
|
||||
{ "GROUP_NAME" : "PROVISION_DEMO",
|
||||
"DESCRIPTION" : "Provisioning demo config",
|
||||
"PRE_CONDITION" : allow_provisioning,
|
||||
"PRE_CONDITION_MATCH" : True,
|
||||
"POST_CONDITION" : False,
|
||||
"POST_CONDITION_MATCH" : True },
|
||||
{ "GROUP_NAME" : "PROVISION_TEMPEST",
|
||||
"DESCRIPTION" : "Provisioning tempest config",
|
||||
"PRE_CONDITION" : allow_provisioning,
|
||||
"PRE_CONDITION_MATCH" : True,
|
||||
"POST_CONDITION" : False,
|
||||
"POST_CONDITION_MATCH" : True },
|
||||
{ "GROUP_NAME" : "PROVISION_ALL_IN_ONE_OVS_BRIDGE",
|
||||
"DESCRIPTION" : "Provisioning all-in-one ovs bridge config",
|
||||
"PRE_CONDITION" : allow_all_in_one_ovs_bridge,
|
||||
"PRE_CONDITION_MATCH" : True,
|
||||
"POST_CONDITION" : False,
|
||||
"POST_CONDITION_MATCH" : True },
|
||||
]
|
||||
|
||||
for group in conf_groups:
|
||||
paramList = conf_params[group["GROUP_NAME"]]
|
||||
controller.addGroup(group, paramList)
|
||||
|
||||
|
||||
def marshall_conf_bool(conf, key):
|
||||
if conf[key] == 'y':
|
||||
conf[key] = 'true'
|
||||
else:
|
||||
conf[key] = 'false'
|
||||
|
||||
|
||||
def initSequences(controller):
|
||||
provisioning_required = (
|
||||
controller.CONF['CONFIG_PROVISION_DEMO'] == 'y'
|
||||
or
|
||||
controller.CONF['CONFIG_PROVISION_TEMPEST'] == 'y'
|
||||
)
|
||||
if not provisioning_required:
|
||||
return
|
||||
marshall_conf_bool(controller.CONF, 'CONFIG_PROVISION_TEMPEST')
|
||||
marshall_conf_bool(controller.CONF,
|
||||
'CONFIG_PROVISION_ALL_IN_ONE_OVS_BRIDGE')
|
||||
provision_steps = [
|
||||
{
|
||||
'title': 'Adding Provisioning manifest entries',
|
||||
'functions': [create_manifest],
|
||||
}
|
||||
]
|
||||
controller.addSequence("Provisioning for Demo and Testing Usage",
|
||||
[], [], provision_steps)
|
||||
|
||||
|
||||
def create_manifest(config):
|
||||
# Using the server host will suffice for the all-in-one case.
|
||||
manifest_file = '%s_provision.pp' % (
|
||||
controller.CONF['CONFIG_QUANTUM_SERVER_HOST']
|
||||
)
|
||||
manifest_data = getManifestTemplate("provision.pp")
|
||||
appendManifestFile(manifest_file, manifest_data)
|
|
@ -90,7 +90,8 @@ def copyPuppetModules(config):
|
|||
'keystone', 'memcached', 'mysql',
|
||||
'nova', 'openstack', 'packstack',
|
||||
'qpid', 'quantum', 'rsync', 'ssh', 'stdlib',
|
||||
'swift', 'sysctl', 'vlan', 'vswitch', 'xinetd'))
|
||||
'swift', 'sysctl', 'tempest', 'vcsrepo',
|
||||
'vlan', 'vswitch', 'xinetd'))
|
||||
|
||||
# write puppet manifest to disk
|
||||
manifestfiles.writeManifests()
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit b144d4e6c5082f7061c59c7179ddc17ef6dc15ab
|
||||
Subproject commit 850bca13c71e069dfca7dff3b633ca7f746ead61
|
|
@ -1 +1 @@
|
|||
Subproject commit c355f97cbe614b8ece37ccf16438b30ba07d8dd1
|
||||
Subproject commit 6f54428601c673baba4e70049ecbc798bd9bad64
|
|
@ -1 +1 @@
|
|||
Subproject commit 7bdab85f3598623a84fc3226e39e11535a6e5615
|
||||
Subproject commit 3de147b0248eadf48cbfb0955b29e54bda7050af
|
|
@ -1 +1 @@
|
|||
Subproject commit 894e1871e69b00985688b536667e12907cbaa035
|
||||
Subproject commit e3d0020a96d66e7293334cc856955add6e08f710
|
|
@ -1 +1 @@
|
|||
Subproject commit 32419e77edd2908f767490f00e5d333ea80d046c
|
||||
Subproject commit 4d2558f383e18bbe322dd0feb073555491216ab4
|
|
@ -0,0 +1 @@
|
|||
Subproject commit fbe43e5d6a3227897115a73d06d3daf28fffe59f
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 2c81045b533150e8963384a2e812f57e9bfde134
|
|
@ -0,0 +1,5 @@
|
|||
class { 'openstack::provision':
|
||||
admin_password => '%(CONFIG_KEYSTONE_ADMIN_PW)s',
|
||||
configure_tempest => %(CONFIG_PROVISION_TEMPEST)s,
|
||||
setup_ovs_bridge => %(CONFIG_PROVISION_ALL_IN_ONE_OVS_BRIDGE)s
|
||||
}
|
Loading…
Reference in New Issue