summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dprince@redhat.com>2015-01-09 09:19:21 -0500
committerDan Prince <dprince@redhat.com>2015-01-27 09:07:19 -0500
commit82de366b75d9782ce7b35fb90e9b2b60d4cff61d (patch)
tree2126535746464b65b116ee0e86d9d514fa36bb27
parent65d64b6a52366f36955e5e48a29f4ef0ca2ff973 (diff)
Puppet: Swift Storage node support
This patch implements the required changes to configure swift storage nodes via Puppet. Similar to the overcloud we generate the rings on each node (with the same seed). Change-Id: I677c85b09b6e656b3ac1f938a4bd6bc7daae1755
-rw-r--r--overcloud-resource-registry-puppet.yaml2
-rw-r--r--puppet/overcloud_object.pp31
-rw-r--r--swift-storage-puppet.yaml175
3 files changed, 207 insertions, 1 deletions
diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml
index 23cdf2a9..8bf97ed2 100644
--- a/overcloud-resource-registry-puppet.yaml
+++ b/overcloud-resource-registry-puppet.yaml
@@ -3,5 +3,5 @@ resource_registry:
OS::TripleO::Compute: compute-puppet.yaml
OS::TripleO::SoftwareDeployment: OS::Heat::StructuredDeployment
OS::TripleO::Controller: controller-puppet.yaml
- OS::TripleO::ObjectStorage: swift-storage.yaml
+ OS::TripleO::ObjectStorage: swift-storage-puppet.yaml
OS::TripleO::Net::SoftwareConfig: net-config-bridge.yaml
diff --git a/puppet/overcloud_object.pp b/puppet/overcloud_object.pp
new file mode 100644
index 00000000..ffd80886
--- /dev/null
+++ b/puppet/overcloud_object.pp
@@ -0,0 +1,31 @@
+# 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 ::swift
+class {'swift::storage::all':
+ mount_check => str2bool(hiera('swift_mount_check'))
+}
+if(!defined(File['/srv/node'])) {
+ file { '/srv/node':
+ ensure => directory,
+ owner => 'swift',
+ group => 'swift',
+ require => Package['openstack-swift'],
+ }
+}
+
+$swift_components = ['account', 'container', 'object']
+swift::storage::filter::recon { $swift_components : }
+swift::storage::filter::healthcheck { $swift_components : }
diff --git a/swift-storage-puppet.yaml b/swift-storage-puppet.yaml
new file mode 100644
index 00000000..c77f667f
--- /dev/null
+++ b/swift-storage-puppet.yaml
@@ -0,0 +1,175 @@
+heat_template_version: 2014-10-16
+description: 'Common Swift Storage Configuration'
+parameters:
+ #FIXME: this should not be required.
+ ControllerIP:
+ default: ''
+ type: string
+ Flavor:
+ description: Flavor for Swift storage nodes to request when deploying.
+ type: string
+ constraints:
+ - custom_constraint: nova.flavor
+ HashSuffix:
+ default: unset
+ description: A random string to be used as a salt when hashing to determine mappings
+ in the ring.
+ hidden: true
+ type: string
+ Image:
+ default: overcloud-swift-storage
+ type: string
+ KeyName:
+ default: default
+ description: Name of an existing EC2 KeyPair to enable SSH access to the instances
+ type: string
+ MountCheck:
+ default: 'false'
+ description: Value of mount_check in Swift account/container/object -server.conf
+ type: boolean
+ #FIXME: this is is not required. Leaving here for compatability with the overcloud template.
+ NeutronEnableTunnelling:
+ default: "True"
+ type: string
+ #FIXME: this is is not required. Leaving here for compatability with the overcloud template.
+ NeutronNetworkType:
+ default: gre
+ type: string
+ MinPartHours:
+ type: number
+ default: 1
+ description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
+ PartPower:
+ default: 10
+ description: Partition Power to use when building Swift rings
+ type: number
+ #FIXME: this is is not required. Leaving here for compatability with the overcloud template.
+ Password:
+ default: unset
+ description: The password for the swift service account, used by the swift proxy
+ services.
+ hidden: true
+ type: string
+ Replicas:
+ type: number
+ default: 1
+ description: How many replicas to use in the swift rings.
+ 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:
+
+ SwiftStorage:
+ 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
+
+ StoragePuppetConfig:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: puppet
+ outputs:
+ - name: result
+ config:
+ get_file: puppet/overcloud_object.pp
+
+ StoragePuppetDeployment:
+ type: OS::Heat::StructuredDeployment
+ properties:
+ name: puppet_1
+ server: {get_resource: SwiftStorage}
+ config: {get_resource: StoragePuppetConfig}
+
+ StorageRingbuilderPuppetConfig:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: puppet
+ outputs:
+ - name: result
+ config:
+ get_file: puppet/ringbuilder.pp
+
+ StorageRingbuilderPuppetDeployment:
+ type: OS::Heat::StructuredDeployment
+ properties:
+ name: puppet_2
+ server: {get_resource: SwiftStorage}
+ config: {get_resource: StorageRingbuilderPuppetConfig}
+
+ SwiftStorageHieraConfig:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ hiera:
+ hierarchy:
+ - heat_config_%{::deploy_config_name}
+ - object
+ - common
+ datafiles:
+ common:
+ raw_data: {get_file: puppet/hieradata/common.yaml}
+ object:
+ raw_data: {get_file: puppet/hieradata/object.yaml}
+ oac_data: # data we map in from other OAC configurations
+ tripleo::ringbuilder::devices: swift.devices
+ mapped_data: # data supplied directly to this deployment configuration, etc
+ swift::swift_hash_suffix: { get_input: swift_hash_suffix }
+ tripleo::ringbuilder::part_power: { get_input: swift_part_power }
+ tripleo::ringbuilder::replicas: {get_input: swift_replicas }
+ # Swift
+ swift::storage::all::storage_local_net_ip: {get_input: local_ip}
+ swift_mount_check: {get_input: swift_mount_check }
+ tripleo::ringbuilder::min_part_hours: { get_input: swift_min_part_hours }
+ # NOTE(dprince): build_ring support is currently not wired in.
+ # See: https://review.openstack.org/#/c/109225/
+ tripleo::ringbuilder::build_ring: True
+
+
+ SwiftStorageHieraDeploy:
+ type: OS::Heat::StructuredDeployment
+ properties:
+ server: {get_resource: SwiftStorage}
+ config: {get_resource: SwiftStorageHieraConfig}
+ signal_transport: NO_SIGNAL
+ input_values:
+ local_ip: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
+ snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
+ snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
+ swift_hash_suffix: {get_param: HashSuffix}
+ swift_mount_check: {get_param: MountCheck}
+ swift_min_part_hours: {get_param: MinPartHours}
+ swift_part_power: {get_param: PartPower}
+ swift_replicas: { get_param: Replicas}
+
+outputs:
+ hosts_entry:
+ value:
+ str_replace:
+ template: "IP HOST HOST.novalocal"
+ params:
+ IP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
+ HOST: {get_attr: [SwiftStorage, name]}
+ nova_server_resource:
+ description: Heat resource handle for the swift storage server
+ value:
+ {get_resource: SwiftStorage}
+ swift_device:
+ description: Swift device formatted for swift-ring-builder
+ value:
+ str_replace:
+ template: 'r1z1-IP:%PORT%/d1'
+ params:
+ IP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}