Refactor manifest execution
Previously, Packstack created many individual manifest files from smaller snippets (templates), and executed them following a certain order. This is sub-optimal, since it forces code duplication and goes against the Puppet design of running a single manifest. This patch refactors the manifest execution, following these principles: - Only 3 templates used, so max 3 Puppet executions on a host: controller manifest, network node manifest, compute node manifest. - The previous snippets are now part of the Packstack Puppet module, and included as needed by the controller/network/compute manifests. This concept is similar to the one used by the puppet-openstack-integration project [1]. - The remaining Python code is left untouched, so we can keep complete compatibility with previous answer files. - Redis HA support has been removed, as this was the only service with HA enabled and didn't fit the general purpose of Packstack. [1] - https://github.com/openstack/puppet-openstack-integration Change-Id: I87591be0fce98079c85c5c12ad76ea7115fb9c75
This commit is contained in:
@@ -1070,32 +1070,12 @@ MONGODB Config parameters
|
|||||||
Redis Config parameters
|
Redis Config parameters
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
**CONFIG_REDIS_MASTER_HOST**
|
**CONFIG_REDIS_HOST**
|
||||||
IP address of the server on which to install the Redis master server.
|
IP address of the server on which to install the Redis server.
|
||||||
|
|
||||||
**CONFIG_REDIS_PORT**
|
**CONFIG_REDIS_PORT**
|
||||||
Port on which the Redis server(s) listens.
|
Port on which the Redis server listens.
|
||||||
|
|
||||||
**CONFIG_REDIS_HA**
|
|
||||||
Specify 'y' to have Redis try to use HA. ['y', 'n']
|
|
||||||
|
|
||||||
**CONFIG_REDIS_SLAVE_HOSTS**
|
|
||||||
Hosts on which to install Redis slaves.
|
|
||||||
|
|
||||||
**CONFIG_REDIS_SENTINEL_HOSTS**
|
|
||||||
Hosts on which to install Redis sentinel servers.
|
|
||||||
|
|
||||||
**CONFIG_REDIS_SENTINEL_CONTACT_HOST**
|
|
||||||
Host to configure as the Redis coordination sentinel.
|
|
||||||
|
|
||||||
**CONFIG_REDIS_SENTINEL_PORT**
|
|
||||||
Port on which Redis sentinel servers listen.
|
|
||||||
|
|
||||||
**CONFIG_REDIS_SENTINEL_QUORUM**
|
|
||||||
Quorum value for Redis sentinel servers.
|
|
||||||
|
|
||||||
**CONFIG_REDIS_MASTER_NAME**
|
|
||||||
Name of the master server watched by the Redis sentinel. ['[a-z]+']
|
|
||||||
|
|
||||||
Aodh Config parameters
|
Aodh Config parameters
|
||||||
----------------------
|
----------------------
|
||||||
|
@@ -33,7 +33,6 @@ class ManifestFiles(object):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.filelist = []
|
self.filelist = []
|
||||||
self.data = {}
|
self.data = {}
|
||||||
self.global_data = None
|
|
||||||
|
|
||||||
# continuous manifest file that have the same marker can be
|
# continuous manifest file that have the same marker can be
|
||||||
# installed in parallel, if on different servers
|
# installed in parallel, if on different servers
|
||||||
@@ -61,15 +60,12 @@ class ManifestFiles(object):
|
|||||||
Write out the manifest data to disk, this should only be called once
|
Write out the manifest data to disk, this should only be called once
|
||||||
write before the puppet manifests are copied to the various servers
|
write before the puppet manifests are copied to the various servers
|
||||||
"""
|
"""
|
||||||
if not self.global_data:
|
|
||||||
with open(os.path.join(PUPPET_TEMPLATE_DIR, "global.pp")) as gfp:
|
|
||||||
self.global_data = gfp.read() % controller.CONF
|
|
||||||
os.mkdir(basedefs.PUPPET_MANIFEST_DIR, 0o700)
|
os.mkdir(basedefs.PUPPET_MANIFEST_DIR, 0o700)
|
||||||
for fname, data in self.data.items():
|
for fname, data in self.data.items():
|
||||||
path = os.path.join(basedefs.PUPPET_MANIFEST_DIR, fname)
|
path = os.path.join(basedefs.PUPPET_MANIFEST_DIR, fname)
|
||||||
fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600)
|
fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o600)
|
||||||
with os.fdopen(fd, 'w') as fp:
|
with os.fdopen(fd, 'w') as fp:
|
||||||
fp.write(self.global_data + data)
|
fp.write(data)
|
||||||
manifestfiles = ManifestFiles()
|
manifestfiles = ManifestFiles()
|
||||||
|
|
||||||
|
|
||||||
@@ -84,10 +80,6 @@ def appendManifestFile(manifest_name, data, marker=''):
|
|||||||
manifestfiles.addFile(manifest_name, marker, data)
|
manifestfiles.addFile(manifest_name, marker, data)
|
||||||
|
|
||||||
|
|
||||||
def prependManifestFile(manifest_name, data, marker=''):
|
|
||||||
manifestfiles.prependFile(manifest_name, marker, data)
|
|
||||||
|
|
||||||
|
|
||||||
def generateHieraDataFile():
|
def generateHieraDataFile():
|
||||||
os.mkdir(basedefs.HIERADATA_DIR, 0o700)
|
os.mkdir(basedefs.HIERADATA_DIR, 0o700)
|
||||||
with open(HIERA_COMMON_YAML, 'w') as outfile:
|
with open(HIERA_COMMON_YAML, 'w') as outfile:
|
||||||
@@ -97,11 +89,6 @@ def generateHieraDataFile():
|
|||||||
os.symlink(os.path.basename(HIERA_COMMON_YAML), HIERA_DEFAULTS_YAML)
|
os.symlink(os.path.basename(HIERA_COMMON_YAML), HIERA_DEFAULTS_YAML)
|
||||||
|
|
||||||
|
|
||||||
def createFirewallResources(hiera_key, default_value='{}'):
|
|
||||||
hiera_function = "hiera('%s', %s)" % (hiera_key, default_value)
|
|
||||||
return "create_resources(packstack::firewall, %s)\n\n" % hiera_function
|
|
||||||
|
|
||||||
|
|
||||||
def generate_ssl_cert(config, host, service, ssl_key_file, ssl_cert_file):
|
def generate_ssl_cert(config, host, service, ssl_key_file, ssl_cert_file):
|
||||||
"""
|
"""
|
||||||
Wrapper on top of openssl
|
Wrapper on top of openssl
|
||||||
|
@@ -1,5 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
|
|
||||||
def get_mq(config, plugin):
|
|
||||||
return plugin + "_%s.pp" % config.get('CONFIG_AMQP_BACKEND')
|
|
@@ -23,9 +23,6 @@ from packstack.installer import utils
|
|||||||
|
|
||||||
from packstack.modules.common import filtered_hosts
|
from packstack.modules.common import filtered_hosts
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------- AMQP Packstack Plugin Initialization --------------
|
# ------------- AMQP Packstack Plugin Initialization --------------
|
||||||
@@ -155,7 +152,7 @@ def initConfig(controller):
|
|||||||
|
|
||||||
def initSequences(controller):
|
def initSequences(controller):
|
||||||
amqpsteps = [
|
amqpsteps = [
|
||||||
{'title': 'Adding AMQP manifest entries',
|
{'title': 'Preparing AMQP entries',
|
||||||
'functions': [create_manifest]}
|
'functions': [create_manifest]}
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing AMQP", [], [], amqpsteps)
|
controller.addSequence("Installing AMQP", [], [], amqpsteps)
|
||||||
@@ -188,9 +185,6 @@ def create_manifest(config, messages):
|
|||||||
config['CONFIG_AMQP_AUTH_PASSWORD'] = 'guest'
|
config['CONFIG_AMQP_AUTH_PASSWORD'] = 'guest'
|
||||||
config['CONFIG_AMQP_AUTH_USER'] = 'guest'
|
config['CONFIG_AMQP_AUTH_USER'] = 'guest'
|
||||||
|
|
||||||
manifestfile = "%s_amqp.pp" % config['CONFIG_AMQP_HOST']
|
|
||||||
manifestdata = getManifestTemplate('amqp')
|
|
||||||
|
|
||||||
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
||||||
config['CONFIG_AMQP_HOST_URL'] = "[%s]" % config['CONFIG_AMQP_HOST']
|
config['CONFIG_AMQP_HOST_URL'] = "[%s]" % config['CONFIG_AMQP_HOST']
|
||||||
else:
|
else:
|
||||||
@@ -207,6 +201,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['5671', '5672']
|
fw_details[key]['ports'] = ['5671', '5672']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_AMQP_RULES'] = fw_details
|
config['FIREWALL_AMQP_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_AMQP_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'pre')
|
|
||||||
|
@@ -22,10 +22,6 @@ from packstack.installer import validators
|
|||||||
from packstack.installer import processors
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------- Aodh Packstack Plugin Initialization --------------
|
# ------------- Aodh Packstack Plugin Initialization --------------
|
||||||
@@ -76,10 +72,8 @@ def initSequences(controller):
|
|||||||
controller.CONF['CONFIG_CEILOMETER_INSTALL'] != 'y'):
|
controller.CONF['CONFIG_CEILOMETER_INSTALL'] != 'y'):
|
||||||
return
|
return
|
||||||
|
|
||||||
steps = [{'title': 'Adding Aodh manifest entries',
|
steps = [{'title': 'Preparing Aodh entries',
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]}]
|
||||||
{'title': 'Adding Aodh Keystone manifest entries',
|
|
||||||
'functions': [create_keystone_manifest]}]
|
|
||||||
controller.addSequence("Installing OpenStack Aodh", [], [],
|
controller.addSequence("Installing OpenStack Aodh", [], [],
|
||||||
steps)
|
steps)
|
||||||
|
|
||||||
@@ -87,11 +81,6 @@ def initSequences(controller):
|
|||||||
# -------------------------- step functions --------------------------
|
# -------------------------- step functions --------------------------
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
manifestfile = "%s_aodh.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "aodh"))
|
|
||||||
manifestdata += getManifestTemplate("aodh")
|
|
||||||
manifestdata += getManifestTemplate("apache_ports")
|
|
||||||
|
|
||||||
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
||||||
ssl_cert_file = config['CONFIG_AODH_SSL_CERT'] = (
|
ssl_cert_file = config['CONFIG_AODH_SSL_CERT'] = (
|
||||||
'/etc/pki/tls/certs/ssl_amqp_aodh.crt'
|
'/etc/pki/tls/certs/ssl_amqp_aodh.crt'
|
||||||
@@ -113,11 +102,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['8042']
|
fw_details[key]['ports'] = ['8042']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_AODH_RULES'] = fw_details
|
config['FIREWALL_AODH_RULES'] = fw_details
|
||||||
manifestdata += createFirewallResources('FIREWALL_AODH_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'aodh')
|
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_aodh")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
@@ -1,47 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
# implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
"""
|
|
||||||
Installs and configures Apache for all services using it
|
|
||||||
"""
|
|
||||||
|
|
||||||
from packstack.installer import utils
|
|
||||||
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
|
|
||||||
# ------------- Aodh Packstack Plugin Initialization --------------
|
|
||||||
|
|
||||||
PLUGIN_NAME = "OS-Apache"
|
|
||||||
PLUGIN_NAME_COLORED = utils.color_text(PLUGIN_NAME, 'blue')
|
|
||||||
|
|
||||||
|
|
||||||
def initConfig(controller):
|
|
||||||
# No config needed
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
def initSequences(controller):
|
|
||||||
steps = [{'title': 'Adding Apache manifest entries',
|
|
||||||
'functions': [create_manifest]}]
|
|
||||||
controller.addSequence("Setting up Apache", [], [],
|
|
||||||
steps)
|
|
||||||
|
|
||||||
# ------------------------- step functions -------------------------
|
|
||||||
|
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
|
||||||
manifestfile = "%s_apache.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("apache")
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'apache')
|
|
@@ -22,13 +22,8 @@ from packstack.installer import basedefs
|
|||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
from packstack.installer import processors
|
from packstack.installer import processors
|
||||||
from packstack.installer.utils import split_hosts
|
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------- Ceilometer Packstack Plugin Initialization --------------
|
# ------------- Ceilometer Packstack Plugin Initialization --------------
|
||||||
@@ -114,18 +109,18 @@ def initConfig(controller):
|
|||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
],
|
],
|
||||||
"REDIS": [
|
"REDIS": [
|
||||||
{"CMD_OPTION": "redis-master-host",
|
{"CMD_OPTION": "redis-host",
|
||||||
"PROMPT": "Enter the host for the Redis master server",
|
"PROMPT": "Enter the host for the Redis server",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
"VALIDATORS": [validators.validate_ssh],
|
"VALIDATORS": [validators.validate_ssh],
|
||||||
"DEFAULT_VALUE": utils.get_localhost_ip(),
|
"DEFAULT_VALUE": utils.get_localhost_ip(),
|
||||||
"MASK_INPUT": False,
|
"MASK_INPUT": False,
|
||||||
"LOOSE_VALIDATION": False,
|
"LOOSE_VALIDATION": False,
|
||||||
"CONF_NAME": "CONFIG_REDIS_MASTER_HOST",
|
"CONF_NAME": "CONFIG_REDIS_HOST",
|
||||||
"USE_DEFAULT": False,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": False,
|
"NEED_CONFIRM": False,
|
||||||
"CONDITION": False,
|
"CONDITION": False,
|
||||||
"DEPRECATES": ["CONFIG_REDIS_HOST"]},
|
"DEPRECATES": ["CONFIG_REDIS_MASTER_HOST"]},
|
||||||
{"CMD_OPTION": "redis-port",
|
{"CMD_OPTION": "redis-port",
|
||||||
"PROMPT": "Enter the port of the redis server(s)",
|
"PROMPT": "Enter the port of the redis server(s)",
|
||||||
"OPTION_LIST": [],
|
"OPTION_LIST": [],
|
||||||
@@ -137,87 +132,6 @@ def initConfig(controller):
|
|||||||
"USE_DEFAULT": False,
|
"USE_DEFAULT": False,
|
||||||
"NEED_CONFIRM": False,
|
"NEED_CONFIRM": False,
|
||||||
"CONDITION": False},
|
"CONDITION": False},
|
||||||
{"CMD_OPTION": "redis-ha",
|
|
||||||
"PROMPT": "Should redis try to use HA?",
|
|
||||||
"OPTION_LIST": ["y", "n"],
|
|
||||||
"VALIDATORS": [validators.validate_options],
|
|
||||||
"DEFAULT_VALUE": "n",
|
|
||||||
"MASK_INPUT": False,
|
|
||||||
"LOOSE_VALIDATION": False,
|
|
||||||
"CONF_NAME": "CONFIG_REDIS_HA",
|
|
||||||
"USE_DEFAULT": False,
|
|
||||||
"NEED_CONFIRM": False,
|
|
||||||
"CONDITION": False},
|
|
||||||
{"CMD_OPTION": "redis-slaves",
|
|
||||||
"PROMPT": "Enter the host for the redis slave servers",
|
|
||||||
"OPTION_LIST": [],
|
|
||||||
"VALIDATORS": [validators.validate_multi_ssh],
|
|
||||||
"DEFAULT_VALUE": "",
|
|
||||||
"MASK_INPUT": False,
|
|
||||||
"LOOSE_VALIDATION": False,
|
|
||||||
"CONF_NAME": "CONFIG_REDIS_SLAVE_HOSTS",
|
|
||||||
"USE_DEFAULT": False,
|
|
||||||
"NEED_CONFIRM": False,
|
|
||||||
"CONDITION": False},
|
|
||||||
{"CMD_OPTION": "redis-sentinels",
|
|
||||||
"PROMPT": "Enter the host for the redis sentinel servers",
|
|
||||||
"OPTION_LIST": [],
|
|
||||||
"VALIDATORS": [validators.validate_multi_ssh],
|
|
||||||
"DEFAULT_VALUE": "",
|
|
||||||
"MASK_INPUT": False,
|
|
||||||
"LOOSE_VALIDATION": False,
|
|
||||||
"CONF_NAME": "CONFIG_REDIS_SENTINEL_HOSTS",
|
|
||||||
"USE_DEFAULT": False,
|
|
||||||
"NEED_CONFIRM": False,
|
|
||||||
"CONDITION": False},
|
|
||||||
{"CMD_OPTION": "redis-sentinel-contact",
|
|
||||||
"PROMPT":
|
|
||||||
"Enter the IP address of the coordination redis sentinel",
|
|
||||||
"OPTION_LIST": [],
|
|
||||||
"VALIDATORS": [validators.validate_ssh],
|
|
||||||
"DEFAULT_VALUE": "",
|
|
||||||
"MASK_INPUT": False,
|
|
||||||
"LOOSE_VALIDATION": False,
|
|
||||||
"CONF_NAME": "CONFIG_REDIS_SENTINEL_CONTACT_HOST",
|
|
||||||
"USE_DEFAULT": False,
|
|
||||||
"NEED_CONFIRM": False,
|
|
||||||
"CONDITION": False},
|
|
||||||
{"CMD_OPTION": "redis-sentinel-port",
|
|
||||||
"PROMPT": ("Enter the port on which the redis sentinel servers"
|
|
||||||
" listen"),
|
|
||||||
"OPTION_LIST": [],
|
|
||||||
"VALIDATORS": [validators.validate_port],
|
|
||||||
"DEFAULT_VALUE": 26379,
|
|
||||||
"MASK_INPUT": False,
|
|
||||||
"LOOSE_VALIDATION": False,
|
|
||||||
"CONF_NAME": "CONFIG_REDIS_SENTINEL_PORT",
|
|
||||||
"USE_DEFAULT": False,
|
|
||||||
"NEED_CONFIRM": False,
|
|
||||||
"CONDITION": False},
|
|
||||||
{"CMD_OPTION": "redis-sentinel-quorum",
|
|
||||||
"PROMPT": (
|
|
||||||
"Enter the quorum value for the redis sentinel servers"),
|
|
||||||
"OPTION_LIST": [],
|
|
||||||
"VALIDATORS": [validators.validate_integer],
|
|
||||||
"DEFAULT_VALUE": 2,
|
|
||||||
"MASK_INPUT": False,
|
|
||||||
"LOOSE_VALIDATION": False,
|
|
||||||
"CONF_NAME": "CONFIG_REDIS_SENTINEL_QUORUM",
|
|
||||||
"USE_DEFAULT": False,
|
|
||||||
"NEED_CONFIRM": False,
|
|
||||||
"CONDITION": False},
|
|
||||||
{"CMD_OPTION": "redis-sentinel-master-name",
|
|
||||||
"PROMPT": (
|
|
||||||
"Enter the logical name of the master server"),
|
|
||||||
"OPTION_LIST": [r'[a-z]+'],
|
|
||||||
"VALIDATORS": [validators.validate_regexp],
|
|
||||||
"DEFAULT_VALUE": 'mymaster',
|
|
||||||
"MASK_INPUT": False,
|
|
||||||
"LOOSE_VALIDATION": False,
|
|
||||||
"CONF_NAME": "CONFIG_REDIS_MASTER_NAME",
|
|
||||||
"USE_DEFAULT": False,
|
|
||||||
"NEED_CONFIRM": False,
|
|
||||||
"CONDITION": False},
|
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
update_params_usage(basedefs.PACKSTACK_DOC, ceilometer_params)
|
update_params_usage(basedefs.PACKSTACK_DOC, ceilometer_params)
|
||||||
@@ -253,14 +167,12 @@ def initSequences(controller):
|
|||||||
if controller.CONF['CONFIG_CEILOMETER_INSTALL'] != 'y':
|
if controller.CONF['CONFIG_CEILOMETER_INSTALL'] != 'y':
|
||||||
return
|
return
|
||||||
|
|
||||||
steps = [{'title': 'Adding MongoDB manifest entries',
|
steps = [{'title': 'Preparing MongoDB entries',
|
||||||
'functions': [create_mongodb_manifest]},
|
'functions': [create_mongodb_manifest]},
|
||||||
{'title': 'Adding Redis manifest entries',
|
{'title': 'Preparing Redis entries',
|
||||||
'functions': [create_redis_manifest]},
|
'functions': [create_redis_manifest]},
|
||||||
{'title': 'Adding Ceilometer manifest entries',
|
{'title': 'Preparing Ceilometer entries',
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]}]
|
||||||
{'title': 'Adding Ceilometer Keystone manifest entries',
|
|
||||||
'functions': [create_keystone_manifest]}]
|
|
||||||
controller.addSequence("Installing OpenStack Ceilometer", [], [],
|
controller.addSequence("Installing OpenStack Ceilometer", [], [],
|
||||||
steps)
|
steps)
|
||||||
|
|
||||||
@@ -268,38 +180,6 @@ def initSequences(controller):
|
|||||||
# -------------------------- step functions --------------------------
|
# -------------------------- step functions --------------------------
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
manifestfile = "%s_ceilometer.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "ceilometer"))
|
|
||||||
manifestdata += getManifestTemplate("ceilometer")
|
|
||||||
if config['CONFIG_CEILOMETER_SERVICE_NAME'] == 'httpd':
|
|
||||||
manifestdata += getManifestTemplate("apache_ports")
|
|
||||||
|
|
||||||
if config['CONFIG_CEILOMETER_COORDINATION_BACKEND'] == 'redis':
|
|
||||||
# Determine if we need to configure multiple sentinel hosts as
|
|
||||||
# fallbacks for use in coordination url.
|
|
||||||
sentinel_hosts = split_hosts(config['CONFIG_REDIS_SENTINEL_HOSTS'])
|
|
||||||
sentinel_port = config['CONFIG_REDIS_SENTINEL_PORT']
|
|
||||||
sentinel_host = config['CONFIG_REDIS_SENTINEL_CONTACT_HOST']
|
|
||||||
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
|
||||||
config['CONFIG_REDIS_SENTINEL_CONTACT_HOST_URL'] = "[%s]" % (
|
|
||||||
sentinel_host)
|
|
||||||
else:
|
|
||||||
config['CONFIG_REDIS_SENTINEL_CONTACT_HOST_URL'] = sentinel_host
|
|
||||||
|
|
||||||
sentinel_contact = config['CONFIG_REDIS_SENTINEL_CONTACT_HOST']
|
|
||||||
if len(sentinel_hosts) > 1:
|
|
||||||
sentinel_format = 'sentinel_fallback=%s:%s'
|
|
||||||
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
|
||||||
sentinel_format = 'sentinel_fallback=[%s]:%s'
|
|
||||||
|
|
||||||
sentinel_fallbacks = '&'.join([sentinel_format %
|
|
||||||
(host, sentinel_port)
|
|
||||||
for host in sentinel_hosts
|
|
||||||
if host != sentinel_contact])
|
|
||||||
else:
|
|
||||||
sentinel_fallbacks = ''
|
|
||||||
config['CONFIG_REDIS_SENTINEL_FALLBACKS'] = sentinel_fallbacks
|
|
||||||
|
|
||||||
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
||||||
ssl_cert_file = config['CONFIG_CEILOMETER_SSL_CERT'] = (
|
ssl_cert_file = config['CONFIG_CEILOMETER_SSL_CERT'] = (
|
||||||
'/etc/pki/tls/certs/ssl_amqp_ceilometer.crt'
|
'/etc/pki/tls/certs/ssl_amqp_ceilometer.crt'
|
||||||
@@ -321,13 +201,6 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['8777']
|
fw_details[key]['ports'] = ['8777']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_CEILOMETER_RULES'] = fw_details
|
config['FIREWALL_CEILOMETER_RULES'] = fw_details
|
||||||
manifestdata += createFirewallResources('FIREWALL_CEILOMETER_RULES')
|
|
||||||
|
|
||||||
# Add a template that creates a group for nova because the ceilometer
|
|
||||||
# class needs it
|
|
||||||
if config['CONFIG_NOVA_INSTALL'] == 'n':
|
|
||||||
manifestdata += getManifestTemplate("ceilometer_nova_disabled")
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'ceilometer')
|
|
||||||
|
|
||||||
|
|
||||||
def create_mongodb_manifest(config, messages):
|
def create_mongodb_manifest(config, messages):
|
||||||
@@ -336,8 +209,6 @@ def create_mongodb_manifest(config, messages):
|
|||||||
config['CONFIG_MONGODB_HOST_URL'] = "[%s]" % host
|
config['CONFIG_MONGODB_HOST_URL'] = "[%s]" % host
|
||||||
else:
|
else:
|
||||||
config['CONFIG_MONGODB_HOST_URL'] = host
|
config['CONFIG_MONGODB_HOST_URL'] = host
|
||||||
manifestfile = "%s_mongodb.pp" % config['CONFIG_MONGODB_HOST']
|
|
||||||
manifestdata = getManifestTemplate("mongodb")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "mongodb_server"
|
key = "mongodb_server"
|
||||||
@@ -349,70 +220,20 @@ def create_mongodb_manifest(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_MONGODB_RULES'] = fw_details
|
config['FIREWALL_MONGODB_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_MONGODB_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'pre')
|
|
||||||
|
|
||||||
|
|
||||||
def create_redis_manifest(config, messages):
|
def create_redis_manifest(config, messages):
|
||||||
if config['CONFIG_CEILOMETER_COORDINATION_BACKEND'] == 'redis':
|
if config['CONFIG_CEILOMETER_COORDINATION_BACKEND'] == 'redis':
|
||||||
redis_master_host = config['CONFIG_REDIS_MASTER_HOST']
|
redis_host = config['CONFIG_REDIS_HOST']
|
||||||
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
||||||
config['CONFIG_REDIS_MASTER_HOST_URL'] = "[%s]" % redis_master_host
|
config['CONFIG_REDIS_HOST_URL'] = "[%s]" % redis_host
|
||||||
else:
|
else:
|
||||||
config['CONFIG_REDIS_MASTER_HOST_URL'] = redis_master_host
|
config['CONFIG_REDIS_HOST_URL'] = redis_host
|
||||||
|
|
||||||
# master
|
# master
|
||||||
manifestfile = "%s_redis.pp" % config['CONFIG_REDIS_MASTER_HOST']
|
master_clients = set([config['CONFIG_CONTROLLER_HOST']])
|
||||||
manifestdata = getManifestTemplate("redis.pp")
|
|
||||||
|
|
||||||
master_clients = set([config['CONFIG_CONTROLLER_HOST']]).union(
|
|
||||||
split_hosts(config['CONFIG_REDIS_SLAVE_HOSTS'])).union(
|
|
||||||
split_hosts(config['CONFIG_REDIS_SENTINEL_HOSTS']))
|
|
||||||
config['FIREWALL_REDIS_RULES'] = _create_redis_firewall_rules(
|
config['FIREWALL_REDIS_RULES'] = _create_redis_firewall_rules(
|
||||||
master_clients, config['CONFIG_REDIS_PORT'])
|
master_clients, config['CONFIG_REDIS_PORT'])
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_REDIS_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'pre')
|
|
||||||
|
|
||||||
# slaves
|
|
||||||
if config['CONFIG_REDIS_HA'] == 'y':
|
|
||||||
for slave in split_hosts(config['CONFIG_REDIS_SLAVE_HOSTS']):
|
|
||||||
config['CONFIG_REDIS_HOST'] = slave
|
|
||||||
manifestfile = "%s_redis_slave.pp" % slave
|
|
||||||
manifestdata = getManifestTemplate("redis_slave.pp")
|
|
||||||
|
|
||||||
slave_clients = set([config['CONFIG_CONTROLLER_HOST']]).union(
|
|
||||||
split_hosts(config['CONFIG_REDIS_SLAVE_HOSTS'])).union(
|
|
||||||
split_hosts(config['CONFIG_REDIS_SENTINEL_HOSTS']))
|
|
||||||
config['FIREWALL_REDIS_SLAVE_RULES'] = (
|
|
||||||
_create_redis_firewall_rules(
|
|
||||||
slave_clients, config['CONFIG_REDIS_PORT']))
|
|
||||||
|
|
||||||
manifestdata += createFirewallResources(
|
|
||||||
'FIREWALL_REDIS_SLAVE_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'pre')
|
|
||||||
|
|
||||||
# sentinels
|
|
||||||
if config['CONFIG_REDIS_HA'] == 'y':
|
|
||||||
for sentinel in split_hosts(config['CONFIG_REDIS_SENTINEL_HOSTS']):
|
|
||||||
manifestfile = "%s_redis_sentinel.pp" % sentinel
|
|
||||||
manifestdata = getManifestTemplate("redis_sentinel.pp")
|
|
||||||
|
|
||||||
config['FIREWALL_SENTINEL_RULES'] = (
|
|
||||||
_create_redis_firewall_rules(
|
|
||||||
split_hosts(config['CONFIG_REDIS_SENTINEL_HOSTS']),
|
|
||||||
config['CONFIG_REDIS_SENTINEL_PORT']))
|
|
||||||
|
|
||||||
manifestdata += createFirewallResources(
|
|
||||||
'FIREWALL_SENTINEL_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'pre')
|
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_ceilometer")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------- helper functions -------------------------
|
# ------------------------- helper functions -------------------------
|
||||||
|
|
||||||
|
@@ -27,10 +27,6 @@ from packstack.installer.utils import split_hosts
|
|||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------------ Cinder Packstack Plugin initialization ------------------
|
# ------------------ Cinder Packstack Plugin initialization ------------------
|
||||||
@@ -601,10 +597,7 @@ def initSequences(controller):
|
|||||||
if key in config:
|
if key in config:
|
||||||
config[key] = [i.strip() for i in config[key].split(',') if i]
|
config[key] = [i.strip() for i in config[key].split(',') if i]
|
||||||
|
|
||||||
cinder_steps = [
|
cinder_steps = []
|
||||||
{'title': 'Adding Cinder Keystone manifest entries',
|
|
||||||
'functions': [create_keystone_manifest]}
|
|
||||||
]
|
|
||||||
|
|
||||||
if 'lvm' in config['CONFIG_CINDER_BACKEND']:
|
if 'lvm' in config['CONFIG_CINDER_BACKEND']:
|
||||||
cinder_steps.append(
|
cinder_steps.append(
|
||||||
@@ -612,7 +605,7 @@ def initSequences(controller):
|
|||||||
'functions': [check_cinder_vg]})
|
'functions': [check_cinder_vg]})
|
||||||
|
|
||||||
cinder_steps.append(
|
cinder_steps.append(
|
||||||
{'title': 'Adding Cinder manifest entries',
|
{'title': 'Preparing Cinder entries',
|
||||||
'functions': [create_manifest]}
|
'functions': [create_manifest]}
|
||||||
)
|
)
|
||||||
controller.addSequence("Installing OpenStack Cinder", [], [], cinder_steps)
|
controller.addSequence("Installing OpenStack Cinder", [], [], cinder_steps)
|
||||||
@@ -719,12 +712,6 @@ def check_cinder_vg(config, messages):
|
|||||||
config['CONFIG_CINDER_VOLUMES_SIZE'] = '%sM' % cinders_volume_size
|
config['CONFIG_CINDER_VOLUMES_SIZE'] = '%sM' % cinders_volume_size
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_cinder")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
||||||
ssl_host = config['CONFIG_STORAGE_HOST']
|
ssl_host = config['CONFIG_STORAGE_HOST']
|
||||||
@@ -738,18 +725,6 @@ def create_manifest(config, messages):
|
|||||||
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
||||||
ssl_cert_file)
|
ssl_cert_file)
|
||||||
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "cinder"))
|
|
||||||
manifestfile = "%s_cinder.pp" % config['CONFIG_STORAGE_HOST']
|
|
||||||
manifestdata += getManifestTemplate("cinder")
|
|
||||||
|
|
||||||
for backend in config['CONFIG_CINDER_BACKEND']:
|
|
||||||
manifestdata += getManifestTemplate('cinder_%s' % backend)
|
|
||||||
|
|
||||||
if config['CONFIG_CEILOMETER_INSTALL'] == 'y':
|
|
||||||
manifestdata += getManifestTemplate('cinder_ceilometer')
|
|
||||||
if config['CONFIG_SWIFT_INSTALL'] == 'y':
|
|
||||||
manifestdata += getManifestTemplate('cinder_backup')
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
for host in split_hosts(config['CONFIG_COMPUTE_HOSTS']):
|
for host in split_hosts(config['CONFIG_COMPUTE_HOSTS']):
|
||||||
if (config['CONFIG_NOVA_INSTALL'] == 'y' and
|
if (config['CONFIG_NOVA_INSTALL'] == 'y' and
|
||||||
@@ -768,7 +743,6 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
|
|
||||||
config['FIREWALL_CINDER_RULES'] = fw_details
|
config['FIREWALL_CINDER_RULES'] = fw_details
|
||||||
manifestdata += createFirewallResources('FIREWALL_CINDER_RULES')
|
|
||||||
|
|
||||||
# cinder API should be open for everyone
|
# cinder API should be open for everyone
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
@@ -780,6 +754,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['8776']
|
fw_details[key]['ports'] = ['8776']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_CINDER_API_RULES'] = fw_details
|
config['FIREWALL_CINDER_API_RULES'] = fw_details
|
||||||
manifestdata += createFirewallResources('FIREWALL_CINDER_API_RULES')
|
|
||||||
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
@@ -25,8 +25,6 @@ from packstack.installer import utils
|
|||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
from packstack.modules.ospluginutils import deliver_ssl_file
|
from packstack.modules.ospluginutils import deliver_ssl_file
|
||||||
|
|
||||||
@@ -131,7 +129,7 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
steps = [
|
steps = [
|
||||||
{'title': 'Adding Horizon manifest entries',
|
{'title': 'Preparing Horizon entries',
|
||||||
'functions': [create_manifest]}
|
'functions': [create_manifest]}
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing OpenStack Horizon", [], [], steps)
|
controller.addSequence("Installing OpenStack Horizon", [], [], steps)
|
||||||
@@ -141,7 +139,6 @@ def initSequences(controller):
|
|||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
horizon_host = config['CONFIG_CONTROLLER_HOST']
|
horizon_host = config['CONFIG_CONTROLLER_HOST']
|
||||||
manifestfile = "%s_horizon.pp" % horizon_host
|
|
||||||
|
|
||||||
proto = "http"
|
proto = "http"
|
||||||
config["CONFIG_HORIZON_PORT"] = 80
|
config["CONFIG_HORIZON_PORT"] = 80
|
||||||
@@ -207,10 +204,6 @@ def create_manifest(config, messages):
|
|||||||
if config["CONFIG_NEUTRON_VPNAAS"] == 'y':
|
if config["CONFIG_NEUTRON_VPNAAS"] == 'y':
|
||||||
config["CONFIG_HORIZON_NEUTRON_VPN"] = True
|
config["CONFIG_HORIZON_NEUTRON_VPN"] = True
|
||||||
|
|
||||||
manifestdata = getManifestTemplate("horizon")
|
|
||||||
manifestdata += getManifestTemplate("apache_ports")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
msg = ("To access the OpenStack Dashboard browse to %s://%s/dashboard .\n"
|
msg = ("To access the OpenStack Dashboard browse to %s://%s/dashboard .\n"
|
||||||
"Please, find your login credentials stored in the keystonerc_admin"
|
"Please, find your login credentials stored in the keystonerc_admin"
|
||||||
" in your home directory."
|
" in your home directory."
|
||||||
|
@@ -22,10 +22,6 @@ from packstack.installer import processors
|
|||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------- Glance Packstack Plugin Initialization --------------
|
# ------------- Glance Packstack Plugin Initialization --------------
|
||||||
@@ -94,9 +90,7 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
glancesteps = [
|
glancesteps = [
|
||||||
{'title': 'Adding Glance Keystone manifest entries',
|
{'title': 'Preparing Glance entries',
|
||||||
'functions': [create_keystone_manifest]},
|
|
||||||
{'title': 'Adding Glance manifest entries',
|
|
||||||
'functions': [create_manifest]}
|
'functions': [create_manifest]}
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing OpenStack Glance", [], [], glancesteps)
|
controller.addSequence("Installing OpenStack Glance", [], [], glancesteps)
|
||||||
@@ -112,12 +106,6 @@ def process_backend(value, param_name, config):
|
|||||||
|
|
||||||
# -------------------------- step functions --------------------------
|
# -------------------------- step functions --------------------------
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_glance")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
||||||
ssl_host = config['CONFIG_STORAGE_HOST']
|
ssl_host = config['CONFIG_STORAGE_HOST']
|
||||||
@@ -131,12 +119,6 @@ def create_manifest(config, messages):
|
|||||||
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
||||||
ssl_cert_file)
|
ssl_cert_file)
|
||||||
|
|
||||||
manifestfile = "%s_glance.pp" % config['CONFIG_STORAGE_HOST']
|
|
||||||
manifestdata = getManifestTemplate("glance")
|
|
||||||
if config['CONFIG_CEILOMETER_INSTALL'] == 'y':
|
|
||||||
mq_template = get_mq(config, "glance_ceilometer")
|
|
||||||
manifestdata += getManifestTemplate(mq_template)
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "glance_api"
|
key = "glance_api"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -146,10 +128,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['9292']
|
fw_details[key]['ports'] = ['9292']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_GLANCE_RULES'] = fw_details
|
config['FIREWALL_GLANCE_RULES'] = fw_details
|
||||||
|
|
||||||
# Set the backend
|
|
||||||
manifestdata += getManifestTemplate(
|
|
||||||
'glance_%s.pp' % config['CONFIG_GLANCE_BACKEND'])
|
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_GLANCE_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
@@ -22,9 +22,6 @@ from packstack.installer import validators
|
|||||||
from packstack.installer import processors
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
|
|
||||||
# ------------- Gnocchi Packstack Plugin Initialization --------------
|
# ------------- Gnocchi Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
@@ -86,10 +83,8 @@ def initSequences(controller):
|
|||||||
controller.CONF['CONFIG_CEILOMETER_INSTALL'] != 'y'):
|
controller.CONF['CONFIG_CEILOMETER_INSTALL'] != 'y'):
|
||||||
return
|
return
|
||||||
|
|
||||||
steps = [{'title': 'Adding Gnocchi manifest entries',
|
steps = [{'title': 'Preparing Gnocchi entries',
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]}]
|
||||||
{'title': 'Adding Gnocchi Keystone manifest entries',
|
|
||||||
'functions': [create_keystone_manifest]}]
|
|
||||||
controller.addSequence("Installing OpenStack Gnocchi", [], [],
|
controller.addSequence("Installing OpenStack Gnocchi", [], [],
|
||||||
steps)
|
steps)
|
||||||
|
|
||||||
@@ -97,10 +92,6 @@ def initSequences(controller):
|
|||||||
# -------------------------- step functions --------------------------
|
# -------------------------- step functions --------------------------
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
manifestfile = "%s_gnocchi.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("gnocchi")
|
|
||||||
manifestdata += getManifestTemplate("apache_ports")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "gnocchi_api"
|
key = "gnocchi_api"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -110,11 +101,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['8041']
|
fw_details[key]['ports'] = ['8041']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_GNOCCHI_RULES'] = fw_details
|
config['FIREWALL_GNOCCHI_RULES'] = fw_details
|
||||||
manifestdata += createFirewallResources('FIREWALL_GNOCCHI_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'gnocchi')
|
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_gnocchi")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
@@ -24,10 +24,6 @@ from packstack.installer import validators
|
|||||||
from packstack.installer import processors
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------- Heat Packstack Plugin Initialization --------------
|
# ------------- Heat Packstack Plugin Initialization --------------
|
||||||
@@ -155,17 +151,17 @@ def initSequences(controller):
|
|||||||
if config['CONFIG_HEAT_INSTALL'] != 'y':
|
if config['CONFIG_HEAT_INSTALL'] != 'y':
|
||||||
return
|
return
|
||||||
steps = [
|
steps = [
|
||||||
{'title': 'Adding Heat manifest entries',
|
{'title': 'Preparing Heat entries',
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]},
|
||||||
]
|
]
|
||||||
|
|
||||||
if config.get('CONFIG_HEAT_CLOUDWATCH_INSTALL', 'n') == 'y':
|
if config.get('CONFIG_HEAT_CLOUDWATCH_INSTALL', 'n') == 'y':
|
||||||
steps.append(
|
steps.append(
|
||||||
{'title': 'Adding Heat CloudWatch API manifest entries',
|
{'title': 'Preparing Heat CloudWatch API entries',
|
||||||
'functions': [create_cloudwatch_manifest]})
|
'functions': [create_cloudwatch_manifest]})
|
||||||
if config.get('CONFIG_HEAT_CFN_INSTALL', 'n') == 'y':
|
if config.get('CONFIG_HEAT_CFN_INSTALL', 'n') == 'y':
|
||||||
steps.append(
|
steps.append(
|
||||||
{'title': 'Adding Heat CloudFormation API manifest entries',
|
{'title': 'Preparing Heat CloudFormation API entries',
|
||||||
'functions': [create_cfn_manifest]})
|
'functions': [create_cfn_manifest]})
|
||||||
controller.addSequence("Installing Heat", [], [], steps)
|
controller.addSequence("Installing Heat", [], [], steps)
|
||||||
|
|
||||||
@@ -185,11 +181,6 @@ def create_manifest(config, messages):
|
|||||||
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
||||||
ssl_cert_file)
|
ssl_cert_file)
|
||||||
|
|
||||||
manifestfile = "%s_heat.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "heat"))
|
|
||||||
manifestdata += getManifestTemplate("heat")
|
|
||||||
manifestdata += getManifestTemplate("keystone_heat")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "heat"
|
key = "heat"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -200,15 +191,8 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_HEAT_RULES'] = fw_details
|
config['FIREWALL_HEAT_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_HEAT_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, marker='heat')
|
|
||||||
|
|
||||||
|
|
||||||
def create_cloudwatch_manifest(config, messages):
|
def create_cloudwatch_manifest(config, messages):
|
||||||
manifestfile = "%s_heatcw.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "heat"))
|
|
||||||
manifestdata += getManifestTemplate("heat_cloudwatch")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "heat_api_cloudwatch"
|
key = "heat_api_cloudwatch"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -219,15 +203,8 @@ def create_cloudwatch_manifest(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_HEAT_CLOUDWATCH_RULES'] = fw_details
|
config['FIREWALL_HEAT_CLOUDWATCH_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_HEAT_CLOUDWATCH_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, marker='heat')
|
|
||||||
|
|
||||||
|
|
||||||
def create_cfn_manifest(config, messages):
|
def create_cfn_manifest(config, messages):
|
||||||
manifestfile = "%s_heatcnf.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "heat"))
|
|
||||||
manifestdata += getManifestTemplate("heat_cfn")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "heat_cfn"
|
key = "heat_cfn"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -237,6 +214,3 @@ def create_cfn_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['8000']
|
fw_details[key]['ports'] = ['8000']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_HEAT_CFN_RULES'] = fw_details
|
config['FIREWALL_HEAT_CFN_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_HEAT_CFN_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, marker='heat')
|
|
||||||
|
@@ -22,10 +22,6 @@ from packstack.installer import validators
|
|||||||
from packstack.installer import processors
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------------ Ironic Packstack Plugin initialization ------------------
|
# ------------------ Ironic Packstack Plugin initialization ------------------
|
||||||
@@ -78,9 +74,7 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
steps = [
|
steps = [
|
||||||
{'title': 'Adding Ironic Keystone manifest entries',
|
{'title': 'Preparing Ironic entries',
|
||||||
'functions': [create_keystone_manifest]},
|
|
||||||
{'title': 'Adding Ironic manifest entries',
|
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -103,10 +97,6 @@ def create_manifest(config, messages):
|
|||||||
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
||||||
ssl_cert_file)
|
ssl_cert_file)
|
||||||
|
|
||||||
manifestfile = "%s_ironic.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "ironic"))
|
|
||||||
manifestdata += getManifestTemplate("ironic.pp")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "ironic-api"
|
key = "ironic-api"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -116,15 +106,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['6385']
|
fw_details[key]['ports'] = ['6385']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_IRONIC_API_RULES'] = fw_details
|
config['FIREWALL_IRONIC_API_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_IRONIC_API_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'pre')
|
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
if config['CONFIG_UNSUPPORTED'] != 'y':
|
|
||||||
config['CONFIG_IRONIC_HOST'] = config['CONFIG_CONTROLLER_HOST']
|
|
||||||
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_ironic.pp")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
@@ -24,9 +24,6 @@ from packstack.installer import processors
|
|||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
|
|
||||||
# ------------- Keystone Packstack Plugin Initialization --------------
|
# ------------- Keystone Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
@@ -718,7 +715,7 @@ def initSequences(controller):
|
|||||||
{'title':
|
{'title':
|
||||||
'Fixing Keystone LDAP config parameters to be undef if empty',
|
'Fixing Keystone LDAP config parameters to be undef if empty',
|
||||||
'functions': [munge_ldap_config_params]},
|
'functions': [munge_ldap_config_params]},
|
||||||
{'title': 'Adding Keystone manifest entries',
|
{'title': 'Preparing Keystone entries',
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]},
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing OpenStack Keystone", [], [],
|
controller.addSequence("Installing OpenStack Keystone", [], [],
|
||||||
@@ -766,10 +763,6 @@ def munge_ldap_config_params(config, messages):
|
|||||||
|
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone")
|
|
||||||
manifestdata += getManifestTemplate("apache_ports")
|
|
||||||
|
|
||||||
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
||||||
host = config['CONFIG_CONTROLLER_HOST']
|
host = config['CONFIG_CONTROLLER_HOST']
|
||||||
config['CONFIG_KEYSTONE_HOST_URL'] = "[%s]" % host
|
config['CONFIG_KEYSTONE_HOST_URL'] = "[%s]" % host
|
||||||
@@ -796,6 +789,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['5000', '35357']
|
fw_details[key]['ports'] = ['5000', '35357']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_KEYSTONE_RULES'] = fw_details
|
config['FIREWALL_KEYSTONE_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_KEYSTONE_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
@@ -22,10 +22,6 @@ from packstack.installer import validators
|
|||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------- Manila Packstack Plugin Initialization --------------
|
# ------------- Manila Packstack Plugin Initialization --------------
|
||||||
@@ -554,9 +550,7 @@ def initSequences(controller):
|
|||||||
)
|
)
|
||||||
|
|
||||||
manila_steps = [
|
manila_steps = [
|
||||||
{'title': 'Adding Manila Keystone manifest entries',
|
{'title': 'Preparing Manila entries',
|
||||||
'functions': [create_keystone_manifest]},
|
|
||||||
{'title': 'Adding Manila manifest entries',
|
|
||||||
'functions': [create_manifest]}
|
'functions': [create_manifest]}
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -604,15 +598,6 @@ def check_glusternfs_options(config):
|
|||||||
|
|
||||||
# -------------------------- step functions --------------------------
|
# -------------------------- step functions --------------------------
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
if config['CONFIG_UNSUPPORTED'] != 'y':
|
|
||||||
config['CONFIG_STORAGE_HOST'] = config['CONFIG_CONTROLLER_HOST']
|
|
||||||
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_manila.pp")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
if config['CONFIG_UNSUPPORTED'] != 'y':
|
if config['CONFIG_UNSUPPORTED'] != 'y':
|
||||||
config['CONFIG_STORAGE_HOST'] = config['CONFIG_CONTROLLER_HOST']
|
config['CONFIG_STORAGE_HOST'] = config['CONFIG_CONTROLLER_HOST']
|
||||||
@@ -639,15 +624,6 @@ def create_manifest(config, messages):
|
|||||||
elif config[key].lower() == "false":
|
elif config[key].lower() == "false":
|
||||||
config[key] = False
|
config[key] = False
|
||||||
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "manila"))
|
|
||||||
manifestfile = "%s_manila.pp" % config['CONFIG_STORAGE_HOST']
|
|
||||||
manifestdata += getManifestTemplate("manila.pp")
|
|
||||||
manifestdata += getManifestTemplate("manila_network.pp")
|
|
||||||
|
|
||||||
backends = config['CONFIG_MANILA_BACKEND']
|
|
||||||
for backend in backends:
|
|
||||||
manifestdata += getManifestTemplate('manila_%s.pp' % backend)
|
|
||||||
|
|
||||||
# manila API should be open for everyone
|
# manila API should be open for everyone
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "manila_api"
|
key = "manila_api"
|
||||||
@@ -658,6 +634,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['8786']
|
fw_details[key]['ports'] = ['8786']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_MANILA_API_RULES'] = fw_details
|
config['FIREWALL_MANILA_API_RULES'] = fw_details
|
||||||
manifestdata += createFirewallResources('FIREWALL_MANILA_API_RULES')
|
|
||||||
|
|
||||||
appendManifestFile(manifestfile, manifestdata, marker='manila')
|
|
||||||
|
@@ -23,9 +23,6 @@ from packstack.installer import utils
|
|||||||
|
|
||||||
from packstack.modules.common import filtered_hosts
|
from packstack.modules.common import filtered_hosts
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
|
|
||||||
# ------------- MariaDB Packstack Plugin Initialization --------------
|
# ------------- MariaDB Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
@@ -89,7 +86,7 @@ def initConfig(controller):
|
|||||||
|
|
||||||
def initSequences(controller):
|
def initSequences(controller):
|
||||||
mariadbsteps = [
|
mariadbsteps = [
|
||||||
{'title': 'Adding MariaDB manifest entries',
|
{'title': 'Preparing MariaDB entries',
|
||||||
'functions': [create_manifest]}
|
'functions': [create_manifest]}
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing MariaDB", [], [], mariadbsteps)
|
controller.addSequence("Installing MariaDB", [], [], mariadbsteps)
|
||||||
@@ -99,10 +96,8 @@ def initSequences(controller):
|
|||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
if config['CONFIG_MARIADB_INSTALL'] == 'y':
|
if config['CONFIG_MARIADB_INSTALL'] == 'y':
|
||||||
suffix = 'install'
|
|
||||||
host = config['CONFIG_MARIADB_HOST']
|
host = config['CONFIG_MARIADB_HOST']
|
||||||
else:
|
else:
|
||||||
suffix = 'noinstall'
|
|
||||||
host = config['CONFIG_CONTROLLER_HOST']
|
host = config['CONFIG_CONTROLLER_HOST']
|
||||||
|
|
||||||
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
||||||
@@ -110,30 +105,8 @@ def create_manifest(config, messages):
|
|||||||
else:
|
else:
|
||||||
config['CONFIG_MARIADB_HOST_URL'] = host
|
config['CONFIG_MARIADB_HOST_URL'] = host
|
||||||
|
|
||||||
manifestfile = "%s_mariadb.pp" % host
|
|
||||||
manifestdata = [getManifestTemplate('mariadb_%s' % suffix)]
|
|
||||||
|
|
||||||
def append_for(module, suffix):
|
|
||||||
# Modules have to be appended to the existing mysql.pp
|
|
||||||
# otherwise pp will fail for some of them saying that
|
|
||||||
# Mysql::Config definition is missing.
|
|
||||||
template = "mariadb_%s_%s" % (module, suffix)
|
|
||||||
manifestdata.append(getManifestTemplate(template))
|
|
||||||
|
|
||||||
append_for("keystone", suffix)
|
|
||||||
for mod in ['nova', 'cinder', 'glance', 'neutron', 'heat', 'sahara',
|
|
||||||
'trove', 'ironic', 'manila']:
|
|
||||||
if config['CONFIG_%s_INSTALL' % mod.upper()] == 'y':
|
|
||||||
append_for(mod, suffix)
|
|
||||||
|
|
||||||
if (config['CONFIG_GNOCCHI_INSTALL'] == 'y' and
|
|
||||||
config['CONFIG_CEILOMETER_INSTALL'] == 'y'):
|
|
||||||
append_for('gnocchi', suffix)
|
|
||||||
|
|
||||||
hosts = filtered_hosts(config, exclude=False, dbhost=True)
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
for host in hosts:
|
for host in filtered_hosts(config, exclude=False, dbhost=True):
|
||||||
key = "mariadb_%s" % host
|
key = "mariadb_%s" % host
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
fw_details[key]['host'] = "%s" % host
|
fw_details[key]['host'] = "%s" % host
|
||||||
@@ -142,6 +115,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['3306']
|
fw_details[key]['ports'] = ['3306']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_MARIADB_RULES'] = fw_details
|
config['FIREWALL_MARIADB_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata.append(createFirewallResources('FIREWALL_MARIADB_RULES'))
|
|
||||||
appendManifestFile(manifestfile, "\n".join(manifestdata), 'pre')
|
|
||||||
|
@@ -23,9 +23,6 @@ from packstack.installer import utils
|
|||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.common import filtered_hosts
|
from packstack.modules.common import filtered_hosts
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
|
|
||||||
# ------------- Nagios Packstack Plugin Initialization --------------
|
# ------------- Nagios Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
@@ -63,9 +60,9 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
nagiossteps = [
|
nagiossteps = [
|
||||||
{'title': 'Adding Nagios server manifest entries',
|
{'title': 'Preparing Nagios server entries',
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]},
|
||||||
{'title': 'Adding Nagios host manifest entries',
|
{'title': 'Preparing Nagios host entries',
|
||||||
'functions': [create_nrpe_manifests]}
|
'functions': [create_nrpe_manifests]}
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing Nagios", [], [], nagiossteps)
|
controller.addSequence("Installing Nagios", [], [], nagiossteps)
|
||||||
@@ -92,17 +89,10 @@ def create_manifest(config, messages):
|
|||||||
|
|
||||||
config['CONFIG_NAGIOS_SERVICES'] = openstack_services
|
config['CONFIG_NAGIOS_SERVICES'] = openstack_services
|
||||||
|
|
||||||
manifestfile = "%s_nagios.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("nagios_server")
|
|
||||||
manifestdata += getManifestTemplate("apache_ports")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_nrpe_manifests(config, messages):
|
def create_nrpe_manifests(config, messages):
|
||||||
for hostname in filtered_hosts(config):
|
for hostname in filtered_hosts(config):
|
||||||
config['CONFIG_NRPE_HOST'] = hostname
|
config['CONFIG_NRPE_HOST'] = hostname
|
||||||
manifestfile = "%s_nagios_nrpe.pp" % hostname
|
|
||||||
manifestdata = getManifestTemplate("nagios_nrpe")
|
|
||||||
|
|
||||||
# Only the Nagios host is allowed to talk to nrpe
|
# Only the Nagios host is allowed to talk to nrpe
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
@@ -115,9 +105,6 @@ def create_nrpe_manifests(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_NAGIOS_NRPE_RULES'] = fw_details
|
config['FIREWALL_NAGIOS_NRPE_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_NAGIOS_NRPE_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
messages.append("To use Nagios, browse to "
|
messages.append("To use Nagios, browse to "
|
||||||
"http://%(CONFIG_CONTROLLER_HOST)s/nagios "
|
"http://%(CONFIG_CONTROLLER_HOST)s/nagios "
|
||||||
"username: nagiosadmin, password: %(CONFIG_NAGIOS_PW)s"
|
"username: nagiosadmin, password: %(CONFIG_NAGIOS_PW)s"
|
||||||
|
@@ -25,10 +25,6 @@ from packstack.installer.utils import split_hosts
|
|||||||
|
|
||||||
from packstack.modules import common
|
from packstack.modules import common
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------- Neutron Packstack Plugin Initialization --------------
|
# ------------- Neutron Packstack Plugin Initialization --------------
|
||||||
@@ -504,28 +500,18 @@ def initSequences(controller):
|
|||||||
config['CONFIG_NEUTRON_ML2_SRIOV_AGENT_REQUIRED'] = False
|
config['CONFIG_NEUTRON_ML2_SRIOV_AGENT_REQUIRED'] = False
|
||||||
|
|
||||||
neutron_steps = [
|
neutron_steps = [
|
||||||
{'title': 'Adding Neutron VPNaaS Agent manifest entries',
|
{'title': 'Preparing Neutron LBaaS Agent entries',
|
||||||
'functions': [create_vpnaas_manifests]},
|
|
||||||
{'title': 'Adding Neutron FWaaS Agent manifest entries',
|
|
||||||
'functions': [create_fwaas_manifests]},
|
|
||||||
{'title': 'Adding Neutron LBaaS Agent manifest entries',
|
|
||||||
'functions': [create_lbaas_manifests]},
|
'functions': [create_lbaas_manifests]},
|
||||||
{'title': 'Adding Neutron API manifest entries',
|
{'title': 'Preparing Neutron API entries',
|
||||||
'functions': [create_manifests]},
|
'functions': [create_manifests]},
|
||||||
{'title': 'Adding Neutron Keystone manifest entries',
|
{'title': 'Preparing Neutron L3 entries',
|
||||||
'functions': [create_keystone_manifest]},
|
|
||||||
{'title': 'Adding Neutron L3 manifest entries',
|
|
||||||
'functions': [create_l3_manifests]},
|
'functions': [create_l3_manifests]},
|
||||||
{'title': 'Adding Neutron L2 Agent manifest entries',
|
{'title': 'Preparing Neutron L2 Agent entries',
|
||||||
'functions': [create_l2_agent_manifests]},
|
'functions': [create_l2_agent_manifests]},
|
||||||
{'title': 'Adding Neutron DHCP Agent manifest entries',
|
{'title': 'Preparing Neutron DHCP Agent entries',
|
||||||
'functions': [create_dhcp_manifests]},
|
'functions': [create_dhcp_manifests]},
|
||||||
{'title': 'Adding Neutron Metering Agent manifest entries',
|
{'title': 'Preparing Neutron Metering Agent entries',
|
||||||
'functions': [create_metering_agent_manifests]},
|
'functions': [create_metering_agent_manifests]},
|
||||||
{'title': 'Adding Neutron Metadata Agent manifest entries',
|
|
||||||
'functions': [create_metadata_manifests]},
|
|
||||||
{'title': 'Adding Neutron SR-IOV Switch Agent manifest entries',
|
|
||||||
'functions': [create_sriovnicswitch_manifests]},
|
|
||||||
{'title': 'Checking if NetworkManager is enabled and running',
|
{'title': 'Checking if NetworkManager is enabled and running',
|
||||||
'functions': [check_nm_status]},
|
'functions': [check_nm_status]},
|
||||||
]
|
]
|
||||||
@@ -590,9 +576,8 @@ def get_values(val):
|
|||||||
return [x.strip() for x in val.split(',')] if val else []
|
return [x.strip() for x in val.split(',')] if val else []
|
||||||
|
|
||||||
|
|
||||||
def tunnel_fw_details(config, host, src):
|
def tunnel_fw_details(config, host, src, fw_details):
|
||||||
key = "neutron_tunnel_%s_%s" % (host, src)
|
key = "neutron_tunnel_%s_%s" % (host, src)
|
||||||
fw_details = dict()
|
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
fw_details[key]['host'] = "%s" % src
|
fw_details[key]['host'] = "%s" % src
|
||||||
fw_details[key]['service_name'] = "neutron tunnel port"
|
fw_details[key]['service_name'] = "neutron tunnel port"
|
||||||
@@ -604,7 +589,6 @@ def tunnel_fw_details(config, host, src):
|
|||||||
fw_details[key]['proto'] = 'gre'
|
fw_details[key]['proto'] = 'gre'
|
||||||
tun_port = None
|
tun_port = None
|
||||||
fw_details[key]['ports'] = tun_port
|
fw_details[key]['ports'] = tun_port
|
||||||
return fw_details
|
|
||||||
|
|
||||||
|
|
||||||
# -------------------------- step functions --------------------------
|
# -------------------------- step functions --------------------------
|
||||||
@@ -661,22 +645,7 @@ def create_manifests(config, messages):
|
|||||||
generate_ssl_cert(config, host, service, ssl_key_file,
|
generate_ssl_cert(config, host, service, ssl_key_file,
|
||||||
ssl_cert_file)
|
ssl_cert_file)
|
||||||
|
|
||||||
manifest_file = "%s_neutron.pp" % (host,)
|
|
||||||
manifest_data = getManifestTemplate("neutron")
|
|
||||||
manifest_data += getManifestTemplate(get_mq(config, "neutron"))
|
|
||||||
appendManifestFile(manifest_file, manifest_data, 'neutron')
|
|
||||||
|
|
||||||
if host in api_hosts:
|
if host in api_hosts:
|
||||||
manifest_file = "%s_neutron.pp" % (host,)
|
|
||||||
manifest_data = getManifestTemplate("neutron_api")
|
|
||||||
if config['CONFIG_NOVA_INSTALL'] == 'y':
|
|
||||||
template_name = "neutron_notifications"
|
|
||||||
manifest_data += getManifestTemplate(template_name)
|
|
||||||
|
|
||||||
# Set up any l2 plugin configs we need only on neutron api nodes
|
|
||||||
# XXX I am not completely sure about this, but it seems necessary:
|
|
||||||
manifest_data += getManifestTemplate(plugin_manifest)
|
|
||||||
|
|
||||||
# Firewall
|
# Firewall
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "neutron_server_%s" % host
|
key = "neutron_server_%s" % host
|
||||||
@@ -688,33 +657,24 @@ def create_manifests(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_NEUTRON_SERVER_RULES'] = fw_details
|
config['FIREWALL_NEUTRON_SERVER_RULES'] = fw_details
|
||||||
|
|
||||||
manifest_data += createFirewallResources(
|
|
||||||
'FIREWALL_NEUTRON_SERVER_RULES'
|
|
||||||
)
|
|
||||||
appendManifestFile(manifest_file, manifest_data, 'neutron')
|
|
||||||
|
|
||||||
# We also need to open VXLAN/GRE port for agent
|
# We also need to open VXLAN/GRE port for agent
|
||||||
manifest_data = ""
|
|
||||||
if use_openvswitch_vxlan(config) or use_openvswitch_gre(config):
|
if use_openvswitch_vxlan(config) or use_openvswitch_gre(config):
|
||||||
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
if config['CONFIG_IP_VERSION'] == 'ipv6':
|
||||||
msg = output_messages.WARN_IPV6_OVS
|
msg = output_messages.WARN_IPV6_OVS
|
||||||
messages.append(utils.color_text(msg % host, 'red'))
|
messages.append(utils.color_text(msg % host, 'red'))
|
||||||
|
fw_details = dict()
|
||||||
if (config['CONFIG_NEUTRON_OVS_TUNNEL_SUBNETS']):
|
if (config['CONFIG_NEUTRON_OVS_TUNNEL_SUBNETS']):
|
||||||
tunnel_subnets = map(
|
tunnel_subnets = map(
|
||||||
str.strip,
|
str.strip,
|
||||||
config['CONFIG_NEUTRON_OVS_TUNNEL_SUBNETS'].split(',')
|
config['CONFIG_NEUTRON_OVS_TUNNEL_SUBNETS'].split(',')
|
||||||
)
|
)
|
||||||
|
cf_fw_nt_key = ("FIREWALL_NEUTRON_TUNNEL_RULES_%s" % host)
|
||||||
for subnet in tunnel_subnets:
|
for subnet in tunnel_subnets:
|
||||||
cf_fw_nt_key = ("FIREWALL_NEUTRON_TUNNEL_RULES_%s_%s"
|
tunnel_fw_details(config, host, subnet, fw_details)
|
||||||
% (host, subnet))
|
config[cf_fw_nt_key] = fw_details
|
||||||
config[cf_fw_nt_key] = tunnel_fw_details(config,
|
|
||||||
host, subnet)
|
|
||||||
manifest_data += createFirewallResources(cf_fw_nt_key)
|
|
||||||
else:
|
else:
|
||||||
|
cf_fw_nt_key = ("FIREWALL_NEUTRON_TUNNEL_RULES_%s" % host)
|
||||||
for n_host in network_hosts | compute_hosts:
|
for n_host in network_hosts | compute_hosts:
|
||||||
cf_fw_nt_key = ("FIREWALL_NEUTRON_TUNNEL_RULES_%s_%s"
|
|
||||||
% (host, n_host))
|
|
||||||
if config['CONFIG_NEUTRON_OVS_TUNNEL_IF']:
|
if config['CONFIG_NEUTRON_OVS_TUNNEL_IF']:
|
||||||
if config['CONFIG_USE_SUBNETS'] == 'y':
|
if config['CONFIG_USE_SUBNETS'] == 'y':
|
||||||
iface = common.cidr_to_ifname(
|
iface = common.cidr_to_ifname(
|
||||||
@@ -731,17 +691,8 @@ def create_manifests(config, messages):
|
|||||||
(iface, n_host))
|
(iface, n_host))
|
||||||
else:
|
else:
|
||||||
src_host = n_host
|
src_host = n_host
|
||||||
config[cf_fw_nt_key] = tunnel_fw_details(config,
|
tunnel_fw_details(config, host, src_host, fw_details)
|
||||||
host, src_host)
|
config[cf_fw_nt_key] = fw_details
|
||||||
manifest_data += createFirewallResources(cf_fw_nt_key)
|
|
||||||
|
|
||||||
appendManifestFile(manifest_file, manifest_data, 'neutron')
|
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_neutron")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_l3_manifests(config, messages):
|
def create_l3_manifests(config, messages):
|
||||||
@@ -753,9 +704,6 @@ def create_l3_manifests(config, messages):
|
|||||||
for host in network_hosts:
|
for host in network_hosts:
|
||||||
config['CONFIG_NEUTRON_L3_HOST'] = host
|
config['CONFIG_NEUTRON_L3_HOST'] = host
|
||||||
config['CONFIG_NEUTRON_L3_INTERFACE_DRIVER'] = get_if_driver(config)
|
config['CONFIG_NEUTRON_L3_INTERFACE_DRIVER'] = get_if_driver(config)
|
||||||
manifestdata = getManifestTemplate("neutron_l3")
|
|
||||||
manifestfile = "%s_neutron.pp" % (host,)
|
|
||||||
appendManifestFile(manifestfile, manifestdata + '\n')
|
|
||||||
|
|
||||||
if config['CONFIG_NEUTRON_L2_AGENT'] == 'openvswitch':
|
if config['CONFIG_NEUTRON_L2_AGENT'] == 'openvswitch':
|
||||||
ext_bridge = config['CONFIG_NEUTRON_L3_EXT_BRIDGE']
|
ext_bridge = config['CONFIG_NEUTRON_L3_EXT_BRIDGE']
|
||||||
@@ -764,8 +712,9 @@ def create_l3_manifests(config, messages):
|
|||||||
ext_bridge) if ext_bridge else None
|
ext_bridge) if ext_bridge else None
|
||||||
if (ext_bridge and not mapping):
|
if (ext_bridge and not mapping):
|
||||||
config['CONFIG_NEUTRON_OVS_BRIDGE'] = ext_bridge
|
config['CONFIG_NEUTRON_OVS_BRIDGE'] = ext_bridge
|
||||||
manifestdata = getManifestTemplate('neutron_ovs_bridge')
|
config['CONFIG_NEUTRON_OVS_BRIDGE_CREATE'] = 'y'
|
||||||
appendManifestFile(manifestfile, manifestdata + '\n')
|
else:
|
||||||
|
config['CONFIG_NEUTRON_OVS_BRIDGE_CREATE'] = 'n'
|
||||||
|
|
||||||
|
|
||||||
def create_dhcp_manifests(config, messages):
|
def create_dhcp_manifests(config, messages):
|
||||||
@@ -774,11 +723,7 @@ def create_dhcp_manifests(config, messages):
|
|||||||
for host in network_hosts:
|
for host in network_hosts:
|
||||||
config["CONFIG_NEUTRON_DHCP_HOST"] = host
|
config["CONFIG_NEUTRON_DHCP_HOST"] = host
|
||||||
config['CONFIG_NEUTRON_DHCP_INTERFACE_DRIVER'] = get_if_driver(config)
|
config['CONFIG_NEUTRON_DHCP_INTERFACE_DRIVER'] = get_if_driver(config)
|
||||||
if use_openvswitch_vxlan(config) or use_openvswitch_gre(config):
|
|
||||||
manifest_data = getManifestTemplate("neutron_dhcp_mtu")
|
|
||||||
else:
|
|
||||||
manifest_data = getManifestTemplate("neutron_dhcp")
|
|
||||||
manifest_file = "%s_neutron.pp" % (host,)
|
|
||||||
# Firewall Rules for dhcp in
|
# Firewall Rules for dhcp in
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "neutron_dhcp_in_%s" % host
|
key = "neutron_dhcp_in_%s" % host
|
||||||
@@ -789,9 +734,6 @@ def create_dhcp_manifests(config, messages):
|
|||||||
fw_details[key]['ports'] = ['67']
|
fw_details[key]['ports'] = ['67']
|
||||||
fw_details[key]['proto'] = "udp"
|
fw_details[key]['proto'] = "udp"
|
||||||
config['FIREWALL_NEUTRON_DHCPIN_RULES'] = fw_details
|
config['FIREWALL_NEUTRON_DHCPIN_RULES'] = fw_details
|
||||||
manifest_data += createFirewallResources(
|
|
||||||
'FIREWALL_NEUTRON_DHCPIN_RULES'
|
|
||||||
)
|
|
||||||
|
|
||||||
# Firewall Rules for dhcp out
|
# Firewall Rules for dhcp out
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
@@ -803,35 +745,6 @@ def create_dhcp_manifests(config, messages):
|
|||||||
fw_details[key]['ports'] = ['68']
|
fw_details[key]['ports'] = ['68']
|
||||||
fw_details[key]['proto'] = "udp"
|
fw_details[key]['proto'] = "udp"
|
||||||
config['FIREWALL_NEUTRON_DHCPOUT_RULES'] = fw_details
|
config['FIREWALL_NEUTRON_DHCPOUT_RULES'] = fw_details
|
||||||
manifest_data += createFirewallResources(
|
|
||||||
'FIREWALL_NEUTRON_DHCPOUT_RULES'
|
|
||||||
)
|
|
||||||
|
|
||||||
appendManifestFile(manifest_file, manifest_data, 'neutron')
|
|
||||||
|
|
||||||
|
|
||||||
def create_fwaas_manifests(config, messages):
|
|
||||||
global network_hosts
|
|
||||||
|
|
||||||
if not config['CONFIG_NEUTRON_FWAAS'] == 'y':
|
|
||||||
return
|
|
||||||
|
|
||||||
for host in network_hosts:
|
|
||||||
manifestdata = getManifestTemplate("neutron_fwaas")
|
|
||||||
manifestfile = "%s_neutron.pp" % (host,)
|
|
||||||
appendManifestFile(manifestfile, manifestdata + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def create_vpnaas_manifests(config, messages):
|
|
||||||
global network_hosts
|
|
||||||
|
|
||||||
if config['CONFIG_NEUTRON_VPNAAS'] != 'y':
|
|
||||||
return
|
|
||||||
|
|
||||||
for host in network_hosts:
|
|
||||||
manifestdata = getManifestTemplate("neutron_vpnaas")
|
|
||||||
manifestfile = "%s_neutron.pp" % (host,)
|
|
||||||
appendManifestFile(manifestfile, manifestdata + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def create_lbaas_manifests(config, messages):
|
def create_lbaas_manifests(config, messages):
|
||||||
@@ -842,9 +755,6 @@ def create_lbaas_manifests(config, messages):
|
|||||||
|
|
||||||
for host in network_hosts:
|
for host in network_hosts:
|
||||||
config['CONFIG_NEUTRON_LBAAS_INTERFACE_DRIVER'] = get_if_driver(config)
|
config['CONFIG_NEUTRON_LBAAS_INTERFACE_DRIVER'] = get_if_driver(config)
|
||||||
manifestdata = getManifestTemplate("neutron_lbaas")
|
|
||||||
manifestfile = "%s_neutron.pp" % (host,)
|
|
||||||
appendManifestFile(manifestfile, manifestdata + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def create_metering_agent_manifests(config, messages):
|
def create_metering_agent_manifests(config, messages):
|
||||||
@@ -855,9 +765,6 @@ def create_metering_agent_manifests(config, messages):
|
|||||||
|
|
||||||
for host in network_hosts:
|
for host in network_hosts:
|
||||||
config['CONFIG_NEUTRON_METERING_IFCE_DRIVER'] = get_if_driver(config)
|
config['CONFIG_NEUTRON_METERING_IFCE_DRIVER'] = get_if_driver(config)
|
||||||
manifestdata = getManifestTemplate("neutron_metering_agent")
|
|
||||||
manifestfile = "%s_neutron.pp" % (host,)
|
|
||||||
appendManifestFile(manifestfile, manifestdata + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def create_l2_agent_manifests(config, messages):
|
def create_l2_agent_manifests(config, messages):
|
||||||
@@ -881,7 +788,6 @@ def create_l2_agent_manifests(config, messages):
|
|||||||
config["CONFIG_NEUTRON_OVS_TUNNELING"] = tunnel
|
config["CONFIG_NEUTRON_OVS_TUNNELING"] = tunnel
|
||||||
tunnel_types = set(ovs_type) & set(['gre', 'vxlan'])
|
tunnel_types = set(ovs_type) & set(['gre', 'vxlan'])
|
||||||
config["CONFIG_NEUTRON_OVS_TUNNEL_TYPES"] = list(tunnel_types)
|
config["CONFIG_NEUTRON_OVS_TUNNEL_TYPES"] = list(tunnel_types)
|
||||||
template_name = "neutron_ovs_agent"
|
|
||||||
|
|
||||||
bm_arr = get_values(config["CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS"])
|
bm_arr = get_values(config["CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS"])
|
||||||
iface_arr = get_values(config["CONFIG_NEUTRON_OVS_BRIDGE_IFACES"])
|
iface_arr = get_values(config["CONFIG_NEUTRON_OVS_BRIDGE_IFACES"])
|
||||||
@@ -910,7 +816,6 @@ def create_l2_agent_manifests(config, messages):
|
|||||||
|
|
||||||
elif agent == "linuxbridge":
|
elif agent == "linuxbridge":
|
||||||
host_var = 'CONFIG_NEUTRON_LB_HOST'
|
host_var = 'CONFIG_NEUTRON_LB_HOST'
|
||||||
template_name = 'neutron_lb_agent'
|
|
||||||
else:
|
else:
|
||||||
raise KeyError("Unknown layer2 agent")
|
raise KeyError("Unknown layer2 agent")
|
||||||
|
|
||||||
@@ -918,8 +823,6 @@ def create_l2_agent_manifests(config, messages):
|
|||||||
no_tunnel_types = set(ovs_type) & set(['vlan', 'flat'])
|
no_tunnel_types = set(ovs_type) & set(['vlan', 'flat'])
|
||||||
|
|
||||||
for host in network_hosts | compute_hosts:
|
for host in network_hosts | compute_hosts:
|
||||||
manifestfile = "%s_neutron.pp" % (host,)
|
|
||||||
manifestdata = "$cfg_neutron_ovs_host = '%s'\n" % host
|
|
||||||
# NICs connected to OVS bridges can be required in network nodes if
|
# NICs connected to OVS bridges can be required in network nodes if
|
||||||
# vlan, flat, vxlan or gre are enabled. For compute nodes, they are
|
# vlan, flat, vxlan or gre are enabled. For compute nodes, they are
|
||||||
# only required if vlan or flat are enabled.
|
# only required if vlan or flat are enabled.
|
||||||
@@ -937,40 +840,9 @@ def create_l2_agent_manifests(config, messages):
|
|||||||
]
|
]
|
||||||
config["CONFIG_NEUTRON_OVS_BRIDGE_IFACES"] = iface_arr
|
config["CONFIG_NEUTRON_OVS_BRIDGE_IFACES"] = iface_arr
|
||||||
config["CONFIG_NEUTRON_OVS_BRIDGE_IFACES_COMPUTE"] = if_arr_cmp
|
config["CONFIG_NEUTRON_OVS_BRIDGE_IFACES_COMPUTE"] = if_arr_cmp
|
||||||
manifestdata += "$create_bridges = true\n"
|
config['CREATE_BRIDGES'] = 'y'
|
||||||
else:
|
else:
|
||||||
manifestdata += "$create_bridges = false\n"
|
config['CREATE_BRIDGES'] = 'n'
|
||||||
is_network_host = str(host in network_hosts).lower()
|
|
||||||
manifestdata += "$network_host = %s\n" % is_network_host
|
|
||||||
manifestdata += getManifestTemplate(template_name)
|
|
||||||
appendManifestFile(manifestfile, manifestdata + "\n")
|
|
||||||
# Additional configurations required for compute hosts and
|
|
||||||
# network hosts.
|
|
||||||
manifestdata = getManifestTemplate('neutron_bridge_module')
|
|
||||||
appendManifestFile(manifestfile, manifestdata + '\n')
|
|
||||||
|
|
||||||
|
|
||||||
def create_sriovnicswitch_manifests(config, messages):
|
|
||||||
global compute_hosts
|
|
||||||
|
|
||||||
if not use_ml2_with_sriovnicswitch(config):
|
|
||||||
return
|
|
||||||
|
|
||||||
for host in compute_hosts:
|
|
||||||
manifestdata = getManifestTemplate("neutron_sriov")
|
|
||||||
manifestfile = "%s_neutron.pp" % (host,)
|
|
||||||
appendManifestFile(manifestfile, manifestdata + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def create_metadata_manifests(config, messages):
|
|
||||||
global network_hosts
|
|
||||||
if config.get('CONFIG_NOVA_INSTALL') == 'n':
|
|
||||||
return
|
|
||||||
for host in network_hosts:
|
|
||||||
config['CONFIG_NEUTRON_METADATA_HOST'] = host
|
|
||||||
manifestdata = getManifestTemplate('neutron_metadata')
|
|
||||||
manifestfile = "%s_neutron.pp" % (host,)
|
|
||||||
appendManifestFile(manifestfile, manifestdata + "\n")
|
|
||||||
|
|
||||||
|
|
||||||
def check_nm_status(config, messages):
|
def check_nm_status(config, messages):
|
||||||
|
@@ -27,15 +27,10 @@ from packstack.installer import utils
|
|||||||
from packstack.installer import validators
|
from packstack.installer import validators
|
||||||
|
|
||||||
from packstack.modules import common
|
from packstack.modules import common
|
||||||
|
from packstack.modules.common import filtered_hosts
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import prependManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import deliver_ssl_file
|
from packstack.modules.ospluginutils import deliver_ssl_file
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
from packstack.modules.ospluginutils import manifestfiles
|
|
||||||
|
|
||||||
# ------------- Nova Packstack Plugin Initialization --------------
|
# ------------- Nova Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
@@ -392,35 +387,29 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if controller.CONF['CONFIG_NEUTRON_INSTALL'] == 'y':
|
if controller.CONF['CONFIG_NEUTRON_INSTALL'] == 'y':
|
||||||
network_title = ('Adding OpenStack Network-related '
|
network_title = ('Preparing OpenStack Network-related '
|
||||||
'Nova manifest entries')
|
'Nova entries')
|
||||||
network_function = create_neutron_manifest
|
network_function = create_neutron_manifest
|
||||||
else:
|
else:
|
||||||
network_title = 'Adding Nova Network manifest entries'
|
network_title = 'Preparing Nova Network entries'
|
||||||
network_function = create_network_manifest
|
network_function = create_network_manifest
|
||||||
|
|
||||||
novaapisteps = [
|
novaapisteps = [
|
||||||
{'title': 'Adding Nova API manifest entries',
|
{'title': 'Preparing Nova API entries',
|
||||||
'functions': [create_api_manifest]},
|
'functions': [create_api_manifest]},
|
||||||
{'title': 'Adding Nova Keystone manifest entries',
|
|
||||||
'functions': [create_keystone_manifest]},
|
|
||||||
{'title': 'Adding Nova Cert manifest entries',
|
|
||||||
'functions': [create_cert_manifest]},
|
|
||||||
{'title': 'Adding Nova Conductor manifest entries',
|
|
||||||
'functions': [create_conductor_manifest]},
|
|
||||||
{'title': 'Creating ssh keys for Nova migration',
|
{'title': 'Creating ssh keys for Nova migration',
|
||||||
'functions': [create_ssh_keys]},
|
'functions': [create_ssh_keys]},
|
||||||
{'title': 'Gathering ssh host keys for Nova migration',
|
{'title': 'Gathering ssh host keys for Nova migration',
|
||||||
'functions': [gather_host_keys]},
|
'functions': [gather_host_keys]},
|
||||||
{'title': 'Adding Nova Compute manifest entries',
|
{'title': 'Preparing Nova Compute entries',
|
||||||
'functions': [create_compute_manifest]},
|
'functions': [create_compute_manifest]},
|
||||||
{'title': 'Adding Nova Scheduler manifest entries',
|
{'title': 'Preparing Nova Scheduler entries',
|
||||||
'functions': [create_sched_manifest]},
|
'functions': [create_sched_manifest]},
|
||||||
{'title': 'Adding Nova VNC Proxy manifest entries',
|
{'title': 'Preparing Nova VNC Proxy entries',
|
||||||
'functions': [create_vncproxy_manifest]},
|
'functions': [create_vncproxy_manifest]},
|
||||||
{'title': network_title,
|
{'title': network_title,
|
||||||
'functions': [network_function]},
|
'functions': [network_function]},
|
||||||
{'title': 'Adding Nova Common manifest entries',
|
{'title': 'Preparing Nova Common entries',
|
||||||
'functions': [create_common_manifest]},
|
'functions': [create_common_manifest]},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -540,8 +529,6 @@ def create_api_manifest(config, messages):
|
|||||||
config['CONFIG_NEUTRON_METADATA_PW_UNQUOTED'] = None
|
config['CONFIG_NEUTRON_METADATA_PW_UNQUOTED'] = None
|
||||||
else:
|
else:
|
||||||
config['CONFIG_NEUTRON_METADATA_PW_UNQUOTED'] = "%s" % config['CONFIG_NEUTRON_METADATA_PW']
|
config['CONFIG_NEUTRON_METADATA_PW_UNQUOTED'] = "%s" % config['CONFIG_NEUTRON_METADATA_PW']
|
||||||
manifestfile = "%s_api_nova.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("nova_api")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "nova_api"
|
key = "nova_api"
|
||||||
@@ -552,27 +539,6 @@ def create_api_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['8773', '8774', '8775']
|
fw_details[key]['ports'] = ['8773', '8774', '8775']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_NOVA_API_RULES'] = fw_details
|
config['FIREWALL_NOVA_API_RULES'] = fw_details
|
||||||
manifestdata += createFirewallResources('FIREWALL_NOVA_API_RULES')
|
|
||||||
|
|
||||||
appendManifestFile(manifestfile, manifestdata, 'novaapi')
|
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_nova")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_cert_manifest(config, messages):
|
|
||||||
manifestfile = "%s_nova.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("nova_cert")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_conductor_manifest(config, messages):
|
|
||||||
manifestfile = "%s_nova.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("nova_conductor")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_compute_manifest(config, messages):
|
def create_compute_manifest(config, messages):
|
||||||
@@ -594,8 +560,6 @@ def create_compute_manifest(config, messages):
|
|||||||
'qemu+tcp://nova@%s/system'
|
'qemu+tcp://nova@%s/system'
|
||||||
)
|
)
|
||||||
|
|
||||||
ssh_hostkeys = ''
|
|
||||||
|
|
||||||
ssh_keys_details = {}
|
ssh_keys_details = {}
|
||||||
for host in compute_hosts:
|
for host in compute_hosts:
|
||||||
try:
|
try:
|
||||||
@@ -617,7 +581,6 @@ def create_compute_manifest(config, messages):
|
|||||||
ssh_keys_details[key]['type'] = host_key_type
|
ssh_keys_details[key]['type'] = host_key_type
|
||||||
|
|
||||||
config['SSH_KEYS'] = ssh_keys_details
|
config['SSH_KEYS'] = ssh_keys_details
|
||||||
ssh_hostkeys += getManifestTemplate("sshkey")
|
|
||||||
|
|
||||||
if config['CONFIG_VMWARE_BACKEND'] == 'y':
|
if config['CONFIG_VMWARE_BACKEND'] == 'y':
|
||||||
vcenters = [i.strip() for i in
|
vcenters = [i.strip() for i in
|
||||||
@@ -637,14 +600,13 @@ def create_compute_manifest(config, messages):
|
|||||||
else:
|
else:
|
||||||
vcenters = len(compute_hosts) * [vcenters[0]]
|
vcenters = len(compute_hosts) * [vcenters[0]]
|
||||||
vmware_clusters = dict(zip(compute_hosts, vcenters))
|
vmware_clusters = dict(zip(compute_hosts, vcenters))
|
||||||
|
config['CONFIG_VCENTER_CLUSTERS'] = vmware_clusters
|
||||||
|
|
||||||
for host in compute_hosts:
|
for host in compute_hosts:
|
||||||
if config['CONFIG_IRONIC_INSTALL'] == 'y':
|
if config['CONFIG_IRONIC_INSTALL'] == 'y':
|
||||||
cm = 'ironic.nova.compute.manager.ClusteredComputeManager'
|
cm = 'ironic.nova.compute.manager.ClusteredComputeManager'
|
||||||
config['CONFIG_NOVA_COMPUTE_MANAGER'] = cm
|
config['CONFIG_NOVA_COMPUTE_MANAGER'] = cm
|
||||||
|
|
||||||
manifestdata = getManifestTemplate("nova_compute")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
cf_fw_qemu_mig_key = "FIREWALL_NOVA_QEMU_MIG_RULES_%s" % host
|
cf_fw_qemu_mig_key = "FIREWALL_NOVA_QEMU_MIG_RULES_%s" % host
|
||||||
for c_host in compute_hosts:
|
for c_host in compute_hosts:
|
||||||
@@ -657,31 +619,8 @@ def create_compute_manifest(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
|
|
||||||
config[cf_fw_qemu_mig_key] = fw_details
|
config[cf_fw_qemu_mig_key] = fw_details
|
||||||
manifestdata += createFirewallResources(cf_fw_qemu_mig_key)
|
|
||||||
|
|
||||||
if config['CONFIG_VMWARE_BACKEND'] == 'y':
|
|
||||||
manifestdata += ("\n$nova_vcenter_cluster_name = '%s'\n" %
|
|
||||||
vmware_clusters[host])
|
|
||||||
manifestdata += getManifestTemplate("nova_compute_vmware.pp")
|
|
||||||
elif config['CONFIG_IRONIC_INSTALL'] == 'y':
|
|
||||||
manifestdata += getManifestTemplate("nova_compute_ironic.pp")
|
|
||||||
else:
|
|
||||||
manifestdata += getManifestTemplate("nova_compute_libvirt.pp")
|
|
||||||
|
|
||||||
if (config['CONFIG_VMWARE_BACKEND'] != 'y' and
|
|
||||||
config['CONFIG_CINDER_INSTALL'] == 'y' and
|
|
||||||
'gluster' in config['CONFIG_CINDER_BACKEND']):
|
|
||||||
manifestdata += getManifestTemplate("nova_gluster")
|
|
||||||
if (config['CONFIG_VMWARE_BACKEND'] != 'y' and
|
|
||||||
config['CONFIG_CINDER_INSTALL'] == 'y' and
|
|
||||||
'nfs' in config['CONFIG_CINDER_BACKEND']):
|
|
||||||
manifestdata += getManifestTemplate("nova_nfs")
|
|
||||||
manifestfile = "%s_nova.pp" % host
|
|
||||||
|
|
||||||
if config['CONFIG_NEUTRON_INSTALL'] != 'y':
|
if config['CONFIG_NEUTRON_INSTALL'] != 'y':
|
||||||
if host not in network_hosts:
|
|
||||||
manifestdata += getManifestTemplate('nova_compute_flat')
|
|
||||||
|
|
||||||
key = 'CONFIG_NOVA_COMPUTE_PRIVIF'
|
key = 'CONFIG_NOVA_COMPUTE_PRIVIF'
|
||||||
if not config[key].strip():
|
if not config[key].strip():
|
||||||
config[key] = dummy_interface(host)
|
config[key] = dummy_interface(host)
|
||||||
@@ -711,10 +650,6 @@ def create_compute_manifest(config, messages):
|
|||||||
generate_ssl_cert(config, host, service, ssl_key_file,
|
generate_ssl_cert(config, host, service, ssl_key_file,
|
||||||
ssl_cert_file)
|
ssl_cert_file)
|
||||||
|
|
||||||
mq_template = get_mq(config, "nova_ceilometer")
|
|
||||||
manifestdata += getManifestTemplate(mq_template)
|
|
||||||
manifestdata += getManifestTemplate("nova_ceilometer")
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "nova_compute"
|
key = "nova_compute"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -725,12 +660,6 @@ def create_compute_manifest(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_NOVA_COMPUTE_RULES'] = fw_details
|
config['FIREWALL_NOVA_COMPUTE_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += "\n" + createFirewallResources(
|
|
||||||
'FIREWALL_NOVA_COMPUTE_RULES'
|
|
||||||
)
|
|
||||||
manifestdata += "\n" + ssh_hostkeys
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_network_manifest(config, messages):
|
def create_network_manifest(config, messages):
|
||||||
global compute_hosts, network_hosts
|
global compute_hosts, network_hosts
|
||||||
@@ -768,28 +697,11 @@ def create_network_manifest(config, messages):
|
|||||||
net_size = 2 ** (32 - int(routing_prefix))
|
net_size = 2 ** (32 - int(routing_prefix))
|
||||||
config['CONFIG_NOVA_NETWORK_FIXEDSIZE'] = str(net_size)
|
config['CONFIG_NOVA_NETWORK_FIXEDSIZE'] = str(net_size)
|
||||||
|
|
||||||
manifestfile = "%s_nova.pp" % host
|
|
||||||
manifestdata = getManifestTemplate("nova_network")
|
|
||||||
# Restart libvirt if we deploy nova network on compute
|
|
||||||
if host in compute_hosts:
|
|
||||||
manifestdata += getManifestTemplate("nova_network_libvirt")
|
|
||||||
|
|
||||||
# in multihost mode each compute host runs nova-api-metadata
|
|
||||||
if multihost and host != api_host and host in compute_hosts:
|
|
||||||
manifestdata += getManifestTemplate("nova_metadata")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_sched_manifest(config, messages):
|
def create_sched_manifest(config, messages):
|
||||||
manifestfile = "%s_nova.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
if config['CONFIG_IRONIC_INSTALL'] == 'y':
|
if config['CONFIG_IRONIC_INSTALL'] == 'y':
|
||||||
manifestdata = getManifestTemplate("nova_sched_ironic.pp")
|
|
||||||
ram_alloc = '1.0'
|
ram_alloc = '1.0'
|
||||||
config['CONFIG_NOVA_SCHED_RAM_ALLOC_RATIO'] = ram_alloc
|
config['CONFIG_NOVA_SCHED_RAM_ALLOC_RATIO'] = ram_alloc
|
||||||
manifestdata += getManifestTemplate("nova_sched.pp")
|
|
||||||
else:
|
|
||||||
manifestdata = getManifestTemplate("nova_sched.pp")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_vncproxy_manifest(config, messages):
|
def create_vncproxy_manifest(config, messages):
|
||||||
@@ -820,10 +732,6 @@ def create_vncproxy_manifest(config, messages):
|
|||||||
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
||||||
ssl_cert_file)
|
ssl_cert_file)
|
||||||
|
|
||||||
manifestfile = "%s_nova.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("nova_vncproxy")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_common_manifest(config, messages):
|
def create_common_manifest(config, messages):
|
||||||
global compute_hosts, network_hosts
|
global compute_hosts, network_hosts
|
||||||
@@ -834,45 +742,34 @@ def create_common_manifest(config, messages):
|
|||||||
dbacces_hosts = set([config.get('CONFIG_CONTROLLER_HOST')])
|
dbacces_hosts = set([config.get('CONFIG_CONTROLLER_HOST')])
|
||||||
dbacces_hosts |= network_hosts
|
dbacces_hosts |= network_hosts
|
||||||
|
|
||||||
for manifestfile, marker in manifestfiles.getFiles():
|
for host in filtered_hosts(config):
|
||||||
pw_in_sqlconn = False
|
pw_in_sqlconn = False
|
||||||
if manifestfile.endswith("_nova.pp"):
|
host = host.strip()
|
||||||
host, manifest = manifestfile.split('_', 1)
|
|
||||||
host = host.strip()
|
|
||||||
|
|
||||||
if host in compute_hosts and host not in dbacces_hosts:
|
if host in compute_hosts and host not in dbacces_hosts:
|
||||||
# we should omit password in case we are installing only
|
# we should omit password in case we are installing only
|
||||||
# nova-compute to the host
|
# nova-compute to the host
|
||||||
perms = "nova"
|
perms = "nova"
|
||||||
pw_in_sqlconn = False
|
pw_in_sqlconn = False
|
||||||
else:
|
else:
|
||||||
perms = "nova:%s" % config['CONFIG_NOVA_DB_PW']
|
perms = "nova:%s" % config['CONFIG_NOVA_DB_PW']
|
||||||
pw_in_sqlconn = True
|
pw_in_sqlconn = True
|
||||||
|
|
||||||
mariadb_host_url = config['CONFIG_MARIADB_HOST_URL']
|
mariadb_host_url = config['CONFIG_MARIADB_HOST_URL']
|
||||||
sqlconn = "mysql+pymysql://%s@%s/nova" % (perms, mariadb_host_url)
|
sqlconn = "mysql+pymysql://%s@%s/nova" % (perms, mariadb_host_url)
|
||||||
if pw_in_sqlconn:
|
if pw_in_sqlconn:
|
||||||
config['CONFIG_NOVA_SQL_CONN_PW'] = sqlconn
|
config['CONFIG_NOVA_SQL_CONN_PW'] = sqlconn
|
||||||
else:
|
else:
|
||||||
config['CONFIG_NOVA_SQL_CONN_NOPW'] = sqlconn
|
config['CONFIG_NOVA_SQL_CONN_NOPW'] = sqlconn
|
||||||
|
|
||||||
# for nova-network in multihost mode each compute host is metadata
|
# for nova-network in multihost mode each compute host is metadata
|
||||||
# host otherwise we use api host
|
# host otherwise we use api host
|
||||||
if (network_type == 'nova' and network_multi and
|
if (network_type == 'nova' and network_multi and
|
||||||
host in compute_hosts):
|
host in compute_hosts):
|
||||||
metadata = host
|
metadata = host
|
||||||
else:
|
else:
|
||||||
metadata = config['CONFIG_CONTROLLER_HOST']
|
metadata = config['CONFIG_CONTROLLER_HOST']
|
||||||
config['CONFIG_NOVA_METADATA_HOST'] = metadata
|
config['CONFIG_NOVA_METADATA_HOST'] = metadata
|
||||||
|
|
||||||
data = getManifestTemplate(get_mq(config, "nova_common"))
|
|
||||||
if pw_in_sqlconn:
|
|
||||||
data += getManifestTemplate("nova_common_pw")
|
|
||||||
else:
|
|
||||||
data += getManifestTemplate("nova_common_nopw")
|
|
||||||
# We need to have class nova before class nova::api, so prepend
|
|
||||||
# instead of append
|
|
||||||
prependManifestFile(os.path.split(manifestfile)[1], data)
|
|
||||||
|
|
||||||
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
||||||
nova_hosts = compute_hosts
|
nova_hosts = compute_hosts
|
||||||
@@ -899,8 +796,3 @@ def create_neutron_manifest(config, messages):
|
|||||||
else:
|
else:
|
||||||
virt_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver'
|
virt_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver'
|
||||||
config['CONFIG_NOVA_LIBVIRT_VIF_DRIVER'] = virt_driver
|
config['CONFIG_NOVA_LIBVIRT_VIF_DRIVER'] = virt_driver
|
||||||
|
|
||||||
for manifestfile, marker in manifestfiles.getFiles():
|
|
||||||
if manifestfile.endswith("_nova.pp"):
|
|
||||||
data = getManifestTemplate("nova_neutron")
|
|
||||||
appendManifestFile(os.path.split(manifestfile)[1], data)
|
|
||||||
|
@@ -20,9 +20,6 @@ import os
|
|||||||
|
|
||||||
from packstack.installer import utils
|
from packstack.installer import utils
|
||||||
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
|
|
||||||
# ------------- OpenStack Client Packstack Plugin Initialization --------------
|
# ------------- OpenStack Client Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
PLUGIN_NAME = "OS-Client"
|
PLUGIN_NAME = "OS-Client"
|
||||||
@@ -44,7 +41,7 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
osclientsteps = [
|
osclientsteps = [
|
||||||
{'title': 'Adding OpenStack Client manifest entries',
|
{'title': 'Preparing OpenStack Client entries',
|
||||||
'functions': [create_manifest]}
|
'functions': [create_manifest]}
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing OpenStack Client", [], [],
|
controller.addSequence("Installing OpenStack Client", [], [],
|
||||||
@@ -55,7 +52,6 @@ def initSequences(controller):
|
|||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
client_host = config['CONFIG_CONTROLLER_HOST'].strip()
|
client_host = config['CONFIG_CONTROLLER_HOST'].strip()
|
||||||
manifestfile = "%s_osclient.pp" % client_host
|
|
||||||
|
|
||||||
server = utils.ScriptRunner(client_host)
|
server = utils.ScriptRunner(client_host)
|
||||||
server.append('echo $HOME')
|
server.append('echo $HOME')
|
||||||
@@ -72,9 +68,6 @@ def create_manifest(config, messages):
|
|||||||
root_home != homedir)
|
root_home != homedir)
|
||||||
config['NO_ROOT_USER_ALLINONE'] = no_root_allinone and True or False
|
config['NO_ROOT_USER_ALLINONE'] = no_root_allinone and True or False
|
||||||
|
|
||||||
manifestdata = getManifestTemplate("openstack_client")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
msg = ("File %s/keystonerc_admin has been created on OpenStack client host"
|
msg = ("File %s/keystonerc_admin has been created on OpenStack client host"
|
||||||
" %s. To use the command line tools you need to source the file.")
|
" %s. To use the command line tools you need to source the file.")
|
||||||
messages.append(msg % (root_home, client_host))
|
messages.append(msg % (root_home, client_host))
|
||||||
|
@@ -33,8 +33,6 @@ from packstack.installer import validators
|
|||||||
from packstack.modules.common import filtered_hosts
|
from packstack.modules.common import filtered_hosts
|
||||||
from packstack.modules.common import is_all_in_one
|
from packstack.modules.common import is_all_in_one
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
|
|
||||||
# ------------- Prescript Packstack Plugin Initialization --------------
|
# ------------- Prescript Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
@@ -946,7 +944,7 @@ def initSequences(controller):
|
|||||||
'functions': [server_prep]},
|
'functions': [server_prep]},
|
||||||
{'title': 'Pre installing Puppet and discovering hosts\' details',
|
{'title': 'Pre installing Puppet and discovering hosts\' details',
|
||||||
'functions': [preinstall_and_discover]},
|
'functions': [preinstall_and_discover]},
|
||||||
{'title': 'Adding pre install manifest entries',
|
{'title': 'Preparing pre-install entries',
|
||||||
'functions': [create_manifest]},
|
'functions': [create_manifest]},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1458,11 +1456,6 @@ def create_manifest(config, messages):
|
|||||||
else:
|
else:
|
||||||
config['CONFIG_STORAGE_HOST_URL'] = config['CONFIG_STORAGE_HOST']
|
config['CONFIG_STORAGE_HOST_URL'] = config['CONFIG_STORAGE_HOST']
|
||||||
|
|
||||||
for hostname in filtered_hosts(config):
|
|
||||||
manifestfile = "%s_prescript.pp" % hostname
|
|
||||||
manifestdata = getManifestTemplate("prescript")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_ntp_manifest(config, messages):
|
def create_ntp_manifest(config, messages):
|
||||||
srvlist = [i.strip()
|
srvlist = [i.strip()
|
||||||
@@ -1472,23 +1465,3 @@ def create_ntp_manifest(config, messages):
|
|||||||
|
|
||||||
definiton = '\n'.join(['server %s' % i for i in srvlist])
|
definiton = '\n'.join(['server %s' % i for i in srvlist])
|
||||||
config['CONFIG_NTP_SERVER_DEF'] = '%s\n' % definiton
|
config['CONFIG_NTP_SERVER_DEF'] = '%s\n' % definiton
|
||||||
|
|
||||||
marker = uuid.uuid4().hex[:16]
|
|
||||||
|
|
||||||
for hostname in filtered_hosts(config):
|
|
||||||
hostnfo = config['HOST_DETAILS'][hostname]
|
|
||||||
releaseos = hostnfo['operatingsystem']
|
|
||||||
releasever = hostnfo['operatingsystemmajrelease']
|
|
||||||
|
|
||||||
# Configure chrony for Fedora or RHEL/CentOS 7
|
|
||||||
if releaseos == 'Fedora' or releasever == '7':
|
|
||||||
manifestdata = getManifestTemplate('chrony')
|
|
||||||
appendManifestFile('%s_chrony.pp' % hostname,
|
|
||||||
manifestdata,
|
|
||||||
marker=marker)
|
|
||||||
# For previous versions, configure ntpd
|
|
||||||
else:
|
|
||||||
manifestdata = getManifestTemplate('ntpd')
|
|
||||||
appendManifestFile('%s_ntpd.pp' % hostname,
|
|
||||||
manifestdata,
|
|
||||||
marker=marker)
|
|
||||||
|
@@ -22,8 +22,6 @@ from packstack.installer import validators
|
|||||||
from packstack.installer import processors
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
|
|
||||||
# ------------- Provision Packstack Plugin Initialization --------------
|
# ------------- Provision Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
@@ -381,58 +379,3 @@ def initConfig(controller):
|
|||||||
|
|
||||||
def initSequences(controller):
|
def initSequences(controller):
|
||||||
config = controller.CONF
|
config = controller.CONF
|
||||||
|
|
||||||
if (config['CONFIG_PROVISION_DEMO'] != "y" and
|
|
||||||
config['CONFIG_PROVISION_TEMPEST'] != "y"):
|
|
||||||
return
|
|
||||||
|
|
||||||
provision_steps = [
|
|
||||||
{'title': 'Adding Provisioning manifest entries',
|
|
||||||
'functions': [create_provision_manifest]},
|
|
||||||
{'title': 'Adding Provisioning Glance manifest entries',
|
|
||||||
'functions': [create_storage_manifest]},
|
|
||||||
]
|
|
||||||
if (config['CONFIG_PROVISION_TEMPEST'] == "y" or
|
|
||||||
config['CONFIG_PROVISION_DEMO'] == "y"):
|
|
||||||
provision_steps.append(
|
|
||||||
{'title': 'Adding Provisioning Demo bridge manifest entries',
|
|
||||||
'functions': [create_bridge_manifest]}
|
|
||||||
)
|
|
||||||
if config['CONFIG_PROVISION_TEMPEST'] == "y":
|
|
||||||
provision_steps.append(
|
|
||||||
{'title': 'Adding Provisioning Tempest manifest entries',
|
|
||||||
'functions': [create_tempest_manifest]}
|
|
||||||
)
|
|
||||||
|
|
||||||
controller.addSequence("Provisioning for Demo and Testing Usage",
|
|
||||||
[], [], provision_steps)
|
|
||||||
|
|
||||||
|
|
||||||
# -------------------------- step functions --------------------------
|
|
||||||
|
|
||||||
def create_provision_manifest(config, messages):
|
|
||||||
manifest_file = '%s_provision.pp' % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifest_data = getManifestTemplate("provision")
|
|
||||||
appendManifestFile(manifest_file, manifest_data, 'provision')
|
|
||||||
|
|
||||||
|
|
||||||
def create_bridge_manifest(config, messages):
|
|
||||||
for host in utils.split_hosts(config['CONFIG_NETWORK_HOSTS']):
|
|
||||||
manifest_file = '{}_provision_bridge.pp'.format(host)
|
|
||||||
manifest_data = getManifestTemplate("provision_bridge")
|
|
||||||
appendManifestFile(manifest_file, manifest_data, 'bridge')
|
|
||||||
|
|
||||||
|
|
||||||
def create_storage_manifest(config, messages):
|
|
||||||
if config['CONFIG_GLANCE_INSTALL'] == 'y':
|
|
||||||
template = "provision_glance"
|
|
||||||
manifest_file = '%s_provision_glance' % config['CONFIG_STORAGE_HOST']
|
|
||||||
manifest_data = getManifestTemplate(template)
|
|
||||||
appendManifestFile(manifest_file, manifest_data, 'provision')
|
|
||||||
|
|
||||||
|
|
||||||
def create_tempest_manifest(config, messages):
|
|
||||||
manifest_file = ('%s_provision_tempest.pp' %
|
|
||||||
config['CONFIG_TEMPEST_HOST'])
|
|
||||||
manifest_data = getManifestTemplate("provision_tempest")
|
|
||||||
appendManifestFile(manifest_file, manifest_data, 'tempest')
|
|
||||||
|
@@ -25,9 +25,12 @@ from packstack.installer import utils
|
|||||||
from packstack.installer import basedefs
|
from packstack.installer import basedefs
|
||||||
from packstack.installer.exceptions import PuppetError
|
from packstack.installer.exceptions import PuppetError
|
||||||
from packstack.installer.exceptions import ScriptRuntimeError
|
from packstack.installer.exceptions import ScriptRuntimeError
|
||||||
|
from packstack.installer.utils import split_hosts
|
||||||
|
|
||||||
from packstack.modules.common import filtered_hosts
|
from packstack.modules.common import filtered_hosts
|
||||||
|
from packstack.modules.ospluginutils import appendManifestFile
|
||||||
from packstack.modules.ospluginutils import generateHieraDataFile
|
from packstack.modules.ospluginutils import generateHieraDataFile
|
||||||
|
from packstack.modules.ospluginutils import getManifestTemplate
|
||||||
from packstack.modules.ospluginutils import manifestfiles
|
from packstack.modules.ospluginutils import manifestfiles
|
||||||
from packstack.modules.puppet import validate_logfile
|
from packstack.modules.puppet import validate_logfile
|
||||||
from packstack.modules.puppet import scan_logfile
|
from packstack.modules.puppet import scan_logfile
|
||||||
@@ -61,6 +64,8 @@ def initSequences(controller):
|
|||||||
controller.insertSequence("Clean Up", [], [], puppetpresteps, index=0)
|
controller.insertSequence("Clean Up", [], [], puppetpresteps, index=0)
|
||||||
|
|
||||||
puppetsteps = [
|
puppetsteps = [
|
||||||
|
{'title': 'Preparing Puppet manifests',
|
||||||
|
'functions': [prepare_puppet_modules]},
|
||||||
{'title': 'Copying Puppet modules and manifests',
|
{'title': 'Copying Puppet modules and manifests',
|
||||||
'functions': [copy_puppet_modules]},
|
'functions': [copy_puppet_modules]},
|
||||||
{'title': 'Applying Puppet manifests',
|
{'title': 'Applying Puppet manifests',
|
||||||
@@ -237,10 +242,29 @@ def apply_puppet_manifest(config, messages):
|
|||||||
server.append(cmd)
|
server.append(cmd)
|
||||||
server.execute(log=logcmd)
|
server.execute(log=logcmd)
|
||||||
|
|
||||||
# wait for outstanding puppet runs befor exiting
|
# wait for outstanding puppet runs before exiting
|
||||||
wait_for_puppet(currently_running, messages)
|
wait_for_puppet(currently_running, messages)
|
||||||
|
|
||||||
|
|
||||||
|
def prepare_puppet_modules(config, messages):
|
||||||
|
network_hosts = split_hosts(config['CONFIG_NETWORK_HOSTS'])
|
||||||
|
compute_hosts = split_hosts(config['CONFIG_COMPUTE_HOSTS'])
|
||||||
|
|
||||||
|
manifestdata = getManifestTemplate("controller")
|
||||||
|
manifestfile = "%s_controller.pp" % config['CONFIG_CONTROLLER_HOST']
|
||||||
|
appendManifestFile(manifestfile, manifestdata, marker='controller')
|
||||||
|
|
||||||
|
for host in network_hosts:
|
||||||
|
manifestdata = getManifestTemplate("network")
|
||||||
|
manifestfile = "%s_network.pp" % host
|
||||||
|
appendManifestFile(manifestfile, manifestdata, marker='network')
|
||||||
|
|
||||||
|
for host in compute_hosts:
|
||||||
|
manifestdata = getManifestTemplate("compute")
|
||||||
|
manifestfile = "%s_compute.pp" % host
|
||||||
|
appendManifestFile(manifestfile, manifestdata, marker='compute')
|
||||||
|
|
||||||
|
|
||||||
def finalize(config, messages):
|
def finalize(config, messages):
|
||||||
for hostname in filtered_hosts(config):
|
for hostname in filtered_hosts(config):
|
||||||
server = utils.ScriptRunner(hostname)
|
server = utils.ScriptRunner(hostname)
|
||||||
|
@@ -22,10 +22,6 @@ from packstack.installer import validators
|
|||||||
from packstack.installer import processors
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------------ Sahara installer initialization ------------------
|
# ------------------ Sahara installer initialization ------------------
|
||||||
@@ -78,25 +74,17 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
saharasteps = [
|
saharasteps = [
|
||||||
{"title": "Adding Sahara Keystone manifest entries",
|
{"title": "Preparing Sahara entries",
|
||||||
"functions": [create_keystone_manifest]},
|
|
||||||
{"title": "Adding Sahara manifest entries",
|
|
||||||
"functions": [create_manifest]},
|
"functions": [create_manifest]},
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing Sahara", [], [], saharasteps)
|
controller.addSequence("Installing Sahara", [], [], saharasteps)
|
||||||
|
|
||||||
|
|
||||||
# -------------------------- step functions --------------------------
|
# -------------------------- step functions --------------------------
|
||||||
|
def create_manifest(config, messages):
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
if config['CONFIG_UNSUPPORTED'] != 'y':
|
if config['CONFIG_UNSUPPORTED'] != 'y':
|
||||||
config['CONFIG_SAHARA_HOST'] = config['CONFIG_CONTROLLER_HOST']
|
config['CONFIG_SAHARA_HOST'] = config['CONFIG_CONTROLLER_HOST']
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_SAHARA_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_sahara")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
|
||||||
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
||||||
ssl_host = config['CONFIG_SAHARA_HOST']
|
ssl_host = config['CONFIG_SAHARA_HOST']
|
||||||
ssl_cert_file = config['CONFIG_SAHARA_SSL_CERT'] = (
|
ssl_cert_file = config['CONFIG_SAHARA_SSL_CERT'] = (
|
||||||
@@ -109,12 +97,6 @@ def create_manifest(config, messages):
|
|||||||
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
||||||
ssl_cert_file)
|
ssl_cert_file)
|
||||||
|
|
||||||
manifestfile = "%s_sahara.pp" % config['CONFIG_STORAGE_HOST']
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "sahara"))
|
|
||||||
manifestdata += getManifestTemplate("sahara.pp")
|
|
||||||
if config['CONFIG_CEILOMETER_INSTALL'] == 'y':
|
|
||||||
manifestdata += getManifestTemplate('sahara_ceilometer')
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "sahara-api"
|
key = "sahara-api"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -124,6 +106,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]["ports"] = ["8386"]
|
fw_details[key]["ports"] = ["8386"]
|
||||||
fw_details[key]["proto"] = "tcp"
|
fw_details[key]["proto"] = "tcp"
|
||||||
config["FIREWALL_SAHARA_CFN_RULES"] = fw_details
|
config["FIREWALL_SAHARA_CFN_RULES"] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources("FIREWALL_SAHARA_CFN_RULES")
|
|
||||||
appendManifestFile(manifestfile, manifestdata, marker='sahara')
|
|
||||||
|
@@ -215,8 +215,9 @@ def create_self_signed_cert(config, messages):
|
|||||||
# for now hardcoded place for landing CACert file on servers
|
# for now hardcoded place for landing CACert file on servers
|
||||||
config['CONFIG_SSL_CACERT'] = '/etc/pki/tls/certs/packstack_cacert.crt'
|
config['CONFIG_SSL_CACERT'] = '/etc/pki/tls/certs/packstack_cacert.crt'
|
||||||
|
|
||||||
if (config['CONFIG_AMQP_ENABLE_SSL'] != 'y' and
|
# if (config['CONFIG_AMQP_ENABLE_SSL'] != 'y' and
|
||||||
config["CONFIG_HORIZON_SSL"] != 'y'):
|
# config["CONFIG_HORIZON_SSL"] != 'y'):
|
||||||
|
if config['CONFIG_AMQP_ENABLE_SSL'] != 'y':
|
||||||
return
|
return
|
||||||
|
|
||||||
config['CONFIG_SSL_CERT_DIR'] = os.path.expanduser(
|
config['CONFIG_SSL_CERT_DIR'] = os.path.expanduser(
|
||||||
|
@@ -16,7 +16,6 @@
|
|||||||
Installs and configures Swift
|
Installs and configures Swift
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
|
||||||
import re
|
import re
|
||||||
import uuid
|
import uuid
|
||||||
import netaddr
|
import netaddr
|
||||||
@@ -29,10 +28,6 @@ from packstack.installer import utils
|
|||||||
from packstack.installer.utils import split_hosts
|
from packstack.installer.utils import split_hosts
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import manifestfiles
|
|
||||||
|
|
||||||
# ------------- Swift Packstack Plugin Initialization --------------
|
# ------------- Swift Packstack Plugin Initialization --------------
|
||||||
|
|
||||||
@@ -146,16 +141,12 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
steps = [
|
steps = [
|
||||||
{'title': 'Adding Swift Keystone manifest entries',
|
{'title': 'Preparing Swift builder entries',
|
||||||
'functions': [create_keystone_manifest]},
|
|
||||||
{'title': 'Adding Swift builder manifest entries',
|
|
||||||
'functions': [create_builder_manifest]},
|
'functions': [create_builder_manifest]},
|
||||||
{'title': 'Adding Swift storage manifest entries',
|
{'title': 'Preparing Swift proxy entries',
|
||||||
'functions': [create_storage_manifest]},
|
|
||||||
{'title': 'Adding Swift common manifest entries',
|
|
||||||
'functions': [create_common_manifest]},
|
|
||||||
{'title': 'Adding Swift proxy manifest entries',
|
|
||||||
'functions': [create_proxy_manifest]},
|
'functions': [create_proxy_manifest]},
|
||||||
|
{'title': 'Preparing Swift storage entries',
|
||||||
|
'functions': [create_storage_manifest]},
|
||||||
]
|
]
|
||||||
controller.addSequence("Installing OpenStack Swift", [], [], steps)
|
controller.addSequence("Installing OpenStack Swift", [], [], steps)
|
||||||
|
|
||||||
@@ -207,6 +198,9 @@ def parse_devices(config):
|
|||||||
if not devices:
|
if not devices:
|
||||||
devices.append({'device': None, 'zone': 1,
|
devices.append({'device': None, 'zone': 1,
|
||||||
'device_name': 'swiftloopback'})
|
'device_name': 'swiftloopback'})
|
||||||
|
config['CONFIG_SWIFT_LOOPBACK'] = 'y'
|
||||||
|
else:
|
||||||
|
config['CONFIG_SWIFT_LOOPBACK'] = 'n'
|
||||||
return devices
|
return devices
|
||||||
|
|
||||||
|
|
||||||
@@ -245,17 +239,10 @@ def get_storage_size(config):
|
|||||||
|
|
||||||
# -------------------------- step functions --------------------------
|
# -------------------------- step functions --------------------------
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
# parse devices in first step
|
|
||||||
global devices
|
|
||||||
devices = parse_devices(config)
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_swift")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_builder_manifest(config, messages):
|
def create_builder_manifest(config, messages):
|
||||||
global devices
|
global devices
|
||||||
|
devices = parse_devices(config)
|
||||||
# The ring file should be built and distributed before the storage services
|
# The ring file should be built and distributed before the storage services
|
||||||
# come up. Specifically the replicator crashes if the ring isn't present
|
# come up. Specifically the replicator crashes if the ring isn't present
|
||||||
|
|
||||||
@@ -267,28 +254,28 @@ def create_builder_manifest(config, messages):
|
|||||||
' weight => 10, }\n')
|
' weight => 10, }\n')
|
||||||
return fmt % (dev_type, host, dev_port, devicename, zone)
|
return fmt % (dev_type, host, dev_port, devicename, zone)
|
||||||
|
|
||||||
manifestfile = "%s_ring_swift.pp" % config['CONFIG_STORAGE_HOST']
|
|
||||||
manifestdata = getManifestTemplate("swift_builder")
|
|
||||||
|
|
||||||
# Add each device to the ring
|
# Add each device to the ring
|
||||||
devicename = 0
|
devicename = 0
|
||||||
for device in devices:
|
for configkey, dev_type, dev_port in (
|
||||||
host = config['CONFIG_STORAGE_HOST_URL']
|
[('SWIFT_RING_OBJECT_DEVICES', 'ring_object_device', 6000),
|
||||||
devicename = device['device_name']
|
('SWIFT_RING_CONTAINER_DEVICES', 'ring_container_device', 6001),
|
||||||
zone = device['zone']
|
('SWIFT_RING_ACCOUNT_DEVICES', 'ring_account_device', 6002)]):
|
||||||
for dev_type, dev_port in [('ring_object_device', 6000),
|
swift_dev_details = dict()
|
||||||
('ring_container_device', 6001),
|
host = utils.force_ip(config['CONFIG_STORAGE_HOST_URL'])
|
||||||
('ring_account_device', 6002)]:
|
fstype = config["CONFIG_SWIFT_STORAGE_FSTYPE"]
|
||||||
manifestdata += device_def(dev_type, host, dev_port, devicename,
|
for device in devices:
|
||||||
zone)
|
devicename = device['device_name']
|
||||||
appendManifestFile(manifestfile, manifestdata, 'swiftbuilder')
|
key = "dev_%s_%s" % (host, devicename)
|
||||||
|
swift_dev_details.setdefault(key, {})
|
||||||
|
zone = device['zone']
|
||||||
|
swift_dev_details[key]['name'] = "%s:%s/%s" % (host, dev_port,
|
||||||
|
devicename)
|
||||||
|
swift_dev_details[key]['weight'] = "%s" % 10
|
||||||
|
swift_dev_details[key]['zone'] = "%s" % zone
|
||||||
|
config[configkey] = swift_dev_details
|
||||||
|
|
||||||
|
|
||||||
def create_proxy_manifest(config, messages):
|
def create_proxy_manifest(config, messages):
|
||||||
manifestfile = "%s_swift.pp" % config['CONFIG_STORAGE_HOST']
|
|
||||||
manifestdata = getManifestTemplate("swift_proxy")
|
|
||||||
if config['CONFIG_CEILOMETER_INSTALL'] == 'y':
|
|
||||||
manifestdata += getManifestTemplate("swift_ceilometer_rabbitmq")
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "swift_proxy"
|
key = "swift_proxy"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -299,31 +286,28 @@ def create_proxy_manifest(config, messages):
|
|||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_SWIFT_PROXY_RULES'] = fw_details
|
config['FIREWALL_SWIFT_PROXY_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_SWIFT_PROXY_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_storage_manifest(config, messages):
|
def create_storage_manifest(config, messages):
|
||||||
global devices
|
global devices
|
||||||
|
|
||||||
manifestfile = "%s_swift.pp" % config['CONFIG_STORAGE_HOST']
|
devicename = 0
|
||||||
manifestdata = getManifestTemplate("swift_storage")
|
swift_dev_details = dict()
|
||||||
|
host = utils.force_ip(config['CONFIG_STORAGE_HOST_URL'])
|
||||||
|
fstype = config["CONFIG_SWIFT_STORAGE_FSTYPE"]
|
||||||
|
|
||||||
# this need to happen once per storage device
|
# this need to happen once per storage device
|
||||||
for device in devices:
|
for device in devices:
|
||||||
host = config['CONFIG_STORAGE_HOST']
|
if device['device'] is None:
|
||||||
devicename = device['device_name']
|
|
||||||
device = device['device']
|
|
||||||
fstype = config["CONFIG_SWIFT_STORAGE_FSTYPE"]
|
|
||||||
if device:
|
|
||||||
check_device(host, device)
|
|
||||||
manifestdata += ('\nswift::storage::%s { "%s":\n'
|
|
||||||
' device => "%s",\n}\n'
|
|
||||||
% (fstype, devicename, device))
|
|
||||||
else:
|
|
||||||
# create loopback device if none was specified
|
|
||||||
config['CONFIG_SWIFT_STORAGE_SEEK'] = get_storage_size(config)
|
config['CONFIG_SWIFT_STORAGE_SEEK'] = get_storage_size(config)
|
||||||
manifestdata += "\n" + getManifestTemplate("swift_loopback")
|
else:
|
||||||
|
devicename = device['device_name']
|
||||||
|
devicedev = device['device']
|
||||||
|
key = "dev_%s_%s" % (host, devicename)
|
||||||
|
swift_dev_details.setdefault(key, {})
|
||||||
|
swift_dev_details[key]['device'] = "%s" % devicename
|
||||||
|
swift_dev_details[key]['dev'] = "%s" % devicedev
|
||||||
|
swift_dev_details[key]['fstype'] = "%s" % fstype
|
||||||
|
config['CONFIG_SWIFT_STORAGE_DEVICES'] = swift_dev_details
|
||||||
|
|
||||||
# set allowed hosts for firewall
|
# set allowed hosts for firewall
|
||||||
hosts = set([config['CONFIG_STORAGE_HOST']])
|
hosts = set([config['CONFIG_STORAGE_HOST']])
|
||||||
@@ -340,13 +324,3 @@ def create_storage_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['6000', '6001', '6002', '873']
|
fw_details[key]['ports'] = ['6000', '6001', '6002', '873']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_SWIFT_STORAGE_RULES'] = fw_details
|
config['FIREWALL_SWIFT_STORAGE_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_SWIFT_STORAGE_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_common_manifest(config, messages):
|
|
||||||
for manifestfile, marker in manifestfiles.getFiles():
|
|
||||||
if manifestfile.endswith("_swift.pp"):
|
|
||||||
data = getManifestTemplate("swift_common")
|
|
||||||
appendManifestFile(os.path.split(manifestfile)[1], data)
|
|
||||||
|
@@ -22,10 +22,6 @@ from packstack.installer import validators
|
|||||||
from packstack.installer import processors
|
from packstack.installer import processors
|
||||||
|
|
||||||
from packstack.modules.documentation import update_params_usage
|
from packstack.modules.documentation import update_params_usage
|
||||||
from packstack.modules.shortcuts import get_mq
|
|
||||||
from packstack.modules.ospluginutils import appendManifestFile
|
|
||||||
from packstack.modules.ospluginutils import createFirewallResources
|
|
||||||
from packstack.modules.ospluginutils import getManifestTemplate
|
|
||||||
from packstack.modules.ospluginutils import generate_ssl_cert
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
||||||
|
|
||||||
# ------------------ Trove Packstack Plugin initialization ------------------
|
# ------------------ Trove Packstack Plugin initialization ------------------
|
||||||
@@ -126,23 +122,14 @@ def initSequences(controller):
|
|||||||
return
|
return
|
||||||
|
|
||||||
steps = [
|
steps = [
|
||||||
{'title': 'Adding Trove Keystone manifest entries',
|
{'title': 'Preparing Trove entries',
|
||||||
'functions': [create_keystone_manifest]},
|
'functions': [create_manifest]}
|
||||||
{'title': 'Adding Trove manifest entries',
|
|
||||||
'functions': [create_manifest]},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
controller.addSequence("Installing Trove", [], [], steps)
|
controller.addSequence("Installing Trove", [], [], steps)
|
||||||
|
|
||||||
|
|
||||||
# ------------------------ step functions --------------------------
|
# ------------------------ step functions --------------------------
|
||||||
|
|
||||||
|
|
||||||
def create_keystone_manifest(config, messages):
|
|
||||||
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
||||||
manifestdata = getManifestTemplate("keystone_trove.pp")
|
|
||||||
appendManifestFile(manifestfile, manifestdata)
|
|
||||||
|
|
||||||
|
|
||||||
def create_manifest(config, messages):
|
def create_manifest(config, messages):
|
||||||
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
||||||
ssl_cert_file = config['CONFIG_TROVE_SSL_CERT'] = (
|
ssl_cert_file = config['CONFIG_TROVE_SSL_CERT'] = (
|
||||||
@@ -160,10 +147,6 @@ def create_manifest(config, messages):
|
|||||||
config['CONFIG_TROVE_NOVA_PW'] == ''):
|
config['CONFIG_TROVE_NOVA_PW'] == ''):
|
||||||
config['CONFIG_TROVE_NOVA_PW'] = config['CONFIG_TROVE_KS_PW']
|
config['CONFIG_TROVE_NOVA_PW'] = config['CONFIG_TROVE_KS_PW']
|
||||||
|
|
||||||
manifestfile = "%s_trove.pp" % config["CONFIG_CONTROLLER_HOST"]
|
|
||||||
manifestdata = getManifestTemplate(get_mq(config, "trove"))
|
|
||||||
manifestdata += getManifestTemplate('trove.pp')
|
|
||||||
|
|
||||||
fw_details = dict()
|
fw_details = dict()
|
||||||
key = "trove"
|
key = "trove"
|
||||||
fw_details.setdefault(key, {})
|
fw_details.setdefault(key, {})
|
||||||
@@ -173,6 +156,3 @@ def create_manifest(config, messages):
|
|||||||
fw_details[key]['ports'] = ['8779']
|
fw_details[key]['ports'] = ['8779']
|
||||||
fw_details[key]['proto'] = "tcp"
|
fw_details[key]['proto'] = "tcp"
|
||||||
config['FIREWALL_TROVE_API_RULES'] = fw_details
|
config['FIREWALL_TROVE_API_RULES'] = fw_details
|
||||||
|
|
||||||
manifestdata += createFirewallResources('FIREWALL_TROVE_API_RULES')
|
|
||||||
appendManifestFile(manifestfile, manifestdata, marker='trove')
|
|
||||||
|
@@ -1,17 +1,8 @@
|
|||||||
$amqp = hiera('CONFIG_AMQP_BACKEND')
|
|
||||||
$amqp_enable_ssl = hiera('CONFIG_AMQP_SSL_ENABLED')
|
|
||||||
|
|
||||||
case $amqp {
|
|
||||||
'rabbitmq': {
|
|
||||||
enable_rabbitmq { 'rabbitmq': }
|
|
||||||
}
|
|
||||||
default: {}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
define enable_rabbitmq {
|
define enable_rabbitmq {
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_AMQP_RULES', {}))
|
||||||
|
$amqp_enable_ssl = hiera('CONFIG_AMQP_SSL_ENABLED')
|
||||||
|
|
||||||
if $::amqp_enable_ssl {
|
if $amqp_enable_ssl {
|
||||||
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
||||||
$kombu_ssl_keyfile = '/etc/pki/tls/private/ssl_amqp.key'
|
$kombu_ssl_keyfile = '/etc/pki/tls/private/ssl_amqp.key'
|
||||||
$kombu_ssl_certfile = '/etc/pki/tls/certs/ssl_amqp.crt'
|
$kombu_ssl_certfile = '/etc/pki/tls/certs/ssl_amqp.crt'
|
||||||
@@ -28,7 +19,7 @@ define enable_rabbitmq {
|
|||||||
port => undef,
|
port => undef,
|
||||||
ssl_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
ssl_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
ssl_only => true,
|
ssl_only => true,
|
||||||
ssl => $::amqp_enable_ssl,
|
ssl => true,
|
||||||
ssl_cacert => $kombu_ssl_ca_certs,
|
ssl_cacert => $kombu_ssl_ca_certs,
|
||||||
ssl_cert => $kombu_ssl_certfile,
|
ssl_cert => $kombu_ssl_certfile,
|
||||||
ssl_key => $kombu_ssl_keyfile,
|
ssl_key => $kombu_ssl_keyfile,
|
||||||
@@ -40,22 +31,22 @@ define enable_rabbitmq {
|
|||||||
# FIXME: it's ugly to not to require client certs
|
# FIXME: it's ugly to not to require client certs
|
||||||
ssl_fail_if_no_peer_cert => true,
|
ssl_fail_if_no_peer_cert => true,
|
||||||
config_variables => {
|
config_variables => {
|
||||||
'tcp_listen_options' => '[binary,{packet, raw},{reuseaddr, true},{backlog, 128},{nodelay, true},{exit_on_close, false},{keepalive, true}]',
|
'tcp_listen_options' => '[binary,{packet, raw},{reuseaddr, true},{backlog, 128},{nodelay, true},{exit_on_close, false},{keepalive, true}]',
|
||||||
'loopback_users' => '[]',
|
'loopback_users' => '[]',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
class { '::rabbitmq':
|
class { '::rabbitmq':
|
||||||
port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
ssl => $::amqp_enable_ssl,
|
ssl => false,
|
||||||
default_user => hiera('CONFIG_AMQP_AUTH_USER'),
|
default_user => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
default_pass => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
default_pass => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
package_provider => 'yum',
|
package_provider => 'yum',
|
||||||
repos_ensure => false,
|
repos_ensure => false,
|
||||||
admin_enable => false,
|
admin_enable => false,
|
||||||
config_variables => {
|
config_variables => {
|
||||||
'tcp_listen_options' => '[binary,{packet, raw},{reuseaddr, true},{backlog, 128},{nodelay, true},{exit_on_close, false},{keepalive, true}]',
|
'tcp_listen_options' => '[binary,{packet, raw},{reuseaddr, true},{backlog, 128},{nodelay, true},{exit_on_close, false},{keepalive, true}]',
|
||||||
'loopback_users' => '[]',
|
'loopback_users' => '[]',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,5 +59,31 @@ define enable_rabbitmq {
|
|||||||
group => 'rabbitmq',
|
group => 'rabbitmq',
|
||||||
mode => '0640',
|
mode => '0640',
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class packstack::amqp ()
|
||||||
|
{
|
||||||
|
$amqp = hiera('CONFIG_AMQP_BACKEND')
|
||||||
|
|
||||||
|
case $amqp {
|
||||||
|
'rabbitmq': {
|
||||||
|
enable_rabbitmq { 'rabbitmq': }
|
||||||
|
|
||||||
|
# The following kernel parameters help alleviate some RabbitMQ
|
||||||
|
# connection issues
|
||||||
|
|
||||||
|
sysctl::value { 'net.ipv4.tcp_keepalive_intvl':
|
||||||
|
value => '1',
|
||||||
|
}
|
||||||
|
|
||||||
|
sysctl::value { 'net.ipv4.tcp_keepalive_probes':
|
||||||
|
value => '5',
|
||||||
|
}
|
||||||
|
|
||||||
|
sysctl::value { 'net.ipv4.tcp_keepalive_time':
|
||||||
|
value => '5',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default: {}
|
||||||
|
}
|
||||||
}
|
}
|
36
packstack/puppet/modules/packstack/manifests/aodh.pp
Normal file
36
packstack/puppet/modules/packstack/manifests/aodh.pp
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
class packstack::aodh ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_AODH_RULES', {}))
|
||||||
|
|
||||||
|
$config_aodh_coordination_backend = hiera('CONFIG_CEILOMETER_COORDINATION_BACKEND')
|
||||||
|
|
||||||
|
if $config_aodh_coordination_backend == 'redis' {
|
||||||
|
$redis_host = hiera('CONFIG_REDIS_HOST_URL')
|
||||||
|
$redis_port = hiera('CONFIG_REDIS_PORT')
|
||||||
|
$coordination_url = "redis://${redis_host}:${redis_port}"
|
||||||
|
} else {
|
||||||
|
$coordination_url = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::aodh::api':
|
||||||
|
enabled => true,
|
||||||
|
keystone_password => hiera('CONFIG_AODH_KS_PW'),
|
||||||
|
keystone_identity_uri => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
service_name => 'httpd',
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::aodh::wsgi::apache':
|
||||||
|
workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
ssl => false
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::aodh::auth':
|
||||||
|
auth_password => hiera('CONFIG_AODH_KS_PW'),
|
||||||
|
}
|
||||||
|
class { '::aodh::evaluator':
|
||||||
|
coordination_url => $coordination_url,
|
||||||
|
}
|
||||||
|
class { '::aodh::notifier': }
|
||||||
|
class { '::aodh::listener': }
|
||||||
|
class { '::aodh::client': }
|
||||||
|
}
|
@@ -0,0 +1,32 @@
|
|||||||
|
class packstack::aodh::rabbitmq ()
|
||||||
|
{
|
||||||
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
||||||
|
$kombu_ssl_keyfile = hiera('CONFIG_AODH_SSL_KEY', undef)
|
||||||
|
$kombu_ssl_certfile = hiera('CONFIG_AODH_SSL_CERT', undef)
|
||||||
|
|
||||||
|
if $kombu_ssl_keyfile {
|
||||||
|
$files_to_set_owner = [ $kombu_ssl_keyfile, $kombu_ssl_certfile ]
|
||||||
|
file { $files_to_set_owner:
|
||||||
|
owner => 'aodh',
|
||||||
|
group => 'aodh',
|
||||||
|
require => Package['openstack-aodh-common'],
|
||||||
|
}
|
||||||
|
File[$files_to_set_owner] ~> Service<| tag == 'aodh-service' |>
|
||||||
|
}
|
||||||
|
|
||||||
|
$config_mongodb_host = hiera('CONFIG_MONGODB_HOST_URL')
|
||||||
|
|
||||||
|
class { '::aodh':
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
rabbit_host => hiera('CONFIG_AMQP_HOST_URL'),
|
||||||
|
rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
|
rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'),
|
||||||
|
rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
|
rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
|
kombu_ssl_ca_certs => $kombu_ssl_ca_certs,
|
||||||
|
kombu_ssl_keyfile => $kombu_ssl_keyfile,
|
||||||
|
kombu_ssl_certfile => $kombu_ssl_certfile,
|
||||||
|
database_connection => "mongodb://${config_mongodb_host}:27017/aodh",
|
||||||
|
}
|
||||||
|
}
|
33
packstack/puppet/modules/packstack/manifests/apache.pp
Normal file
33
packstack/puppet/modules/packstack/manifests/apache.pp
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
class packstack::apache ()
|
||||||
|
{
|
||||||
|
include ::apache
|
||||||
|
|
||||||
|
if hiera('CONFIG_HORIZON_SSL') == 'y' {
|
||||||
|
ensure_packages(['mod_ssl'], {'ensure' => 'present'})
|
||||||
|
Package['mod_ssl'] -> Class['::apache']
|
||||||
|
apache::listen { '443': }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Keystone port
|
||||||
|
apache::listen { '5000': }
|
||||||
|
# Keystone admin port
|
||||||
|
apache::listen { '35357': }
|
||||||
|
|
||||||
|
if hiera('CONFIG_CEILOMETER_INSTALL') == 'y' {
|
||||||
|
if hiera('CONFIG_CEILOMETER_SERVICE_NAME') == 'httpd' {
|
||||||
|
# Ceilometer port
|
||||||
|
apache::listen { '8777': }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_AODH_INSTALL') == 'y' {
|
||||||
|
# Aodh port
|
||||||
|
apache::listen { '8042': }
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_GNOCCHI_INSTALL') == 'y' {
|
||||||
|
# Gnocchi port
|
||||||
|
apache::listen { '8041': }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
80
packstack/puppet/modules/packstack/manifests/ceilometer.pp
Normal file
80
packstack/puppet/modules/packstack/manifests/ceilometer.pp
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
class packstack::ceilometer ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_CEILOMETER_RULES', {}))
|
||||||
|
|
||||||
|
$config_mongodb_host = hiera('CONFIG_MONGODB_HOST_URL')
|
||||||
|
|
||||||
|
$config_ceilometer_coordination_backend = hiera('CONFIG_CEILOMETER_COORDINATION_BACKEND')
|
||||||
|
|
||||||
|
$config_ceilometer_metering_backend = hiera('CONFIG_CEILOMETER_METERING_BACKEND')
|
||||||
|
|
||||||
|
$config_gnocchi_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
|
||||||
|
if $config_ceilometer_coordination_backend == 'redis' {
|
||||||
|
$redis_host = hiera('CONFIG_REDIS_HOST_URL')
|
||||||
|
$redis_port = hiera('CONFIG_REDIS_PORT')
|
||||||
|
$coordination_url = "redis://${redis_host}:${redis_port}"
|
||||||
|
|
||||||
|
ensure_packages(['python-redis'], {'ensure' => 'present'})
|
||||||
|
} else {
|
||||||
|
$coordination_url = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_CEILOMETER_SERVICE_NAME') == 'ceilometer' {
|
||||||
|
$ceilometer_service_name = 'openstack-ceilometer-api'
|
||||||
|
} else {
|
||||||
|
$ceilometer_service_name = 'httpd'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class { '::ceilometer::db':
|
||||||
|
database_connection => "mongodb://${config_mongodb_host}:27017/ceilometer",
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::ceilometer::collector':
|
||||||
|
meter_dispatcher => $config_ceilometer_metering_backend,
|
||||||
|
}
|
||||||
|
|
||||||
|
if $config_ceilometer_metering_backend == 'gnocchi' {
|
||||||
|
|
||||||
|
include ::gnocchi::client
|
||||||
|
class { '::ceilometer::dispatcher::gnocchi':
|
||||||
|
filter_service_activity => false,
|
||||||
|
url => "http://${config_gnocchi_host}:8041",
|
||||||
|
archive_policy => 'high',
|
||||||
|
resources_definition_file => 'gnocchi_resources.yaml',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::ceilometer::agent::notification': }
|
||||||
|
|
||||||
|
class { '::ceilometer::agent::auth':
|
||||||
|
auth_url => hiera('CONFIG_KEYSTONE_PUBLIC_URL_VERSIONLESS'),
|
||||||
|
auth_password => hiera('CONFIG_CEILOMETER_KS_PW'),
|
||||||
|
auth_region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::ceilometer::agent::central':
|
||||||
|
coordination_url => $coordination_url,
|
||||||
|
}
|
||||||
|
|
||||||
|
$bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
class { '::ceilometer::api':
|
||||||
|
host => $bind_host,
|
||||||
|
keystone_auth_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
keystone_identity_uri => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
keystone_password => hiera('CONFIG_CEILOMETER_KS_PW'),
|
||||||
|
api_workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
service_name => $ceilometer_service_name,
|
||||||
|
}
|
||||||
|
|
||||||
|
if $ceilometer_service_name == 'httpd' {
|
||||||
|
class { '::ceilometer::wsgi::apache':
|
||||||
|
ssl => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,8 @@
|
|||||||
|
class packstack::ceilometer::nova_disabled ()
|
||||||
|
{
|
||||||
|
group { 'nova':
|
||||||
|
ensure => present,
|
||||||
|
}
|
||||||
|
|
||||||
|
Group['nova'] -> Class['ceilometer']
|
||||||
|
}
|
@@ -0,0 +1,30 @@
|
|||||||
|
class packstack::ceilometer::rabbitmq ()
|
||||||
|
{
|
||||||
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
||||||
|
$kombu_ssl_keyfile = hiera('CONFIG_CEILOMETER_SSL_KEY', undef)
|
||||||
|
$kombu_ssl_certfile = hiera('CONFIG_CEILOMETER_SSL_CERT', undef)
|
||||||
|
|
||||||
|
if $kombu_ssl_keyfile {
|
||||||
|
$files_to_set_owner = [ $kombu_ssl_keyfile, $kombu_ssl_certfile ]
|
||||||
|
file { $files_to_set_owner:
|
||||||
|
owner => 'ceilometer',
|
||||||
|
group => 'ceilometer',
|
||||||
|
require => Package['openstack-ceilometer-common'],
|
||||||
|
}
|
||||||
|
File[$files_to_set_owner] ~> Service<| tag == 'ceilometer-service' |>
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::ceilometer':
|
||||||
|
metering_secret => hiera('CONFIG_CEILOMETER_SECRET'),
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
rabbit_host => hiera('CONFIG_AMQP_HOST_URL'),
|
||||||
|
rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
|
rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'),
|
||||||
|
rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
|
rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
|
kombu_ssl_ca_certs => $kombu_ssl_ca_certs,
|
||||||
|
kombu_ssl_keyfile => $kombu_ssl_keyfile,
|
||||||
|
kombu_ssl_certfile => $kombu_ssl_certfile,
|
||||||
|
}
|
||||||
|
}
|
101
packstack/puppet/modules/packstack/manifests/chrony.pp
Normal file
101
packstack/puppet/modules/packstack/manifests/chrony.pp
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
class packstack::chrony ()
|
||||||
|
{
|
||||||
|
$cfg_ntp_server_def = hiera('CONFIG_NTP_SERVER_DEF')
|
||||||
|
$cfg_ntp_servers = hiera('CONFIG_NTP_SERVERS')
|
||||||
|
|
||||||
|
$config_content = "
|
||||||
|
# Use public servers from the pool.ntp.org project.
|
||||||
|
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
|
||||||
|
${cfg_ntp_server_def}
|
||||||
|
|
||||||
|
# Ignore stratum in source selection.
|
||||||
|
stratumweight 0
|
||||||
|
|
||||||
|
# Record the rate at which the system clock gains/losses time.
|
||||||
|
driftfile /var/lib/chrony/drift
|
||||||
|
|
||||||
|
# Enable kernel RTC synchronization.
|
||||||
|
rtcsync
|
||||||
|
|
||||||
|
# In first three updates step the system clock instead of slew
|
||||||
|
# if the adjustment is larger than 10 seconds.
|
||||||
|
makestep 10 3
|
||||||
|
|
||||||
|
# Allow NTP client access from local network.
|
||||||
|
#allow 192.168/16
|
||||||
|
|
||||||
|
# Listen for commands only on localhost.
|
||||||
|
bindcmdaddress 127.0.0.1
|
||||||
|
bindcmdaddress ::1
|
||||||
|
|
||||||
|
# Serve time even if not synchronized to any NTP server.
|
||||||
|
#local stratum 10
|
||||||
|
|
||||||
|
keyfile /etc/chrony.keys
|
||||||
|
|
||||||
|
# Specify the key used as password for chronyc.
|
||||||
|
commandkey 1
|
||||||
|
|
||||||
|
# Generate command key if missing.
|
||||||
|
generatecommandkey
|
||||||
|
|
||||||
|
# Disable logging of client accesses.
|
||||||
|
noclientlog
|
||||||
|
|
||||||
|
# Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
|
||||||
|
logchange 0.5
|
||||||
|
|
||||||
|
logdir /var/log/chrony
|
||||||
|
#log measurements statistics tracking
|
||||||
|
"
|
||||||
|
|
||||||
|
package { 'chrony':
|
||||||
|
ensure => 'installed',
|
||||||
|
name => 'chrony',
|
||||||
|
}
|
||||||
|
|
||||||
|
package { 'ntpdate':
|
||||||
|
ensure => 'installed',
|
||||||
|
name => 'ntpdate',
|
||||||
|
}
|
||||||
|
|
||||||
|
file { 'chrony_conf':
|
||||||
|
ensure => file,
|
||||||
|
path => '/etc/chrony.conf',
|
||||||
|
mode => '0644',
|
||||||
|
content => $config_content,
|
||||||
|
}
|
||||||
|
|
||||||
|
exec { 'stop-chronyd':
|
||||||
|
path => '/bin:/usr/bin:/sbin:/usr/sbin',
|
||||||
|
command => 'systemctl stop chronyd.service',
|
||||||
|
onlyif => 'systemctl status chronyd.service'
|
||||||
|
}
|
||||||
|
|
||||||
|
# for cases where ntpd is running instead of default chronyd
|
||||||
|
service { 'ntpd':
|
||||||
|
ensure => stopped,
|
||||||
|
enable => false,
|
||||||
|
}
|
||||||
|
|
||||||
|
exec { 'ntpdate':
|
||||||
|
command => "/usr/sbin/ntpdate ${cfg_ntp_servers}",
|
||||||
|
tries => 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
service { 'chronyd':
|
||||||
|
ensure => running,
|
||||||
|
enable => true,
|
||||||
|
name => 'chronyd',
|
||||||
|
hasstatus => true,
|
||||||
|
hasrestart => true,
|
||||||
|
}
|
||||||
|
|
||||||
|
Package['chrony'] ->
|
||||||
|
Package['ntpdate'] ->
|
||||||
|
File['chrony_conf'] ->
|
||||||
|
Exec['stop-chronyd'] ->
|
||||||
|
Service['ntpd'] ->
|
||||||
|
Exec['ntpdate'] ->
|
||||||
|
Service['chronyd']
|
||||||
|
}
|
61
packstack/puppet/modules/packstack/manifests/cinder.pp
Normal file
61
packstack/puppet/modules/packstack/manifests/cinder.pp
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
class packstack::cinder ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_CINDER_RULES', {}))
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_CINDER_API_RULES', {}))
|
||||||
|
|
||||||
|
cinder_config {
|
||||||
|
'DEFAULT/glance_host': value => hiera('CONFIG_STORAGE_HOST_URL');
|
||||||
|
}
|
||||||
|
|
||||||
|
$bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
|
||||||
|
$cinder_keystone_url = regsubst(regsubst(hiera('CONFIG_KEYSTONE_PUBLIC_URL'),'/v2.0',''),'/v3','')
|
||||||
|
|
||||||
|
class { '::cinder::api':
|
||||||
|
bind_host => $bind_host,
|
||||||
|
keystone_password => hiera('CONFIG_CINDER_KS_PW'),
|
||||||
|
keystone_tenant => 'services',
|
||||||
|
keystone_user => 'cinder',
|
||||||
|
auth_uri => $cinder_keystone_url,
|
||||||
|
identity_uri => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
nova_catalog_info => 'compute:nova:publicURL',
|
||||||
|
nova_catalog_admin_info => 'compute:nova:adminURL',
|
||||||
|
service_workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::cinder::scheduler': }
|
||||||
|
|
||||||
|
class { '::cinder::volume': }
|
||||||
|
|
||||||
|
class { '::cinder::client': }
|
||||||
|
|
||||||
|
$cinder_keystone_admin_username = hiera('CONFIG_KEYSTONE_ADMIN_USERNAME')
|
||||||
|
$cinder_keystone_admin_password = hiera('CONFIG_KEYSTONE_ADMIN_PW')
|
||||||
|
$cinder_keystone_auth_url = hiera('CONFIG_KEYSTONE_PUBLIC_URL')
|
||||||
|
$cinder_keystone_api = hiera('CONFIG_KEYSTONE_API_VERSION')
|
||||||
|
|
||||||
|
# Cinder::Type requires keystone credentials
|
||||||
|
Cinder::Type {
|
||||||
|
os_password => hiera('CONFIG_CINDER_KS_PW'),
|
||||||
|
os_tenant_name => 'services',
|
||||||
|
os_username => 'cinder',
|
||||||
|
os_auth_url => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::cinder::backends':
|
||||||
|
enabled_backends => hiera_array('CONFIG_CINDER_BACKEND'),
|
||||||
|
}
|
||||||
|
|
||||||
|
$db_purge = hiera('CONFIG_CINDER_DB_PURGE_ENABLE')
|
||||||
|
if $db_purge {
|
||||||
|
class { '::cinder::cron::db_purge':
|
||||||
|
hour => '*/24',
|
||||||
|
destination => '/dev/null',
|
||||||
|
age => 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,16 @@
|
|||||||
|
class packstack::cinder::backend::gluster ()
|
||||||
|
{
|
||||||
|
ensure_packages(['glusterfs-fuse'], {'ensure' => 'present'})
|
||||||
|
|
||||||
|
cinder::backend::glusterfs { 'gluster':
|
||||||
|
glusterfs_shares => hiera_array('CONFIG_CINDER_GLUSTER_MOUNTS'),
|
||||||
|
require => Package['glusterfs-fuse'],
|
||||||
|
glusterfs_shares_config => '/etc/cinder/glusterfs_shares.conf',
|
||||||
|
}
|
||||||
|
|
||||||
|
cinder::type { 'glusterfs':
|
||||||
|
set_key => 'volume_backend_name',
|
||||||
|
set_value => 'gluster',
|
||||||
|
require => Class['cinder::api'],
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,96 @@
|
|||||||
|
class packstack::cinder::backend::lvm ()
|
||||||
|
{
|
||||||
|
$create_cinder_volume = hiera('CONFIG_CINDER_VOLUMES_CREATE')
|
||||||
|
|
||||||
|
if $create_cinder_volume == 'y' {
|
||||||
|
# Find an available loop device
|
||||||
|
$loop_dev = chomp(generate('/usr/sbin/losetup', '-f'))
|
||||||
|
|
||||||
|
class { '::cinder::setup_test_volume':
|
||||||
|
size => hiera('CONFIG_CINDER_VOLUMES_SIZE'),
|
||||||
|
loopback_device => $loop_dev,
|
||||||
|
volume_path => '/var/lib/cinder',
|
||||||
|
volume_name => 'cinder-volumes',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add loop device on boot
|
||||||
|
$el_releases = ['RedHat', 'CentOS', 'Scientific']
|
||||||
|
if $::operatingsystem in $el_releases and (versioncmp($::operatingsystemmajrelease, '7') < 0) {
|
||||||
|
|
||||||
|
file_line{ 'rc.local_losetup_cinder_volume':
|
||||||
|
path => '/etc/rc.d/rc.local',
|
||||||
|
match => '^.*/var/lib/cinder/cinder-volumes.*$',
|
||||||
|
line => 'losetup -f /var/lib/cinder/cinder-volumes && service openstack-cinder-volume restart',
|
||||||
|
}
|
||||||
|
|
||||||
|
file { '/etc/rc.d/rc.local':
|
||||||
|
mode => '0755',
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
file { 'openstack-losetup':
|
||||||
|
path => '/usr/lib/systemd/system/openstack-losetup.service',
|
||||||
|
before => Service['openstack-losetup'],
|
||||||
|
notify => Exec['reload systemd files for cinder-volume'],
|
||||||
|
content => '[Unit]
|
||||||
|
Description=Setup cinder-volume loop device
|
||||||
|
DefaultDependencies=false
|
||||||
|
Before=openstack-cinder-volume.service
|
||||||
|
After=local-fs.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/bin/sh -c \'/usr/sbin/losetup -j /var/lib/cinder/cinder-volumes | /usr/bin/grep /var/lib/cinder/cinder-volumes || /usr/sbin/losetup -f /var/lib/cinder/cinder-volumes\'
|
||||||
|
ExecStop=/usr/bin/sh -c \'/usr/sbin/losetup -j /var/lib/cinder/cinder-volumes | /usr/bin/cut -d : -f 1 | /usr/bin/xargs /usr/sbin/losetup -d\'
|
||||||
|
TimeoutSec=60
|
||||||
|
RemainAfterExit=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
RequiredBy=openstack-cinder-volume.service',
|
||||||
|
}
|
||||||
|
|
||||||
|
exec { 'reload systemd files for cinder-volume':
|
||||||
|
command => '/usr/bin/systemctl daemon-reload',
|
||||||
|
refreshonly => true,
|
||||||
|
before => Service['openstack-losetup'],
|
||||||
|
}
|
||||||
|
|
||||||
|
service { 'openstack-losetup':
|
||||||
|
ensure => running,
|
||||||
|
enable => true,
|
||||||
|
require => Class['cinder::setup_test_volume'],
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ensure_packages(['lvm2'], {'ensure' => 'present'})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
file_line { 'snapshot_autoextend_threshold':
|
||||||
|
path => '/etc/lvm/lvm.conf',
|
||||||
|
match => '^\s*snapshot_autoextend_threshold +=.*',
|
||||||
|
line => ' snapshot_autoextend_threshold = 80',
|
||||||
|
require => Package['lvm2'],
|
||||||
|
}
|
||||||
|
|
||||||
|
file_line { 'snapshot_autoextend_percent':
|
||||||
|
path => '/etc/lvm/lvm.conf',
|
||||||
|
match => '^\s*snapshot_autoextend_percent +=.*',
|
||||||
|
line => ' snapshot_autoextend_percent = 20',
|
||||||
|
require => Package['lvm2'],
|
||||||
|
}
|
||||||
|
|
||||||
|
cinder::backend::iscsi { 'lvm':
|
||||||
|
iscsi_ip_address => hiera('CONFIG_STORAGE_HOST_URL'),
|
||||||
|
require => Package['lvm2'],
|
||||||
|
}
|
||||||
|
|
||||||
|
cinder::type { 'iscsi':
|
||||||
|
set_key => 'volume_backend_name',
|
||||||
|
set_value => 'lvm',
|
||||||
|
require => Class['cinder::api'],
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,133 @@
|
|||||||
|
# Copyright (c) – 2014, Ryan Hefner. All rights reserved.
|
||||||
|
class packstack::cinder::backend::netapp ()
|
||||||
|
{
|
||||||
|
$netapp_storage_family = hiera('CONFIG_CINDER_NETAPP_STORAGE_FAMILY')
|
||||||
|
$netapp_storage_protocol = hiera('CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL')
|
||||||
|
$netapp_backend_name = 'netapp'
|
||||||
|
|
||||||
|
if $netapp_storage_family == 'ontap_cluster' {
|
||||||
|
if $netapp_storage_protocol == 'nfs' {
|
||||||
|
cinder::backend::netapp { $netapp_backend_name:
|
||||||
|
netapp_login => hiera('CONFIG_CINDER_NETAPP_LOGIN'),
|
||||||
|
netapp_password => hiera('CONFIG_CINDER_NETAPP_PASSWORD'),
|
||||||
|
netapp_server_hostname => hiera('CONFIG_CINDER_NETAPP_HOSTNAME'),
|
||||||
|
netapp_server_port => hiera('CONFIG_CINDER_NETAPP_SERVER_PORT'),
|
||||||
|
netapp_storage_family => hiera('CONFIG_CINDER_NETAPP_STORAGE_FAMILY'),
|
||||||
|
netapp_storage_protocol => hiera('CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'),
|
||||||
|
netapp_transport_type => hiera('CONFIG_CINDER_NETAPP_TRANSPORT_TYPE'),
|
||||||
|
netapp_vserver => hiera('CONFIG_CINDER_NETAPP_VSERVER'),
|
||||||
|
expiry_thres_minutes => hiera('CONFIG_CINDER_NETAPP_EXPIRY_THRES_MINUTES'),
|
||||||
|
thres_avl_size_perc_start => hiera('CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_START'),
|
||||||
|
thres_avl_size_perc_stop => hiera('CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_STOP'),
|
||||||
|
nfs_shares => hiera_array('CONFIG_CINDER_NETAPP_NFS_SHARES'),
|
||||||
|
nfs_shares_config => hiera('CONFIG_CINDER_NETAPP_NFS_SHARES_CONFIG'),
|
||||||
|
}
|
||||||
|
ensure_packages(['nfs-utils'], {'ensure' => 'present'})
|
||||||
|
}
|
||||||
|
elsif $netapp_storage_protocol == 'iscsi' {
|
||||||
|
cinder::backend::netapp { $netapp_backend_name:
|
||||||
|
netapp_login => hiera('CONFIG_CINDER_NETAPP_LOGIN'),
|
||||||
|
netapp_password => hiera('CONFIG_CINDER_NETAPP_PASSWORD'),
|
||||||
|
netapp_server_hostname => hiera('CONFIG_CINDER_NETAPP_HOSTNAME'),
|
||||||
|
netapp_server_port => hiera('CONFIG_CINDER_NETAPP_SERVER_PORT'),
|
||||||
|
netapp_size_multiplier => hiera('CONFIG_CINDER_NETAPP_SIZE_MULTIPLIER'),
|
||||||
|
netapp_storage_family => hiera('CONFIG_CINDER_NETAPP_STORAGE_FAMILY'),
|
||||||
|
netapp_storage_protocol => hiera('CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'),
|
||||||
|
netapp_transport_type => hiera('CONFIG_CINDER_NETAPP_TRANSPORT_TYPE'),
|
||||||
|
netapp_vserver => hiera('CONFIG_CINDER_NETAPP_VSERVER'),
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_packages(['iscsi-initiator-utils'], {'ensure' => 'present'})
|
||||||
|
}
|
||||||
|
|
||||||
|
elsif $netapp_storage_protocol == 'fc' {
|
||||||
|
cinder::backend::netapp { $netapp_backend_name:
|
||||||
|
netapp_login => hiera('CONFIG_CINDER_NETAPP_LOGIN'),
|
||||||
|
netapp_password => hiera('CONFIG_CINDER_NETAPP_PASSWORD'),
|
||||||
|
netapp_server_hostname => hiera('CONFIG_CINDER_NETAPP_HOSTNAME'),
|
||||||
|
netapp_server_port => hiera('CONFIG_CINDER_NETAPP_SERVER_PORT'),
|
||||||
|
netapp_size_multiplier => hiera('CONFIG_CINDER_NETAPP_SIZE_MULTIPLIER'),
|
||||||
|
netapp_storage_family => hiera('CONFIG_CINDER_NETAPP_STORAGE_FAMILY'),
|
||||||
|
netapp_storage_protocol => hiera('CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'),
|
||||||
|
netapp_transport_type => hiera('CONFIG_CINDER_NETAPP_TRANSPORT_TYPE'),
|
||||||
|
netapp_vserver => hiera('CONFIG_CINDER_NETAPP_VSERVER'),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif $netapp_storage_family == 'ontap_7mode' {
|
||||||
|
if $netapp_storage_protocol == 'nfs' {
|
||||||
|
cinder::backend::netapp { $netapp_backend_name:
|
||||||
|
netapp_login => hiera('CONFIG_CINDER_NETAPP_LOGIN'),
|
||||||
|
netapp_password => hiera('CONFIG_CINDER_NETAPP_PASSWORD'),
|
||||||
|
netapp_server_hostname => hiera('CONFIG_CINDER_NETAPP_HOSTNAME'),
|
||||||
|
netapp_server_port => hiera('CONFIG_CINDER_NETAPP_SERVER_PORT'),
|
||||||
|
netapp_storage_family => hiera('CONFIG_CINDER_NETAPP_STORAGE_FAMILY'),
|
||||||
|
netapp_storage_protocol => hiera('CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'),
|
||||||
|
netapp_transport_type => hiera('CONFIG_CINDER_NETAPP_TRANSPORT_TYPE'),
|
||||||
|
expiry_thres_minutes => hiera('CONFIG_CINDER_NETAPP_EXPIRY_THRES_MINUTES'),
|
||||||
|
thres_avl_size_perc_start => hiera('CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_START'),
|
||||||
|
thres_avl_size_perc_stop => hiera('CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_STOP'),
|
||||||
|
nfs_shares => hiera_array('CONFIG_CINDER_NETAPP_NFS_SHARES'),
|
||||||
|
nfs_shares_config => hiera('CONFIG_CINDER_NETAPP_NFS_SHARES_CONFIG'),
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_packages(['nfs-utils'], {'ensure' => 'present'})
|
||||||
|
}
|
||||||
|
elsif $netapp_storage_protocol == 'iscsi' {
|
||||||
|
cinder::backend::netapp { $netapp_backend_name:
|
||||||
|
netapp_login => hiera('CONFIG_CINDER_NETAPP_LOGIN'),
|
||||||
|
netapp_password => hiera('CONFIG_CINDER_NETAPP_PASSWORD'),
|
||||||
|
netapp_server_hostname => hiera('CONFIG_CINDER_NETAPP_HOSTNAME'),
|
||||||
|
netapp_server_port => hiera('CONFIG_CINDER_NETAPP_SERVER_PORT'),
|
||||||
|
netapp_size_multiplier => hiera('CONFIG_CINDER_NETAPP_SIZE_MULTIPLIER'),
|
||||||
|
netapp_storage_family => hiera('CONFIG_CINDER_NETAPP_STORAGE_FAMILY'),
|
||||||
|
netapp_storage_protocol => hiera('CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'),
|
||||||
|
netapp_transport_type => hiera('CONFIG_CINDER_NETAPP_TRANSPORT_TYPE'),
|
||||||
|
netapp_vfiler => hiera('CONFIG_CINDER_NETAPP_VFILER'),
|
||||||
|
netapp_volume_list => hiera('CONFIG_CINDER_NETAPP_VOLUME_LIST'),
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_packages(['iscsi-initiator-utils'], {'ensure' => 'present'})
|
||||||
|
}
|
||||||
|
|
||||||
|
elsif $netapp_storage_protocol == 'fc' {
|
||||||
|
cinder::backend::netapp { $netapp_backend_name:
|
||||||
|
netapp_login => hiera('CONFIG_CINDER_NETAPP_LOGIN'),
|
||||||
|
netapp_password => hiera('CONFIG_CINDER_NETAPP_PASSWORD'),
|
||||||
|
netapp_server_hostname => hiera('CONFIG_CINDER_NETAPP_HOSTNAME'),
|
||||||
|
netapp_server_port => hiera('CONFIG_CINDER_NETAPP_SERVER_PORT'),
|
||||||
|
netapp_size_multiplier => hiera('CONFIG_CINDER_NETAPP_SIZE_MULTIPLIER'),
|
||||||
|
netapp_storage_family => hiera('CONFIG_CINDER_NETAPP_STORAGE_FAMILY'),
|
||||||
|
netapp_storage_protocol => hiera('CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'),
|
||||||
|
netapp_transport_type => hiera('CONFIG_CINDER_NETAPP_TRANSPORT_TYPE'),
|
||||||
|
netapp_vfiler => hiera('CONFIG_CINDER_NETAPP_VFILER'),
|
||||||
|
netapp_partner_backend_name => hiera('CONFIG_CINDER_NETAPP_PARTNER_BACKEND_NAME'),
|
||||||
|
netapp_volume_list => hiera('CONFIG_CINDER_NETAPP_VOLUME_LIST'),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif $netapp_storage_family == 'eseries' {
|
||||||
|
cinder::backend::netapp { $netapp_backend_name:
|
||||||
|
netapp_login => hiera('CONFIG_CINDER_NETAPP_LOGIN'),
|
||||||
|
netapp_password => hiera('CONFIG_CINDER_NETAPP_PASSWORD'),
|
||||||
|
netapp_server_hostname => hiera('CONFIG_CINDER_NETAPP_HOSTNAME'),
|
||||||
|
netapp_server_port => hiera('CONFIG_CINDER_NETAPP_SERVER_PORT'),
|
||||||
|
netapp_storage_family => hiera('CONFIG_CINDER_NETAPP_STORAGE_FAMILY'),
|
||||||
|
netapp_storage_protocol => hiera('CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'),
|
||||||
|
netapp_transport_type => hiera('CONFIG_CINDER_NETAPP_TRANSPORT_TYPE'),
|
||||||
|
netapp_controller_ips => hiera('CONFIG_CINDER_NETAPP_CONTROLLER_IPS'),
|
||||||
|
netapp_sa_password => hiera('CONFIG_CINDER_NETAPP_SA_PASSWORD'),
|
||||||
|
netapp_storage_pools => hiera('CONFIG_CINDER_NETAPP_STORAGE_POOLS'),
|
||||||
|
netapp_eseries_host_type => hiera('CONFIG_CINDER_NETAPP_ESERIES_HOST_TYPE'),
|
||||||
|
netapp_webservice_path => hiera('CONFIG_CINDER_NETAPP_WEBSERVICE_PATH'),
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_packages(['iscsi-initiator-utils'], {'ensure' => 'present'})
|
||||||
|
}
|
||||||
|
|
||||||
|
cinder::type { $netapp_backend_name:
|
||||||
|
set_key => 'volume_backend_name',
|
||||||
|
set_value => $netapp_backend_name,
|
||||||
|
require => Class['cinder::api'],
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,16 @@
|
|||||||
|
class packstack::cinder::backend::nfs ()
|
||||||
|
{
|
||||||
|
ensure_packages(['nfs-utils'], {'ensure' => 'present'})
|
||||||
|
|
||||||
|
cinder::backend::nfs { 'nfs':
|
||||||
|
nfs_servers => hiera_array('CONFIG_CINDER_NFS_MOUNTS'),
|
||||||
|
require => Package['nfs-utils'],
|
||||||
|
nfs_shares_config => '/etc/cinder/nfs_shares.conf',
|
||||||
|
}
|
||||||
|
|
||||||
|
cinder::type { 'nfs':
|
||||||
|
set_key => 'volume_backend_name',
|
||||||
|
set_value => 'nfs',
|
||||||
|
require => Class['cinder::api'],
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,20 @@
|
|||||||
|
# Copyright (c) – 2016, Edward Balduf. All rights reserved.
|
||||||
|
class packstack::cinder::backend::solidfire ()
|
||||||
|
{
|
||||||
|
$solidfire_backend_name = 'solidfire'
|
||||||
|
|
||||||
|
cinder::backend::solidfire { $solidfire_backend_name :
|
||||||
|
san_ip => hiera('CONFIG_CINDER_SOLIDFIRE_LOGIN'),
|
||||||
|
san_login => hiera('CONFIG_CINDER_SOLIDFIRE_PASSWORD'),
|
||||||
|
san_password => hiera('CONFIG_CINDER_SOLIDFIRE_HOSTNAME'),
|
||||||
|
volume_backend_name => $solidfire_backend_name,
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_packages(['iscsi-initiator-utils'], {'ensure' => 'present'})
|
||||||
|
|
||||||
|
cinder::type { $solidfire_backend_name:
|
||||||
|
set_key => 'volume_backend_name',
|
||||||
|
set_value => $solidfire_backend_name,
|
||||||
|
require => Class['cinder::api'],
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,14 @@
|
|||||||
|
class packstack::cinder::backend::vmdk ()
|
||||||
|
{
|
||||||
|
cinder::backend::vmdk { 'vmdk':
|
||||||
|
host_ip => hiera('CONFIG_VCENTER_HOST'),
|
||||||
|
host_username => hiera('CONFIG_VCENTER_USER'),
|
||||||
|
host_password => hiera('CONFIG_VCENTER_PASSWORD'),
|
||||||
|
}
|
||||||
|
|
||||||
|
cinder::type { 'vmdk':
|
||||||
|
set_key => 'volume_backend_name',
|
||||||
|
set_value => 'vmdk',
|
||||||
|
require => Class['cinder::api'],
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,12 @@
|
|||||||
|
class packstack::cinder::backup ()
|
||||||
|
{
|
||||||
|
class { '::cinder::backup': }
|
||||||
|
|
||||||
|
$cinder_backup_conf_ctrl_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
|
||||||
|
class { '::cinder::backup::swift':
|
||||||
|
backup_swift_url => "http://${cinder_backup_conf_ctrl_host}:8080/v1/AUTH_",
|
||||||
|
}
|
||||||
|
|
||||||
|
Class['cinder::api'] ~> Service['cinder-backup']
|
||||||
|
}
|
@@ -0,0 +1,4 @@
|
|||||||
|
class packstack::cinder::ceilometer ()
|
||||||
|
{
|
||||||
|
class { '::cinder::ceilometer': }
|
||||||
|
}
|
@@ -0,0 +1,33 @@
|
|||||||
|
class packstack::cinder::rabbitmq ()
|
||||||
|
{
|
||||||
|
$cinder_rab_cfg_cinder_db_pw = hiera('CONFIG_CINDER_DB_PW')
|
||||||
|
$cinder_rab_cfg_mariadb_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
|
||||||
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
||||||
|
$kombu_ssl_keyfile = hiera('CONFIG_CINDER_SSL_KEY', undef)
|
||||||
|
$kombu_ssl_certfile = hiera('CONFIG_CINDER_SSL_CERT', undef)
|
||||||
|
|
||||||
|
if $kombu_ssl_keyfile {
|
||||||
|
$files_to_set_owner = [ $kombu_ssl_keyfile, $kombu_ssl_certfile ]
|
||||||
|
file { $files_to_set_owner:
|
||||||
|
owner => 'cinder',
|
||||||
|
group => 'cinder',
|
||||||
|
require => Class['cinder'],
|
||||||
|
notify => Service['cinder-api'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::cinder':
|
||||||
|
rabbit_host => hiera('CONFIG_AMQP_HOST_URL'),
|
||||||
|
rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
|
rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'),
|
||||||
|
rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
|
rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
|
database_connection => "mysql+pymysql://cinder:${cinder_rab_cfg_cinder_db_pw}@${cinder_rab_cfg_mariadb_host}/cinder",
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
kombu_ssl_ca_certs => $kombu_ssl_ca_certs,
|
||||||
|
kombu_ssl_keyfile => $kombu_ssl_keyfile,
|
||||||
|
kombu_ssl_certfile => $kombu_ssl_certfile,
|
||||||
|
}
|
||||||
|
}
|
51
packstack/puppet/modules/packstack/manifests/glance.pp
Normal file
51
packstack/puppet/modules/packstack/manifests/glance.pp
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
class packstack::glance ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_GLANCE_RULES', {}))
|
||||||
|
|
||||||
|
$glance_ks_pw = hiera('CONFIG_GLANCE_DB_PW')
|
||||||
|
$glance_mariadb_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
$glance_cfg_ctrl_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
|
||||||
|
# glance option bind_host requires address without brackets
|
||||||
|
$bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
# magical hack for magical config - glance option registry_host requires brackets
|
||||||
|
$registry_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '[::0]',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::glance::api':
|
||||||
|
bind_host => $bind_host,
|
||||||
|
registry_host => $registry_host,
|
||||||
|
auth_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
identity_uri => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
keystone_tenant => 'services',
|
||||||
|
keystone_user => 'glance',
|
||||||
|
keystone_password => hiera('CONFIG_GLANCE_KS_PW'),
|
||||||
|
pipeline => 'keystone',
|
||||||
|
database_connection => "mysql+pymysql://glance:${glance_ks_pw}@${glance_mariadb_host}/glance",
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
os_region_name => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
known_stores => ['file', 'http', 'swift']
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::glance::registry':
|
||||||
|
auth_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
identity_uri => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
bind_host => $bind_host,
|
||||||
|
keystone_tenant => 'services',
|
||||||
|
keystone_user => 'glance',
|
||||||
|
keystone_password => hiera('CONFIG_GLANCE_KS_PW'),
|
||||||
|
database_connection => "mysql+pymysql://glance:${glance_ks_pw}@${glance_mariadb_host}/glance",
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
class packstack::glance::backend::file ()
|
||||||
|
{
|
||||||
|
# TO-DO: Make this configurable
|
||||||
|
class { '::glance::backend::file':
|
||||||
|
filesystem_store_datadir => '/var/lib/glance/images/',
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,12 @@
|
|||||||
|
class packstack::glance::backend::swift ()
|
||||||
|
{
|
||||||
|
class { '::glance::backend::swift':
|
||||||
|
swift_store_user => 'services:glance',
|
||||||
|
swift_store_key => hiera('CONFIG_GLANCE_KS_PW'),
|
||||||
|
swift_store_auth_address => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
swift_store_container => 'glance',
|
||||||
|
swift_store_auth_version => '2',
|
||||||
|
swift_store_large_object_size => '5120',
|
||||||
|
swift_store_create_container_on_put => true,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,29 @@
|
|||||||
|
class packstack::glance::ceilometer ()
|
||||||
|
{
|
||||||
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
||||||
|
$kombu_ssl_keyfile = hiera('CONFIG_GLANCE_SSL_KEY', undef)
|
||||||
|
$kombu_ssl_certfile = hiera('CONFIG_GLANCE_SSL_CERT', undef)
|
||||||
|
|
||||||
|
if $kombu_ssl_keyfile {
|
||||||
|
$files_to_set_owner = [ $kombu_ssl_keyfile, $kombu_ssl_certfile ]
|
||||||
|
file { $files_to_set_owner:
|
||||||
|
owner => 'glance',
|
||||||
|
group => 'glance',
|
||||||
|
require => Class['::glance::notify::rabbitmq'],
|
||||||
|
notify => Service['glance-api'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class { '::glance::notify::rabbitmq':
|
||||||
|
rabbit_host => hiera('CONFIG_AMQP_HOST_URL'),
|
||||||
|
rabbit_notification_exchange => 'glance',
|
||||||
|
rabbit_notification_topic => 'notifications',
|
||||||
|
rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
|
rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'),
|
||||||
|
rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
|
rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
|
kombu_ssl_ca_certs => $kombu_ssl_ca_certs,
|
||||||
|
kombu_ssl_keyfile => $kombu_ssl_keyfile,
|
||||||
|
kombu_ssl_certfile => $kombu_ssl_certfile,
|
||||||
|
notification_driver => 'messagingv2',
|
||||||
|
}
|
||||||
|
}
|
50
packstack/puppet/modules/packstack/manifests/gnocchi.pp
Normal file
50
packstack/puppet/modules/packstack/manifests/gnocchi.pp
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
class packstack::gnocchi ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_GNOCCHI_RULES', {}))
|
||||||
|
|
||||||
|
$gnocchi_cfg_db_pw = hiera('CONFIG_GNOCCHI_DB_PW')
|
||||||
|
$gnocchi_cfg_mariadb_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
|
||||||
|
class { '::gnocchi::wsgi::apache':
|
||||||
|
workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
ssl => false
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::gnocchi':
|
||||||
|
database_connection => "mysql+pymysql://gnocchi:${gnocchi_cfg_db_pw}@${gnocchi_cfg_mariadb_host}/gnocchi?charset=utf8",
|
||||||
|
}
|
||||||
|
|
||||||
|
$bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::gnocchi::api':
|
||||||
|
host => $bind_host,
|
||||||
|
keystone_identity_uri => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
keystone_password => hiera('CONFIG_GNOCCHI_KS_PW'),
|
||||||
|
keystone_auth_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
service_name => 'httpd',
|
||||||
|
}
|
||||||
|
|
||||||
|
# TO-DO: Remove this workaround as soon as module support is implemented (see rhbz#1300662)
|
||||||
|
gnocchi_config {
|
||||||
|
'keystone_authtoken/auth_version': value => hiera('CONFIG_KEYSTONE_API_VERSION');
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::gnocchi::db::sync': }
|
||||||
|
class { '::gnocchi::storage': }
|
||||||
|
class { '::gnocchi::storage::file': }
|
||||||
|
|
||||||
|
class {'::gnocchi::metricd': }
|
||||||
|
|
||||||
|
class {'::gnocchi::statsd':
|
||||||
|
resource_id => '5e3fcbe2-7aab-475d-b42c-a440aa42e5ad',
|
||||||
|
user_id => 'e0ca4711-1128-422c-abd6-62db246c32e7',
|
||||||
|
project_id => 'af0c88e8-90d8-4795-9efe-57f965e67318',
|
||||||
|
archive_policy_name => 'high',
|
||||||
|
flush_delay => '10',
|
||||||
|
}
|
||||||
|
|
||||||
|
include ::gnocchi::client
|
||||||
|
}
|
22
packstack/puppet/modules/packstack/manifests/heat.pp
Normal file
22
packstack/puppet/modules/packstack/manifests/heat.pp
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
class packstack::heat ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_HEAT_RULES', {}))
|
||||||
|
|
||||||
|
class { '::heat::api': }
|
||||||
|
|
||||||
|
$keystone_admin = hiera('CONFIG_KEYSTONE_ADMIN_USERNAME')
|
||||||
|
$heat_cfg_ctrl_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
|
||||||
|
class { '::heat::engine':
|
||||||
|
heat_metadata_server_url => "http://${heat_cfg_ctrl_host}:8000",
|
||||||
|
heat_waitcondition_server_url => "http://${heat_cfg_ctrl_host}:8000/v1/waitcondition",
|
||||||
|
heat_watch_server_url => "http://${heat_cfg_ctrl_host}:8003",
|
||||||
|
auth_encryption_key => hiera('CONFIG_HEAT_AUTH_ENC_KEY'),
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::heat::keystone::domain':
|
||||||
|
domain_name => hiera('CONFIG_HEAT_DOMAIN'),
|
||||||
|
domain_admin => hiera('CONFIG_HEAT_DOMAIN_ADMIN'),
|
||||||
|
domain_password => hiera('CONFIG_HEAT_DOMAIN_PASSWORD'),
|
||||||
|
}
|
||||||
|
}
|
17
packstack/puppet/modules/packstack/manifests/heat/cfn.pp
Normal file
17
packstack/puppet/modules/packstack/manifests/heat/cfn.pp
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
class packstack::heat::cfn ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_HEAT_CFN_RULES', {}))
|
||||||
|
|
||||||
|
class { '::heat::api_cfn':
|
||||||
|
workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
}
|
||||||
|
|
||||||
|
$heat_cfn_cfg_ctrl_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
|
||||||
|
class { '::heat::keystone::auth_cfn':
|
||||||
|
admin_url => "http://$heat_cfn_cfg_ctrl_host:8000/v1",
|
||||||
|
public_url => "http://$heat_cfn_cfg_ctrl_host:8000/v1",
|
||||||
|
internal_url => "http://$heat_cfn_cfg_ctrl_host:8000/v1",
|
||||||
|
password => hiera('CONFIG_HEAT_KS_PW'),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,8 @@
|
|||||||
|
class packstack::heat::cloudwatch ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_HEAT_CLOUDWATCH_RULES', {}))
|
||||||
|
|
||||||
|
class { '::heat::api_cloudwatch':
|
||||||
|
workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,45 @@
|
|||||||
|
class packstack::heat::rabbitmq ()
|
||||||
|
{
|
||||||
|
$heat_rabbitmq_cfg_heat_db_pw = hiera('CONFIG_HEAT_DB_PW')
|
||||||
|
$heat_rabbitmq_cfg_mariadb_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
|
||||||
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', $::os_service_default)
|
||||||
|
$kombu_ssl_keyfile = hiera('CONFIG_HEAT_SSL_KEY', $::os_service_default)
|
||||||
|
$kombu_ssl_certfile = hiera('CONFIG_HEAT_SSL_CERT', $::os_service_default)
|
||||||
|
|
||||||
|
if ! is_service_default($kombu_ssl_keyfile) {
|
||||||
|
$files_to_set_owner = [ $kombu_ssl_keyfile, $kombu_ssl_certfile ]
|
||||||
|
file { $files_to_set_owner:
|
||||||
|
owner => 'heat',
|
||||||
|
group => 'heat',
|
||||||
|
require => Package['heat-common'],
|
||||||
|
}
|
||||||
|
File[$files_to_set_owner] ~> Service<| tag == 'heat-service' |>
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_CEILOMETER_INSTALL') == 'y' {
|
||||||
|
$heat_notification_driver = 'messagingv2'
|
||||||
|
} else {
|
||||||
|
$heat_notification_driver = $::os_service_default
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::heat':
|
||||||
|
keystone_password => hiera('CONFIG_HEAT_KS_PW'),
|
||||||
|
auth_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
identity_uri => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
keystone_ec2_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
rpc_backend => 'rabbit',
|
||||||
|
rabbit_host => hiera('CONFIG_AMQP_HOST_URL'),
|
||||||
|
rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
|
rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'),
|
||||||
|
rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
|
rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
database_connection => "mysql+pymysql://heat:${heat_rabbitmq_cfg_heat_db_pw}@${heat_rabbitmq_cfg_mariadb_host}/heat",
|
||||||
|
kombu_ssl_ca_certs => $kombu_ssl_ca_certs,
|
||||||
|
kombu_ssl_keyfile => $kombu_ssl_keyfile,
|
||||||
|
kombu_ssl_certfile => $kombu_ssl_certfile,
|
||||||
|
notification_driver => $heat_notification_driver,
|
||||||
|
}
|
||||||
|
}
|
59
packstack/puppet/modules/packstack/manifests/horizon.pp
Normal file
59
packstack/puppet/modules/packstack/manifests/horizon.pp
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
class packstack::horizon ()
|
||||||
|
{
|
||||||
|
$is_django_debug = hiera('CONFIG_DEBUG_MODE') ? {
|
||||||
|
true => 'True',
|
||||||
|
false => 'False',
|
||||||
|
}
|
||||||
|
|
||||||
|
$bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
|
||||||
|
$horizon_ssl = hiera('CONFIG_HORIZON_SSL') ? {
|
||||||
|
'y' => true,
|
||||||
|
'n' => false,
|
||||||
|
}
|
||||||
|
|
||||||
|
class {'::horizon':
|
||||||
|
secret_key => hiera('CONFIG_HORIZON_SECRET_KEY'),
|
||||||
|
keystone_url => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
keystone_default_role => '_member_',
|
||||||
|
server_aliases => [hiera('CONFIG_CONTROLLER_HOST'), $::fqdn, 'localhost'],
|
||||||
|
allowed_hosts => '*',
|
||||||
|
hypervisor_options => {'can_set_mount_point' => false, },
|
||||||
|
django_debug => $is_django_debug,
|
||||||
|
django_session_engine => 'django.contrib.sessions.backends.cache',
|
||||||
|
cache_backend => 'django.core.cache.backends.memcached.MemcachedCache',
|
||||||
|
cache_server_ip => '127.0.0.1',
|
||||||
|
cache_server_port => '11211',
|
||||||
|
file_upload_temp_dir => '/var/tmp',
|
||||||
|
listen_ssl => $horizon_ssl,
|
||||||
|
horizon_cert => hiera('CONFIG_HORIZON_SSL_CERT', undef),
|
||||||
|
horizon_key => hiera('CONFIG_HORIZON_SSL_KEY', undef),
|
||||||
|
horizon_ca => hiera('CONFIG_HORIZON_SSL_CACERT', undef),
|
||||||
|
neutron_options => {
|
||||||
|
'enable_lb' => hiera('CONFIG_HORIZON_NEUTRON_LB'),
|
||||||
|
'enable_firewall' => hiera('CONFIG_HORIZON_NEUTRON_FW'),
|
||||||
|
'enable_vpn' => hiera('CONFIG_HORIZON_NEUTRON_VPN'),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
include '::packstack::memcached'
|
||||||
|
|
||||||
|
$firewall_port = hiera('CONFIG_HORIZON_PORT')
|
||||||
|
|
||||||
|
firewall { "001 horizon ${firewall_port} incoming":
|
||||||
|
proto => 'tcp',
|
||||||
|
dport => [$firewall_port],
|
||||||
|
action => 'accept',
|
||||||
|
}
|
||||||
|
|
||||||
|
if str2bool($::selinux) {
|
||||||
|
selboolean{ 'httpd_can_network_connect':
|
||||||
|
value => on,
|
||||||
|
persistent => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
packstack/puppet/modules/packstack/manifests/ironic.pp
Normal file
17
packstack/puppet/modules/packstack/manifests/ironic.pp
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
class packstack::ironic ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_IRONIC_API_RULES', {}))
|
||||||
|
|
||||||
|
ironic_config {
|
||||||
|
'glance/glance_host': value => hiera('CONFIG_STORAGE_HOST_URL');
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::ironic::api':
|
||||||
|
auth_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
admin_password => hiera('CONFIG_IRONIC_KS_PW'),
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::ironic::client': }
|
||||||
|
|
||||||
|
class { '::ironic::conductor': }
|
||||||
|
}
|
@@ -0,0 +1,34 @@
|
|||||||
|
class packstack::ironic::rabbitmq ()
|
||||||
|
{
|
||||||
|
$ironic_rabbitmq_cfg_ironic_db_pw = hiera('CONFIG_IRONIC_DB_PW')
|
||||||
|
$ironic_rabbitmq_cfg_mariadb_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
|
||||||
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
||||||
|
$kombu_ssl_keyfile = hiera('CONFIG_IRONIC_SSL_KEY', undef)
|
||||||
|
$kombu_ssl_certfile = hiera('CONFIG_IRONIC_SSL_CERT', undef)
|
||||||
|
|
||||||
|
if $kombu_ssl_keyfile {
|
||||||
|
$files_to_set_owner = [ $kombu_ssl_keyfile, $kombu_ssl_certfile ]
|
||||||
|
file { $files_to_set_owner:
|
||||||
|
owner => 'ironic',
|
||||||
|
group => 'ironic',
|
||||||
|
require => Package['ironic-common'],
|
||||||
|
}
|
||||||
|
File[$files_to_set_owner] ~> Service<| tag == 'ironic-service' |>
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::ironic':
|
||||||
|
rpc_backend => 'rabbit',
|
||||||
|
rabbit_host => hiera('CONFIG_AMQP_HOST_URL'),
|
||||||
|
rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
|
rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'),
|
||||||
|
rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
|
rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
|
database_connection => "mysql+pymysql://ironic:${ironic_rabbitmq_cfg_ironic_db_pw}@${ironic_rabbitmq_cfg_mariadb_host}/ironic",
|
||||||
|
debug => true,
|
||||||
|
verbose => true,
|
||||||
|
kombu_ssl_ca_certs => $kombu_ssl_ca_certs,
|
||||||
|
kombu_ssl_keyfile => $kombu_ssl_keyfile,
|
||||||
|
kombu_ssl_certfile => $kombu_ssl_certfile,
|
||||||
|
}
|
||||||
|
}
|
135
packstack/puppet/modules/packstack/manifests/keystone.pp
Normal file
135
packstack/puppet/modules/packstack/manifests/keystone.pp
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
class packstack::keystone ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_KEYSTONE_RULES', {}))
|
||||||
|
|
||||||
|
$keystone_use_ssl = false
|
||||||
|
$keystone_cfg_ks_db_pw = hiera('CONFIG_KEYSTONE_DB_PW')
|
||||||
|
$keystone_cfg_mariadb_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
$keystone_token_provider_str = downcase(hiera('CONFIG_KEYSTONE_TOKEN_FORMAT'))
|
||||||
|
$keystone_url = regsubst(regsubst(hiera('CONFIG_KEYSTONE_PUBLIC_URL'),'/v2.0',''),'/v3','')
|
||||||
|
$keystone_admin_url = hiera('CONFIG_KEYSTONE_ADMIN_URL')
|
||||||
|
|
||||||
|
$bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::keystone::client': }
|
||||||
|
|
||||||
|
if hiera('CONFIG_KEYSTONE_DB_PURGE_ENABLE',false) {
|
||||||
|
class { '::keystone::cron::token_flush':
|
||||||
|
minute => '*/1',
|
||||||
|
require => Service['crond'],
|
||||||
|
destination => '/dev/null',
|
||||||
|
}
|
||||||
|
service { 'crond':
|
||||||
|
ensure => 'running',
|
||||||
|
enable => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::keystone':
|
||||||
|
admin_token => hiera('CONFIG_KEYSTONE_ADMIN_TOKEN'),
|
||||||
|
database_connection => "mysql+pymysql://keystone_admin:${keystone_cfg_ks_db_pw}@${keystone_cfg_mariadb_host}/keystone",
|
||||||
|
token_provider => "keystone.token.providers.${keystone_token_provider_str}.Provider",
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
service_name => 'httpd',
|
||||||
|
enable_ssl => $keystone_use_ssl,
|
||||||
|
public_bind_host => $bind_host,
|
||||||
|
admin_bind_host => $bind_host,
|
||||||
|
default_domain => 'Default',
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::keystone::wsgi::apache':
|
||||||
|
workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
ssl => $keystone_use_ssl
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_HEAT_INSTALL') == 'y' {
|
||||||
|
$keystone_admin_roles = ['admin', '_member_', 'heat_stack_owner']
|
||||||
|
} else {
|
||||||
|
$keystone_admin_roles = ['admin']
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure the default _member_ role is present
|
||||||
|
keystone_role { '_member_':
|
||||||
|
ensure => present,
|
||||||
|
} ->
|
||||||
|
class { '::keystone::roles::admin':
|
||||||
|
email => hiera('CONFIG_KEYSTONE_ADMIN_EMAIL'),
|
||||||
|
admin => hiera('CONFIG_KEYSTONE_ADMIN_USERNAME'),
|
||||||
|
password => hiera('CONFIG_KEYSTONE_ADMIN_PW'),
|
||||||
|
admin_tenant => 'admin',
|
||||||
|
admin_roles => $keystone_admin_roles,
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::keystone::endpoint':
|
||||||
|
default_domain => 'Default',
|
||||||
|
public_url => $keystone_url,
|
||||||
|
internal_url => $keystone_url,
|
||||||
|
admin_url => $keystone_admin_url,
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
# so far enforce v2 as default endpoint
|
||||||
|
version => 'v2.0',
|
||||||
|
}
|
||||||
|
|
||||||
|
# default assignment driver is SQL
|
||||||
|
$assignment_driver = 'keystone.assignment.backends.sql.Assignment'
|
||||||
|
|
||||||
|
if hiera('CONFIG_KEYSTONE_IDENTITY_BACKEND') == 'ldap' {
|
||||||
|
|
||||||
|
if hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ENABLED_EMULATION_DN', undef) {
|
||||||
|
$user_enabled_emulation = true
|
||||||
|
} else {
|
||||||
|
$user_enabled_emulation = false
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::keystone::ldap':
|
||||||
|
url => hiera_undef('CONFIG_KEYSTONE_LDAP_URL', undef),
|
||||||
|
user => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_DN', undef),
|
||||||
|
password => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_PASSWORD', undef),
|
||||||
|
suffix => hiera_undef('CONFIG_KEYSTONE_LDAP_SUFFIX', undef),
|
||||||
|
query_scope => hiera_undef('CONFIG_KEYSTONE_LDAP_QUERY_SCOPE', undef),
|
||||||
|
page_size => hiera_undef('CONFIG_KEYSTONE_LDAP_PAGE_SIZE', undef),
|
||||||
|
user_tree_dn => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_SUBTREE', undef),
|
||||||
|
user_filter => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_FILTER', undef),
|
||||||
|
user_objectclass => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_OBJECTCLASS', undef),
|
||||||
|
user_id_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ID_ATTRIBUTE', undef),
|
||||||
|
user_name_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_NAME_ATTRIBUTE', undef),
|
||||||
|
user_mail_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_MAIL_ATTRIBUTE', undef),
|
||||||
|
user_enabled_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ENABLED_ATTRIBUTE', undef),
|
||||||
|
user_enabled_mask => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ENABLED_MASK', undef),
|
||||||
|
user_enabled_default => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ENABLED_DEFAULT', undef),
|
||||||
|
user_enabled_invert => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ENABLED_INVERT', undef),
|
||||||
|
user_attribute_ignore => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ATTRIBUTE_IGNORE', undef),
|
||||||
|
user_default_project_id_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_DEFAULT_PROJECT_ID_ATTRIBUTE', undef),
|
||||||
|
user_allow_create => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ALLOW_CREATE', undef),
|
||||||
|
user_allow_update => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ALLOW_UPDATE', undef),
|
||||||
|
user_allow_delete => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ALLOW_DELETE', undef),
|
||||||
|
user_pass_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_PASS_ATTRIBUTE', undef),
|
||||||
|
user_enabled_emulation => $user_enabled_emulation,
|
||||||
|
user_enabled_emulation_dn => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ENABLED_EMULATION_DN', undef),
|
||||||
|
user_additional_attribute_mapping => hiera_undef('CONFIG_KEYSTONE_LDAP_USER_ADDITIONAL_ATTRIBUTE_MAPPING', undef),
|
||||||
|
group_tree_dn => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_SUBTREE', undef),
|
||||||
|
group_filter => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_FILTER', undef),
|
||||||
|
group_objectclass => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_OBJECTCLASS', undef),
|
||||||
|
group_id_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_ID_ATTRIBUTE', undef),
|
||||||
|
group_name_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_NAME_ATTRIBUTE', undef),
|
||||||
|
group_member_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_MEMBER_ATTRIBUTE', undef),
|
||||||
|
group_desc_attribute => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_DESC_ATTRIBUTE', undef),
|
||||||
|
group_attribute_ignore => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_ATTRIBUTE_IGNORE', undef),
|
||||||
|
group_allow_create => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_CREATE', undef),
|
||||||
|
group_allow_update => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_UPDATE', undef),
|
||||||
|
group_allow_delete => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_DELETE', undef),
|
||||||
|
group_additional_attribute_mapping => hiera_undef('CONFIG_KEYSTONE_LDAP_GROUP_ADDITIONAL_ATTRIBUTE_MAPPING', undef),
|
||||||
|
use_tls => hiera_undef('CONFIG_KEYSTONE_LDAP_USE_TLS', undef),
|
||||||
|
tls_cacertdir => hiera_undef('CONFIG_KEYSTONE_LDAP_TLS_CACERTDIR', undef),
|
||||||
|
tls_cacertfile => hiera_undef('CONFIG_KEYSTONE_LDAP_TLS_CACERTFILE', undef),
|
||||||
|
tls_req_cert => hiera_undef('CONFIG_KEYSTONE_LDAP_TLS_REQ_CERT', undef),
|
||||||
|
identity_driver => 'keystone.identity.backends.ldap.Identity',
|
||||||
|
assignment_driver => $assignment_driver,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,12 @@
|
|||||||
|
class packstack::keystone::aodh ()
|
||||||
|
{
|
||||||
|
$keystone_host_url = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
|
||||||
|
class { '::aodh::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_AODH_KS_PW'),
|
||||||
|
public_url => "http://${keystone_host_url}:8042",
|
||||||
|
admin_url => "http://${keystone_host_url}:8042",
|
||||||
|
internal_url => "http://${keystone_host_url}:8042",
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,15 @@
|
|||||||
|
class packstack::keystone::ceilometer ()
|
||||||
|
{
|
||||||
|
$ceilometer_protocol = 'http'
|
||||||
|
$ceilometer_port = '8777'
|
||||||
|
$ceilometer_api_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
$ceilometer_url = "${ceilometer_protocol}://${ceilometer_api_host}:${ceilometer_port}"
|
||||||
|
|
||||||
|
class { '::ceilometer::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_CEILOMETER_KS_PW'),
|
||||||
|
public_url => $ceilometer_url,
|
||||||
|
admin_url => $ceilometer_url,
|
||||||
|
internal_url => $ceilometer_url,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,21 @@
|
|||||||
|
class packstack::keystone::cinder ()
|
||||||
|
{
|
||||||
|
$cinder_protocol = 'http'
|
||||||
|
$cinder_host = hiera('CONFIG_STORAGE_HOST_URL')
|
||||||
|
$cinder_port = '8776'
|
||||||
|
$cinder_url = "${cinder_protocol}://${cinder_host}:$cinder_port"
|
||||||
|
|
||||||
|
class { '::cinder::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_CINDER_KS_PW'),
|
||||||
|
public_url => "${cinder_url}/v1/%(tenant_id)s",
|
||||||
|
internal_url => "${cinder_url}/v1/%(tenant_id)s",
|
||||||
|
admin_url => "${cinder_url}/v1/%(tenant_id)s",
|
||||||
|
public_url_v2 => "${cinder_url}/v2/%(tenant_id)s",
|
||||||
|
internal_url_v2 => "${cinder_url}/v2/%(tenant_id)s",
|
||||||
|
admin_url_v2 => "${cinder_url}/v2/%(tenant_id)s",
|
||||||
|
public_url_v3 => "${cinder_url}/v3/%(tenant_id)s",
|
||||||
|
internal_url_v3 => "${cinder_url}/v3/%(tenant_id)s",
|
||||||
|
admin_url_v3 => "${cinder_url}/v3/%(tenant_id)s",
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,15 @@
|
|||||||
|
class packstack::keystone::glance ()
|
||||||
|
{
|
||||||
|
$glance_protocol = 'http'
|
||||||
|
$glance_port = '9292'
|
||||||
|
$glance_api_host = hiera('CONFIG_STORAGE_HOST_URL')
|
||||||
|
$glance_url = "${glance_protocol}://${glance_api_host}:${glance_port}"
|
||||||
|
|
||||||
|
class { '::glance::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_GLANCE_KS_PW'),
|
||||||
|
public_url => $glance_url,
|
||||||
|
admin_url => $glance_url,
|
||||||
|
internal_url => $glance_url,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,12 @@
|
|||||||
|
class packstack::keystone::gnocchi ()
|
||||||
|
{
|
||||||
|
$gnocchi_keystone_host_url = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
|
||||||
|
class { '::gnocchi::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_GNOCCHI_KS_PW'),
|
||||||
|
public_url => "http://${gnocchi_keystone_host_url}:8041",
|
||||||
|
admin_url => "http://${gnocchi_keystone_host_url}:8041",
|
||||||
|
internal_url => "http://${gnocchi_keystone_host_url}:8041",
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,17 @@
|
|||||||
|
class packstack::keystone::heat ()
|
||||||
|
{
|
||||||
|
$heat_protocol = 'http'
|
||||||
|
$heat_port = '8004'
|
||||||
|
$heat_api_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
$heat_url = "${heat_protocol}://${heat_api_host}:${heat_port}/v1/%(tenant_id)s"
|
||||||
|
|
||||||
|
# heat::keystone::auth
|
||||||
|
class { '::heat::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_HEAT_KS_PW'),
|
||||||
|
public_url => $heat_url,
|
||||||
|
admin_url => $heat_url,
|
||||||
|
internal_url => $heat_url,
|
||||||
|
configure_delegated_roles => true,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,15 @@
|
|||||||
|
class packstack::keystone::ironic ()
|
||||||
|
{
|
||||||
|
$ironic_protocol = 'http'
|
||||||
|
$ironic_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
$ironic_port = '6385'
|
||||||
|
$ironic_url = "${ironic_protocol}://${ironic_host}:$ironic_port"
|
||||||
|
|
||||||
|
class { '::ironic::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_IRONIC_KS_PW'),
|
||||||
|
public_url => $ironic_url,
|
||||||
|
admin_url => $ironic_url,
|
||||||
|
internal_url => $ironic_url,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,18 @@
|
|||||||
|
class packstack::keystone::manila ()
|
||||||
|
{
|
||||||
|
$manila_protocol = 'http'
|
||||||
|
$manila_host = hiera('CONFIG_STORAGE_HOST_URL')
|
||||||
|
$manila_port = '8786'
|
||||||
|
$manila_url = "${manila_protocol}://${manila_host}:$manila_port/v1/%(tenant_id)s"
|
||||||
|
$manila_url_v2 = "${manila_protocol}://${manila_host}:$manila_port/v2/%(tenant_id)s"
|
||||||
|
|
||||||
|
class { '::manila::keystone::auth':
|
||||||
|
password => hiera('CONFIG_MANILA_KS_PW'),
|
||||||
|
public_url => $manila_url,
|
||||||
|
admin_url => $manila_url,
|
||||||
|
internal_url => $manila_url,
|
||||||
|
public_url_v2 => $manila_url_v2,
|
||||||
|
admin_url_v2 => $manila_url_v2,
|
||||||
|
internal_url_v2 => $manila_url_v2,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,15 @@
|
|||||||
|
class packstack::keystone::neutron ()
|
||||||
|
{
|
||||||
|
$neutron_protocol = 'http'
|
||||||
|
$neutron_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
$neutron_port = '9696'
|
||||||
|
$neutron_url = "${neutron_protocol}://${neutron_host}:$neutron_port"
|
||||||
|
|
||||||
|
class { '::neutron::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_NEUTRON_KS_PW'),
|
||||||
|
public_url => $neutron_url,
|
||||||
|
admin_url => $neutron_url,
|
||||||
|
internal_url => $neutron_url,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,19 @@
|
|||||||
|
class packstack::keystone::nova ()
|
||||||
|
{
|
||||||
|
$nova_protocol = 'http'
|
||||||
|
$nova_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
$nova_port = '8774'
|
||||||
|
$nova_url = "${nova_protocol}://${nova_host}:$nova_port/v2/%(tenant_id)s"
|
||||||
|
$nova_v3_url = "${nova_protocol}://${nova_host}:$nova_port/v3"
|
||||||
|
|
||||||
|
class { '::nova::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_NOVA_KS_PW'),
|
||||||
|
public_url => $nova_url,
|
||||||
|
admin_url => $nova_url,
|
||||||
|
internal_url => $nova_url,
|
||||||
|
public_url_v3 => $nova_v3_url,
|
||||||
|
admin_url_v3 => $nova_v3_url,
|
||||||
|
internal_url_v3 => $nova_v3_url,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,14 @@
|
|||||||
|
class packstack::keystone::sahara ()
|
||||||
|
{
|
||||||
|
$sahara_protocol = 'http'
|
||||||
|
$sahara_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
$sahara_port = '8386'
|
||||||
|
$sahara_url = "${sahara_protocol}://${sahara_host}:$sahara_port/v1.1/%(tenant_id)s"
|
||||||
|
|
||||||
|
class { '::sahara::keystone::auth':
|
||||||
|
password => hiera('CONFIG_SAHARA_KS_PW'),
|
||||||
|
public_url => $sahara_url,
|
||||||
|
admin_url => $sahara_url,
|
||||||
|
internal_url => $sahara_url,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,17 @@
|
|||||||
|
class packstack::keystone::swift ()
|
||||||
|
{
|
||||||
|
$swift_protocol = 'http'
|
||||||
|
$swift_host = hiera('CONFIG_STORAGE_HOST_URL')
|
||||||
|
$swift_port = '8080'
|
||||||
|
$swift_url = "${swift_protocol}://${swift_host}:$swift_port/v1/AUTH_%(tenant_id)s"
|
||||||
|
|
||||||
|
class { '::swift::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_SWIFT_KS_PW'),
|
||||||
|
operator_roles => ['admin', 'SwiftOperator', 'ResellerAdmin'],
|
||||||
|
public_url => $swift_url,
|
||||||
|
internal_url => $swift_url,
|
||||||
|
admin_url => $swift_url,
|
||||||
|
configure_s3_endpoint => false,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,15 @@
|
|||||||
|
class packstack::keystone::trove ()
|
||||||
|
{
|
||||||
|
$trove_protocol = 'http'
|
||||||
|
$trove_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
$trove_port = '8779'
|
||||||
|
$trove_url = "${trove_protocol}://${trove_host}:$trove_port/v1.0/%(tenant_id)s"
|
||||||
|
|
||||||
|
class { '::trove::keystone::auth':
|
||||||
|
region => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
password => hiera('CONFIG_TROVE_KS_PW'),
|
||||||
|
public_url => $trove_url,
|
||||||
|
admin_url => $trove_url,
|
||||||
|
internal_url => $trove_url,
|
||||||
|
}
|
||||||
|
}
|
32
packstack/puppet/modules/packstack/manifests/manila.pp
Normal file
32
packstack/puppet/modules/packstack/manifests/manila.pp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
class packstack::manila ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_MANILA_API_RULES', {}))
|
||||||
|
|
||||||
|
manila_config {
|
||||||
|
'DEFAULT/glance_host': value => hiera('CONFIG_STORAGE_HOST_URL');
|
||||||
|
}
|
||||||
|
|
||||||
|
$bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::manila::api':
|
||||||
|
bind_host => $bind_host,
|
||||||
|
keystone_password => hiera('CONFIG_MANILA_KS_PW'),
|
||||||
|
keystone_tenant => 'services',
|
||||||
|
keystone_user => 'manila',
|
||||||
|
keystone_auth_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::manila::scheduler':
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::manila::share':
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::manila::backends':
|
||||||
|
enabled_share_backends => hiera('CONFIG_MANILA_BACKEND'),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,50 @@
|
|||||||
|
class packstack::manila::backend::generic ()
|
||||||
|
{
|
||||||
|
ensure_packages(['nfs-utils'], {'ensure' => 'present'})
|
||||||
|
|
||||||
|
manila::backend::generic{ 'generic':
|
||||||
|
driver_handles_share_servers => hiera('CONFIG_MANILA_GENERIC_DRV_HANDLES_SHARE_SERVERS'),
|
||||||
|
volume_name_template => hiera('CONFIG_MANILA_GENERIC_VOLUME_NAME_TEMPLATE'),
|
||||||
|
share_mount_path => hiera('CONFIG_MANILA_GENERIC_SHARE_MOUNT_PATH'),
|
||||||
|
}
|
||||||
|
|
||||||
|
packstack::manila::network{ 'generic': }
|
||||||
|
|
||||||
|
if ($::manila_network_type == 'neutron'){
|
||||||
|
$service_instance_network_helper_type = 'neutron'
|
||||||
|
}
|
||||||
|
elsif ($::manila_network_type == 'nova-network'){
|
||||||
|
$service_instance_network_helper_type = 'nova'
|
||||||
|
}
|
||||||
|
|
||||||
|
$admin_username = hiera('CONFIG_KEYSTONE_ADMIN_USERNAME')
|
||||||
|
$admin_password = hiera('CONFIG_KEYSTONE_ADMIN_PW')
|
||||||
|
$admin_tenant = 'admin'
|
||||||
|
$keystone_url = hiera('CONFIG_KEYSTONE_PUBLIC_URL')
|
||||||
|
|
||||||
|
nova_flavor { 'm1.manila':
|
||||||
|
ensure => present,
|
||||||
|
id => '66',
|
||||||
|
ram => '512',
|
||||||
|
disk => '0',
|
||||||
|
vcpus => '1',
|
||||||
|
require => [ Class['::nova::api'], Class['::nova::keystone::auth'] ],
|
||||||
|
} ->
|
||||||
|
manila::service_instance{ 'generic':
|
||||||
|
service_image_location => hiera('CONFIG_MANILA_SERVICE_IMAGE_LOCATION'),
|
||||||
|
service_instance_user => hiera('CONFIG_MANILA_SERVICE_INSTANCE_USER'),
|
||||||
|
service_instance_password => hiera('CONFIG_MANILA_SERVICE_INSTANCE_PASSWORD'),
|
||||||
|
service_instance_network_helper_type => $service_instance_network_helper_type,
|
||||||
|
service_instance_flavor_id => 66,
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::manila::compute::nova':
|
||||||
|
nova_admin_password => hiera('CONFIG_NOVA_KS_PW'),
|
||||||
|
nova_admin_tenant_name => 'services',
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::manila::volume::cinder':
|
||||||
|
cinder_admin_password => hiera('CONFIG_CINDER_KS_PW'),
|
||||||
|
cinder_admin_tenant_name => 'services',
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,10 @@
|
|||||||
|
class packstack::manila::backend::glusternative ()
|
||||||
|
{
|
||||||
|
manila::backend::glusternative{ 'glusternative':
|
||||||
|
glusterfs_servers => hiera('CONFIG_MANILA_GLUSTERFS_SERVERS'),
|
||||||
|
glusterfs_native_path_to_private_key => hiera('CONFIG_MANILA_GLUSTERFS_NATIVE_PATH_TO_PRIVATE_KEY'),
|
||||||
|
glusterfs_volume_pattern => hiera('CONFIG_MANILA_GLUSTERFS_VOLUME_PATTERN'),
|
||||||
|
}
|
||||||
|
|
||||||
|
packstack::manila::network{ 'glusternative': }
|
||||||
|
}
|
@@ -0,0 +1,14 @@
|
|||||||
|
class packstack::manila::backend::glusternfs ()
|
||||||
|
{
|
||||||
|
manila::backend::glusternfs{ 'glusternfs':
|
||||||
|
glusterfs_target => hiera('CONFIG_MANILA_GLUSTERFS_TARGET'),
|
||||||
|
glusterfs_mount_point_base => hiera('CONFIG_MANILA_GLUSTERFS_MOUNT_POINT_BASE'),
|
||||||
|
glusterfs_nfs_server_type => hiera('CONFIG_MANILA_GLUSTERFS_NFS_SERVER_TYPE'),
|
||||||
|
glusterfs_path_to_private_key => hiera('CONFIG_MANILA_GLUSTERFS_PATH_TO_PRIVATE_KEY'),
|
||||||
|
glusterfs_ganesha_server_ip => hiera('CONFIG_MANILA_GLUSTERFS_GANESHA_SERVER_IP'),
|
||||||
|
}
|
||||||
|
|
||||||
|
packstack::manila::network{ 'glusternfs': }
|
||||||
|
|
||||||
|
include '::manila::ganesha'
|
||||||
|
}
|
@@ -0,0 +1,18 @@
|
|||||||
|
class packstack::manila::backend::netapp ()
|
||||||
|
{
|
||||||
|
manila::backend::netapp{ 'netapp':
|
||||||
|
driver_handles_share_servers => hiera('CONFIG_MANILA_NETAPP_DRV_HANDLES_SHARE_SERVERS'),
|
||||||
|
netapp_transport_type => hiera('CONFIG_MANILA_NETAPP_TRANSPORT_TYPE'),
|
||||||
|
netapp_login => hiera('CONFIG_MANILA_NETAPP_LOGIN'),
|
||||||
|
netapp_password => hiera('CONFIG_MANILA_NETAPP_PASSWORD'),
|
||||||
|
netapp_server_hostname => hiera('CONFIG_MANILA_NETAPP_SERVER_HOSTNAME'),
|
||||||
|
netapp_storage_family => hiera('CONFIG_MANILA_NETAPP_STORAGE_FAMILY'),
|
||||||
|
netapp_server_port => hiera('CONFIG_MANILA_NETAPP_SERVER_PORT'),
|
||||||
|
netapp_vserver => hiera('CONFIG_MANILA_NETAPP_VSERVER', undef),
|
||||||
|
netapp_aggregate_name_search_pattern => hiera('CONFIG_MANILA_NETAPP_AGGREGATE_NAME_SEARCH_PATTERN'),
|
||||||
|
netapp_root_volume_aggregate => hiera('CONFIG_MANILA_NETAPP_ROOT_VOLUME_AGGREGATE', undef),
|
||||||
|
netapp_root_volume_name => hiera('CONFIG_MANILA_NETAPP_ROOT_VOLUME_NAME', undef),
|
||||||
|
}
|
||||||
|
|
||||||
|
packstack::manila::network{ 'netapp': }
|
||||||
|
}
|
@@ -1,17 +1,17 @@
|
|||||||
$manila_network_type = hiera('CONFIG_MANILA_NETWORK_TYPE')
|
|
||||||
|
|
||||||
define packstack::manila::network ($backend_name = $name) {
|
define packstack::manila::network ($backend_name = $name) {
|
||||||
|
$manila_network_type = hiera('CONFIG_MANILA_NETWORK_TYPE')
|
||||||
|
|
||||||
if ($::manila_network_type == 'neutron'){
|
if ($manila_network_type == 'neutron'){
|
||||||
class { '::manila::network::neutron':
|
class { '::manila::network::neutron':
|
||||||
neutron_admin_password => hiera('CONFIG_NEUTRON_KS_PW'),
|
neutron_admin_password => hiera('CONFIG_NEUTRON_KS_PW'),
|
||||||
neutron_admin_tenant_name => 'services',
|
neutron_admin_tenant_name => 'services',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($::manila_network_type == 'nova-network'){
|
elsif ($manila_network_type == 'nova-network'){
|
||||||
manila::network::nova_network{ $backend_name: }
|
manila::network::nova_network{ $backend_name: }
|
||||||
}
|
}
|
||||||
elsif ($::manila_network_type == 'standalone'){
|
elsif ($manila_network_type == 'standalone'){
|
||||||
manila::network::standalone{ $backend_name:
|
manila::network::standalone{ $backend_name:
|
||||||
standalone_network_plugin_gateway => hiera('CONFIG_MANILA_NETWORK_STANDALONE_GATEWAY'),
|
standalone_network_plugin_gateway => hiera('CONFIG_MANILA_NETWORK_STANDALONE_GATEWAY'),
|
||||||
standalone_network_plugin_mask => hiera('CONFIG_MANILA_NETWORK_STANDALONE_NETMASK'),
|
standalone_network_plugin_mask => hiera('CONFIG_MANILA_NETWORK_STANDALONE_NETMASK'),
|
||||||
@@ -21,6 +21,7 @@ define packstack::manila::network ($backend_name = $name) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fail("The value ${::manila_network_type} is not a valid value for the Manila network type.")
|
fail("The value ${manila_network_type} is not a valid value for the Manila network type.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@@ -0,0 +1,31 @@
|
|||||||
|
class packstack::manila::rabbitmq ()
|
||||||
|
{
|
||||||
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
||||||
|
$kombu_ssl_keyfile = hiera('CONFIG_MANILA_SSL_KEY', undef)
|
||||||
|
$kombu_ssl_certfile = hiera('CONFIG_MANILA_SSL_CERT', undef)
|
||||||
|
|
||||||
|
if $kombu_ssl_keyfile {
|
||||||
|
$files_to_set_owner = [ $kombu_ssl_keyfile, $kombu_ssl_certfile ]
|
||||||
|
file { $files_to_set_owner:
|
||||||
|
owner => 'manila',
|
||||||
|
group => 'manila',
|
||||||
|
# manila user on RH/Fedora is provided by python-manila
|
||||||
|
require => Package['manila'],
|
||||||
|
}
|
||||||
|
File[$files_to_set_owner] ~> Service<| tag == 'manila-service' |>
|
||||||
|
}
|
||||||
|
|
||||||
|
$db_pw = hiera('CONFIG_MANILA_DB_PW')
|
||||||
|
$mariadb_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
|
||||||
|
class { '::manila':
|
||||||
|
rabbit_host => hiera('CONFIG_AMQP_HOST_URL'),
|
||||||
|
rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
|
rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'),
|
||||||
|
rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
|
rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
|
sql_connection => "mysql+pymysql://manila:${db_pw}@${mariadb_host}/manila",
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
}
|
||||||
|
}
|
69
packstack/puppet/modules/packstack/manifests/mariadb.pp
Normal file
69
packstack/puppet/modules/packstack/manifests/mariadb.pp
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
class packstack::mariadb ()
|
||||||
|
{
|
||||||
|
if hiera('CONFIG_MARIADB_INSTALL') == 'y' {
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_MARIADB_RULES', {}))
|
||||||
|
$max_connections = hiera('CONFIG_SERVICE_WORKERS') * 128
|
||||||
|
|
||||||
|
if ($::mariadb_provides_galera == 'true') {
|
||||||
|
# Since mariadb 10.1 galera is included in main mariadb
|
||||||
|
$mariadb_package_name = 'mariadb-server-galera'
|
||||||
|
$mariadb_present = 'present'
|
||||||
|
} else {
|
||||||
|
# Package mariadb-server conflicts with mariadb-galera-server
|
||||||
|
$mariadb_package_name = 'mariadb-galera-server'
|
||||||
|
$mariadb_present = 'absent'
|
||||||
|
}
|
||||||
|
ensure_packages(['mariadb-server'], {'ensure' => $mariadb_present})
|
||||||
|
|
||||||
|
$bind_address = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
|
||||||
|
$mysql_root_password = hiera('CONFIG_MARIADB_PW')
|
||||||
|
|
||||||
|
class { '::mysql::server':
|
||||||
|
package_name => $mariadb_package_name,
|
||||||
|
restart => true,
|
||||||
|
root_password => $mysql_root_password,
|
||||||
|
require => Package['mariadb-server'],
|
||||||
|
override_options => {
|
||||||
|
'mysqld' => {
|
||||||
|
'bind_address' => $bind_address,
|
||||||
|
'default_storage_engine' => 'InnoDB',
|
||||||
|
'max_connections' => $max_connections,
|
||||||
|
'open_files_limit' => '-1',
|
||||||
|
# galera options
|
||||||
|
'wsrep_provider' => 'none',
|
||||||
|
'wsrep_cluster_name' => 'galera_cluster',
|
||||||
|
'wsrep_sst_method' => 'rsync',
|
||||||
|
'wsrep_sst_auth' => "root:${mysql_root_password}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
# deleting database users for security
|
||||||
|
# this is done in mysql::server::account_security but has problems
|
||||||
|
# when there is no fqdn, so we're defining a slightly different one here
|
||||||
|
mysql_user { [ 'root@127.0.0.1', 'root@::1', '@localhost', '@%' ]:
|
||||||
|
ensure => 'absent',
|
||||||
|
require => Class['mysql::server'],
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($::fqdn != '' and $::fqdn != 'localhost') {
|
||||||
|
mysql_user { [ "root@${::fqdn}", "@${::fqdn}"]:
|
||||||
|
ensure => 'absent',
|
||||||
|
require => Class['mysql::server'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($::fqdn != $::hostname and $::hostname != 'localhost') {
|
||||||
|
mysql_user { ["root@${::hostname}", "@${::hostname}"]:
|
||||||
|
ensure => 'absent',
|
||||||
|
require => Class['mysql::server'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
class { '::remote::db': }
|
||||||
|
}
|
||||||
|
}
|
106
packstack/puppet/modules/packstack/manifests/mariadb/services.pp
Normal file
106
packstack/puppet/modules/packstack/manifests/mariadb/services.pp
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
class packstack::mariadb::services ()
|
||||||
|
{
|
||||||
|
class { '::keystone::db::mysql':
|
||||||
|
user => 'keystone_admin',
|
||||||
|
password => hiera('CONFIG_KEYSTONE_DB_PW'),
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_CINDER_INSTALL') == 'y' {
|
||||||
|
class { '::cinder::db::mysql':
|
||||||
|
password => hiera('CONFIG_CINDER_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_GLANCE_INSTALL') == 'y' {
|
||||||
|
class { '::glance::db::mysql':
|
||||||
|
password => hiera('CONFIG_GLANCE_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_GNOCCHI_INSTALL') == 'y' and
|
||||||
|
hiera('CONFIG_CEILOMETER_INSTALL') == 'y' {
|
||||||
|
class { '::gnocchi::db::mysql':
|
||||||
|
password => hiera('CONFIG_GNOCCHI_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_HEAT_INSTALL') == 'y' {
|
||||||
|
class { '::heat::db::mysql':
|
||||||
|
password => hiera('CONFIG_HEAT_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_IRONIC_INSTALL') == 'y' {
|
||||||
|
class { '::ironic::db::mysql':
|
||||||
|
password => hiera('CONFIG_IRONIC_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_MANILA_INSTALL') == 'y' {
|
||||||
|
class { '::manila::db::mysql':
|
||||||
|
password => hiera('CONFIG_MANILA_DB_PW'),
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_NEUTRON_INSTALL') == 'y' {
|
||||||
|
class { '::neutron::db::mysql':
|
||||||
|
password => hiera('CONFIG_NEUTRON_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
dbname => hiera('CONFIG_NEUTRON_L2_DBNAME'),
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_NOVA_INSTALL') == 'y' {
|
||||||
|
class { '::nova::db::mysql':
|
||||||
|
password => hiera('CONFIG_NOVA_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
class { '::nova::db::mysql_api':
|
||||||
|
password => hiera('CONFIG_NOVA_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_SAHARA_INSTALL') == 'y' {
|
||||||
|
class { '::sahara::db::mysql':
|
||||||
|
password => hiera('CONFIG_SAHARA_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_TROVE_INSTALL') == 'y' {
|
||||||
|
class { '::trove::db::mysql':
|
||||||
|
password => hiera('CONFIG_TROVE_DB_PW'),
|
||||||
|
host => '%',
|
||||||
|
allowed_hosts => '%',
|
||||||
|
charset => 'utf8',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,342 @@
|
|||||||
|
class packstack::mariadb::services_remote () {
|
||||||
|
remote_database { 'keystone':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$mariadb_keystone_noinstall_db_pw = hiera('CONFIG_KEYSTONE_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'keystone_admin@%':
|
||||||
|
password_hash => mysql_password($mariadb_keystone_noinstall_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['keystone'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'keystone_admin@%/keystone':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['keystone_admin@%'],
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_CINDER_INSTALL') == 'y' {
|
||||||
|
remote_database { 'cinder':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$mariadb_cinder_noinstall_db_pw = hiera('CONFIG_CINDER_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'cinder@%':
|
||||||
|
password_hash => mysql_password($mariadb_cinder_noinstall_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['cinder'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'cinder@%/cinder':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['cinder@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_GLANCE_INSTALL') == 'y' {
|
||||||
|
remote_database { 'glance':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$mariadb_glance_noinstall_db_pw = hiera('CONFIG_GLANCE_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'glance@%':
|
||||||
|
password_hash => mysql_password($mariadb_glance_noinstall_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['glance'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'glance@%/glance':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['glance@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_GNOCCHI_INSTALL') == 'y' and
|
||||||
|
remote_database { 'gnocchi':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$gnocchi_cfg_db_pw = hiera('CONFIG_GNOCCHI_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'gnocchi@%':
|
||||||
|
password_hash => mysql_password($gnocchi_cfg_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['gnocchi'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'gnocchi@%/gnocchi':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['gnocchi@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_HEAT_INSTALL') == 'y' {
|
||||||
|
remote_database { 'heat':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$mariadb_heat_noinstall_db_pw = hiera('CONFIG_HEAT_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'heat@%':
|
||||||
|
password_hash => mysql_password($mariadb_heat_noinstall_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['heat'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'heat@%/heat':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['heat@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_IRONIC_INSTALL') == 'y' {
|
||||||
|
remote_database { 'ironic':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$mariadb_ironic_noinstall_db_pw = hiera('CONFIG_IRONIC_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'ironic@%':
|
||||||
|
password_hash => mysql_password($mariadb_ironic_noinstall_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['ironic'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'ironic@%/ironic':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['ironic@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_MANILA_INSTALL') == 'y' {
|
||||||
|
remote_database { 'manila':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$mariadb_manila_noinstall_db_pw = hiera('CONFIG_MANILA_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'manila@%':
|
||||||
|
password_hash => mysql_password($mariadb_manila_noinstall_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['manila'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'manila@%/manila':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['manila@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_NEUTRON_INSTALL') == 'y' {
|
||||||
|
$mariadb_neutron_noinstall_db_pw = hiera('CONFIG_NEUTRON_DB_PW')
|
||||||
|
$mariadb_neutron_noinstall_l2_dbname = hiera('CONFIG_NEUTRON_L2_DBNAME')
|
||||||
|
|
||||||
|
remote_database { $mariadb_neutron_noinstall_l2_dbname:
|
||||||
|
ensure => present,
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_user { 'neutron@%':
|
||||||
|
password_hash => mysql_password($mariadb_neutron_noinstall_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database[$mariadb_neutron_noinstall_l2_dbname],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { "neutron@%/${mariadb_neutron_noinstall_l2_dbname}":
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['neutron@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_NOVA_INSTALL') == 'y' {
|
||||||
|
remote_database { 'nova':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$mariadb_nova_noinstall_db_pw = hiera('CONFIG_NOVA_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'nova@%':
|
||||||
|
password_hash => mysql_password($mariadb_nova_noinstall_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['nova'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'nova@%/nova':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['nova@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_SAHARA_INSTALL') == 'y' {
|
||||||
|
remote_database { 'sahara':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$sahara_cfg_sahara_db_pw = hiera('CONFIG_SAHARA_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'sahara@%':
|
||||||
|
password_hash => mysql_password($sahara_cfg_sahara_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['sahara'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'sahara@%/sahara':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['sahara@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CONFIG_TROVE_INSTALL') == 'y' {
|
||||||
|
remote_database { 'trove':
|
||||||
|
ensure => 'present',
|
||||||
|
charset => 'utf8',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
}
|
||||||
|
|
||||||
|
$trove_cfg_trove_db_pw = hiera('CONFIG_TROVE_DB_PW')
|
||||||
|
|
||||||
|
remote_database_user { 'trove@%':
|
||||||
|
password_hash => mysql_password($trove_cfg_trove_db_pw),
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database['trove'],
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_database_grant { 'trove@%/trove':
|
||||||
|
privileges => 'all',
|
||||||
|
db_host => hiera('CONFIG_MARIADB_HOST'),
|
||||||
|
db_user => hiera('CONFIG_MARIADB_USER'),
|
||||||
|
db_password => hiera('CONFIG_MARIADB_PW'),
|
||||||
|
provider => 'mysql',
|
||||||
|
require => Remote_database_user['trove@%'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
15
packstack/puppet/modules/packstack/manifests/memcached.pp
Normal file
15
packstack/puppet/modules/packstack/manifests/memcached.pp
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
class packstack::memcached ()
|
||||||
|
{
|
||||||
|
# hack for memcached, for now we bind to localhost on ipv6
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1210658
|
||||||
|
$memcached_bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => 'localhost6',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::memcached':
|
||||||
|
listen_ip => $memcached_bind_host,
|
||||||
|
max_memory => '10%',
|
||||||
|
}
|
||||||
|
}
|
26
packstack/puppet/modules/packstack/manifests/mongodb.pp
Normal file
26
packstack/puppet/modules/packstack/manifests/mongodb.pp
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
class packstack::mongodb ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_MONGODB_RULES', {}))
|
||||||
|
$mongodb_host = hiera('CONFIG_MONGODB_HOST')
|
||||||
|
|
||||||
|
# The MongoDB config files differ between versions
|
||||||
|
if (($::operatingsystem == 'fedora' and versioncmp($::operatingsystemrelease, '22') >= 0)
|
||||||
|
or
|
||||||
|
($::operatingsystem != 'fedora' and versioncmp($::operatingsystemrelease, '7.0') >= 0)
|
||||||
|
){
|
||||||
|
$config_file = '/etc/mongod.conf'
|
||||||
|
} else {
|
||||||
|
$config_file = '/etc/mongodb.conf'
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::mongodb::server':
|
||||||
|
ipv6 => hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => true,
|
||||||
|
default => false,
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
},
|
||||||
|
smallfiles => true,
|
||||||
|
bind_ip => force_ip($mongodb_host),
|
||||||
|
config => $config_file,
|
||||||
|
}
|
||||||
|
}
|
40
packstack/puppet/modules/packstack/manifests/nagios/nrpe.pp
Normal file
40
packstack/puppet/modules/packstack/manifests/nagios/nrpe.pp
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
class packstack::nagios::nrpe ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_NAGIOS_NRPE_RULES', {}))
|
||||||
|
$nagios_configs_cfg_ctrl_host = hiera('CONFIG_CONTROLLER_HOST')
|
||||||
|
package{ 'nrpe':
|
||||||
|
ensure => present,
|
||||||
|
} ->
|
||||||
|
file{ '/etc/nagios/nrpe.cfg':
|
||||||
|
ensure => file,
|
||||||
|
mode => '0644',
|
||||||
|
owner => 'nagios',
|
||||||
|
group => 'nagios',
|
||||||
|
require => Package['nrpe'],
|
||||||
|
} ->
|
||||||
|
file_line{'allowed_hosts':
|
||||||
|
path => '/etc/nagios/nrpe.cfg',
|
||||||
|
match => 'allowed_hosts=',
|
||||||
|
line => "allowed_hosts=${nagios_configs_cfg_ctrl_host}",
|
||||||
|
} ->
|
||||||
|
|
||||||
|
# 5 minute load average
|
||||||
|
file_line{'load5':
|
||||||
|
path => '/etc/nagios/nrpe.cfg',
|
||||||
|
match => 'command\[load5\]=',
|
||||||
|
line => 'command[load5]=cut /proc/loadavg -f 1 -d " "',
|
||||||
|
} ->
|
||||||
|
|
||||||
|
# disk used on /var
|
||||||
|
file_line{'df_var':
|
||||||
|
path => '/etc/nagios/nrpe.cfg',
|
||||||
|
match => "command\[df_var\]=",
|
||||||
|
line => "command[df_var]=df /var/ | sed -re 's/.* ([0-9]+)%.*/\\1/' | grep -E '^[0-9]'",
|
||||||
|
} ->
|
||||||
|
|
||||||
|
service{'nrpe':
|
||||||
|
ensure => running,
|
||||||
|
enable => true,
|
||||||
|
hasstatus => true,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,80 @@
|
|||||||
|
class packstack::nagios::server ()
|
||||||
|
{
|
||||||
|
$nagios_cfg_ks_adm_pw = hiera('CONFIG_KEYSTONE_ADMIN_PW')
|
||||||
|
$nagios_cfg_keystone_url = hiera('CONFIG_KEYSTONE_ADMIN_URL')
|
||||||
|
$keystone_admin_username = hiera('CONFIG_KEYSTONE_ADMIN_USERNAME')
|
||||||
|
|
||||||
|
package { ['nagios', 'nagios-plugins-nrpe']:
|
||||||
|
ensure => present,
|
||||||
|
} ->
|
||||||
|
class { 'packstack::nagios_config_wrapper':
|
||||||
|
nagios_hosts => hiera('CONFIG_NAGIOS_NODES'),
|
||||||
|
nagios_openstack_services => hiera('CONFIG_NAGIOS_SERVICES'),
|
||||||
|
controller_host => hiera('CONFIG_CONTROLLER_HOST'),
|
||||||
|
require => Package['nagios'],
|
||||||
|
notify => [Service['nagios'], Service['httpd']],
|
||||||
|
} ->
|
||||||
|
# We need to preferably install nagios-plugins-ping
|
||||||
|
exec { 'nagios-plugins-ping':
|
||||||
|
path => '/usr/bin',
|
||||||
|
command => 'yum install -y -d 0 -e 0 monitoring-plugins-ping',
|
||||||
|
onlyif => 'yum install -y -d 0 -e 0 nagios-plugins-ping &> /dev/null && exit 1 || exit 0',
|
||||||
|
} ->
|
||||||
|
|
||||||
|
file { ['/etc/nagios/nagios_command.cfg', '/etc/nagios/nagios_host.cfg', '/etc/nagios/nagios_service.cfg']:
|
||||||
|
ensure => file,
|
||||||
|
mode => '0644',
|
||||||
|
owner => 'nagios',
|
||||||
|
group => 'nagios',
|
||||||
|
} ->
|
||||||
|
# Remove the entry for localhost, it contains services we're not
|
||||||
|
# monitoring
|
||||||
|
file { ['/etc/nagios/objects/localhost.cfg']:
|
||||||
|
ensure => file,
|
||||||
|
content => '',
|
||||||
|
} ->
|
||||||
|
file_line { 'nagios_host':
|
||||||
|
path => '/etc/nagios/nagios.cfg',
|
||||||
|
line => 'cfg_file=/etc/nagios/nagios_host.cfg',
|
||||||
|
} ->
|
||||||
|
file_line { 'nagios_command':
|
||||||
|
path => '/etc/nagios/nagios.cfg',
|
||||||
|
line => 'cfg_file=/etc/nagios/nagios_command.cfg',
|
||||||
|
} ->
|
||||||
|
file_line { 'nagios_service':
|
||||||
|
path => '/etc/nagios/nagios.cfg',
|
||||||
|
line => 'cfg_file=/etc/nagios/nagios_service.cfg',
|
||||||
|
} ->
|
||||||
|
|
||||||
|
file { '/etc/nagios/keystonerc_admin':
|
||||||
|
ensure => file,
|
||||||
|
owner => 'nagios',
|
||||||
|
mode => '0600',
|
||||||
|
content => "export OS_USERNAME=${keystone_admin_username}
|
||||||
|
export OS_TENANT_NAME=admin
|
||||||
|
export OS_PASSWORD=${nagios_cfg_ks_adm_pw}
|
||||||
|
export OS_AUTH_URL=${nagios_cfg_keystone_url}",
|
||||||
|
}
|
||||||
|
|
||||||
|
$cfg_nagios_pw = hiera('CONFIG_NAGIOS_PW')
|
||||||
|
|
||||||
|
exec { 'nagiospasswd':
|
||||||
|
command => "/usr/bin/htpasswd -b /etc/nagios/passwd nagiosadmin ${cfg_nagios_pw}",
|
||||||
|
require => Package['nagios'],
|
||||||
|
before => Service['nagios'],
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::apache::mod::php': }
|
||||||
|
|
||||||
|
service { ['nagios']:
|
||||||
|
ensure => running,
|
||||||
|
enable => true,
|
||||||
|
hasstatus => true,
|
||||||
|
}
|
||||||
|
|
||||||
|
firewall { '001 nagios incoming':
|
||||||
|
proto => 'tcp',
|
||||||
|
dport => ['80'],
|
||||||
|
action => 'accept',
|
||||||
|
}
|
||||||
|
}
|
9
packstack/puppet/modules/packstack/manifests/neutron.pp
Normal file
9
packstack/puppet/modules/packstack/manifests/neutron.pp
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
class packstack::neutron ()
|
||||||
|
{
|
||||||
|
$neutron_db_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
$neutron_db_name = hiera('CONFIG_NEUTRON_L2_DBNAME')
|
||||||
|
$neutron_db_user = 'neutron'
|
||||||
|
$neutron_db_password = hiera('CONFIG_NEUTRON_DB_PW')
|
||||||
|
$neutron_sql_connection = "mysql+pymysql://${neutron_db_user}:${neutron_db_password}@${neutron_db_host}/${neutron_db_name}"
|
||||||
|
$neutron_user_password = hiera('CONFIG_NEUTRON_KS_PW')
|
||||||
|
}
|
53
packstack/puppet/modules/packstack/manifests/neutron/api.pp
Normal file
53
packstack/puppet/modules/packstack/manifests/neutron/api.pp
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
class packstack::neutron::api ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_NEUTRON_SERVER_RULES', {}))
|
||||||
|
|
||||||
|
$neutron_db_host = hiera('CONFIG_MARIADB_HOST_URL')
|
||||||
|
$neutron_db_name = hiera('CONFIG_NEUTRON_L2_DBNAME')
|
||||||
|
$neutron_db_user = 'neutron'
|
||||||
|
$neutron_db_password = hiera('CONFIG_NEUTRON_DB_PW')
|
||||||
|
$neutron_sql_connection = "mysql+pymysql://${neutron_db_user}:${neutron_db_password}@${neutron_db_host}/${neutron_db_name}"
|
||||||
|
$neutron_user_password = hiera('CONFIG_NEUTRON_KS_PW')
|
||||||
|
|
||||||
|
class { '::neutron::server':
|
||||||
|
database_connection => $neutron_sql_connection,
|
||||||
|
auth_password => $neutron_user_password,
|
||||||
|
auth_uri => hiera('CONFIG_KEYSTONE_PUBLIC_URL'),
|
||||||
|
identity_uri => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
sync_db => true,
|
||||||
|
enabled => true,
|
||||||
|
api_workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
rpc_workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
service_providers => hiera_array('SERVICE_PROVIDERS'),
|
||||||
|
}
|
||||||
|
|
||||||
|
# TODO: FIXME: remove this hack after upstream resolves https://bugs.launchpad.net/puppet-neutron/+bug/1474961
|
||||||
|
if hiera('CONFIG_NEUTRON_VPNAAS') == 'y' {
|
||||||
|
ensure_resource( 'package', 'neutron-vpnaas-agent', {
|
||||||
|
name => 'openstack-neutron-vpnaas',
|
||||||
|
tag => ['openstack', 'neutron-package'],
|
||||||
|
})
|
||||||
|
Package['neutron-vpnaas-agent'] ~> Service<| tag == 'neutron-service' |>
|
||||||
|
}
|
||||||
|
if hiera('CONFIG_NEUTRON_FWAAS') == 'y' {
|
||||||
|
ensure_resource( 'package', 'neutron-fwaas', {
|
||||||
|
'name' => 'openstack-neutron-fwaas',
|
||||||
|
'tag' => 'openstack'
|
||||||
|
})
|
||||||
|
Package['neutron-fwaas'] ~> Service<| tag == 'neutron-service' |>
|
||||||
|
}
|
||||||
|
if hiera('CONFIG_LBAAS_INSTALL') == 'y' {
|
||||||
|
ensure_resource( 'package', 'neutron-lbaas-agent', {
|
||||||
|
name => 'openstack-neutron-lbaas',
|
||||||
|
tag => ['openstack', 'neutron-package'],
|
||||||
|
})
|
||||||
|
Package['neutron-lbaas-agent'] ~> Service<| tag == 'neutron-service' |>
|
||||||
|
}
|
||||||
|
|
||||||
|
file { '/etc/neutron/api-paste.ini':
|
||||||
|
ensure => file,
|
||||||
|
mode => '0640',
|
||||||
|
}
|
||||||
|
|
||||||
|
Class['::neutron::server'] -> File['/etc/neutron/api-paste.ini']
|
||||||
|
}
|
10
packstack/puppet/modules/packstack/manifests/neutron/dhcp.pp
Normal file
10
packstack/puppet/modules/packstack/manifests/neutron/dhcp.pp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
class packstack::neutron::dhcp ()
|
||||||
|
{
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_NEUTRON_DHCPIN_RULES', {}))
|
||||||
|
create_resources(packstack::firewall, hiera('FIREWALL_NEUTRON_DHCPOUT_RULES', {}))
|
||||||
|
|
||||||
|
class { '::neutron::agents::dhcp':
|
||||||
|
interface_driver => hiera('CONFIG_NEUTRON_DHCP_INTERFACE_DRIVER'),
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
class packstack::neutron::fwaas ()
|
||||||
|
{
|
||||||
|
class { '::neutron::services::fwaas':
|
||||||
|
enabled => true,
|
||||||
|
driver => 'neutron_fwaas.services.firewall.drivers.linux.iptables_fwaas.IptablesFwaasDriver',
|
||||||
|
}
|
||||||
|
}
|
23
packstack/puppet/modules/packstack/manifests/neutron/l3.pp
Normal file
23
packstack/puppet/modules/packstack/manifests/neutron/l3.pp
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
class packstack::neutron::l3 ()
|
||||||
|
{
|
||||||
|
$start_l3_agent = hiera('CONFIG_NEUTRON_VPNAAS') ? {
|
||||||
|
'y' => false,
|
||||||
|
default => true
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::neutron::agents::l3':
|
||||||
|
interface_driver => hiera('CONFIG_NEUTRON_L3_INTERFACE_DRIVER'),
|
||||||
|
external_network_bridge => hiera('CONFIG_NEUTRON_L3_EXT_BRIDGE'),
|
||||||
|
manage_service => $start_l3_agent,
|
||||||
|
enabled => $start_l3_agent,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
}
|
||||||
|
|
||||||
|
if defined(Class['neutron::services::fwaas']) {
|
||||||
|
Class['neutron::services::fwaas'] -> Class['neutron::agents::l3']
|
||||||
|
}
|
||||||
|
|
||||||
|
sysctl::value { 'net.ipv4.ip_forward':
|
||||||
|
value => '1',
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,14 @@
|
|||||||
|
class packstack::neutron::lb_agent ()
|
||||||
|
{
|
||||||
|
$neutron_lb_interface_mappings = hiera_array('CONFIG_NEUTRON_LB_INTERFACE_MAPPINGS')
|
||||||
|
|
||||||
|
$use_subnets_value = hiera('CONFIG_USE_SUBNETS')
|
||||||
|
$use_subnets = $use_subnets_value ? {
|
||||||
|
'y' => true,
|
||||||
|
default => false,
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::neutron::agents::ml2::linuxbridge':
|
||||||
|
physical_interface_mappings => force_interface($neutron_lb_interface_mappings, $use_subnets),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,13 @@
|
|||||||
|
class packstack::neutron::lbaas ()
|
||||||
|
{
|
||||||
|
class { '::neutron::agents::lbaas':
|
||||||
|
interface_driver => hiera('CONFIG_NEUTRON_LBAAS_INTERFACE_DRIVER'),
|
||||||
|
device_driver => 'neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver',
|
||||||
|
user_group => 'haproxy',
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
}
|
||||||
|
|
||||||
|
class {'::neutron::services::lbaas':
|
||||||
|
service_providers => 'LOADBALANCER:Haproxy:neutron_lbaas.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default',
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
class packstack::neutron::metadata ()
|
||||||
|
{
|
||||||
|
class { '::neutron::agents::metadata':
|
||||||
|
shared_secret => hiera('CONFIG_NEUTRON_METADATA_PW'),
|
||||||
|
metadata_ip => force_ip(hiera('CONFIG_KEYSTONE_HOST_URL')),
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
metadata_workers => hiera('CONFIG_SERVICE_WORKERS'),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
class packstack::neutron::metering ()
|
||||||
|
{
|
||||||
|
class { '::neutron::agents::metering':
|
||||||
|
interface_driver => hiera('CONFIG_NEUTRON_METERING_IFCE_DRIVER'),
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
}
|
||||||
|
}
|
31
packstack/puppet/modules/packstack/manifests/neutron/ml2.pp
Normal file
31
packstack/puppet/modules/packstack/manifests/neutron/ml2.pp
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
class packstack::neutron::ml2 ()
|
||||||
|
{
|
||||||
|
if hiera('CONFIG_NEUTRON_ML2_VXLAN_GROUP') == '' {
|
||||||
|
$vxlan_group_value = undef
|
||||||
|
} else {
|
||||||
|
$vxlan_group_value = hiera('CONFIG_NEUTRON_ML2_VXLAN_GROUP')
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::neutron::plugins::ml2':
|
||||||
|
type_drivers => hiera_array('CONFIG_NEUTRON_ML2_TYPE_DRIVERS'),
|
||||||
|
tenant_network_types => hiera_array('CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES'),
|
||||||
|
mechanism_drivers => hiera_array('CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS'),
|
||||||
|
flat_networks => hiera_array('CONFIG_NEUTRON_ML2_FLAT_NETWORKS'),
|
||||||
|
network_vlan_ranges => hiera_array('CONFIG_NEUTRON_ML2_VLAN_RANGES'),
|
||||||
|
tunnel_id_ranges => hiera_array('CONFIG_NEUTRON_ML2_TUNNEL_ID_RANGES'),
|
||||||
|
vxlan_group => $vxlan_group_value,
|
||||||
|
vni_ranges => hiera_array('CONFIG_NEUTRON_ML2_VNI_RANGES'),
|
||||||
|
enable_security_group => true,
|
||||||
|
firewall_driver => hiera('FIREWALL_DRIVER'),
|
||||||
|
supported_pci_vendor_devs => hiera_array('CONFIG_NEUTRON_ML2_SUPPORTED_PCI_VENDOR_DEVS'),
|
||||||
|
sriov_agent_required => hiera('CONFIG_NEUTRON_ML2_SRIOV_AGENT_REQUIRED'),
|
||||||
|
}
|
||||||
|
|
||||||
|
# For cases where "neutron-db-manage upgrade" command is called
|
||||||
|
# we need to fill config file first
|
||||||
|
if defined(Exec['neutron-db-manage upgrade']) {
|
||||||
|
Neutron_plugin_ml2<||> ->
|
||||||
|
File['/etc/neutron/plugin.ini'] ->
|
||||||
|
Exec['neutron-db-manage upgrade']
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,14 @@
|
|||||||
|
class packstack::neutron::notifications ()
|
||||||
|
{
|
||||||
|
$neutron_notif_cfg_ctrl_host = hiera('CONFIG_KEYSTONE_HOST_URL')
|
||||||
|
|
||||||
|
# Configure nova notifications system
|
||||||
|
class { '::neutron::server::notifications':
|
||||||
|
username => 'nova',
|
||||||
|
password => hiera('CONFIG_NOVA_KS_PW'),
|
||||||
|
tenant_name => 'services',
|
||||||
|
nova_url => "http://${neutron_notif_cfg_ctrl_host}:8774/v2",
|
||||||
|
auth_url => hiera('CONFIG_KEYSTONE_ADMIN_URL'),
|
||||||
|
region_name => hiera('CONFIG_KEYSTONE_REGION'),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,55 @@
|
|||||||
|
class packstack::neutron::ovs_agent ()
|
||||||
|
{
|
||||||
|
$my_ip = choose_my_ip(hiera('HOST_LIST'))
|
||||||
|
$neutron_tunnel_rule_name = "FIREWALL_NEUTRON_TUNNEL_RULES_${my_ip}"
|
||||||
|
create_resources(packstack::firewall, hiera($neutron_tunnel_rule_name, {}))
|
||||||
|
|
||||||
|
$neutron_ovs_tunnel_if = hiera('CONFIG_NEUTRON_OVS_TUNNEL_IF', undef)
|
||||||
|
|
||||||
|
$use_subnets_value = hiera('CONFIG_USE_SUBNETS')
|
||||||
|
$use_subnets = $use_subnets_value ? {
|
||||||
|
'y' => true,
|
||||||
|
default => false,
|
||||||
|
}
|
||||||
|
|
||||||
|
if $neutron_ovs_tunnel_if {
|
||||||
|
$ovs_agent_vxlan_cfg_neut_ovs_tun_if = force_interface($neutron_ovs_tunnel_if, $use_subnets)
|
||||||
|
} else {
|
||||||
|
$ovs_agent_vxlan_cfg_neut_ovs_tun_if = undef
|
||||||
|
}
|
||||||
|
|
||||||
|
if $ovs_agent_vxlan_cfg_neut_ovs_tun_if != '' {
|
||||||
|
$iface = regsubst($ovs_agent_vxlan_cfg_neut_ovs_tun_if, '[\.\-\:]', '_', 'G')
|
||||||
|
$localip = inline_template("<%= scope.lookupvar('::ipaddress_${iface}') %>")
|
||||||
|
} else {
|
||||||
|
$localip = choose_my_ip(hiera('HOST_LIST'))
|
||||||
|
}
|
||||||
|
|
||||||
|
$network_hosts = split(hiera('CONFIG_NETWORK_HOSTS'),',')
|
||||||
|
if member($network_hosts, choose_my_ip(hiera('HOST_LIST'))) {
|
||||||
|
$bridge_ifaces_param = 'CONFIG_NEUTRON_OVS_BRIDGE_IFACES'
|
||||||
|
$bridge_mappings_param = 'CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS'
|
||||||
|
} else {
|
||||||
|
$bridge_ifaces_param = 'CONFIG_NEUTRON_OVS_BRIDGE_IFACES_COMPUTE'
|
||||||
|
$bridge_mappings_param = 'CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS_COMPUTE'
|
||||||
|
}
|
||||||
|
|
||||||
|
if hiera('CREATE_BRIDGES') == 'y' {
|
||||||
|
$bridge_uplinks = hiera_array($bridge_ifaces_param)
|
||||||
|
$bridge_mappings = hiera_array($bridge_mappings_param)
|
||||||
|
} else {
|
||||||
|
$bridge_uplinks = []
|
||||||
|
$bridge_mappings = []
|
||||||
|
}
|
||||||
|
|
||||||
|
class { '::neutron::agents::ml2::ovs':
|
||||||
|
bridge_uplinks => $bridge_uplinks,
|
||||||
|
bridge_mappings => $bridge_mappings,
|
||||||
|
enable_tunneling => hiera('CONFIG_NEUTRON_OVS_TUNNELING'),
|
||||||
|
tunnel_types => hiera_array('CONFIG_NEUTRON_OVS_TUNNEL_TYPES'),
|
||||||
|
local_ip => force_ip($localip),
|
||||||
|
vxlan_udp_port => hiera('CONFIG_NEUTRON_OVS_VXLAN_UDP_PORT',undef),
|
||||||
|
l2_population => hiera('CONFIG_NEUTRON_USE_L2POPULATION'),
|
||||||
|
firewall_driver => hiera('FIREWALL_DRIVER'),
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,11 @@
|
|||||||
|
class packstack::neutron::ovs_bridge ()
|
||||||
|
{
|
||||||
|
$agent_service = 'neutron-ovs-agent-service'
|
||||||
|
|
||||||
|
$config_neutron_ovs_bridge = hiera('CONFIG_NEUTRON_OVS_BRIDGE')
|
||||||
|
|
||||||
|
vs_bridge { $config_neutron_ovs_bridge:
|
||||||
|
ensure => present,
|
||||||
|
require => Service[$agent_service],
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,40 @@
|
|||||||
|
class packstack::neutron::rabbitmq ()
|
||||||
|
{
|
||||||
|
$bind_host = hiera('CONFIG_IP_VERSION') ? {
|
||||||
|
'ipv6' => '::0',
|
||||||
|
default => '0.0.0.0',
|
||||||
|
# TO-DO(mmagr): Add IPv6 support when hostnames are used
|
||||||
|
}
|
||||||
|
|
||||||
|
$kombu_ssl_ca_certs = hiera('CONFIG_AMQP_SSL_CACERT_FILE', undef)
|
||||||
|
$kombu_ssl_keyfile = hiera('CONFIG_NEUTRON_SSL_KEY', undef)
|
||||||
|
$kombu_ssl_certfile = hiera('CONFIG_NEUTRON_SSL_CERT', undef)
|
||||||
|
|
||||||
|
if $kombu_ssl_keyfile {
|
||||||
|
$files_to_set_owner = [ $kombu_ssl_keyfile, $kombu_ssl_certfile ]
|
||||||
|
file { $files_to_set_owner:
|
||||||
|
owner => 'neutron',
|
||||||
|
group => 'neutron',
|
||||||
|
require => Package['openstack-neutron'],
|
||||||
|
}
|
||||||
|
File[$files_to_set_owner] ~> Service<| tag == 'neutron-service' |>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class { '::neutron':
|
||||||
|
bind_host => $bind_host,
|
||||||
|
rabbit_host => hiera('CONFIG_AMQP_HOST_URL'),
|
||||||
|
rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'),
|
||||||
|
rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'),
|
||||||
|
rabbit_user => hiera('CONFIG_AMQP_AUTH_USER'),
|
||||||
|
rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'),
|
||||||
|
core_plugin => hiera('CONFIG_NEUTRON_CORE_PLUGIN'),
|
||||||
|
allow_overlapping_ips => true,
|
||||||
|
service_plugins => hiera_array('SERVICE_PLUGINS'),
|
||||||
|
verbose => true,
|
||||||
|
debug => hiera('CONFIG_DEBUG_MODE'),
|
||||||
|
kombu_ssl_ca_certs => $kombu_ssl_ca_certs,
|
||||||
|
kombu_ssl_keyfile => $kombu_ssl_keyfile,
|
||||||
|
kombu_ssl_certfile => $kombu_ssl_certfile,
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
class packstack::neutron::sriov ()
|
||||||
|
{
|
||||||
|
class { 'neutron::agents::ml2::sriov' :
|
||||||
|
physical_device_mappings => hiera_array('CONFIG_NEUTRON_ML2_SRIOV_INTERFACE_MAPPINGS'),
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user