
Packstack configures Hiera as data backend. Packstack puppet templates are now using hiera() and hiera_array() functions to fetch data from hiera backend. Packstack generates a defaults.yaml file in the /var/tmp/packstack directory. Firewall rules for each openstack components are inserted into the hiera backend as hash and created by the create_resources function. Change-Id: Iab553a71264b0fc0f26d33a6304b545ad302f664 Fixes: rhbz#1145223 Signed-off-by: Gael Chamoulaud <gchamoul@redhat.com>
258 lines
9.5 KiB
Python
258 lines
9.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Installs and configures heat
|
|
"""
|
|
|
|
import uuid
|
|
import logging
|
|
import os
|
|
|
|
from packstack.installer import utils
|
|
from packstack.installer import validators
|
|
from packstack.installer import processors
|
|
|
|
from packstack.modules.shortcuts import get_mq
|
|
from packstack.modules.ospluginutils import (getManifestTemplate,
|
|
manifestfiles,
|
|
appendManifestFile,
|
|
createFirewallResources)
|
|
|
|
|
|
#------------------ oVirt installer initialization ------------------
|
|
|
|
PLUGIN_NAME = "OS-Heat"
|
|
PLUGIN_NAME_COLORED = utils.color_text(PLUGIN_NAME, 'blue')
|
|
|
|
|
|
def initConfig(controller):
|
|
parameters = [
|
|
{"CMD_OPTION": "os-heat-mysql-password",
|
|
"USAGE": ('The password used by Heat user to authenticate against '
|
|
'MySQL'),
|
|
"PROMPT": "Enter the password for the Heat MySQL user",
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
|
"PROCESSORS": [processors.process_password],
|
|
"MASK_INPUT": True,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_DB_PW",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "heat-auth-encryption-key",
|
|
"USAGE": ("The encryption key to use for authentication info "
|
|
"in database"),
|
|
"PROMPT": ("Enter the authentication key for Heat to use for "
|
|
"authenticate info in database"),
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"DEFAULT_VALUE": uuid.uuid4().hex[:16],
|
|
"MASK_INPUT": True,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_AUTH_ENC_KEY",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "os-heat-ks-passwd",
|
|
"USAGE": ("The password to use for the Heat to authenticate "
|
|
"with Keystone"),
|
|
"PROMPT": "Enter the password for the Heat Keystone access",
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
|
"PROCESSORS": [processors.process_password],
|
|
"MASK_INPUT": True,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_KS_PW",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "os-heat-cloudwatch-install",
|
|
"USAGE": ("Set to 'y' if you would like Packstack to install Heat "
|
|
"CloudWatch API"),
|
|
"PROMPT": "Should Packstack install Heat CloudWatch API",
|
|
"OPTION_LIST": ["y", "n"],
|
|
"VALIDATORS": [validators.validate_options],
|
|
"DEFAULT_VALUE": "n",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_CLOUDWATCH_INSTALL",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "os-heat-using-trusts",
|
|
"USAGE": ("Set to 'y' if you would like Packstack to install Heat "
|
|
"with trusts as deferred auth method. "
|
|
"If not, the stored password method will be used."),
|
|
"PROMPT": "Should Packstack configure Heat to use trusts",
|
|
"OPTION_LIST": ["y", "n"],
|
|
"VALIDATORS": [validators.validate_options],
|
|
"DEFAULT_VALUE": "y",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_USING_TRUSTS",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "os-heat-cfn-install",
|
|
"USAGE": ("Set to 'y' if you would like Packstack to install Heat "
|
|
"CloudFormation API"),
|
|
"PROMPT": "Should Packstack install Heat CloudFormation API",
|
|
"OPTION_LIST": ["y", "n"],
|
|
"VALIDATORS": [validators.validate_options],
|
|
"DEFAULT_VALUE": "n",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_CFN_INSTALL",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "os-heat-domain",
|
|
"USAGE": "Name of Keystone domain for Heat",
|
|
"PROMPT": "Enter name of Keystone domain for Heat",
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"DEFAULT_VALUE": "heat",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_DOMAIN",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "os-heat-domain-admin",
|
|
"USAGE": "Name of Keystone domain admin user for Heat",
|
|
"PROMPT": "Enter name of Keystone domain admin user for Heat",
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"DEFAULT_VALUE": "heat_admin",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_DOMAIN_ADMIN",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "os-heat-domain-password",
|
|
"USAGE": "Password for Keystone domain admin user for Heat",
|
|
"PROMPT": "Enter password for Keystone domain admin user for Heat",
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"DEFAULT_VALUE": "PW_PLACEHOLDER",
|
|
"PROCESSORS": [processors.process_password],
|
|
"MASK_INPUT": True,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_HEAT_DOMAIN_PASSWORD",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
]
|
|
group = {"GROUP_NAME": "Heat",
|
|
"DESCRIPTION": "Heat Config parameters",
|
|
"PRE_CONDITION": "CONFIG_HEAT_INSTALL",
|
|
"PRE_CONDITION_MATCH": "y",
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True}
|
|
controller.addGroup(group, parameters)
|
|
|
|
|
|
def initSequences(controller):
|
|
config = controller.CONF
|
|
if config['CONFIG_HEAT_INSTALL'] != 'y':
|
|
return
|
|
steps = [
|
|
{'title': 'Adding Heat manifest entries',
|
|
'functions': [create_manifest]},
|
|
{'title': 'Adding Heat Keystone manifest entries',
|
|
'functions': [create_keystone_manifest]}
|
|
]
|
|
|
|
if config.get('CONFIG_HEAT_CLOUDWATCH_INSTALL', 'n') == 'y':
|
|
steps.append(
|
|
{'title': 'Adding Heat CloudWatch API manifest entries',
|
|
'functions': [create_cloudwatch_manifest]})
|
|
if config.get('CONFIG_HEAT_CFN_INSTALL', 'n') == 'y':
|
|
steps.append(
|
|
{'title': 'Adding Heat CloudFormation API manifest entries',
|
|
'functions': [create_cfn_manifest]})
|
|
controller.addSequence("Installing Heat", [], [], steps)
|
|
|
|
|
|
#-------------------------- step functions --------------------------
|
|
|
|
def create_manifest(config, messages):
|
|
manifestfile = "%s_heat.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
manifestdata = getManifestTemplate(get_mq(config, "heat"))
|
|
manifestdata += getManifestTemplate("heat.pp")
|
|
if config.get('CONFIG_HEAT_USING_TRUSTS', 'n') == 'y':
|
|
manifestdata += getManifestTemplate("heat_trusts.pp")
|
|
|
|
fw_details = dict()
|
|
key = "heat"
|
|
fw_details.setdefault(key, {})
|
|
fw_details[key]['host'] = "ALL"
|
|
fw_details[key]['service_name'] = "heat"
|
|
fw_details[key]['chain'] = "INPUT"
|
|
fw_details[key]['ports'] = ['8004']
|
|
fw_details[key]['proto'] = "tcp"
|
|
config['FIREWALL_HEAT_RULES'] = fw_details
|
|
|
|
manifestdata += createFirewallResources('FIREWALL_HEAT_RULES')
|
|
appendManifestFile(manifestfile, manifestdata)
|
|
|
|
|
|
def create_keystone_manifest(config, messages):
|
|
manifestfile = "%s_keystone.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
manifestdata = getManifestTemplate("keystone_heat.pp")
|
|
|
|
if config.get('CONFIG_HEAT_USING_TRUSTS', 'n') == 'y':
|
|
manifestdata += getManifestTemplate("keystone_heat_trusts.pp")
|
|
|
|
appendManifestFile(manifestfile, manifestdata)
|
|
|
|
|
|
def create_cloudwatch_manifest(config, messages):
|
|
manifestfile = "%s_heatcw.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
manifestdata = getManifestTemplate(get_mq(config, "heat"))
|
|
manifestdata += getManifestTemplate("heat_cloudwatch.pp")
|
|
|
|
fw_details = dict()
|
|
key = "heat_api_cloudwatch"
|
|
fw_details.setdefault(key, {})
|
|
fw_details[key]['host'] = "ALL"
|
|
fw_details[key]['service_name'] = "heat api cloudwatch"
|
|
fw_details[key]['chain'] = "INPUT"
|
|
fw_details[key]['ports'] = ['8003']
|
|
fw_details[key]['proto'] = "tcp"
|
|
config['FIREWALL_HEAT_CLOUDWATCH_RULES'] = fw_details
|
|
|
|
manifestdata += createFirewallResources('FIREWALL_HEAT_CLOUDWATCH_RULES')
|
|
appendManifestFile(manifestfile, manifestdata, marker='heat')
|
|
|
|
|
|
def create_cfn_manifest(config, messages):
|
|
manifestfile = "%s_heatcnf.pp" % config['CONFIG_CONTROLLER_HOST']
|
|
manifestdata = getManifestTemplate(get_mq(config, "heat"))
|
|
manifestdata += getManifestTemplate("heat_cfn.pp")
|
|
|
|
fw_details = dict()
|
|
key = "heat_cfn"
|
|
fw_details.setdefault(key, {})
|
|
fw_details[key]['host'] = "ALL"
|
|
fw_details[key]['service_name'] = "heat cfn"
|
|
fw_details[key]['chain'] = "INPUT"
|
|
fw_details[key]['ports'] = ['8000']
|
|
fw_details[key]['proto'] = "tcp"
|
|
config['FIREWALL_HEAT_CFN_RULES'] = fw_details
|
|
|
|
manifestdata += createFirewallResources('FIREWALL_HEAT_CFN_RULES')
|
|
appendManifestFile(manifestfile, manifestdata, marker='heat')
|