From 8633aca4ed5461b5758866f5b64fdaf9957ae151 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Mon, 19 Jan 2015 15:41:26 -0500 Subject: [PATCH] Puppet: Cinder common block storage support This patch implements the required changes to configure common Cinder block storage nodes via Puppet. Change-Id: Iac8b4679a00f58d5faac4a1d08b7a830f0360ba5 --- cinder-storage-puppet.yaml | 180 ++++++++++++++++++++++++++++++++ overcloud-resource-registry-puppet.yaml | 2 +- puppet/hieradata/volume.yaml | 4 + puppet/overcloud_volume.pp | 19 ++++ 4 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 cinder-storage-puppet.yaml create mode 100644 puppet/hieradata/volume.yaml create mode 100644 puppet/overcloud_volume.pp diff --git a/cinder-storage-puppet.yaml b/cinder-storage-puppet.yaml new file mode 100644 index 00000000..c1cbffb0 --- /dev/null +++ b/cinder-storage-puppet.yaml @@ -0,0 +1,180 @@ +heat_template_version: 2014-10-16 +description: 'Block Storage Configuration w/ Puppet' +parameters: + #FIXME: this should not be required + AdminPassword: + default: '' + type: string + Image: + default: overcloud-cinder-volume + type: string + CinderISCSIHelper: + default: tgtadm + description: The iSCSI helper to use with cinder. + type: string + CinderLVMLoopDeviceSize: + default: 5000 + description: The size of the loopback file used by the cinder LVM driver. + type: number + # FIXME: this should not be required + CinderPassword: + default: unset + description: The password for the cinder service account, used by cinder-api. + hidden: true + type: string + VirtualIP: + default: '' + type: string + ExtraConfig: + default: {} + description: | + Additional configuration to inject into the cluster. The JSON should have + the following structure: + {"FILEKEY": + {"config": + [{"section": "SECTIONNAME", + "values": + [{"option": "OPTIONNAME", + "value": "VALUENAME" + } + ] + } + ] + } + } + For instance: + {"nova": + {"config": + [{"section": "default", + "values": + [{"option": "force_config_drive", + "value": "always" + } + ] + }, + {"section": "cells", + "values": + [{"option": "driver", + "value": "nova.cells.rpc_driver.CellsRPCDriver" + } + ] + } + ] + } + } + type: json + Flavor: + description: Flavor for block storage nodes to request when deploying. + type: string + constraints: + - custom_constraint: nova.flavor + GlancePort: + default: "9292" + description: Glance port. + type: string + KeyName: + default: default + description: Name of an existing EC2 KeyPair to enable SSH access to the instances + type: string + RabbitPassword: + default: '' + type: string + RabbitUserName: + default: '' + type: string + SnmpdReadonlyUserName: + default: ro_snmp_user + description: The user name for SNMPd with readonly rights running on all Overcloud nodes + type: string + SnmpdReadonlyUserPassword: + default: unset + description: The user password for SNMPd with readonly rights running on all Overcloud nodes + type: string + hidden: true +resources: + BlockStorage: + type: OS::Nova::Server + properties: + image: + {get_param: Image} + flavor: {get_param: Flavor} + key_name: {get_param: KeyName} + user_data_format: SOFTWARE_CONFIG + networks: + - network: ctlplane + + BlockStorageDeployment: + type: OS::Heat::StructuredDeployment + properties: + server: {get_resource: BlockStorage} + config: {get_resource: BlockStorageConfig} + input_values: + cinder_dsn: {list_join: ['', ['mysql://cinder:unset@', {get_param: VirtualIP} , '/cinder']]} + snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName} + snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword} + cinder_lvm_loop_device_size: + str_replace: + template: sizeM + params: + size: {get_param: CinderLVMLoopDeviceSize} + cinder_iscsi_helper: {get_param: CinderISCSIHelper} + rabbit_hosts: + str_replace: + template: '["host"]' + params: + host: {get_param: VirtualIP} + rabbit_username: {get_param: RabbitUserName} + rabbit_password: {get_param: RabbitPassword} + signal_transport: NO_SIGNAL + + # Map heat metadata into hiera datafiles + BlockStorageConfig: + type: OS::Heat::StructuredConfig + properties: + group: os-apply-config + config: + hiera: + hierarchy: + - heat_config_%{::deploy_config_name} + - volume + - common + datafiles: + common: + raw_data: {get_file: puppet/hieradata/common.yaml} + volume: + raw_data: {get_file: puppet/hieradata/volume.yaml} + oac_data: + cinder::volume::iscsi::iscsi_ip_address: local-ipv4 + mapped_data: + # Cinder + cinder::setup_test_volume::size: {get_input: cinder_lvm_loop_device_size} + cinder::volume::iscsi::iscsi_helper: {get_input: cinder_iscsi_helper} + cinder::database_connection: {get_input: cinder_dsn} + cinder::rabbit_hosts: {get_input: rabbit_hosts} + cinder::rabbit_userid: {get_input: rabbit_username} + cinder::rabbit_password: {get_input: rabbit_password} + + VolumePuppetConfig: + type: OS::Heat::SoftwareConfig + properties: + group: puppet + outputs: + - name: result + config: + get_file: puppet/overcloud_volume.pp + + VolumePuppetDeployment: + type: OS::Heat::StructuredDeployment + properties: + name: puppet_1 + server: {get_resource: BlockStorage} + config: {get_resource: VolumePuppetConfig} + +outputs: + hosts_entry: + value: + str_replace: + template: "IP HOST HOST.novalocal" + params: + IP: {get_attr: [BlockStorage, networks, ctlplane, 0]} + HOST: {get_attr: [BlockStorage, name]} diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml index 8bf97ed2..6860708a 100644 --- a/overcloud-resource-registry-puppet.yaml +++ b/overcloud-resource-registry-puppet.yaml @@ -1,5 +1,5 @@ resource_registry: - OS::TripleO::BlockStorage: cinder-storage.yaml + OS::TripleO::BlockStorage: cinder-storage-puppet.yaml OS::TripleO::Compute: compute-puppet.yaml OS::TripleO::SoftwareDeployment: OS::Heat::StructuredDeployment OS::TripleO::Controller: controller-puppet.yaml diff --git a/puppet/hieradata/volume.yaml b/puppet/hieradata/volume.yaml new file mode 100644 index 00000000..ad9e2c2a --- /dev/null +++ b/puppet/hieradata/volume.yaml @@ -0,0 +1,4 @@ +# Hiera data here applies to all volume storage nodes + +# cinder +cinder::scheduler::scheduler_driver: cinder.scheduler.filter_scheduler.FilterScheduler diff --git a/puppet/overcloud_volume.pp b/puppet/overcloud_volume.pp new file mode 100644 index 00000000..460a82b4 --- /dev/null +++ b/puppet/overcloud_volume.pp @@ -0,0 +1,19 @@ +# Copyright 2015 Red Hat, Inc. +# All Rights Reserved. +# +# 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. + +include ::cinder +include ::cinder::volume +include ::cinder::volume::iscsi +include ::cinder::setup_test_volume -- 2.16.6