aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dprince@redhat.com>2015-01-19 15:41:26 -0500
committerDan Prince <dprince@redhat.com>2015-01-27 09:07:19 -0500
commit8633aca4ed5461b5758866f5b64fdaf9957ae151 (patch)
treed4afdef9778af2c85b9d1a3417e8927cbf17c2d4
parent25b35cb71174c1db971e2f80b693d1be2e502d4e (diff)
Puppet: Cinder common block storage support
This patch implements the required changes to configure common Cinder block storage nodes via Puppet. Change-Id: Iac8b4679a00f58d5faac4a1d08b7a830f0360ba5
-rw-r--r--cinder-storage-puppet.yaml180
-rw-r--r--overcloud-resource-registry-puppet.yaml2
-rw-r--r--puppet/hieradata/volume.yaml4
-rw-r--r--puppet/overcloud_volume.pp19
4 files changed, 204 insertions, 1 deletions
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