83b8bb7bfa
There are quite a few cases where it is useful to disable ring building on the nodes. For example: - using different weights, regions, and zones - replacing a node in an existing Swift cluster - adding a new node to an existing cluster - using storage policies and therefore multiple rings - using different nodes and disks for account, container and object servers This patch allows it to disable ring building. Rings need to be maintained manually then, and copied to all storage and proxy nodes within a cluster. This patch is similar to I01311ec3ca265b151f8740bf7dc57cdf0cf0df6f, except that it uses the current templates. Change-Id: I56978b15823dd6eaf4b6fd3440df2f895e89611a
423 lines
15 KiB
YAML
423 lines
15 KiB
YAML
heat_template_version: 2015-04-30
|
|
description: 'OpenStack swift storage node configured by Puppet'
|
|
parameters:
|
|
Flavor:
|
|
description: Flavor for Swift storage nodes to request when deploying.
|
|
type: string
|
|
constraints:
|
|
- custom_constraint: nova.flavor
|
|
HashSuffix:
|
|
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 Nova key pair 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
|
|
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
|
|
type: string
|
|
SnmpdReadonlyUserPassword:
|
|
description: The user password for SNMPd with readonly rights running on all Overcloud nodes
|
|
type: string
|
|
hidden: true
|
|
NtpServer:
|
|
default: ''
|
|
description: Comma-separated list of ntp servers
|
|
type: comma_delimited_list
|
|
EnablePackageInstall:
|
|
default: 'false'
|
|
description: Set to true to enable package installation via Puppet
|
|
type: boolean
|
|
UpdateIdentifier:
|
|
default: ''
|
|
type: string
|
|
description: >
|
|
Setting to a previously unused value during stack-update will trigger
|
|
package update on all nodes
|
|
ServiceNetMap:
|
|
default: {}
|
|
description: Mapping of service_name -> network name. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
TimeZone:
|
|
default: 'UTC'
|
|
description: The timezone to be set on Ceph nodes.
|
|
type: string
|
|
Hostname:
|
|
type: string
|
|
default: '' # Defaults to Heat created hostname
|
|
HostnameMap:
|
|
type: json
|
|
default: {}
|
|
description: Optional mapping to override hostnames
|
|
ExtraConfig:
|
|
default: {}
|
|
description: |
|
|
Additional hiera configuration to inject into the cluster. Note
|
|
that ObjectStorageExtraConfig takes precedence over ExtraConfig.
|
|
type: json
|
|
ObjectStorageExtraConfig:
|
|
default: {}
|
|
description: |
|
|
Role specific additional hiera configuration to inject into the cluster.
|
|
type: json
|
|
SwiftStorageIPs:
|
|
default: {}
|
|
type: json
|
|
NetworkDeploymentActions:
|
|
type: comma_delimited_list
|
|
description: >
|
|
Heat action when to apply network configuration changes
|
|
default: ['CREATE']
|
|
SoftwareConfigTransport:
|
|
default: POLL_SERVER_CFN
|
|
description: |
|
|
How the server should receive the metadata required for software configuration.
|
|
type: string
|
|
constraints:
|
|
- allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
|
|
CloudDomain:
|
|
default: ''
|
|
type: string
|
|
description: >
|
|
The DNS domain used for the hosts. This should match the dhcp_domain
|
|
configured in the Undercloud neutron. Defaults to localdomain.
|
|
ServerMetadata:
|
|
default: {}
|
|
description: >
|
|
Extra properties or metadata passed to Nova for the created nodes in
|
|
the overcloud. It's accessible via the Nova metadata API.
|
|
type: json
|
|
SchedulerHints:
|
|
type: json
|
|
description: Optional scheduler hints to pass to nova
|
|
default: {}
|
|
NodeIndex:
|
|
type: number
|
|
default: 0
|
|
|
|
resources:
|
|
|
|
SwiftStorage:
|
|
type: OS::Nova::Server
|
|
properties:
|
|
image: {get_param: Image}
|
|
flavor: {get_param: Flavor}
|
|
key_name: {get_param: KeyName}
|
|
networks:
|
|
- network: ctlplane
|
|
user_data_format: SOFTWARE_CONFIG
|
|
user_data: {get_resource: UserData}
|
|
name:
|
|
str_replace:
|
|
template: {get_param: Hostname}
|
|
params: {get_param: HostnameMap}
|
|
software_config_transport: {get_param: SoftwareConfigTransport}
|
|
metadata: {get_param: ServerMetadata}
|
|
scheduler_hints: {get_param: SchedulerHints}
|
|
|
|
# Combine the NodeAdminUserData and NodeUserData mime archives
|
|
UserData:
|
|
type: OS::Heat::MultipartMime
|
|
properties:
|
|
parts:
|
|
- config: {get_resource: NodeAdminUserData}
|
|
type: multipart
|
|
- config: {get_resource: NodeUserData}
|
|
type: multipart
|
|
|
|
# Creates the "heat-admin" user if configured via the environment
|
|
# Should return a OS::Heat::MultipartMime reference via OS::stack_id
|
|
NodeAdminUserData:
|
|
type: OS::TripleO::NodeAdminUserData
|
|
|
|
# For optional operator additional userdata
|
|
# Should return a OS::Heat::MultipartMime reference via OS::stack_id
|
|
NodeUserData:
|
|
type: OS::TripleO::NodeUserData
|
|
|
|
ExternalPort:
|
|
type: OS::TripleO::SwiftStorage::Ports::ExternalPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: SwiftStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
InternalApiPort:
|
|
type: OS::TripleO::SwiftStorage::Ports::InternalApiPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: SwiftStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
StoragePort:
|
|
type: OS::TripleO::SwiftStorage::Ports::StoragePort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: SwiftStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
StorageMgmtPort:
|
|
type: OS::TripleO::SwiftStorage::Ports::StorageMgmtPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: SwiftStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
TenantPort:
|
|
type: OS::TripleO::SwiftStorage::Ports::TenantPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: SwiftStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
ManagementPort:
|
|
type: OS::TripleO::SwiftStorage::Ports::ManagementPort
|
|
properties:
|
|
ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
|
|
IPPool: {get_param: SwiftStorageIPs}
|
|
NodeIndex: {get_param: NodeIndex}
|
|
|
|
NetworkConfig:
|
|
type: OS::TripleO::ObjectStorage::Net::SoftwareConfig
|
|
properties:
|
|
ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
|
|
ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
|
|
InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
|
|
StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
|
|
StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
|
|
TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
|
|
ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
|
|
|
|
NetIpMap:
|
|
type: OS::TripleO::Network::Ports::NetIpMap
|
|
properties:
|
|
ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
|
|
ExternalIp: {get_attr: [ExternalPort, ip_address]}
|
|
ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
|
|
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
|
|
InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
|
|
StorageIp: {get_attr: [StoragePort, ip_address]}
|
|
StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
|
|
StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
|
|
StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
|
|
TenantIp: {get_attr: [TenantPort, ip_address]}
|
|
TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
|
|
ManagementIp: {get_attr: [ManagementPort, ip_address]}
|
|
ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
|
|
|
|
NetworkDeployment:
|
|
type: OS::TripleO::SoftwareDeployment
|
|
properties:
|
|
name: NetworkDeployment
|
|
config: {get_resource: NetworkConfig}
|
|
server: {get_resource: SwiftStorage}
|
|
actions: {get_param: NetworkDeploymentActions}
|
|
|
|
SwiftStorageHieraConfig:
|
|
type: OS::Heat::StructuredConfig
|
|
properties:
|
|
group: os-apply-config
|
|
config:
|
|
hiera:
|
|
hierarchy:
|
|
- '"%{::uuid}"'
|
|
- heat_config_%{::deploy_config_name}
|
|
- object_extraconfig
|
|
- extraconfig
|
|
- object
|
|
- swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
|
|
- all_nodes # provided by allNodesConfig
|
|
- '"%{::osfamily}"'
|
|
- common
|
|
datafiles:
|
|
common:
|
|
raw_data: {get_file: hieradata/common.yaml}
|
|
object_extraconfig:
|
|
mapped_data: {get_param: ObjectStorageExtraConfig}
|
|
extraconfig:
|
|
mapped_data: {get_param: ExtraConfig}
|
|
object:
|
|
raw_data: {get_file: hieradata/object.yaml}
|
|
mapped_data: # data supplied directly to this deployment configuration, etc
|
|
swift::swift_hash_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}
|
|
swift_mount_check: {get_input: swift_mount_check }
|
|
tripleo::ringbuilder::min_part_hours: { get_input: swift_min_part_hours }
|
|
ntp::servers: {get_input: ntp_servers}
|
|
timezone::timezone: {get_input: timezone}
|
|
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}
|
|
tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
|
|
|
|
|
|
SwiftStorageHieraDeploy:
|
|
type: OS::Heat::StructuredDeployment
|
|
depends_on: NetworkDeployment
|
|
properties:
|
|
name: SwiftStorageHieraDeploy
|
|
server: {get_resource: SwiftStorage}
|
|
config: {get_resource: SwiftStorageHieraConfig}
|
|
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_ring_build: {get_param: RingBuild}
|
|
swift_part_power: {get_param: PartPower}
|
|
swift_replicas: { get_param: Replicas}
|
|
ntp_servers: {get_param: NtpServer}
|
|
timezone: {get_param: TimeZone}
|
|
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]}]}
|
|
|
|
# Resource for site-specific injection of root certificate
|
|
NodeTLSCAData:
|
|
depends_on: SwiftStorageHieraDeploy
|
|
type: OS::TripleO::NodeTLSCAData
|
|
properties:
|
|
server: {get_resource: SwiftStorage}
|
|
|
|
# Hook for site-specific additional pre-deployment config,
|
|
# applying to all nodes, e.g node registration/unregistration
|
|
NodeExtraConfig:
|
|
depends_on: NodeTLSCAData
|
|
type: OS::TripleO::NodeExtraConfig
|
|
properties:
|
|
server: {get_resource: SwiftStorage}
|
|
|
|
UpdateConfig:
|
|
type: OS::TripleO::Tasks::PackageUpdate
|
|
|
|
UpdateDeployment:
|
|
type: OS::Heat::SoftwareDeployment
|
|
properties:
|
|
config: {get_resource: UpdateConfig}
|
|
server: {get_resource: SwiftStorage}
|
|
input_values:
|
|
update_identifier:
|
|
get_param: UpdateIdentifier
|
|
|
|
outputs:
|
|
hosts_entry:
|
|
value:
|
|
str_replace:
|
|
template: |
|
|
PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
|
|
EXTERNALIP EXTERNALHOST
|
|
INTERNAL_APIIP INTERNAL_APIHOST
|
|
STORAGEIP STORAGEHOST
|
|
STORAGE_MGMTIP STORAGE_MGMTHOST
|
|
TENANTIP TENANTHOST
|
|
MANAGEMENTIP MANAGEMENTHOST
|
|
params:
|
|
PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
|
|
DOMAIN: {get_param: CloudDomain}
|
|
PRIMARYHOST: {get_attr: [SwiftStorage, name]}
|
|
EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
|
|
EXTERNALHOST:
|
|
list_join:
|
|
- '-'
|
|
- - {get_attr: [SwiftStorage, name]}
|
|
- external
|
|
INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
|
|
INTERNAL_APIHOST:
|
|
list_join:
|
|
- '-'
|
|
- - {get_attr: [SwiftStorage, name]}
|
|
- internalapi
|
|
STORAGEIP: {get_attr: [StoragePort, ip_address]}
|
|
STORAGEHOST:
|
|
list_join:
|
|
- '-'
|
|
- - {get_attr: [SwiftStorage, name]}
|
|
- storage
|
|
STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
|
|
STORAGE_MGMTHOST:
|
|
list_join:
|
|
- '-'
|
|
- - {get_attr: [SwiftStorage, name]}
|
|
- storagemgmt
|
|
TENANTIP: {get_attr: [TenantPort, ip_address]}
|
|
TENANTHOST:
|
|
list_join:
|
|
- '-'
|
|
- - {get_attr: [SwiftStorage, name]}
|
|
- tenant
|
|
MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
|
|
MANAGEMENTHOST:
|
|
list_join:
|
|
- '-'
|
|
- - {get_attr: [SwiftStorage, name]}
|
|
- management
|
|
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: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
|
|
external_ip_address:
|
|
description: IP address of the server in the external network
|
|
value: {get_attr: [ExternalPort, ip_address]}
|
|
internal_api_ip_address:
|
|
description: IP address of the server in the internal_api network
|
|
value: {get_attr: [InternalApiPort, ip_address]}
|
|
storage_ip_address:
|
|
description: IP address of the server in the storage network
|
|
value: {get_attr: [StoragePort, ip_address]}
|
|
storage_mgmt_ip_address:
|
|
description: IP address of the server in the storage_mgmt network
|
|
value: {get_attr: [StorageMgmtPort, ip_address]}
|
|
tenant_ip_address:
|
|
description: IP address of the server in the tenant network
|
|
value: {get_attr: [TenantPort, ip_address]}
|
|
management_ip_address:
|
|
description: IP address of the server in the management network
|
|
value: {get_attr: [ManagementPort, ip_address]}
|
|
config_identifier:
|
|
description: identifier which changes if the node configuration may need re-applying
|
|
value:
|
|
list_join:
|
|
- ','
|
|
- - {get_attr: [SwiftStorageHieraDeploy, deploy_stdout]}
|
|
- {get_attr: [NodeTLSCAData, deploy_stdout]}
|
|
- {get_param: UpdateIdentifier}
|