Convert SwiftDevicesAndProxyConfig to composable format

Make use of the new composable per-service node_ips lists by
adding a ServiceNetMap entry for SwiftStorage, then
pass the data to construct the raw device list into puppet-tripleo
instead of mangling it in t-h-t inside the role templates.

This will allow running swift storage services on nodes other than
the Controller and ObjectStorage roles, and is required to enable
custom roles.

Depends-On: I11deed1df712ecccf85d36a75b3bd2e9d226af36
Change-Id: I1bf5f8a9d34b1a5d64ab8656b386226b54ec1a27
Partially-Implements: blueprint custom-roles
This commit is contained in:
Steven Hardy 2016-09-01 19:24:05 +01:00 committed by Emilien Macchi
parent 158636bf93
commit bedf3dc546
8 changed files with 23 additions and 114 deletions

View File

@ -33,7 +33,7 @@ parameters:
NovaApiNetwork: internal_api
NovaMetadataNetwork: internal_api
NovaVncProxyNetwork: internal_api
SwiftMgmtNetwork: storage_mgmt
SwiftStorageNetwork: storage_mgmt
SwiftProxyNetwork: storage
SaharaApiNetwork: internal_api
HorizonNetwork: internal_api
@ -61,6 +61,7 @@ parameters:
MongoDbNetwork: MongodbNetwork
RabbitMqNetwork: RabbitmqNetwork
CephPublicNetwork: CephMonNetwork
SwiftMgmtNetwork: SwiftStorageNetwork
description: Mapping older deprecated service names, intended for
internal use only, this will be removed in future.
type: json

View File

@ -17,7 +17,6 @@ resource_registry:
OS::TripleO::ObjectStoragePostDeployment: puppet/swift-storage-post.yaml
OS::TripleO::BlockStoragePostDeployment: puppet/cinder-storage-post.yaml
OS::TripleO::CephStoragePostDeployment: puppet/ceph-storage-post.yaml
OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig: puppet/swift-devices-and-proxy-config.yaml
OS::TripleO::AllNodes::SoftwareConfig: puppet/all-nodes-config.yaml
OS::TripleO::DefaultPasswords: default_passwords.yaml

View File

@ -818,26 +818,6 @@ resources:
StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
# No tenant or management VIP required
ControllerSwiftDeployment:
type: OS::Heat::StructuredDeployments
properties:
name: ControllerSwiftDeployment
config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
servers: {get_attr: [Controller, attributes, nova_server_resource]}
ObjectStorageSwiftDeployment:
type: OS::Heat::StructuredDeployments
properties:
name: ObjectStorageSwiftDeployment
config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
SwiftDevicesAndProxyConfig:
type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
properties:
controller_swift_devices: {get_attr: [Controller, swift_device]}
object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
ControllerAllNodesDeployment:
type: OS::Heat::StructuredDeployments
properties:
@ -975,7 +955,7 @@ resources:
# Nested stack deployment runs after all other controller deployments
ControllerNodesPostDeployment:
type: OS::TripleO::ControllerPostDeployment
depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment]
depends_on: [ControllerAllNodesDeployment]
properties:
servers: {get_attr: [Controller, attributes, nova_server_resource]}
RoleData: {get_attr: [ControllerServiceChain, role_data]}
@ -989,7 +969,7 @@ resources:
ObjectStorageNodesPostDeployment:
type: OS::TripleO::ObjectStoragePostDeployment
depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
depends_on: [ObjectStorageAllNodesDeployment]
properties:
servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}

View File

