Convert Swift ringbuilder to composable services format

This moves the ringbuilder puppet code to puppet-tripleo
and migrates to the composable services format.

Closes-Bug: #1601857
Change-Id: I0ea2230072d3ff61a4047ffff1f4187951370f67
Depends-On: I427f0b5ee93a0870d43419009178e0690ac66bd6
This commit is contained in:
Steven Hardy 2016-07-06 13:51:21 +01:00
parent 393db0231f
commit 1f1489b635
10 changed files with 44 additions and 169 deletions

View File

@ -179,6 +179,7 @@ resource_registry:
OS::TripleO::Services::Ntp: puppet/services/time/ntp.yaml
OS::TripleO::Services::SwiftProxy: puppet/services/swift-proxy.yaml
OS::TripleO::Services::SwiftStorage: puppet/services/swift-storage.yaml
OS::TripleO::Services::SwiftRingBuilder: puppet/services/swift-ringbuilder.yaml
OS::TripleO::Services::Snmp: puppet/services/snmp.yaml
OS::TripleO::Services::Timezone: puppet/services/time/timezone.yaml
OS::TripleO::Services::CeilometerApi: puppet/services/ceilometer-api.yaml

View File

@ -255,18 +255,6 @@ parameters:
description: A random string to be used as a salt when hashing to determine mappings in the ring.
type: string
hidden: true
SwiftMinPartHours:
type: number
default: 1
description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
SwiftPartPower:
default: 10
description: Partition Power to use when building Swift rings
type: number
SwiftReplicas:
type: number
default: 3
description: How many replicas to use in the swift rings.
# Compute-specific params
ComputeCount:
@ -401,6 +389,7 @@ parameters:
- OS::TripleO::Services::Ntp
- OS::TripleO::Services::SwiftProxy
- OS::TripleO::Services::SwiftStorage
- OS::TripleO::Services::SwiftRingBuilder
- OS::TripleO::Services::Snmp
- OS::TripleO::Services::Timezone
- OS::TripleO::Services::CeilometerApi
@ -499,6 +488,7 @@ parameters:
- OS::TripleO::Services::Kernel
- OS::TripleO::Services::Ntp
- OS::TripleO::Services::SwiftStorage
- OS::TripleO::Services::SwiftRingBuilder
- OS::TripleO::Services::Snmp
- OS::TripleO::Services::Timezone
description: A list of service resources (configured in the Heat
@ -715,9 +705,6 @@ resources:
RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
SwiftHashSuffix: {get_param: SwiftHashSuffix}
SwiftMinPartHours: {get_param: SwiftMinPartHours}
SwiftPartPower: {get_param: SwiftPartPower}
SwiftReplicas: { get_param: SwiftReplicas}
ServiceNetMap: {get_param: ServiceNetMap}
EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
@ -845,10 +832,7 @@ resources:
KeyName: {get_param: KeyName}
Flavor: {get_param: OvercloudSwiftStorageFlavor}
HashSuffix: {get_param: SwiftHashSuffix}
MinPartHours: {get_param: SwiftMinPartHours}
PartPower: {get_param: SwiftPartPower}
Image: {get_param: SwiftStorageImage}
Replicas: { get_param: SwiftReplicas}
UpdateIdentifier: {get_param: UpdateIdentifier}
ServiceNetMap: {get_param: ServiceNetMap}
Hostname:

View File

@ -29,7 +29,6 @@ resources:
list_join:
- ''
- - get_file: manifests/overcloud_controller_pacemaker.pp
- get_file: manifests/ringbuilder.pp
- {get_param: StepConfig}
outputs:

View File

@ -29,7 +29,6 @@ resources:
list_join:
- ''
- - get_file: manifests/overcloud_controller.pp
- get_file: manifests/ringbuilder.pp
- {get_param: StepConfig}
outputs:

View File

@ -250,22 +250,6 @@ parameters:
in the ring.
hidden: true
type: string
SwiftMinPartHours:
type: number
default: 1
description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
SwiftPartPower:
default: 10
description: Partition Power to use when building Swift rings
type: number
SwiftRingBuild:
default: true
description: Whether to manage Swift rings or not
type: boolean
SwiftReplicas:
type: number
default: 3
description: How many replicas to use in the swift rings.
UpgradeLevelNovaCompute:
type: string
description: Nova Compute upgrade level
@ -600,10 +584,6 @@ resources:
control_virtual_interface: {get_param: ControlVirtualInterface}
public_virtual_interface: {get_param: PublicVirtualInterface}
swift_hash_suffix: {get_param: SwiftHashSuffix}
swift_part_power: {get_param: SwiftPartPower}
swift_ring_build: {get_param: SwiftRingBuild}
swift_replicas: {get_param: SwiftReplicas}
swift_min_part_hours: {get_param: SwiftMinPartHours}
enable_package_install: {get_param: EnablePackageInstall}
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
@ -724,10 +704,6 @@ resources:
swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
tripleo::ringbuilder::part_power: {get_input: swift_part_power}
tripleo::ringbuilder::replicas: {get_input: swift_replicas}
tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
# Cinder
tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}

View File

