Puppet: Cinder common block storage support
authorDan Prince <dprince@redhat.com>
Mon, 19 Jan 2015 20:41:26 +0000 (15:41 -0500)
committerDan Prince <dprince@redhat.com>
Tue, 27 Jan 2015 14:07:19 +0000 (09:07 -0500)
This patch implements the required changes to configure
common Cinder block storage nodes via Puppet.

Change-Id: Iac8b4679a00f58d5faac4a1d08b7a830f0360ba5

cinder-storage-puppet.yaml [new file with mode: 0644]
overcloud-resource-registry-puppet.yaml
puppet/hieradata/volume.yaml [new file with mode: 0644]
puppet/overcloud_volume.pp [new file with mode: 0644]

diff --git a/cinder-storage-puppet.yaml b/cinder-storage-puppet.yaml
new file mode 100644 (file)
index 0000000..c1cbffb
--- /dev/null
@@ -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]}
index 8bf97ed..6860708 100644 (file)
@@ -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 (file)
index 0000000..ad9e2c2
--- /dev/null
@@ -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 (file)
index 0000000..460a82b
--- /dev/null
@@ -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