@ -62,10 +62,6 @@ parameters:
default: nic1
description: What interface to bridge onto br-ex for network nodes.
type: string
SwiftRawDisks:
default: {}
description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
type: json
ServiceNetMap:
default: {}
description: Mapping of service_name -> network name. Typically set
@ -313,8 +309,7 @@ resources:
- service_configs
- service_names
- controller
- swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
- bootstrap_node # provided by allNodesConfig
- bootstrap_node # provided by BootstrapNodeConfig
- all_nodes # provided by allNodesConfig
- vip_data # provided by allNodesConfig
- '"%{::osfamily}"'
@ -465,27 +460,6 @@ outputs:
description: Heat resource handle for the Nova compute server
value:
{get_resource: Controller}
swift_device:
description: Swift device formatted for swift-ring-builder
value:
str_replace:
template:
list_join:
- ','
- ['r1z1-IP:%PORT%/d1']
- repeat:
template: 'r1z1-IP:%PORT%/DEVICE'
for_each:
DEVICE: {get_param: SwiftRawDisks}
params:
IP:
get_attr:
- NetIpMap
- net_ip_map
- str_replace:
template: "NETWORK_uri"
params:
NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
tls_key_modulus_md5:
description: MD5 checksum of the TLS Key Modulus
value: {get_attr: [NodeTLSData, key_modulus_md5]}

View File

@ -1,4 +1,4 @@
heat_template_version: 2016-04-08
heat_template_version: 2016-10-14
description: >
OpenStack Swift Ringbuilder
@ -34,6 +34,11 @@ parameters:
type: number
default: 3
description: How many replicas to use in the swift rings.
SwiftRawDisks:
default: {}
description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
type: json
outputs:
role_data:
@ -43,6 +48,17 @@ outputs:
config_settings:
tripleo::profile::base::swift::ringbuilder::build_ring: {get_param: SwiftRingBuild}
tripleo::profile::base::swift::ringbuilder::replicas: {get_param: SwiftReplicas}
tripleo::profile::base::swift::ringbuilder::raw_disk_prefix: 'r1z1-'
tripleo::profile::base::swift::ringbuilder::raw_disks:
yaql:
expression: $.data.raw_disk_lists.flatten()
data:
raw_disk_lists:
- [':%PORT%/d1']
- repeat:
template: ':%PORT%/DEVICE'
for_each:
DEVICE: {get_param: SwiftRawDisks}
swift::ringbuilder::part_power: {get_param: SwiftPartPower}
swift::ringbuilder::min_part_hours: {get_param: SwiftMinPartHours}
step_config: |

View File

@ -87,6 +87,6 @@ outputs:
- healthcheck
- account-server
swift::storage::disks: {get_param: SwiftRawDisks}
swift::storage::all::storage_local_net_ip: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
swift::storage::all::storage_local_net_ip: {get_param: [ServiceNetMap, SwiftStorageNetwork]}
step_config: |
include ::tripleo::profile::base::swift::storage

View File

@ -1,35 +0,0 @@
heat_template_version: 2015-04-30
description: 'Swift Devices and Proxy Config for Puppet'
parameters:
controller_swift_devices:
type: comma_delimited_list
object_store_swift_devices:
type: comma_delimited_list
resources:
SwiftDevicesAndProxyConfigImpl:
type: OS::Heat::StructuredConfig
properties:
group: os-apply-config
config:
hiera:
datafiles:
swift_devices_and_proxy:
mapped_data:
tripleo::profile::base::swift::ringbuilder::devices:
list_join:
- ", "
- - list_join:
- ", "
- {get_param: controller_swift_devices}
- list_join:
- ", "
- {get_param: object_store_swift_devices}
outputs:
config_id:
description: The ID of the SwiftDevicesAndProxyConfigImpl resource.
value:
{get_resource: SwiftDevicesAndProxyConfigImpl}

View File

@ -91,10 +91,6 @@ parameters:
type: string
description: Command which will be run whenever configuration data changes
default: os-refresh-config --timeout 14400
SwiftRawDisks:
default: {}
description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
type: json
resources:
@ -237,7 +233,6 @@ resources:
- service_names
- service_configs
- object
- swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
- bootstrap_node # provided by allNodesConfig
- all_nodes # provided by allNodesConfig
- vip_data # provided by allNodesConfig
@ -361,27 +356,6 @@ outputs:
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:
list_join:
- ','
- ['r1z1-IP:%PORT%/d1']
- repeat:
template: 'r1z1-IP:%PORT%/DEVICE'
for_each:
DEVICE: {get_param: SwiftRawDisks}
params:
IP:
get_attr:
- NetIpMap
- net_ip_map
- str_replace:
template: "NETWORK_uri"
params:
NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
external_ip_address:
description: IP address of the server in the external network
value: {get_attr: [ExternalPort, ip_address]}