@ -1,99 +0,0 @@
# 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.
define add_devices(
$swift_zones = '1'
){
# NOTE(dprince): Swift zones is not yet properly wired into the Heat
# templates. See: https://review.openstack.org/#/c/97758/3
# For now our regex supports the r1z1-192.0.2.6:%PORT%/d1 syntax or the
# newer r1z%<controller or SwiftStorage><N>%-192.0.2.6:%PORT%/d1 syntax.
$server_num_or_device = regsubst($name,'^r1z%+[A-Za-z]*([0-9]+)%+-(.*)$','\1')
if (is_integer($server_num_or_device)) {
$server_num = $server_num_or_device
} else {
$server_num = '1'
}
# Function to place server in its zone. Zone is calculated by
# server number in heat template modulo the number of zones + 1.
$zone = (($server_num%$swift_zones) + 1)
# add the rings
$base = regsubst($name,'^r1.*-(.*)$','\1')
$object = regsubst($base, '%PORT%', '6000')
ring_object_device { $object:
zone => '1',
weight => 100,
}
$container = regsubst($base, '%PORT%', '6001')
ring_container_device { $container:
zone => '1',
weight => 100,
}
$account = regsubst($base, '%PORT%', '6002')
ring_account_device { $account:
zone => '1',
weight => 100,
}
}
class tripleo::ringbuilder (
$swift_zones = '1',
$devices = '',
$build_ring = true,
$part_power,
$replicas,
$min_part_hours,
) {
validate_bool($build_ring)
if $build_ring {
$device_array = strip(split(rstrip($devices), ','))
# create local rings
swift::ringbuilder::create{ ['object', 'account', 'container']:
part_power => $part_power,
replicas => min(count($device_array), $replicas),
min_part_hours => $min_part_hours,
} ->
# add all other devices
add_devices {$device_array:
swift_zones => $swift_zones,
} ->
# rebalance
swift::ringbuilder::rebalance{ ['object', 'account', 'container']:
seed => 999,
}
Ring_object_device<| |> ~> Exec['rebalance_object']
Ring_object_device<| |> ~> Exec['rebalance_account']
Ring_object_device<| |> ~> Exec['rebalance_container']
}
}
if hiera('step') >= 2 {
# pre-install swift here so we can build rings
include ::swift
}
if hiera('step') >= 3 {
include ::tripleo::ringbuilder
}

View File

@ -0,0 +1,40 @@
heat_template_version: 2016-04-08
description: >
OpenStack Swift Ringbuilder
parameters:
EndpointMap:
default: {}
description: Mapping of service endpoint -> protocol. Typically set
via parameter_defaults in the resource registry.
type: json
SwiftMinPartHours:
type: number
default: 1
description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
SwiftPartPower:
default: 10
description: Partition Power to use when building Swift rings
type: number
SwiftRingBuild:
default: true
description: Whether to manage Swift rings or not
type: boolean
SwiftReplicas:
type: number
default: 3
description: How many replicas to use in the swift rings.
outputs:
role_data:
description: Role data for Swift Ringbuilder configuration.
value:
service_name: swift-ringbuilder
config_settings:
tripleo::profile::base::swift::ringbuilder::build_ring: {get_param: SwiftRingBuild}
tripleo::profile::base::swift::ringbuilder::replicas: {get_param: SwiftReplicas}
swift::ringbuilder::part_power: {get_param: SwiftPartPower}
swift::ringbuilder::min_part_hours: {get_param: SwiftMinPartHours}
step_config: |
include ::tripleo::profile::base::swift::ringbuilder

View File

@ -20,7 +20,7 @@ resources:
datafiles:
swift_devices_and_proxy:
mapped_data:
tripleo::ringbuilder::devices:
tripleo::profile::base::swift::ringbuilder::devices:
list_join:
- ", "
- - list_join:

View File

@ -44,7 +44,6 @@ resources:
list_join:
- ''
- - get_file: manifests/overcloud_object.pp
- get_file: manifests/ringbuilder.pp
- {get_param: [RoleData, step_config]}
StorageRingbuilderDeployment_Step2:

View File

@ -18,22 +18,6 @@ parameters:
default: default
description: Name of an existing Nova key pair to enable SSH access to the instances
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
RingBuild:
default: true
description: Whether to manage Swift rings or not
type: boolean
Replicas:
type: number
default: 3
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
@ -281,11 +265,7 @@ resources:
raw_data: {get_file: hieradata/object.yaml}
mapped_data: # data supplied directly to this deployment configuration, etc
swift::swift_hash_path_suffix: { get_input: swift_hash_suffix }
tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
tripleo::ringbuilder::part_power: { get_input: swift_part_power }
tripleo::ringbuilder::replicas: {get_input: swift_replicas }
swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
tripleo::ringbuilder::min_part_hours: { get_input: swift_min_part_hours }
snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
tripleo::packages::enable_install: {get_input: enable_package_install}
@ -304,10 +284,6 @@ resources:
snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
swift_hash_suffix: {get_param: HashSuffix}
swift_min_part_hours: {get_param: MinPartHours}
swift_ring_build: {get_param: RingBuild}
swift_part_power: {get_param: PartPower}
swift_replicas: { get_param: Replicas}
enable_package_install: {get_param: EnablePackageInstall}
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}