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
This commit is contained in:
Dan Prince 2015-01-09 09:19:21 -05:00
parent 65d64b6a52
commit 82de366b75
3 changed files with 207 additions and 1 deletions

View File

@ -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

View File

@ -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 : }

175
swift-storage-puppet.yaml Normal file
View File

@ -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]}