[openstack-tripleo-heat-templates] Updated patches from master-patches
slagle
slagle at fedoraproject.org
Mon Sep 29 20:28:34 UTC 2014
commit 39caf8bc4ff1f18847fb3edcb9c21085e707ecc1
Author: James Slagle <jslagle at redhat.com>
Date: Mon Sep 29 16:28:15 2014 -0400
Updated patches from master-patches
...and-controller-templates-without-merge.py.patch | 2067 ++++++++++++++++++++
...erted-version-of-block-and-object-storage.patch | 441 +++++
openstack-tripleo-heat-templates.spec | 6 +
3 files changed, 2514 insertions(+), 0 deletions(-)
---
diff --git a/0001-Compute-and-controller-templates-without-merge.py.patch b/0001-Compute-and-controller-templates-without-merge.py.patch
new file mode 100644
index 0000000..041c568
--- /dev/null
+++ b/0001-Compute-and-controller-templates-without-merge.py.patch
@@ -0,0 +1,2067 @@
+From 963968afde9b14ba8cd67ebe89437012536e732c Mon Sep 17 00:00:00 2001
+From: Tomas Sedovic <tsedovic at redhat.com>
+Date: Wed, 6 Aug 2014 13:24:10 +0200
+Subject: [PATCH] Compute and controller templates without merge.py
+
+This provides three templates: overcloud.yaml, compute.yaml and
+controller.yaml. These can be used in combination with
+overcloud-resource-registry.yaml to deploy the overcloud on their own --
+without having to do any pre-processing (via merge.py).
+
+To test these you have to add the resource registry environment (in
+addition to the existing `-e` option) to the Heat call in
+devtest_overcloud.sh (line 374):
+
+ heat $HEAT_OP -e $TRIPLEO_ROOT/overcloud-env.json \
+ -e "$TRIPLEO_ROOT/tripleo-heat-templates/overcloud-resource-registry.yaml" \
+ -t 360 \
+ -f $TRIPLEO_ROOT/tripleo-heat-templates/overcloud.yaml \
+ -P "ExtraConfig=${OVERCLOUD_EXTRA_CONFIG}" \
+ $STACKNAME
+
+The `make overcloud.yaml` call can stay (we've turn the overcloud
+target in Makefile to no-op and removed it from .gitignore) and the
+inputs and outputs of the template remain the same.
+
+This means that the existing overcloud Heat environment
+($TRIPLE_ROOT/overcloud-env.json) should continue to work. Scaling is
+now being controlled by the `ControllerCount` and `ComputeCount`
+template parameters, though.
+
+NOTE: the changes here depend on a fairly recent Heat build (commit
+e5f285f6cb from ~7th September, 2014). In other words, this requires
+Juno Heat.
+
+Also, passing more than one environment file to Heat requires
+python-heatclient version 0.2.11.
+
+Change-Id: I687a00c7dc164ba044f9f2dfca96a02401427855
+---
+ .gitignore | 1 -
+ Makefile | 10 +-
+ compute.yaml | 403 +++++++++++++++++++
+ controller.yaml | 817 +++++++++++++++++++++++++++++++--------
+ overcloud-resource-registry.yaml | 3 +
+ overcloud.yaml | 674 ++++++++++++++++++++++++++++++++
+ 6 files changed, 1741 insertions(+), 167 deletions(-)
+ create mode 100644 compute.yaml
+ create mode 100644 overcloud-resource-registry.yaml
+ create mode 100644 overcloud.yaml
+
+diff --git a/.gitignore b/.gitignore
+index 3035c9e..f5a4f5b 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -1,5 +1,4 @@
+ # Built via Makefile
+-overcloud.yaml
+ overcloud-with-block-storage.yaml
+ overcloud-with-block-storage-nfs.yaml
+ undercloud-bm.yaml
+diff --git a/Makefile b/Makefile
+index 349a077..c28a294 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,5 +1,4 @@
+ generated_templates = \
+- overcloud.yaml \
+ overcloud-with-block-storage-nfs.yaml \
+ undercloud-vm.yaml \
+ undercloud-bm.yaml \
+@@ -15,11 +14,8 @@ validate-all: $(VALIDATE)
+ $(VALIDATE):
+ heat template-validate -f $(subst validate-,,$@)
+
+-# set CONTROLEXTRA to overcloud-vlan-port.yaml to activate the VLAN
+-# auto-assignment from Neutron.
+-overcloud.yaml: overcloud-source.yaml block-storage.yaml swift-deploy.yaml swift-source.yaml swift-storage-source.yaml ssl-source.yaml nova-compute-config.yaml $(overcloud_source_deps)
+- python ./tripleo_heat_merge/merge.py --hot --scale NovaCompute=$${COMPUTESCALE:-'1'} --scale controller=$${CONTROLSCALE:-'1'} --scale SwiftStorage=$${SWIFTSTORAGESCALE:-'0'} --scale BlockStorage=$${BLOCKSTORAGESCALE:-'0'} overcloud-source.yaml block-storage.yaml swift-source.yaml swift-storage-source.yaml ssl-source.yaml swift-deploy.yaml nova-compute-config.yaml ${CONTROLEXTRA} > $@.tmp
+- mv $@.tmp $@
++overcloud.yaml:
++ @echo "Warning: overcloud.yaml doesn't rely on merge.py anymore. This is a no-op."
+
+ overcloud-with-block-storage-nfs.yaml: overcloud-source.yaml block-storage-nfs.yaml nfs-server-source.yaml swift-source.yaml swift-storage-source.yaml ssl-source.yaml $(overcloud_source_deps)
+ # $^ won't work here because we want to list nova-compute-instance.yaml as
+@@ -51,4 +47,4 @@ test:
+ clean:
+ rm -f $(generated_templates)
+
+-.PHONY: clean overcloud.yaml check
++.PHONY: clean check
+diff --git a/compute.yaml b/compute.yaml
+new file mode 100644
+index 0000000..98f99ed
+--- /dev/null
++++ b/compute.yaml
+@@ -0,0 +1,403 @@
++heat_template_version: 2014-10-16
++
++description: >
++ OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.
++
++parameters:
++ AdminPassword:
++ default: unset
++ description: The password for the keystone admin account, used for monitoring, querying neutron etc.
++ type: string
++ hidden: true
++ CeilometerComputeAgent:
++ description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
++ type: string
++ default: ''
++ constraints:
++ - allowed_values: ['', Present]
++ CeilometerDSN:
++ type: string
++ CeilometerMeteringSecret:
++ default: unset
++ description: Secret shared by the ceilometer services.
++ type: string
++ hidden: true
++ CeilometerPassword:
++ default: unset
++ description: The password for the ceilometer service account.
++ type: string
++ hidden: true
++ Debug:
++ default: ''
++ description: Set to True to enable debugging on all services.
++ type: string
++ ExtraConfig:
++ default: {}
++ description: |
++ Additional configuration to inject into the cluster. The JSON should have
++ the following structure:
++ {"FILEKEY":
++ {"config":
++ [{"section": "SECTIONNAME",
++ "values":
++ [{"option": "OPTIONNAME",
++ "value": "VALUENAME"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ For instance:
++ {"nova":
++ {"config":
++ [{"section": "default",
++ "values":
++ [{"option": "force_config_drive",
++ "value": "always"
++ }
++ ]
++ },
++ {"section": "cells",
++ "values":
++ [{"option": "driver",
++ "value": "nova.cells.rpc_driver.CellsRPCDriver"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ type: json
++ Flavor:
++ description: Flavor for the nova compute node
++ type: string
++ default: baremetal
++ GlanceHost:
++ type: string
++ default: '' # Has to be here because of the ignored empty value bug
++ GlancePort:
++ default: "9292"
++ description: Glance port.
++ type: string
++ GlanceProtocol:
++ default: http
++ description: Protocol to use when connecting to glance, set to https for SSL.
++ type: string
++ Image:
++ type: string
++ default: overcloud-compute
++ ImageUpdatePolicy:
++ default: 'REBUILD_PRESERVE_EPHEMERAL'
++ description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
++ type: string
++ KeyName:
++ description: Name of an existing EC2 KeyPair to enable SSH access to the instances
++ type: string
++ default: default
++ KeystoneHost:
++ type: string
++ default: ''
++ LiveUpdateComputeImage:
++ type: string
++ description: The image ID for live-updates to the overcloud compute nodes.
++ default: ''
++ LiveUpdateHost:
++ type: string
++ description: The IP address for the undercloud Glance API.
++ default: ''
++ LiveUpdateUserName:
++ type: string
++ description: The live-update username for the undercloud Glance API.
++ default: ''
++ LiveUpdatePassword:
++ type: string
++ default: ''
++ description: The live-update password for the undercloud Glance API.
++ hidden: true
++ LiveUpdateTenantName:
++ type: string
++ description: The live-update tenant name for the undercloud Glance API.
++ default: ''
++ NeutronBridgeMappings:
++ description: >
++ The OVS logical->physical bridge mappings to use. See the Neutron
++ documentation for details. Defaults to mapping br-ex - the external
++ bridge on hosts - to a physical name 'datacentre' which can be used
++ to create provider networks (and we use this for the default floating
++ network) - if changing this either use different post-install network
++ scripts or be sure to keep 'datacentre' as a mapping network name.
++ type: string
++ default: ""
++ NeutronDSN:
++ type: string
++ NeutronEnableTunnelling:
++ type: string
++ default: "True"
++ NeutronFlatNetworks:
++ type: string
++ default: ''
++ description: >
++ If set, flat networks to configure in neutron plugins. Defaults to
++ 'datacentre' to permit external network creation.
++ NeutronHost:
++ type: string
++ default: '' # Has to be here because of the ignored empty value bug
++ NeutronNetworkType:
++ type: string
++ description: The tenant network type for Neutron, either gre or vxlan.
++ default: 'gre'
++ NeutronNetworkVLANRanges:
++ default: 'datacentre'
++ description: >
++ The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
++ Neutron documentation for permitted values. Defaults to permitting any
++ VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
++ type: string
++ NeutronPassword:
++ default: unset
++ description: The password for the neutron service account, used by neutron agents.
++ type: string
++ hidden: true
++ NeutronPhysicalBridge:
++ default: ''
++ description: An OVS bridge to create for accessing external networks.
++ type: string
++ NeutronPublicInterface:
++ default: ''
++ description: A port to add to the NeutronPhysicalBridge.
++ type: string
++ NeutronTunnelTypes:
++ type: string
++ description: |
++ The tunnel types for the Neutron tenant network. To specify multiple
++ values, use a comma separated string, like so: 'gre,vxlan'
++ default: 'gre'
++ NovaApiHost:
++ type: string
++ default: '' # Has to be here because of the ignored empty value bug
++ NovaComputeDriver:
++ type: string
++ default: libvirt.LibvirtDriver
++ NovaComputeExtraConfig:
++ default: {}
++ description: |
++ NovaCompute specific configuration to inject into the cluster. Same
++ structure as ExtraConfig.
++ type: json
++ NovaComputeLibvirtType:
++ type: string
++ default: ''
++ NovaDSN:
++ type: string
++ NovaPassword:
++ default: unset
++ description: The password for the nova service account, used by nova-api.
++ type: string
++ hidden: true
++ NovaPublicIP:
++ type: string
++ default: '' # Has to be here because of the ignored empty value bug
++ NtpServer:
++ type: string
++ default: ''
++ RabbitHost:
++ type: string
++ default: '' # Has to be here because of the ignored empty value bug
++ RabbitUserName:
++ default: guest
++ description: The username for RabbitMQ
++ type: string
++ RabbitPassword:
++ default: guest
++ description: The password for RabbitMQ
++ type: string
++ hidden: true
++ 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:
++
++ NovaCompute:
++ type: OS::Nova::Server
++ properties:
++ image:
++ {get_param: Image}
++ image_update_policy:
++ get_param: ImageUpdatePolicy
++ flavor: {get_param: Flavor}
++ key_name: {get_param: KeyName}
++ networks:
++ - network: ctlplane
++ user_data_format: SOFTWARE_CONFIG
++
++ NovaComputeConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config:
++ nova:
++ compute_driver: { get_input: nova_compute_driver }
++ compute_libvirt_type: { get_input: nova_compute_libvirt_type }
++ db: {get_input: nova_dsn}
++ debug: {get_param: Debug}
++ host: {get_input: nova_api_host}
++ public_ip: {get_input: nova_public_ip}
++ service-password: {get_input: nova_password}
++ ceilometer:
++ db: {get_input: ceilometer_dsn}
++ debug: {get_param: Debug}
++ metering_secret: {get_input: ceilometer_metering_secret}
++ service-password: {get_input: ceilometer_password}
++ compute_agent: {get_input: ceilometer_compute_agent}
++ snmpd:
++ export_MIB: UCD-SNMP-MIB
++ readonly_user_name: {get_input: snmpd_readonly_user_name}
++ readonly_user_password: {get_input: snmpd_readonly_user_password}
++ glance:
++ debug: {get_param: Debug}
++ host: {get_input: glance_host}
++ port: {get_input: glance_port}
++ protocol: {get_input: glance_protocol}
++ keystone:
++ debug: {get_param: Debug}
++ host: {get_input: keystone_host}
++ neutron:
++ debug: {get_param: Debug}
++ flat-networks: {get_input: neutron_flat_networks}
++ host: {get_input: neutron_host}
++ ovs_db: {get_input: neutron_dsn}
++ ovs:
++ local_ip: {get_input: neutron_local_ip}
++ tenant_network_type: {get_input: neutron_tenant_network_type}
++ tunnel_types: {get_input: neutron_tunnel_types}
++ network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
++ bridge_mappings: {get_input: neutron_bridge_mappings}
++ enable_tunneling: {get_input: neutron_enable_tunneling}
++ physical_bridge: {get_input: neutron_physical_bridge}
++ public_interface: {get_input: neutron_public_interface}
++ service-password: {get_input: neutron_password}
++ admin-password: {get_input: admin_password}
++ rabbit:
++ host: {get_input: rabbit_host}
++ username: {get_input: rabbit_username}
++ password: {get_input: rabbit_password}
++ live-update:
++ host: {get_input: live_update_host}
++ username: {get_input: live_update_username}
++ password: {get_input: live_update_password}
++ tenant-name: {get_input: live_update_tenant_name}
++ base_image_id: {get_input: nova_image}
++ live_update_image_id: {get_input: live_update_compute_image}
++ ntp:
++ servers:
++ - {server: {get_input: ntp_server}, fudge: "stratum 0"}
++
++ NovaComputeDeployment:
++ #depends_on: [controller0AllNodes]
++ type: OS::Heat::StructuredDeployment
++ properties:
++ signal_transport: NO_SIGNAL
++ config: {get_resource: NovaComputeConfig}
++ server: {get_resource: NovaCompute}
++ input_values:
++ nova_compute_driver: {get_param: NovaComputeDriver}
++ nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
++ nova_dsn: {get_param: NovaDSN}
++ nova_public_ip: {get_param: NovaPublicIP}
++ nova_api_host: {get_param: NovaApiHost}
++ nova_password: {get_param: NovaPassword}
++ ceilometer_dsn: {get_param: CeilometerDSN}
++ ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
++ ceilometer_password: {get_param: CeilometerPassword}
++ ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
++ snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
++ snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
++ glance_host: {get_param: GlanceHost}
++ glance_port: {get_param: GlancePort}
++ glance_protocol: {get_param: GlanceProtocol}
++ keystone_host: {get_param: KeystoneHost}
++ neutron_flat_networks: {get_param: NeutronFlatNetworks}
++ neutron_host: {get_param: NeutronHost}
++ neutron_dsn: {get_param: NeutronDSN}
++ neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
++ neutron_tenant_network_type: {get_param: NeutronNetworkType}
++ neutron_tunnel_types: {get_param: NeutronTunnelTypes}
++ neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
++ neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
++ neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
++ neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
++ neutron_public_interface: {get_param: NeutronPublicInterface}
++ neutron_password: {get_param: NeutronPassword}
++ admin_password: {get_param: AdminPassword}
++ rabbit_host: {get_param: RabbitHost}
++ rabbit_username: {get_param: RabbitUserName}
++ rabbit_password: {get_param: RabbitPassword}
++ live_update_host: {get_param: LiveUpdateHost}
++ live_update_username: {get_param: LiveUpdateUserName}
++ live_update_password: {get_param: LiveUpdatePassword}
++ live_update_tenant_name: {get_param: LiveUpdateTenantName}
++ nova_image: {get_param: Image}
++ live_update_image_id: {get_param: LiveUpdateComputeImage}
++ ntp_server: {get_param: NtpServer}
++
++ NovaComputePassthrough:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config: {get_input: passthrough_config}
++
++ NovaComputePassthroughSpecific:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config: {get_input: passthrough_config_specific}
++
++ NovaComputePassthroughDeployment:
++ depends_on: [NovaComputeDeployment]
++ type: OS::Heat::StructuredDeployment
++ properties:
++ config: {get_resource: NovaComputePassthrough}
++ server: {get_resource: NovaCompute}
++ signal_transport: NO_SIGNAL
++ input_values:
++ passthrough_config: {get_param: ExtraConfig}
++
++ NovaComputePassthroughDeploymentSpecific:
++ depends_on: [NovaComputePassthroughDeployment]
++ type: OS::Heat::StructuredDeployment
++ properties:
++ config: {get_resource: NovaComputePassthroughSpecific}
++ server: {get_resource: NovaCompute}
++ signal_transport: NO_SIGNAL
++ input_values:
++ passthrough_config_specific: {get_param: NovaComputeExtraConfig}
++
++outputs:
++ ip_address:
++ description: IP address of the server in the ctlplane network
++ value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
++ hostname:
++ description: Hostname of the server
++ value: {get_attr: [NovaCompute, show, name]}
++ hosts_entry:
++ description: >
++ Server's IP address and hostname in the /etc/hosts format
++ value:
++ str_replace:
++ template: "IP HOST HOST.novalocal"
++ params:
++ IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
++ HOST: {get_attr: [NovaCompute, name]}
++ nova_server_resource:
++ description: Heat resource handle for the Nova compute server
++ value:
++ {get_resource: NovaCompute}
+diff --git a/controller.yaml b/controller.yaml
+index 8aac819..8be40e3 100644
+--- a/controller.yaml
++++ b/controller.yaml
+@@ -1,36 +1,102 @@
+-description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
+- server,Dedicated RabbitMQ Server
+-heat_template_version: 2013-05-23
++heat_template_version: 2014-10-16
++
++description: >
++ OpenStack control plane node. Can be wrapped in a ResourceGroup for scaling.
++
+ parameters:
++ AdminPassword:
++ default: unset
++ description: The password for the keystone admin account, used for monitoring, querying neutron etc.
++ type: string
++ hidden: true
+ AdminToken:
++ default: unset
++ description: The keystone auth secret.
+ type: string
+- BootstrapDumpPassword:
+- default: ''
+- description: Password to use for mysqldump from Bootstrap Host
++ hidden: true
++ CeilometerMeteringSecret:
++ default: unset
++ description: Secret shared by the ceilometer services.
+ type: string
+ hidden: true
+- BootstrapHost:
+- default: ''
+- description: Load mysqldump from this Host
++ CeilometerPassword:
++ default: unset
++ description: The password for the ceilometer service account.
+ type: string
+- BootstrapRootPassword:
+- default: ''
+- description: Root password for localhost access after bootstrap
++ hidden: true
++ CinderISCSIHelper:
++ default: tgtadm
++ description: The iSCSI helper to use with cinder.
++ type: string
++ CinderLVMLoopDeviceSize:
++ default: 5000
++ description: The size of the loopback file used by the cinder LVM driver.
++ type: number
++ CinderPassword:
++ default: unset
++ description: The password for the cinder service account, used by cinder-api.
+ type: string
+ hidden: true
+- BootstrapSlavePassword:
++ CloudName:
+ default: ''
+- description: Password to use with BootstrapSlaveUser
++ description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
+ type: string
+- hidden: true
+- BootstrapSlaveUser:
++ controllerExtraConfig:
++ default: {}
++ description: |
++ Controller specific configuration to inject into the cluster. Same
++ structure as ExtraConfig.
++ type: json
++ ControlVirtualInterface:
++ default: 'br-ex'
++ description: Interface where virtual ip will be assigned.
++ type: string
++ Debug:
+ default: ''
+- description: User to use for replication from bootstrap host
++ description: Set to True to enable debugging on all services.
+ type: string
+- GlanceDBPassword:
+- description: Password for connecting to glance database
++ ExtraConfig:
++ default: {}
++ description: |
++ Additional configuration to inject into the cluster. The JSON should have
++ the following structure:
++ {"FILEKEY":
++ {"config":
++ [{"section": "SECTIONNAME",
++ "values":
++ [{"option": "OPTIONNAME",
++ "value": "VALUENAME"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ For instance:
++ {"nova":
++ {"config":
++ [{"section": "default",
++ "values":
++ [{"option": "compute_manager",
++ "value": "ironic.nova.compute.manager.ClusterComputeManager"
++ }
++ ]
++ },
++ {"section": "cells",
++ "values":
++ [{"option": "driver",
++ "value": "nova.cells.rpc_driver.CellsRPCDriver"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ type: json
++ Flavor:
++ default: baremetal
++ description: Flavor for control nodes to request when deploying.
+ type: string
+- hidden: true
+ GlanceNotifierStrategy:
+ description: Strategy to use for Glance notification queue
+ type: string
+@@ -39,179 +105,612 @@ parameters:
+ description: The filepath of the file to use for logging messages from Glance.
+ type: string
+ default: ''
+- HeatDBPassword:
+- description: Password for accessing Heat database.
++ GlancePassword:
++ default: unset
++ description: The password for the glance service account, used by the glance services.
+ type: string
+ hidden: true
+- InstanceType:
+- default: baremetal
+- description: Use this flavor
++ GlancePort:
++ default: "9292"
++ description: Glance port.
++ type: string
++ GlanceProtocol:
++ default: http
++ description: Protocol to use when connecting to glance, set to https for SSL.
++ type: string
++ HeatPassword:
++ default: unset
++ description: The password for the Heat service account, used by the Heat services.
++ type: string
++ hidden: true
++ HeatStackDomainAdminPassword:
++ description: Password for heat_domain_admin user.
++ type: string
++ default: ''
++ hidden: true
++ Image:
++ type: string
++ default: overcloud-control
++ ImageUpdatePolicy:
++ default: 'REBUILD_PRESERVE_EPHEMERAL'
++ description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
+ type: string
+ KeyName:
+ default: default
+ description: Name of an existing EC2 KeyPair to enable SSH access to the instances
+ type: string
+- KeystoneDBPassword:
+- description: Password for connecting to keystone
++ KeystoneCACertificate:
++ default: ''
++ description: Keystone self-signed certificate authority certificate.
++ type: string
++ KeystoneSigningCertificate:
++ default: ''
++ description: Keystone certificate for verifying token validity.
++ type: string
++ KeystoneSigningKey:
++ default: ''
++ description: Keystone key for signing tokens.
+ type: string
+ hidden: true
+- NovaDBPassword:
+- description: Password for connecting to nova database
++ MysqlClusterUniquePart:
++ description: A unique identifier of the MySQL cluster the controller is in
++ type: string
++ default: 'unset' # Has to be here because of the ignored empty value bug
++ constraints:
++ - length: {min: 4, max: 10}
++ MysqlInnodbBufferPoolSize:
++ description: >
++ Specifies the size of the buffer pool in megabytes. Setting to
++ zero should be interpreted as "no value" and will defer to the
++ lower level default.
++ type: number
++ default: 0
++ MysqlRootPassword:
+ type: string
+ hidden: true
+- NovaInterfaces:
+- default: eth0
++ default: '' # Has to be here because of the ignored empty value bug
++ NeutronBridgeMappings:
++ description: >
++ The OVS logical->physical bridge mappings to use. See the Neutron
++ documentation for details. Defaults to mapping br-ex - the external
++ bridge on hosts - to a physical name 'datacentre' which can be used
++ to create provider networks (and we use this for the default floating
++ network) - if changing this either use different post-install network
++ scripts or be sure to keep 'datacentre' as a mapping network name.
++ type: string
++ default: ""
++ NeutronDnsmasqOptions:
++ default: 'dhcp-option-force=26,1400'
++ description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
++ type: string
++ NeutronEnableTunnelling:
++ type: string
++ default: "True"
++ NeutronFlatNetworks:
+ type: string
+- NeutronDBPassword:
+- description: Password for connecting to neutron database
++ default: ''
++ description: If set, flat networks to configure in neutron plugins.
++ NeutronNetworkType:
++ default: 'gre'
++ description: The tenant network type for Neutron, either gre or vxlan.
++ type: string
++ NeutronNetworkVLANRanges:
++ default: 'datacentre'
++ description: >
++ The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
++ Neutron documentation for permitted values. Defaults to permitting any
++ VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
++ type: string
++ NeutronPassword:
++ default: unset
++ description: The password for the neutron service account, used by neutron agents.
+ type: string
+ hidden: true
+- NeutronInterfaces:
++ NeutronPublicInterface:
+ default: eth0
++ description: What interface to bridge onto br-ex for network nodes.
+ type: string
+- RabbitMQPassword:
+- description: Password for RabbitMQ
++ NeutronPublicInterfaceTag:
++ default: ''
++ description: >
++ VLAN tag for creating a public VLAN. The tag will be used to
++ create an access port on the exterior bridge for each control plane node,
++ and that port will be given the IP address returned by neutron from the
++ public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
++ overcloud.yaml to include the deployment of VLAN ports to the control
++ plane.
++ type: string
++ NeutronPublicInterfaceDefaultRoute:
++ default: ''
++ description: A custom default route for the NeutronPublicInterface.
++ type: string
++ NeutronPublicInterfaceIP:
++ default: ''
++ description: A custom IP address to put onto the NeutronPublicInterface.
++ type: string
++ NeutronPublicInterfaceRawDevice:
++ default: ''
++ description: If set, the public interface is a vlan with this device as the raw device.
++ type: string
++ NeutronTunnelTypes:
++ default: 'gre'
++ description: |
++ The tunnel types for the Neutron tenant network. To specify multiple
++ values, use a comma separated string, like so: 'gre,vxlan'
++ type: string
++ NovaPassword:
++ default: unset
++ description: The password for the nova service account, used by nova-api.
+ type: string
+ hidden: true
++ NtpServer:
++ type: string
++ default: ''
++ PublicVirtualInterface:
++ default: 'br-ex'
++ description: >
++ Specifies the interface where the public-facing virtual ip will be assigned.
++ This should be int_public when a VLAN is being used.
++ type: string
++ PublicVirtualIP:
++ type: string
++ default: '' # Has to be here because of the ignored empty value bug
++ RabbitCookie:
++ type: string
++ default: '' # Has to be here because of the ignored empty value bug
++ hidden: true
+ RabbitUserName:
++ default: guest
++ description: The username for RabbitMQ
+ type: string
+ RabbitPassword:
++ default: guest
++ description: The password for RabbitMQ
+ type: string
+ hidden: true
+- ServicePassword:
+- description: admin_password for setting up auth in nova.
++ 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
+- controllerImage:
++ SSLCACertificate:
++ default: ''
++ description: If set, the contents of an SSL certificate authority file.
+ type: string
+- HeatStackDomainAdminPassword:
+- description: Password for heat_domain_admin user.
++ SSLCertificate:
++ default: ''
++ description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
+ type: string
++ hidden: true
++ SSLKey:
+ default: ''
++ description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
++ type: string
+ hidden: true
++ VirtualIP:
++ type: string
++ default: '' # Has to be here because of the ignored empty value bug
++
++
+ resources:
+- AccessPolicy:
++
++ Controller:
++ type: OS::Nova::Server
+ properties:
+- AllowedResources:
+- - controller0
+- type: OS::Heat::AccessPolicy
+- controller0Key:
++ image: {get_param: Image}
++ image_update_policy: {get_param: ImageUpdatePolicy}
++ flavor: {get_param: Flavor}
++ key_name: {get_param: KeyName}
++ networks:
++ - network: ctlplane
++ user_data_format: SOFTWARE_CONFIG
++
++ controllerConfig:
++ type: OS::Heat::StructuredConfig
+ properties:
+- UserName:
+- get_resource: User
+- type: AWS::IAM::AccessKey
+- User:
++ group: os-apply-config
++ config:
++ admin-password: {get_param: AdminPassword}
++ admin-token: {get_param: AdminToken}
++ bootstack:
++ public_interface_ip: {get_param: NeutronPublicInterfaceIP}
++ bootstrap_host:
++ nodeid: {get_input: bootstack_nodeid}
++ database:
++ host: &database_host
++ {get_param: VirtualIP}
++ cinder:
++ db:
++ list_join:
++ - ''
++ - - mysql://cinder:unset@
++ - *database_host
++ - /cinder
++ debug: {get_param: Debug}
++ volume_size_mb: {get_param: CinderLVMLoopDeviceSize}
++ service-password: {get_param: CinderPassword}
++ iscsi-helper: {get_param: CinderISCSIHelper}
++ controller-address: {get_input: controller_host}
++ corosync:
++ bindnetaddr: {get_input: controller_host}
++ mcastport: 5577
++ pacemaker:
++ stonith_enabled : false
++ recheck_interval : 5
++ quorum_policy : ignore
++ db-password: unset
++ glance:
++ registry:
++ host: {get_input: controller_virtual_ip}
++ backend: swift
++ db:
++ list_join:
++ - ''
++ - - mysql://glance:unset@
++ - *database_host
++ - /glance
++ debug: {get_param: Debug}
++ host: {get_input: controller_virtual_ip}
++ port: {get_param: GlancePort}
++ protocol: {get_param: GlanceProtocol}
++ service-password: {get_param: GlancePassword}
++ swift-store-user: service:glance
++ swift-store-key: {get_param: GlancePassword}
++ notifier-strategy: {get_param: GlanceNotifierStrategy}
++ log-file: {get_param: GlanceLogFile}
++ heat:
++ admin_password: {get_param: HeatPassword}
++ admin_tenant_name: service
++ admin_user: heat
++ auth_encryption_key: unset___________
++ db:
++ list_join:
++ - ''
++ - - mysql://heat:unset@
++ - *database_host
++ - /heat
++ debug: {get_param: Debug}
++ stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
++ watch_server_url: {get_input: heat.watch_server_url}
++ metadata_server_url: {get_input: heat.metadata_server_url}
++ waitcondition_server_url: {get_input: heat.waitcondition_server_url}
++ keystone:
++ db:
++ list_join:
++ - ''
++ - - mysql://keystone:unset@
++ - *database_host
++ - /keystone
++ debug: {get_param: Debug}
++ host: {get_input: controller_virtual_ip}
++ ca_certificate: {get_param: KeystoneCACertificate}
++ signing_key: {get_param: KeystoneSigningKey}
++ signing_certificate: {get_param: KeystoneSigningCertificate}
++ mysql:
++ innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
++ local_bind: true
++ root-password: {get_param: MysqlRootPassword}
++ cluster_name:
++ str_replace:
++ template: tripleo-CLUSTER
++ params:
++ CLUSTER: {get_param: MysqlClusterUniquePart}
++ neutron:
++ debug: {get_param: Debug}
++ flat-networks: {get_param: NeutronFlatNetworks}
++ host: {get_input: controller_virtual_ip}
++ metadata_proxy_shared_secret: unset
++ ovs:
++ enable_tunneling: {get_input: neutron_enable_tunneling}
++ local_ip: {get_input: controller_host}
++ network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
++ bridge_mappings: {get_param: NeutronBridgeMappings}
++ public_interface: {get_param: NeutronPublicInterface}
++ public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
++ public_interface_route: {get_param: NeutronPublicInterfaceDefaultRoute}
++ public_interface_tag: {get_param: NeutronPublicInterfaceTag}
++ physical_bridge: br-ex
++ tenant_network_type: {get_param: NeutronNetworkType}
++ tunnel_types: {get_param: NeutronTunnelTypes}
++ ovs_db:
++ list_join:
++ - ''
++ - - mysql://neutron:unset@
++ - *database_host
++ - /ovs_neutron?charset=utf8
++ service-password: {get_param: NeutronPassword}
++ dnsmasq-options: {get_param: NeutronDnsmasqOptions}
++ ceilometer:
++ db:
++ list_join:
++ - ''
++ - - mysql://ceilometer:unset@
++ - *database_host
++ - /ceilometer
++ debug: {get_param: Debug}
++ metering_secret: {get_param: CeilometerMeteringSecret}
++ service-password: {get_param: CeilometerPassword}
++ snmpd:
++ export_MIB: UCD-SNMP-MIB
++ readonly_user_name: {get_param: SnmpdReadonlyUserName}
++ readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
++ nova:
++ compute_driver: libvirt.LibvirtDriver
++ db:
++ list_join:
++ - ''
++ - - mysql://nova:unset@
++ - *database_host
++ - /nova
++ default_floating_pool:
++ ext-net
++ host: {get_input: controller_virtual_ip}
++ metadata-proxy: true
++ service-password: {get_param: NovaPassword}
++ rabbit:
++ host: {get_input: controller_virtual_ip}
++ username: {get_param: RabbitUserName}
++ password: {get_param: RabbitPassword}
++ cookie: {get_param: RabbitCookie}
++ ntp:
++ servers:
++ - {server: {get_param: NtpServer}, fudge: "stratum 0"}
++ virtual_interfaces:
++ instances:
++ - vrrp_instance_name: VI_CONTROL
++ virtual_router_id: 51
++ keepalive_interface: {get_param: ControlVirtualInterface}
++ priority: 101
++ virtual_ips:
++ - ip: {get_param: VirtualIP}
++ interface: {get_param: ControlVirtualInterface}
++ - vrrp_instance_name: VI_PUBLIC
++ virtual_router_id: 52
++ keepalive_interface: {get_param: PublicVirtualInterface}
++ priority: 101
++ virtual_ips:
++ - ip: {get_param: PublicVirtualIP}
++ interface: {get_param: PublicVirtualInterface}
++ vrrp_sync_groups:
++ - name: VG1
++ members:
++ - VI_CONTROL
++ - VI_PUBLIC
++ keepalived:
++ keepalive_interface: {get_param: PublicVirtualInterface}
++ priority: 101
++ virtual_ips:
++ -
++ ip: {get_param: VirtualIP}
++ interface: {get_param: ControlVirtualInterface}
++ -
++ ip: {get_param: PublicVirtualIP}
++ interface: {get_param: PublicVirtualInterface}
++ haproxy:
++ net_binds:
++ - ip: {get_param: VirtualIP}
++ services:
++ - name: keystone_admin
++ port: 35357
++ net_binds: &public_binds
++ - ip: {get_param: VirtualIP}
++ - ip: {get_param: PublicVirtualIP}
++ - name: keystone_public
++ port: 5000
++ net_binds: *public_binds
++ - name: horizon
++ port: 80
++ net_binds: *public_binds
++ - name: neutron
++ port: 9696
++ net_binds: *public_binds
++ - name: cinder
++ port: 8776
++ net_binds: *public_binds
++ - name: glance_api
++ port: 9292
++ net_binds: *public_binds
++ - name: glance_registry
++ port: 9191
++ net_binds: *public_binds
++ - name: heat_api
++ port: 8004
++ net_binds: *public_binds
++ - name: heat_cloudwatch
++ port: 8003
++ net_binds: *public_binds
++ - name: heat_cfn
++ port: 8000
++ net_binds: *public_binds
++ - name: mysql
++ port: 3306
++ extra_server_params:
++ - backup
++ options:
++ - timeout client 0
++ - timeout server 0
++ - name: nova_ec2
++ port: 8773
++ - name: nova_osapi
++ port: 8774
++ net_binds: *public_binds
++ - name: nova_metadata
++ port: 8775
++ net_binds: *public_binds
++ - name: ceilometer
++ port: 8777
++ net_binds: *public_binds
++ - name: swift_proxy_server
++ port: 8080
++ net_binds: *public_binds
++ - name: rabbitmq
++ port: 5672
++ options:
++ - timeout client 0
++ - timeout server 0
++
++ controllerPassthrough:
++ type: OS::Heat::StructuredConfig
+ properties:
+- Policies:
+- - get_resource: AccessPolicy
+- type: AWS::IAM::User
+- controller0:
+- metadata:
+- admin-password:
+- get_param: ServicePassword
+- admin-token:
+- get_param: AdminToken
+- mysql:
+- create-users:
+- - database: keystone
+- username: keystone
+- password: {get_param: KeystoneDBPassword}
+- - database: heat
+- username: heat
+- password: {get_param: HeatDBPassword}
+- - database: glance
+- username: glance
+- password: {get_param: GlanceDBPassword}
+- - database: nova
+- username: nova
+- password: {get_param: NovaDBPassword}
+- - database: neutron
+- username: neutron
+- password: {get_param: NeutronDBPassword}
+- glance:
+- db:
+- Fn::Join:
+- - ''
+- - - 'mysql://glance:'
+- - {get_param: GlanceDBPassword}
+- - '@127.0.0.1/glance'
+- notifier-strategy:
+- get_param: GlanceNotifierStrategy
+- log-file:
+- get_param: GlanceLogFile
+- heat:
+- db:
+- Fn::Join:
+- - ''
+- - - 'mysql://heat:'
+- - {get_param: HeatDBPassword}
+- - '@127.0.0.1/heat'
+- access_key_id:
+- get_resource: controller0Key
+- refresh:
+- - resource: controller0
+- secret_key:
+- get_attr:
+- - controller0Key
+- - SecretAccessKey
+- stack:
+- name:
+- get_param: AWS::StackName
+- region:
+- get_param: AWS::Region
+- auth_encryption_key: unset
+- stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
+- interfaces:
+- control:
+- get_param: NovaInterfaces
+- keystone:
+- host:
+- '127.0.0.1'
+- db:
+- Fn::Join:
++ group: os-apply-config
++ config: {get_input: passthrough_config}
++
++ controllerPassthroughSpecific:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config: {get_input: passthrough_config_specific}
++
++ ControllerDeployment:
++ type: OS::Heat::StructuredDeployment
++ properties:
++ signal_transport: NO_SIGNAL
++ config: {get_resource: controllerConfig}
++ server: {get_resource: Controller}
++ input_values:
++ bootstack_nodeid: {get_attr: [Controller, name]}
++ controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
++ controller_virtual_ip: {get_param: VirtualIP}
++ neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
++ heat.watch_server_url:
++ list_join:
+ - ''
+- - - 'mysql://keystone:'
+- - {get_param: KeystoneDBPassword}
+- - '@127.0.0.1/keystone'
+- nova:
+- db:
+- Fn::Join:
++ - - 'http://'
++ - {get_param: VirtualIP}
++ - ':8003'
++ heat.metadata_server_url:
++ list_join:
+ - ''
+- - - 'mysql://nova:'
+- - {get_param: NovaDBPassword}
+- - '@127.0.0.1/nova'
+- neutron:
+- host:
+- '127.0.0.1'
+- ovs_db:
+- Fn::Join:
++ - - 'http://'
++ - {get_param: VirtualIP}
++ - ':8000'
++ heat.waitcondition_server_url:
++ list_join:
+ - ''
+- - - 'mysql://neutron:'
+- - {get_param: NeutronDBPassword}
+- - '@127.0.0.1/ovs_neutron'
+- rabbit:
+- host:
+- '127.0.0.1'
+- username:
+- get_param: RabbitUserName
+- password:
+- get_param: RabbitPassword
+- users:
+- username:
+- get_param: RabbitUserName
+- password:
+- get_param: RabbitPassword
+- cookie:
+- get_attr:
+- - RabbitCookie
+- - value
+- service-password:
+- get_param: ServicePassword
++ - - 'http://'
++ - {get_param: VirtualIP}
++ - ':8000/v1/waitcondition'
++
++ SSLConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config:
++ ssl:
++ ca_certificate: {get_input: ssl_ca_certificate}
++ stunnel:
++ cert: {get_input: ssl_certificate}
++ key: {get_input: ssl_key}
++ cacert: {get_input: ssl_ca_certificate}
++ ports:
++ - name: 'ec2'
++ accept: 13773
++ connect: 8773
++ connect_host: {get_input: controller_host}
++ - name: 'image'
++ accept: 13292
++ connect: 9292
++ connect_host: {get_input: controller_host}
++ - name: 'identity'
++ accept: 13000
++ connect: 5000
++ connect_host: {get_input: controller_host}
++ - name: 'network'
++ accept: 13696
++ connect: 9696
++ connect_host: {get_input: controller_host}
++ - name: 'compute'
++ accept: 13774
++ connect: 8774
++ connect_host: {get_input: controller_host}
++ - name: 'swift-proxy'
++ accept: 13080
++ connect: 8080
++ connect_host: {get_input: controller_host}
++ - name: 'cinder'
++ accept: 13776
++ connect: 8776
++ connect_host: {get_input: controller_host}
++ - name: 'ceilometer'
++ accept: 13777
++ connect: 8777
++ connect_host: {get_input: controller_host}
++
++ ControllerSSLDeployment:
++ type: OS::Heat::StructuredDeployment
++ properties:
++ config: {get_resource: SSLConfig}
++ server: {get_resource: Controller}
++ signal_transport: NO_SIGNAL
++ input_values:
++ controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
++ ssl_certificate: {get_param: SSLCertificate}
++ ssl_key: {get_param: SSLKey}
++ ssl_ca_certificate: {get_param: SSLCACertificate}
++
++ ControllerPassthrough:
++ type: OS::Heat::StructuredDeployment
++ properties:
++ config: {get_resource: controllerPassthrough}
++ server: {get_resource: Controller}
++ signal_transport: NO_SIGNAL
++ input_values:
++ passthrough_config: {get_param: ExtraConfig}
++
++ ControllerPassthroughSpecificDeployment:
++ depends_on: [ControllerPassthrough]
++ type: OS::Heat::StructuredDeployment
+ properties:
+- ImageId:
+- get_param: controllerImage
+- InstanceType:
+- get_param: InstanceType
+- KeyName:
+- get_param: KeyName
+- type: AWS::EC2::Instance
++ config: {get_resource: controllerPassthroughSpecific}
++ server: {get_resource: Controller}
++ signal_transport: NO_SIGNAL
++ input_values:
++ passthrough_config_specific: {get_param: controllerExtraConfig}
++
++
++outputs:
++ ip_address:
++ description: IP address of the server in the ctlplane network
++ value: {get_attr: [Controller, networks, ctlplane, 0]}
++ hostname:
++ description: Hostname of the server
++ value: {get_attr: [Controller, name]}
++ corosync_node:
++ description: >
++ Node object in the format {ip: ..., name: ...} format that the corosync
++ element expects
++ value:
++ ip: {get_attr: [Controller, networks, ctlplane, 0]}
++ name: {get_attr: [Controller, name]}
++ hosts_entry:
++ description: >
++ Server's IP address and hostname in the /etc/hosts format
++ value:
++ str_replace:
++ template: IP HOST HOST.novalocal CLOUDNAME
++ params:
++ IP: {get_attr: [Controller, networks, ctlplane, 0]}
++ HOST: {get_attr: [Controller, name]}
++ CLOUDNAME: {get_param: CloudName}
++ nova_server_resource:
++ 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: 'r1z1-IP:%PORT%/d1'
++ params:
++ IP: {get_attr: [Controller, networks, ctlplane, 0]}
++ swift_proxy_memcache:
++ description: Swift proxy-memcache value
++ value:
++ str_replace:
++ template: "IP:11211"
++ params:
++ IP: {get_attr: [Controller, networks, ctlplane, 0]}
+diff --git a/overcloud-resource-registry.yaml b/overcloud-resource-registry.yaml
+new file mode 100644
+index 0000000..29074fc
+--- /dev/null
++++ b/overcloud-resource-registry.yaml
+@@ -0,0 +1,3 @@
++resource_registry:
++ OS::TripleO::Compute: compute.yaml
++ OS::TripleO::Controller: controller.yaml
+diff --git a/overcloud.yaml b/overcloud.yaml
+new file mode 100644
+index 0000000..9e6fba1
+--- /dev/null
++++ b/overcloud.yaml
+@@ -0,0 +1,674 @@
++heat_template_version: 2014-10-16
++
++description: >
++ Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
++ server,Dedicated RabbitMQ Server,Group of Nova Computes
++
++
++parameters:
++
++ # COMMON PARAMETERS (not specific to a role)
++ AdminPassword:
++ default: unset
++ description: The password for the keystone admin account, used for monitoring, querying neutron etc.
++ type: string
++ hidden: true
++ CeilometerMeteringSecret:
++ default: unset
++ description: Secret shared by the ceilometer services.
++ type: string
++ hidden: true
++ CeilometerPassword:
++ default: unset
++ description: The password for the ceilometer service account.
++ type: string
++ hidden: true
++ CloudName:
++ default: ''
++ description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
++ type: string
++ ControlFixedIPs:
++ default: []
++ description: Should be used for arbitrary ips.
++ type: json
++ Debug:
++ default: ''
++ description: Set to True to enable debugging on all services.
++ type: string
++ DefaultSignalTransport:
++ default: CFN_SIGNAL
++ description: Transport to use for software-config signals.
++ type: string
++ constraints:
++ - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
++ GlancePort:
++ default: "9292"
++ description: Glance port.
++ type: string
++ GlanceProtocol:
++ default: http
++ description: Protocol to use when connecting to glance, set to https for SSL.
++ type: string
++ ImageUpdatePolicy:
++ default: 'REBUILD_PRESERVE_EPHEMERAL'
++ description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
++ type: string
++ KeyName:
++ default: default
++ description: Name of an existing EC2 KeyPair to enable SSH access to the instances
++ type: string
++ NeutronBridgeMappings:
++ description: >
++ The OVS logical->physical bridge mappings to use. See the Neutron
++ documentation for details. Defaults to mapping br-ex - the external
++ bridge on hosts - to a physical name 'datacentre' which can be used
++ to create provider networks (and we use this for the default floating
++ network) - if changing this either use different post-install network
++ scripts or be sure to keep 'datacentre' as a mapping network name.
++ type: string
++ default: "datacentre:br-ex"
++ NeutronControlPlaneID:
++ default: ''
++ type: string
++ description: Neutron ID for ctlplane network.
++ NeutronEnableTunnelling:
++ type: string
++ default: "True"
++ NeutronFlatNetworks:
++ type: string
++ default: 'datacentre'
++ description: >
++ If set, flat networks to configure in neutron plugins. Defaults to
++ 'datacentre' to permit external network creation.
++ NeutronNetworkType:
++ default: 'gre'
++ description: The tenant network type for Neutron, either gre or vxlan.
++ type: string
++ NeutronPassword:
++ default: unset
++ description: The password for the neutron service account, used by neutron agents.
++ type: string
++ hidden: true
++ NeutronPublicInterface:
++ default: eth0
++ description: What interface to bridge onto br-ex for network nodes.
++ type: string
++ NeutronPublicInterfaceTag:
++ default: ''
++ description: >
++ VLAN tag for creating a public VLAN. The tag will be used to
++ create an access port on the exterior bridge for each control plane node,
++ and that port will be given the IP address returned by neutron from the
++ public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
++ overcloud.yaml to include the deployment of VLAN ports to the control
++ plane.
++ type: string
++ NeutronTunnelTypes:
++ default: 'gre'
++ description: |
++ The tunnel types for the Neutron tenant network. To specify multiple
++ values, use a comma separated string, like so: 'gre,vxlan'
++ type: string
++ NovaPassword:
++ default: unset
++ description: The password for the nova service account, used by nova-api.
++ type: string
++ hidden: true
++ NtpServer:
++ type: string
++ default: ''
++ PublicVirtualFixedIPs:
++ default: []
++ description: >
++ Control the IP allocation for the PublicVirtualInterface port. E.g.
++ [{'ip_address':'1.2.3.4'}]
++ type: json
++ PublicVirtualNetwork:
++ default: 'ctlplane'
++ type: string
++ description: >
++ Neutron network to allocate public virtual IP port on.
++ RabbitCookieSalt:
++ type: string
++ default: unset
++ description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
++ RabbitUserName:
++ default: guest
++ description: The username for RabbitMQ
++ type: string
++ RabbitPassword:
++ default: guest
++ description: The password for RabbitMQ
++ type: string
++ hidden: true
++ 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
++
++
++ # CONTROLLER-SPECIFIC PARAMS
++ AdminToken:
++ default: unset
++ description: The keystone auth secret.
++ type: string
++ hidden: true
++ CinderLVMLoopDeviceSize:
++ default: 5000
++ description: The size of the loopback file used by the cinder LVM driver.
++ type: number
++ CinderPassword:
++ default: unset
++ description: The password for the cinder service account, used by cinder-api.
++ type: string
++ hidden: true
++ CinderISCSIHelper:
++ default: tgtadm
++ description: The iSCSI helper to use with cinder.
++ type: string
++ ControllerCount:
++ type: number
++ default: 1
++ controllerExtraConfig:
++ default: {}
++ description: |
++ Controller specific configuration to inject into the cluster. Same
++ structure as ExtraConfig.
++ type: json
++ controllerImage:
++ type: string
++ default: overcloud-control
++ ControllerFlavor:
++ default: baremetal
++ description: Flavor for control nodes to request when deploying.
++ type: string
++ ControlVirtualInterface:
++ default: 'br-ex'
++ description: Interface where virtual ip will be assigned.
++ type: string
++ ExtraConfig:
++ default: {}
++ description: |
++ Additional configuration to inject into the cluster. The JSON should have
++ the following structure:
++ {"FILEKEY":
++ {"config":
++ [{"section": "SECTIONNAME",
++ "values":
++ [{"option": "OPTIONNAME",
++ "value": "VALUENAME"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ For instance:
++ {"nova":
++ {"config":
++ [{"section": "default",
++ "values":
++ [{"option": "force_config_drive",
++ "value": "always"
++ }
++ ]
++ },
++ {"section": "cells",
++ "values":
++ [{"option": "driver",
++ "value": "nova.cells.rpc_driver.CellsRPCDriver"
++ }
++ ]
++ }
++ ]
++ }
++ }
++ type: json
++ GlanceLogFile:
++ description: The filepath of the file to use for logging messages from Glance.
++ type: string
++ default: ''
++ GlanceNotifierStrategy:
++ description: Strategy to use for Glance notification queue
++ type: string
++ default: noop
++ GlancePassword:
++ default: unset
++ description: The password for the glance service account, used by the glance services.
++ type: string
++ hidden: true
++ HeatPassword:
++ default: unset
++ description: The password for the Heat service account, used by the Heat services.
++ type: string
++ hidden: true
++ HeatStackDomainAdminPassword:
++ description: Password for heat_domain_admin user.
++ type: string
++ default: ''
++ hidden: true
++ KeystoneCACertificate:
++ default: ''
++ description: Keystone self-signed certificate authority certificate.
++ type: string
++ KeystoneSigningCertificate:
++ default: ''
++ description: Keystone certificate for verifying token validity.
++ type: string
++ KeystoneSigningKey:
++ default: ''
++ description: Keystone key for signing tokens.
++ type: string
++ hidden: true
++ MysqlInnodbBufferPoolSize:
++ description: >
++ Specifies the size of the buffer pool in megabytes. Setting to
++ zero should be interpreted as "no value" and will defer to the
++ lower level default.
++ type: number
++ default: 0
++ NeutronDnsmasqOptions:
++ default: 'dhcp-option-force=26,1400'
++ description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
++ type: string
++ NeutronPublicInterfaceDefaultRoute:
++ default: ''
++ description: A custom default route for the NeutronPublicInterface.
++ type: string
++ NeutronPublicInterfaceIP:
++ default: ''
++ description: A custom IP address to put onto the NeutronPublicInterface.
++ type: string
++ NeutronPublicInterfaceRawDevice:
++ default: ''
++ description: If set, the public interface is a vlan with this device as the raw device.
++ type: string
++ PublicVirtualInterface:
++ default: 'br-ex'
++ description: >
++ Specifies the interface where the public-facing virtual ip will be assigned.
++ This should be int_public when a VLAN is being used.
++ type: string
++ SSLCertificate:
++ default: ''
++ description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
++ type: string
++ hidden: true
++ SSLKey:
++ default: ''
++ description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
++ type: string
++ hidden: true
++ SSLCACertificate:
++ default: ''
++ description: If set, the contents of an SSL certificate authority file.
++ type: string
++ SwiftHashSuffix:
++ default: unset
++ description: A random string to be used as a salt when hashing to determine mappings in the ring.
++ type: string
++ hidden: true
++ SwiftPassword:
++ default: unset
++ description: The password for the swift service account, used by the swift proxy services.
++ type: string
++ hidden: true
++ SwiftPartPower:
++ default: 10
++ description: Partition Power to use when building Swift rings
++ type: number
++ SwiftReplicas:
++ type: number
++ default: 1
++ description: How many replicas to use in the swift rings.
++
++# COMPUTE-SPECIFIC PARAMS
++ CeilometerComputeAgent:
++ description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
++ type: string
++ default: ''
++ constraints:
++ - allowed_values: ['', Present]
++ ComputeCount:
++ type: number
++ default: 1
++ HypervisorNeutronPhysicalBridge:
++ default: 'br-ex'
++ description: >
++ An OVS bridge to create on each hypervisor. This defaults to br-ex the
++ same as the control plane nodes, as we have a uniform configuration of
++ the openvswitch agent. Typically should not need to be changed.
++ type: string
++ HypervisorNeutronPublicInterface:
++ default: 'eth0'
++ description: What interface to add to the HypervisorNeutronPhysicalBridge.
++ type: string
++ LiveUpdateComputeImage:
++ type: string
++ description: The image ID for live-updates to the overcloud compute nodes.
++ default: ''
++ LiveUpdateHost:
++ type: string
++ description: The IP address for the undercloud Glance API.
++ default: ''
++ LiveUpdatePassword:
++ type: string
++ default: ''
++ description: The live-update password for the undercloud Glance API.
++ hidden: true
++ LiveUpdateTenantName:
++ type: string
++ description: The live-update tenant name for the undercloud Glance API.
++ default: ''
++ LiveUpdateUserName:
++ type: string
++ description: The live-update username for the undercloud Glance API.
++ default: ''
++ NeutronNetworkVLANRanges:
++ default: 'datacentre'
++ description: >
++ The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
++ Neutron documentation for permitted values. Defaults to permitting any
++ VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
++ type: string
++ NovaComputeDriver:
++ type: string
++ default: libvirt.LibvirtDriver
++ NovaComputeExtraConfig:
++ default: {}
++ description: |
++ NovaCompute specific configuration to inject into the cluster. Same
++ structure as ExtraConfig.
++ type: json
++ NovaComputeLibvirtType:
++ default: ''
++ type: string
++ NovaImage:
++ type: string
++ default: overcloud-compute
++ OvercloudComputeFlavor:
++ description: Use this flavor
++ type: string
++ default: baremetal
++
++
++resources:
++
++ Controller:
++ type: OS::Heat::ResourceGroup
++ properties:
++ count: {get_param: ControllerCount}
++ resource_def:
++ type: OS::TripleO::Controller
++ properties:
++ AdminPassword: {get_param: AdminPassword}
++ AdminToken: {get_param: AdminToken}
++ CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
++ CeilometerPassword: {get_param: CeilometerPassword}
++ CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
++ CinderPassword: {get_param: CinderPassword}
++ CinderISCSIHelper: {get_param: CinderISCSIHelper}
++ CloudName: {get_param: CloudName}
++ ControlVirtualInterface: {get_param: ControlVirtualInterface}
++ controllerExtraConfig: {get_param: controllerExtraConfig}
++ ExtraConfig: {get_param: ExtraConfig}
++ Flavor: {get_param: ControllerFlavor}
++ GlancePort: {get_param: GlancePort}
++ GlanceProtocol: {get_param: GlanceProtocol}
++ GlancePassword: {get_param: GlancePassword}
++ GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
++ GlanceLogFile: {get_param: GlanceLogFile}
++ HeatPassword: {get_param: HeatPassword}
++ HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
++ Image: {get_param: controllerImage}
++ ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
++ KeyName: {get_param: KeyName}
++ KeystoneCACertificate: {get_param: KeystoneCACertificate}
++ KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
++ KeystoneSigningKey: {get_param: KeystoneSigningKey}
++ MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
++ MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
++ MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
++ NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
++ NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
++ NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
++ NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
++ NeutronPublicInterface: {get_param: NeutronPublicInterface}
++ NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
++ NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
++ NeutronPassword: {get_param: NeutronPassword}
++ NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
++ NovaPassword: {get_param: NovaPassword}
++ NtpServer: {get_param: NtpServer}
++ PublicVirtualInterface: {get_param: PublicVirtualInterface}
++ RabbitUserName: {get_param: RabbitUserName}
++ RabbitPassword: {get_param: RabbitPassword}
++ RabbitCookie: {get_attr: [RabbitCookie, value]}
++ SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
++ SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
++ SSLCertificate: {get_param: SSLCertificate}
++ SSLKey: {get_param: SSLKey}
++ SSLCACertificate: {get_param: SSLCACertificate}
++ VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
++
++ Compute:
++ type: OS::Heat::ResourceGroup
++ properties:
++ count: {get_param: ComputeCount}
++ resource_def:
++ type: OS::TripleO::Compute
++ properties:
++ AdminPassword: {get_param: AdminPassword}
++ CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
++ CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
++ CeilometerPassword: {get_param: CeilometerPassword}
++ ExtraConfig: {get_param: ExtraConfig}
++ Flavor: {get_param: OvercloudComputeFlavor}
++ GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ GlancePort: {get_param: GlancePort}
++ GlanceProtocol: {get_param: GlanceProtocol}
++ Image: {get_param: NovaImage}
++ ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
++ KeyName: {get_param: KeyName}
++ KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ LiveUpdateComputeImage: {get_param: LiveUpdateComputeImage}
++ LiveUpdateHost: {get_param: LiveUpdateHost}
++ LiveUpdatePassword: {get_param: LiveUpdatePassword}
++ LiveUpdateTenantName: {get_param: LiveUpdateTenantName}
++ LiveUpdateUserName: {get_param: LiveUpdateUserName}
++ NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
++ NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
++ NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
++ NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ NeutronNetworkType: {get_param: NeutronNetworkType}
++ NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
++ NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
++ NeutronPassword: {get_param: NeutronPassword}
++ NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
++ NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
++ NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ NovaComputeDriver: {get_param: NovaComputeDriver}
++ NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
++ NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
++ NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
++ NovaPassword: {get_param: NovaPassword}
++ NtpServer: {get_param: NtpServer}
++ RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ RabbitPassword: {get_param: RabbitPassword}
++ RabbitUserName: {get_param: RabbitUserName}
++ SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
++ SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
++ NovaDSN:
++ list_join:
++ - ''
++ - - mysql://nova:unset@
++ - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ - /nova
++ CeilometerDSN:
++ list_join:
++ - ''
++ - - mysql://ceilometer:unset@
++ - *compute_database_host
++ - /ceilometer
++ NeutronDSN:
++ list_join:
++ - ''
++ - - mysql://neutron:unset@
++ - *compute_database_host
++ - /ovs_neutron
++
++ allNodesConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ config:
++ completion-signal: {get_input: deploy_signal_id}
++ hosts:
++ list_join:
++ - "\n"
++ - - list_join:
++ - "\n"
++ - {get_attr: [Compute, hosts_entry]}
++ - list_join:
++ - "\n"
++ - {get_attr: [Controller, hosts_entry]}
++ # TODO: ADD BLOCK STORAGE ENTRY HERE
++ # TODO: ADD SWIFT STORAGE ENTRY HERE
++ rabbit:
++ nodes:
++ list_join:
++ - ','
++ - {get_attr: [Controller, hostname]}
++
++ MysqlRootPassword:
++ type: OS::Heat::RandomString
++ properties:
++ length: 10
++
++ MysqlClusterUniquePart:
++ type: OS::Heat::RandomString
++ properties:
++ length: 10
++
++ RabbitCookie:
++ type: OS::Heat::RandomString
++ properties:
++ length: 20
++ salt: {get_param: RabbitCookieSalt}
++
++ ControlVirtualIP:
++ type: OS::Neutron::Port
++ properties:
++ name: control_virtual_ip
++ network_id: {get_param: NeutronControlPlaneID}
++ fixed_ips: {get_param: ControlFixedIPs}
++
++ PublicVirtualIP:
++ type: OS::Neutron::Port
++ properties:
++ name: public_virtual_ip
++ network: {get_param: PublicVirtualNetwork}
++ fixed_ips: {get_param: PublicVirtualFixedIPs}
++
++ ControllerBootstrapNodeConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config:
++ bootstrap_host:
++ bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
++
++ ControllerBootstrapNodeDeployment:
++ type: OS::Heat::StructuredDeployments
++ properties:
++ config: {get_resource: ControllerBootstrapNodeConfig}
++ servers: {get_attr: [Controller, attributes, nova_server_resource]}
++ signal_transport: NO_SIGNAL
++
++ ControllerSwiftDeployment:
++ type: OS::Heat::StructuredDeployments
++ properties:
++ config: {get_resource: ControllerSwiftConfig}
++ servers: {get_attr: [Controller, attributes, nova_server_resource]}
++ signal_transport: NO_SIGNAL
++ input_values:
++ swift_hash_suffix: {get_param: SwiftHashSuffix}
++ swift_password: {get_param: SwiftPassword}
++ swift_part_power: {get_param: SwiftPartPower}
++ swift_replicas: { get_param: SwiftReplicas}
++
++ ControllerSwiftConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config:
++ swift:
++ devices:
++ list_join:
++ - ", "
++ - - list_join:
++ - ", "
++ - {get_attr: [Controller, swift_device]}
++ - list_join:
++ - ", "
++ # TODO: replace the empty list with this:
++ # - {get_attr: [ObjectStorage, swift_device]}
++ # Once we have the swift/object-storage role
++ - []
++ hash: { get_input: swift_hash_suffix }
++ part-power: { get_input: swift_part_power }
++ proxy-memcache:
++ list_join:
++ - ","
++ - {get_attr: [Controller, swift_proxy_memcache]}
++ replicas: {get_input: swift_replicas }
++ service-password: { get_input: swift_password }
++
++ ControllerClusterConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ config:
++ corosync:
++ nodes: {get_attr: [Controller, corosync_node]}
++ horizon:
++ caches:
++ memcached:
++ nodes: {get_attr: [Controller, hostname]}
++ mysql:
++ nodes: {get_attr: [Controller, corosync_node]}
++ haproxy:
++ nodes: {get_attr: [Controller, corosync_node]}
++
++ ControlerClusterDeployment:
++ type: OS::Heat::StructuredDeployments
++ properties:
++ config: {get_resource: ControllerClusterConfig}
++ servers: {get_attr: [Controller, attributes, nova_server_resource]}
++ signal_transport: NO_SIGNAL
++
++ ControllerAllNodesDeployment:
++ type: OS::Heat::StructuredDeployments
++ properties:
++ config: {get_resource: allNodesConfig}
++ servers: {get_attr: [Controller, attributes, nova_server_resource]}
++
++ ComputeAllNodesDeployment:
++ type: OS::Heat::StructuredDeployments
++ properties:
++ config: {get_resource: allNodesConfig}
++ servers: {get_attr: [Compute, attributes, nova_server_resource]}
++
++outputs:
++ KeystoneURL:
++ description: URL for the Overcloud Keystone service
++ value:
++ list_join:
++ - ''
++ - - http://
++ - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ - :5000/v2.0/
diff --git a/0002-Add-converted-version-of-block-and-object-storage.patch b/0002-Add-converted-version-of-block-and-object-storage.patch
new file mode 100644
index 0000000..a70951e
--- /dev/null
+++ b/0002-Add-converted-version-of-block-and-object-storage.patch
@@ -0,0 +1,441 @@
+From 98d3444f406c54156561b225c1e1c0d656d671ea Mon Sep 17 00:00:00 2001
+From: Peter Belanyi <pbelanyi at redhat.com>
+Date: Wed, 24 Sep 2014 07:51:13 -0400
+Subject: [PATCH] Add converted version of block and object storage
+
+This patch extends the previous 'Don't use merge.py for overcloud'
+commit with the cinder-storage.yaml and swift-storage.yaml templates.
+
+Requirements for this to deploy:
+
+1. Block and object storage images have to be built
+(overcloud-cinder-volume and overcloud-swift-storage)
+
+2. The images have to be loaded by devtest_overcloud.sh
+OVERCLOUD_CINDER_ID=$(load-image -d $TRIPLEO_ROOT/overcloud-cinder-volume.qcow2)
+OVERCLOUD_SWIFT_ID=$(load-image -d $TRIPLEO_ROOT/overcloud-swift-storage.qcow2)
+
+Change-Id: I45f9d9f051970a83e26c0fd924d7c98276958113
+---
+ cinder-storage.yaml | 141 +++++++++++++++++++++++++++++++++++++++
+ overcloud-resource-registry.yaml | 2 +
+ overcloud.yaml | 89 +++++++++++++++++++++++-
+ swift-storage.yaml | 137 +++++++++++++++++++++++++++++++++++++
+ 4 files changed, 367 insertions(+), 2 deletions(-)
+ create mode 100644 cinder-storage.yaml
+ create mode 100644 swift-storage.yaml
+
+diff --git a/cinder-storage.yaml b/cinder-storage.yaml
+new file mode 100644
+index 0000000..31a7ccf
+--- /dev/null
++++ b/cinder-storage.yaml
+@@ -0,0 +1,141 @@
++heat_template_version: 2014-10-16
++description: 'Common Block Storage Configuration'
++parameters:
++ AdminPassword:
++ default: ''
++ type: string
++ BlockStorageImage:
++ default: overcloud-cinder-volume
++ type: string
++ CinderISCSIHelper:
++ default: tgtadm
++ description: The iSCSI helper to use with cinder.
++ type: string
++ CinderLVMLoopDeviceSize:
++ default: 5000
++ description: The size of the loopback file used by the cinder LVM driver.
++ type: number
++ CinderPassword:
++ default: unset
++ description: The password for the cinder service account, used by cinder-api.
++ hidden: true
++ type: string
++ ControllerIP:
++ default: ''
++ type: string
++ GlancePort:
++ default: 9292
++ description: Glance port.
++ type: string
++ KeyName:
++ default: default
++ description: Name of an existing EC2 KeyPair to enable SSH access to the instances
++ type: string
++ NeutronEnableTunnelling:
++ default: true
++ type: string
++ NeutronNetworkType:
++ default: gre
++ type: string
++ NeutronPassword:
++ default: ''
++ type: string
++ NeutronPublicInterface:
++ default: ''
++ type: string
++ OvercloudBlockStorageFlavor:
++ default: baremetal
++ description: Flavor for block storage nodes to request when deploying.
++ type: string
++ RabbitPassword:
++ default: ''
++ type: string
++ RabbitUserName:
++ default: ''
++ type: string
++resources:
++ BlockStorage:
++ type: OS::Nova::Server
++ properties:
++ image:
++ {get_param: BlockStorageImage}
++ flavor: {get_param: OvercloudBlockStorageFlavor}
++ key_name: {get_param: KeyName}
++ user_data_format: SOFTWARE_CONFIG
++ networks:
++ - network: ctlplane
++ BlockStorageDeployment:
++ type: OS::Heat::StructuredDeployment
++ properties:
++ server: {get_resource: BlockStorage}
++ config: {get_resource: BlockStorageConfig}
++ input_values:
++ controller_host: {get_param: ControllerIP}
++ cinder_dsn: {list_join: ['', ['mysql://cinder:unset@', {get_param: ControllerIP} , '/cinder']]}
++ neutron_local_ip: {get_attr: [BlockStorage , networks, ctlplane, 0]}
++ signal_transport: NO_SIGNAL
++ BlockStorageConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config:
++ admin-password: {get_param: AdminPassword}
++ keystone:
++ host: {get_input: controller_host}
++ cinder:
++ db: {get_input: cinder_dsn}
++ volume_size_mb:
++ get_param: CinderLVMLoopDeviceSize
++ service-password:
++ get_param: CinderPassword
++ iscsi-helper:
++ get_param: CinderISCSIHelper
++ rabbit:
++ host: {get_input: controller_host}
++ username: {get_param: RabbitUserName}
++ password: {get_param: RabbitPassword}
++ glance:
++ host: {get_input: controller_host}
++ port: {get_param: GlancePort}
++ interfaces:
++ control: {get_param: NeutronPublicInterface}
++ neutron:
++ ovs:
++ local_ip: {get_input: neutron_local_ip}
++ tenant_network_type: {get_param: NeutronNetworkType}
++ enable_tunneling: {get_param: NeutronEnableTunnelling}
++ service-password:
++ get_param: NeutronPassword
++ config:
++ keystone:
++ host: {get_input: controller_host}
++ cinder:
++ db: {get_input: cinder_dsn}
++ volume_size_mb:
++ get_param: CinderLVMLoopDeviceSize
++ service-password:
++ get_param: CinderPassword
++ iscsi-helper:
++ get_param: CinderISCSIHelper
++ admin-password: {get_param: AdminPassword}
++ rabbit:
++ host: {get_input: controller_host}
++ username: {get_param: RabbitUserName}
++ password: {get_param: RabbitPassword}
++ interfaces:
++ control: {get_param: NeutronPublicInterface}
++ neutron:
++ ovs:
++ local_ip: { get_input: neutron_local_ip }
++ tenant_network_type: {get_param: NeutronNetworkType}
++ enable_tunneling: {get_param: NeutronEnableTunnelling}
++ service-password:
++ get_param: NeutronPassword
++outputs:
++ hosts_entry:
++ value:
++ str_replace:
++ template: "IP HOST HOST.novalocal"
++ params:
++ IP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
++ HOST: {get_attr: [BlockStorage, name]}
+diff --git a/overcloud-resource-registry.yaml b/overcloud-resource-registry.yaml
+index 29074fc..822d987 100644
+--- a/overcloud-resource-registry.yaml
++++ b/overcloud-resource-registry.yaml
+@@ -1,3 +1,5 @@
+ resource_registry:
++ OS::TripleO::BlockStorage: cinder-storage.yaml
+ OS::TripleO::Compute: compute.yaml
+ OS::TripleO::Controller: controller.yaml
++ OS::TripleO::ObjectStorage: swift-storage.yaml
+diff --git a/overcloud.yaml b/overcloud.yaml
+index 9e6fba1..7fd685a 100644
+--- a/overcloud.yaml
++++ b/overcloud.yaml
+@@ -396,6 +396,48 @@ parameters:
+ type: string
+ default: baremetal
+
++# BLOCK STORAGE SPECIFIC PARAMS
++ BlockStorageCount:
++ type: number
++ default: 1
++ BlockStorageImage:
++ default: overcloud-cinder-volume
++ type: string
++ CinderISCSIHelper:
++ default: tgtadm
++ description: The iSCSI helper to use with cinder.
++ type: string
++ CinderLVMLoopDeviceSize:
++ default: 5000
++ description: The size of the loopback file used by the cinder LVM driver.
++ type: number
++ CinderPassword:
++ default: unset
++ description: The password for the cinder service account, used by cinder-api.
++ hidden: true
++ type: string
++ NeutronNetworkType:
++ default: gre
++ type: string
++ OvercloudBlockStorageFlavor:
++ default: baremetal
++ description: Flavor for block storage nodes to request when deploying.
++ type: string
++
++# OBJECT STORAGE SPECIFIC PARAMS
++ ObjectStorageCount:
++ type: number
++ default: 1
++ NeutronNetworkType:
++ default: gre
++ type: string
++ OvercloudSwiftStorageFlavor:
++ default: baremetal
++ description: Flavor for Swift storage nodes to request when deploying.
++ type: string
++ SwiftStorageImage:
++ default: overcloud-swift-storage
++ type: string
+
+ resources:
+
+@@ -523,6 +565,45 @@ resources:
+ - *compute_database_host
+ - /ovs_neutron
+
++ BlockStorage:
++ type: OS::Heat::ResourceGroup
++ properties:
++ count: {get_param: BlockStorageCount}
++ resource_def:
++ type: OS::TripleO::BlockStorage
++ properties:
++ AdminPassword: {get_param: AdminPassword}
++ BlockStorageImage: {get_param: BlockStorageImage}
++ CinderISCSIHelper: {get_param: CinderISCSIHelper}
++ CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
++ CinderPassword: {get_param: CinderPassword}
++ ControllerIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ KeyName: {get_param: KeyName}
++ NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
++ NeutronNetworkType: {get_param: NeutronNetworkType}
++ NeutronPassword: {get_param: NeutronPassword}
++ NeutronPublicInterface: {get_param: NeutronPublicInterface}
++ OvercloudBlockStorageFlavor: {get_param: OvercloudBlockStorageFlavor}
++ RabbitPassword: {get_param: RabbitPassword}
++ RabbitUserName: {get_param: RabbitUserName}
++
++ ObjectStorage:
++ type: OS::Heat::ResourceGroup
++ properties:
++ count: {get_param: ObjectStorageCount}
++ resource_def:
++ type: OS::TripleO::ObjectStorage
++ properties:
++ ControllerIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
++ KeyName: {get_param: KeyName}
++ NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
++ NeutronNetworkType: {get_param: NeutronNetworkType}
++ OvercloudSwiftStorageFlavor: {get_param: OvercloudSwiftStorageFlavor}
++ SwiftHashSuffix: {get_param: SwiftHashSuffix}
++ SwiftPassword: {get_param: SwiftPassword}
++ SwiftStorageImage: {get_param: SwiftStorageImage}
++
++
+ allNodesConfig:
+ type: OS::Heat::StructuredConfig
+ properties:
+@@ -537,8 +618,12 @@ resources:
+ - list_join:
+ - "\n"
+ - {get_attr: [Controller, hosts_entry]}
+- # TODO: ADD BLOCK STORAGE ENTRY HERE
+- # TODO: ADD SWIFT STORAGE ENTRY HERE
++ - list_join:
++ - "\n"
++ - {get_attr: [BlockStorage, hosts_entry]}
++ - list_join:
++ - "\n"
++ - {get_attr: [ObjectStorage, hosts_entry]}
+ rabbit:
+ nodes:
+ list_join:
+diff --git a/swift-storage.yaml b/swift-storage.yaml
+new file mode 100644
+index 0000000..94856e8
+--- /dev/null
++++ b/swift-storage.yaml
+@@ -0,0 +1,137 @@
++heat_template_version: 2014-10-16
++description: 'Common Swift Storage Configuration'
++parameters:
++ ControllerIP:
++ default: ''
++ type: string
++ KeyName:
++ default: default
++ description: Name of an existing EC2 KeyPair to enable SSH access to the instances
++ type: string
++ NeutronEnableTunnelling:
++ default: true
++ type: string
++ NeutronNetworkType:
++ default: gre
++ type: string
++ OvercloudSwiftStorageFlavor:
++ default: baremetal
++ description: Flavor for Swift storage nodes to request when deploying.
++ type: string
++ SwiftHashSuffix:
++ default: unset
++ description: A random string to be used as a salt when hashing to determine mappings
++ in the ring.
++ hidden: true
++ type: string
++ SwiftPartPower:
++ default: 10
++ description: Partition Power to use when building Swift rings
++ type: number
++ SwiftPassword:
++ default: unset
++ description: The password for the swift service account, used by the swift proxy
++ services.
++ hidden: true
++ type: string
++ SwiftStorageImage:
++ default: overcloud-swift-storage
++ type: string
++resources:
++ SwiftConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ group: os-apply-config
++ config:
++ swift:
++ devices: { get_input: swift_devices }
++ hash: { get_input: swift_hash_suffix }
++ part-power: { get_input: swift_part_power }
++ proxy-memcache: { get_input: swift_proxy_memcache }
++ replicas: {get_input: swift_replicas }
++ service-password: { get_input: swift_password }
++ neutron:
++ enable_tunnelling: {get_param: NeutronEnableTunnelling}
++ tenant_network_type: {get_param: NeutronNetworkType}
++ ovs:
++ local_ip: { get_input: neutron_local_ip }
++ SwiftStorage:
++ type: OS::Nova::Server
++ properties:
++ image: {get_param: SwiftStorageImage}
++ flavor: {get_param: OvercloudSwiftStorageFlavor}
++ key_name: {get_param: KeyName}
++ user_data_format: SOFTWARE_CONFIG
++ networks:
++ - network: ctlplane
++ SwiftKeystoneConfig:
++ type: OS::Heat::StructuredConfig
++ properties:
++ config:
++ keystone:
++ host: {get_input: keystone_host}
++ SwiftStorageKeystone:
++ type: OS::Heat::StructuredDeployment
++ properties:
++ server: {get_resource: SwiftStorage}
++ config: {get_resource: SwiftKeystoneConfig}
++ signal_transport: NO_SIGNAL
++ input_values:
++ keystone_host: {get_param: ControllerIP}
++ SwiftStorageDeploy:
++ type: OS::Heat::StructuredDeployment
++ properties:
++ server: {get_resource: SwiftStorage}
++ config: {get_resource: SwiftConfig}
++ signal_transport: NO_SIGNAL
++ input_values:
++ neutron_local_ip: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
++ swift_hash_suffix: {get_param: SwiftHashSuffix}
++ swift_password: {get_param: SwiftPassword}
++ swift_part_power: {get_param: SwiftPartPower}
++ swift_devices:
++ str_replace:
++ template: 'r1z1-IP:%PORT%/d1'
++ params:
++ IP: {get_param: ControllerIP}
++ # TODO: FIGURE OUT HOW TO PASS THIS TO ALL NODES IN THE RESOURCE GROUP
++ # list_join:
++ # - ', '
++ # - Merge::Map:
++ # controller0:
++ # list_join:
++ # - ''
++ # - - 'r1z1-'
++ # - {get_attr: [controller0, networks, ctlplane, 0]}
++ # - ':%PORT%/d1'
++ # SwiftStorage0:
++ # list_join:
++ # - ''
++ # - - 'r1z1-'
++ # - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
++ # - ':%PORT%/d1'
++ swift_proxy_memcache:
++ str_replace:
++ template: "IP:11211"
++ params:
++ IP: {get_param: ControllerIP}
++ # TODO: FIGURE OUT HOW TO PASS THIS TO ALL NODES IN THE RESOURCE GROUP
++ # list_join:
++ # - ','
++ # - Merge::Map:
++ # controller0:
++ # list_join:
++ # - ', '
++ # - - list_join:
++ # - ''
++ # - - {get_attr: [controller0, networks, ctlplane, 0]}
++ # - ':11211'
++
++outputs:
++ hosts_entry:
++ value:
++ str_replace:
++ template: "IP HOST HOST.novalocal"
++ params:
++ IP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
++ HOST: {get_attr: [SwiftStorage, name]}
diff --git a/openstack-tripleo-heat-templates.spec b/openstack-tripleo-heat-templates.spec
index c483cae..e5ebf86 100644
--- a/openstack-tripleo-heat-templates.spec
+++ b/openstack-tripleo-heat-templates.spec
@@ -7,6 +7,9 @@ Group: System Environment/Base
URL: https://wiki.openstack.org/wiki/TripleO
Source0: http://tarballs.openstack.org/tripleo-heat-templates/tripleo-heat-templates-%{version}.tar.gz
+Patch0001: 0001-Compute-and-controller-templates-without-merge.py.patch
+Patch0002: 0002-Add-converted-version-of-block-and-object-storage.patch
+
BuildArch: noarch
BuildRequires: python2-devel
BuildRequires: python-setuptools
@@ -22,6 +25,9 @@ building Heat Templates to do deployments of OpenStack.
%prep
%setup -q -n tripleo-heat-templates-%{version}
+%patch0001 -p1
+%patch0002 -p1
+
%build
%{__python2} setup.py build
More information about the scm-commits
mailing list