diff --git a/.gitmodules b/.gitmodules index 589558631..c252a4c20 100644 --- a/.gitmodules +++ b/.gitmodules @@ -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 diff --git a/packstack/plugins/provision_700.py b/packstack/plugins/provision_700.py new file mode 100644 index 000000000..15e641160 --- /dev/null +++ b/packstack/plugins/provision_700.py @@ -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) diff --git a/packstack/plugins/puppet_950.py b/packstack/plugins/puppet_950.py index 58433cc91..d833105f2 100644 --- a/packstack/plugins/puppet_950.py +++ b/packstack/plugins/puppet_950.py @@ -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() diff --git a/packstack/puppet/modules/glance b/packstack/puppet/modules/glance index b144d4e6c..850bca13c 160000 --- a/packstack/puppet/modules/glance +++ b/packstack/puppet/modules/glance @@ -1 +1 @@ -Subproject commit b144d4e6c5082f7061c59c7179ddc17ef6dc15ab +Subproject commit 850bca13c71e069dfca7dff3b633ca7f746ead61 diff --git a/packstack/puppet/modules/keystone b/packstack/puppet/modules/keystone index c355f97cb..6f5442860 160000 --- a/packstack/puppet/modules/keystone +++ b/packstack/puppet/modules/keystone @@ -1 +1 @@ -Subproject commit c355f97cbe614b8ece37ccf16438b30ba07d8dd1 +Subproject commit 6f54428601c673baba4e70049ecbc798bd9bad64 diff --git a/packstack/puppet/modules/openstack b/packstack/puppet/modules/openstack index 7bdab85f3..3de147b02 160000 --- a/packstack/puppet/modules/openstack +++ b/packstack/puppet/modules/openstack @@ -1 +1 @@ -Subproject commit 7bdab85f3598623a84fc3226e39e11535a6e5615 +Subproject commit 3de147b0248eadf48cbfb0955b29e54bda7050af diff --git a/packstack/puppet/modules/quantum b/packstack/puppet/modules/quantum index 894e1871e..e3d0020a9 160000 --- a/packstack/puppet/modules/quantum +++ b/packstack/puppet/modules/quantum @@ -1 +1 @@ -Subproject commit 894e1871e69b00985688b536667e12907cbaa035 +Subproject commit e3d0020a96d66e7293334cc856955add6e08f710 diff --git a/packstack/puppet/modules/stdlib b/packstack/puppet/modules/stdlib index 32419e77e..4d2558f38 160000 --- a/packstack/puppet/modules/stdlib +++ b/packstack/puppet/modules/stdlib @@ -1 +1 @@ -Subproject commit 32419e77edd2908f767490f00e5d333ea80d046c +Subproject commit 4d2558f383e18bbe322dd0feb073555491216ab4 diff --git a/packstack/puppet/modules/tempest b/packstack/puppet/modules/tempest new file mode 160000 index 000000000..fbe43e5d6 --- /dev/null +++ b/packstack/puppet/modules/tempest @@ -0,0 +1 @@ +Subproject commit fbe43e5d6a3227897115a73d06d3daf28fffe59f diff --git a/packstack/puppet/modules/vcsrepo b/packstack/puppet/modules/vcsrepo new file mode 160000 index 000000000..2c81045b5 --- /dev/null +++ b/packstack/puppet/modules/vcsrepo @@ -0,0 +1 @@ +Subproject commit 2c81045b533150e8963384a2e812f57e9bfde134 diff --git a/packstack/puppet/templates/provision.pp b/packstack/puppet/templates/provision.pp new file mode 100644 index 000000000..61bb7700e --- /dev/null +++ b/packstack/puppet/templates/provision.pp @@ -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 +}