4587b9b4d3
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
757 lines
28 KiB
Python
757 lines
28 KiB
Python
# -*- 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 Cinder
|
|
"""
|
|
|
|
import re
|
|
|
|
from packstack.installer import basedefs
|
|
from packstack.installer import exceptions
|
|
from packstack.installer import processors
|
|
from packstack.installer import validators
|
|
from packstack.installer.utils import split_hosts
|
|
|
|
from packstack.installer import utils
|
|
|
|
from packstack.modules.documentation import update_params_usage
|
|
from packstack.modules.ospluginutils import generate_ssl_cert
|
|
|
|
# ------------------ Cinder Packstack Plugin initialization ------------------
|
|
|
|
PLUGIN_NAME = "OS-Cinder"
|
|
PLUGIN_NAME_COLORED = utils.color_text(PLUGIN_NAME, 'blue')
|
|
|
|
NETAPP_DEFAULT_STORAGE_FAMILY = "ontap_cluster"
|
|
NETAPP_DEFAULT_STORAGE_PROTOCOL = "nfs"
|
|
|
|
|
|
def initConfig(controller):
|
|
conf_params = {
|
|
"CINDER": [
|
|
{"CMD_OPTION": "cinder-db-passwd",
|
|
"PROMPT": "Enter the password for the Cinder DB 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_CINDER_DB_PW",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": 'cinder-db-purge-enable',
|
|
"PROMPT": (
|
|
"Enter y if cron job for removing soft deleted DB rows "
|
|
"should be created"
|
|
),
|
|
"OPTION_LIST": ['y', 'n'],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [processors.process_bool],
|
|
"DEFAULT_VALUE": 'y',
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": 'CONFIG_CINDER_DB_PURGE_ENABLE',
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "cinder-ks-passwd",
|
|
"PROMPT": "Enter the password for the Cinder 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_CINDER_KS_PW",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
|
|
{"CMD_OPTION": "cinder-backend",
|
|
"PROMPT": "Enter the Cinder backend to be configured",
|
|
"OPTION_LIST": ["lvm", "gluster", "nfs", "vmdk", "netapp",
|
|
"solidfire"],
|
|
"VALIDATORS": [validators.validate_options],
|
|
"DEFAULT_VALUE": "lvm",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_BACKEND",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERVOLUMECREATE": [
|
|
{"CMD_OPTION": "cinder-volumes-create",
|
|
"PROMPT": ("Should Cinder's volumes group be created (for "
|
|
"proof-of-concept installation)?"),
|
|
"OPTION_LIST": ["y", "n"],
|
|
"VALIDATORS": [validators.validate_options],
|
|
"DEFAULT_VALUE": "y",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_VOLUMES_CREATE",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERVOLUMESIZE": [
|
|
{"CMD_OPTION": "cinder-volumes-size",
|
|
"PROMPT": "Enter Cinder's volumes group usable size",
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"DEFAULT_VALUE": "20G",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_VOLUMES_SIZE",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERGLUSTERMOUNTS": [
|
|
{"CMD_OPTION": "cinder-gluster-mounts",
|
|
"PROMPT": ("Enter a single or comma separated list of gluster "
|
|
"volume shares to use with Cinder"),
|
|
"OPTION_LIST": ["^([\d]{1,3}\.){3}[\d]{1,3}:/.*",
|
|
"^[a-zA-Z0-9][\-\.\w]*:/.*"],
|
|
"VALIDATORS": [validators.validate_multi_regexp],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": True,
|
|
"CONF_NAME": "CONFIG_CINDER_GLUSTER_MOUNTS",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERNFSMOUNTS": [
|
|
{"CMD_OPTION": "cinder-nfs-mounts",
|
|
"PROMPT": ("Enter a single or comma seprated list of NFS exports "
|
|
"to use with Cinder"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_multi_export],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": True,
|
|
"CONF_NAME": "CONFIG_CINDER_NFS_MOUNTS",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERNETAPPMAIN": [
|
|
{"CMD_OPTION": "cinder-netapp-login",
|
|
"PROMPT": ("Enter a NetApp login"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_LOGIN",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-password",
|
|
"PROMPT": ("Enter a NetApp password"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": True,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_PASSWORD",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-hostname",
|
|
"PROMPT": ("Enter a NetApp hostname"),
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [processors.process_add_quotes_around_values],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_HOSTNAME",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-server-port",
|
|
"PROMPT": ("Enter a NetApp server port"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_port],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": 80,
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": True,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_SERVER_PORT",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-storage-family",
|
|
"PROMPT": ("Enter a NetApp storage family"),
|
|
"OPTION_LIST": ["ontap_7mode", "ontap_cluster", "eseries"],
|
|
"VALIDATORS": [validators.validate_options],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": NETAPP_DEFAULT_STORAGE_FAMILY,
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_STORAGE_FAMILY",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-transport-type",
|
|
"PROMPT": ("Enter a NetApp transport type"),
|
|
"OPTION_LIST": ["http", "https"],
|
|
"VALIDATORS": [validators.validate_options],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "http",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_TRANSPORT_TYPE",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-storage-protocol",
|
|
"PROMPT": ("Enter a NetApp storage protocol"),
|
|
"OPTION_LIST": ["iscsi", "fc", "nfs"],
|
|
"VALIDATORS": [validators.validate_options],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": NETAPP_DEFAULT_STORAGE_PROTOCOL,
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERNETAPPONTAPISCSI": [
|
|
{"CMD_OPTION": "cinder-netapp-size-multiplier",
|
|
"PROMPT": ("Enter a NetApp size multiplier"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "1.0",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_SIZE_MULTIPLIER",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERNETAPPNFS": [
|
|
{"CMD_OPTION": "cinder-netapp-expiry-thres-minutes",
|
|
"PROMPT": ("Enter a threshold"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_integer],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": 720,
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_EXPIRY_THRES_MINUTES",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-thres-avl-size-perc-start",
|
|
"PROMPT": ("Enter a value"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_integer],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": 20,
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_START",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-thres-avl-size-perc-stop",
|
|
"PROMPT": ("Enter a value"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_integer],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": 60,
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_STOP",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-nfs-shares",
|
|
"PROMPT": ("Enter a single or comma-separated list of NetApp NFS shares"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_NFS_SHARES",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-nfs-shares-config",
|
|
"PROMPT": ("Enter a NetApp NFS share config file"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "/etc/cinder/shares.conf",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_NFS_SHARES_CONFIG",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERNETAPPISCSI7MODE": [
|
|
{"CMD_OPTION": "cinder-netapp-volume-list",
|
|
"PROMPT": ("Enter a NetApp volume list"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": True,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_VOLUME_LIST",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-vfiler",
|
|
"PROMPT": ("Enter a NetApp vFiler"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": True,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_VFILER",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERNETAPP7MODEFC": [
|
|
{"CMD_OPTION": "cinder-netapp-partner-backend-name",
|
|
"PROMPT": ("Enter a NetApp partner backend name"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_PARTNER_BACKEND_NAME",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERNETAPPVSERVER": [
|
|
{"CMD_OPTION": "cinder-netapp-vserver",
|
|
"PROMPT": ("Enter a NetApp Vserver"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_VSERVER",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERNETAPPESERIES": [
|
|
{"CMD_OPTION": "cinder-netapp-controller-ips",
|
|
"PROMPT": ("Enter a value"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_multi_ping],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_CONTROLLER_IPS",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-sa-password",
|
|
"PROMPT": ("Enter a password"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": True,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_SA_PASSWORD",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-eseries-host-type",
|
|
"PROMPT": ("Enter a host type"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "linux_dm_mp",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": True,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_ESERIES_HOST_TYPE",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-webservice-path",
|
|
"PROMPT": ("Enter a path"),
|
|
"OPTION_LIST": ["^[/].*$"],
|
|
"VALIDATORS": [validators.validate_regexp],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "/devmgr/v2",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": True,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_WEBSERVICE_PATH",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-netapp-storage-pools",
|
|
"PROMPT": ("Enter a value"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": True,
|
|
"CONF_NAME": "CONFIG_CINDER_NETAPP_STORAGE_POOLS",
|
|
"USE_DEFAULT": True,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
],
|
|
|
|
"CINDERSOLIDFIRE": [
|
|
{"CMD_OPTION": "cinder-solidfire-login",
|
|
"PROMPT": ("Enter the cluster admin login"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_SOLIDFIRE_LOGIN",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-solidfire-password",
|
|
"PROMPT": ("Enter cluster admin password"),
|
|
"OPTION_LIST": [""],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": True,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_SOLIDFIRE_PASSWORD",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": True,
|
|
"CONDITION": False},
|
|
{"CMD_OPTION": "cinder-solidfire-hostname",
|
|
"PROMPT": ("Enter a SolidFire hostname or IP"),
|
|
"OPTION_LIST": [],
|
|
"VALIDATORS": [validators.validate_not_empty],
|
|
"PROCESSORS": [processors.process_add_quotes_around_values],
|
|
"DEFAULT_VALUE": "",
|
|
"MASK_INPUT": False,
|
|
"LOOSE_VALIDATION": False,
|
|
"CONF_NAME": "CONFIG_CINDER_SOLIDFIRE_HOSTNAME",
|
|
"USE_DEFAULT": False,
|
|
"NEED_CONFIRM": False,
|
|
"CONDITION": False},
|
|
]
|
|
}
|
|
update_params_usage(basedefs.PACKSTACK_DOC, conf_params)
|
|
|
|
conf_groups = [
|
|
{"GROUP_NAME": "CINDER",
|
|
"DESCRIPTION": "Cinder Config parameters",
|
|
"PRE_CONDITION": "CONFIG_CINDER_INSTALL",
|
|
"PRE_CONDITION_MATCH": "y",
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERVOLUMECREATE",
|
|
"DESCRIPTION": "Cinder volume create Config parameters",
|
|
"PRE_CONDITION": check_lvm_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERVOLUMESIZE",
|
|
"DESCRIPTION": "Cinder volume size Config parameters",
|
|
"PRE_CONDITION": check_lvm_vg_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERGLUSTERMOUNTS",
|
|
"DESCRIPTION": "Cinder gluster Config parameters",
|
|
"PRE_CONDITION": check_gluster_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERNFSMOUNTS",
|
|
"DESCRIPTION": "Cinder NFS Config parameters",
|
|
"PRE_CONDITION": check_nfs_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERNETAPPMAIN",
|
|
"DESCRIPTION": "Cinder NetApp main configuration",
|
|
"PRE_CONDITION": check_netapp_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERNETAPPONTAPISCSI",
|
|
"DESCRIPTION": "Cinder NetApp ONTAP-iSCSI configuration",
|
|
"PRE_CONDITION": check_netapp_ontap_iscsi_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERNETAPPNFS",
|
|
"DESCRIPTION": "Cinder NetApp NFS configuration",
|
|
"PRE_CONDITION": check_netapp_nfs_settings,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERNETAPPISCSI7MODE",
|
|
"DESCRIPTION": "Cinder NetApp iSCSI & 7-mode configuration",
|
|
"PRE_CONDITION": check_netapp_7modeiscsi_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERNETAPP7MODEFC",
|
|
"DESCRIPTION": "Cinder NetApp 7-mode Fibre Channel configuration",
|
|
"PRE_CONDITION": check_netapp_7mode_fc_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERNETAPPVSERVER",
|
|
"DESCRIPTION": "Cinder NetApp Vserver configuration",
|
|
"PRE_CONDITION": check_netapp_vserver_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERNETAPPESERIES",
|
|
"DESCRIPTION": "Cinder NetApp E-Series configuration",
|
|
"PRE_CONDITION": check_netapp_eseries_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True},
|
|
|
|
{"GROUP_NAME": "CINDERSOLIDFIRE",
|
|
"DESCRIPTION": "Cinder SolidFire configuration",
|
|
"PRE_CONDITION": check_solidfire_options,
|
|
"PRE_CONDITION_MATCH": True,
|
|
"POST_CONDITION": False,
|
|
"POST_CONDITION_MATCH": True}
|
|
]
|
|
for group in conf_groups:
|
|
params = conf_params[group["GROUP_NAME"]]
|
|
controller.addGroup(group, params)
|
|
|
|
|
|
def initSequences(controller):
|
|
config = controller.CONF
|
|
if config['CONFIG_CINDER_INSTALL'] != 'y':
|
|
return
|
|
|
|
config['CONFIG_CINDER_BACKEND'] = (
|
|
[i.strip() for i in config['CONFIG_CINDER_BACKEND'].split(',') if i]
|
|
)
|
|
|
|
for key in ('CONFIG_CINDER_NETAPP_VOLUME_LIST',
|
|
'CONFIG_CINDER_GLUSTER_MOUNTS',
|
|
'CONFIG_CINDER_NFS_MOUNTS'):
|
|
if key in config:
|
|
config[key] = [i.strip() for i in config[key].split(',') if i]
|
|
|
|
cinder_steps = []
|
|
|
|
if 'lvm' in config['CONFIG_CINDER_BACKEND']:
|
|
cinder_steps.append(
|
|
{'title': 'Checking if the Cinder server has a cinder-volumes vg',
|
|
'functions': [check_cinder_vg]})
|
|
|
|
cinder_steps.append(
|
|
{'title': 'Preparing Cinder entries',
|
|
'functions': [create_manifest]}
|
|
)
|
|
controller.addSequence("Installing OpenStack Cinder", [], [], cinder_steps)
|
|
|
|
|
|
# ------------------------- helper functions -------------------------
|
|
|
|
def check_lvm_options(config):
|
|
return (config['CONFIG_CINDER_INSTALL'] == 'y' and
|
|
'lvm' in config['CONFIG_CINDER_BACKEND'])
|
|
|
|
|
|
def check_lvm_vg_options(config):
|
|
return (config['CONFIG_CINDER_INSTALL'] == 'y' and
|
|
'lvm' in config['CONFIG_CINDER_BACKEND'])
|
|
|
|
|
|
def check_gluster_options(config):
|
|
return (config['CONFIG_CINDER_INSTALL'] == 'y' and
|
|
'gluster' in config['CONFIG_CINDER_BACKEND'])
|
|
|
|
|
|
def check_nfs_options(config):
|
|
return (config['CONFIG_CINDER_INSTALL'] == 'y' and
|
|
'nfs' in config['CONFIG_CINDER_BACKEND'])
|
|
|
|
|
|
def check_netapp_options(config):
|
|
return (config['CONFIG_CINDER_INSTALL'] == 'y' and
|
|
'netapp' in config['CONFIG_CINDER_BACKEND'])
|
|
|
|
|
|
def check_netapp_ontap_iscsi_options(config):
|
|
return (check_netapp_options(config) and
|
|
config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] in
|
|
['ontap_cluster', 'ontap_7mode'] and
|
|
config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] == "iscsi")
|
|
|
|
|
|
def check_netapp_nfs_settings(config):
|
|
return (check_netapp_options(config) and
|
|
config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] == "nfs")
|
|
|
|
|
|
def check_netapp_7modeiscsi_options(config):
|
|
return (check_netapp_options(config) and
|
|
config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] == 'ontap_7mode' and
|
|
config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] == 'iscsi')
|
|
|
|
|
|
def check_netapp_7mode_fc_options(config):
|
|
return (check_netapp_options(config) and
|
|
config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] == "ontap_7mode"
|
|
and config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] == "fc")
|
|
|
|
|
|
def check_netapp_vserver_options(config):
|
|
return (check_netapp_options(config) and
|
|
config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] == "ontap_cluster"
|
|
and config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] in
|
|
['nfs', 'iscsi'])
|
|
|
|
|
|
def check_netapp_eseries_options(config):
|
|
return (check_netapp_options(config) and
|
|
config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] == "eseries")
|
|
|
|
|
|
def check_solidfire_options(config):
|
|
return (config['CONFIG_CINDER_INSTALL'] == 'y' and
|
|
'solidfire' in config['CONFIG_CINDER_BACKEND'])
|
|
|
|
|
|
# -------------------------- step functions --------------------------
|
|
|
|
def check_cinder_vg(config, messages):
|
|
cinders_volume = 'cinder-volumes'
|
|
|
|
# Do we have a cinder-volumes vg?
|
|
have_cinders_volume = False
|
|
server = utils.ScriptRunner(config['CONFIG_STORAGE_HOST'])
|
|
server.append('vgdisplay %s' % cinders_volume)
|
|
try:
|
|
server.execute()
|
|
have_cinders_volume = True
|
|
except exceptions.ScriptRuntimeError:
|
|
pass
|
|
|
|
if config["CONFIG_CINDER_VOLUMES_CREATE"] == "n":
|
|
if not have_cinders_volume:
|
|
raise exceptions.MissingRequirements("The cinder server should "
|
|
"contain a cinder-volumes "
|
|
"volume group")
|
|
match = re.match('^(?P<size>\d+)G$',
|
|
config['CONFIG_CINDER_VOLUMES_SIZE'].strip())
|
|
if not match:
|
|
msg = 'Invalid Cinder volumes VG size.'
|
|
raise exceptions.ParamValidationError(msg)
|
|
|
|
cinders_volume_size = int(match.group('size')) * 1024
|
|
cinders_reserve = int(cinders_volume_size * 0.03)
|
|
|
|
cinders_volume_size = cinders_volume_size + cinders_reserve
|
|
config['CONFIG_CINDER_VOLUMES_SIZE'] = '%sM' % cinders_volume_size
|
|
|
|
|
|
def create_manifest(config, messages):
|
|
if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
|
|
ssl_host = config['CONFIG_STORAGE_HOST']
|
|
ssl_cert_file = config['CONFIG_CINDER_SSL_CERT'] = (
|
|
'/etc/pki/tls/certs/ssl_amqp_cinder.crt'
|
|
)
|
|
ssl_key_file = config['CONFIG_CINDER_SSL_KEY'] = (
|
|
'/etc/pki/tls/private/ssl_amqp_cinder.key'
|
|
)
|
|
service = 'cinder'
|
|
generate_ssl_cert(config, ssl_host, service, ssl_key_file,
|
|
ssl_cert_file)
|
|
|
|
fw_details = dict()
|
|
for host in split_hosts(config['CONFIG_COMPUTE_HOSTS']):
|
|
if (config['CONFIG_NOVA_INSTALL'] == 'y' and
|
|
config['CONFIG_VMWARE_BACKEND'] == 'n'):
|
|
key = "cinder_%s" % host
|
|
fw_details.setdefault(key, {})
|
|
fw_details[key]['host'] = "%s" % host
|
|
else:
|
|
key = "cinder_all"
|
|
fw_details.setdefault(key, {})
|
|
fw_details[key]['host'] = "ALL"
|
|
|
|
fw_details[key]['service_name'] = "cinder"
|
|
fw_details[key]['chain'] = "INPUT"
|
|
fw_details[key]['ports'] = ['3260']
|
|
fw_details[key]['proto'] = "tcp"
|
|
|
|
config['FIREWALL_CINDER_RULES'] = fw_details
|
|
|
|
# cinder API should be open for everyone
|
|
fw_details = dict()
|
|
key = "cinder_api"
|
|
fw_details.setdefault(key, {})
|
|
fw_details[key]['host'] = "ALL"
|
|
fw_details[key]['service_name'] = "cinder-api"
|
|
fw_details[key]['chain'] = "INPUT"
|
|
fw_details[key]['ports'] = ['8776']
|
|
fw_details[key]['proto'] = "tcp"
|
|
config['FIREWALL_CINDER_API_RULES'] = fw_details
|