diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | base.yaml | 18 | ||||
-rw-r--r-- | block-storage-nfs.yaml | 6 | ||||
-rw-r--r-- | block-storage.yaml | 30 | ||||
-rw-r--r-- | controller.yaml | 12 | ||||
-rw-r--r-- | examples/scale_map_result_hot_blacklist.yaml | 367 | ||||
-rw-r--r-- | examples/source_hot.yaml | 2 | ||||
-rw-r--r-- | nagios3.yaml | 2 | ||||
-rw-r--r-- | nfs-server-source.yaml | 4 | ||||
-rw-r--r-- | nova-compute-config.yaml | 1 | ||||
-rw-r--r-- | nova-compute-instance.yaml | 20 | ||||
-rw-r--r-- | overcloud-source.yaml | 194 | ||||
-rw-r--r-- | setup.cfg | 1 | ||||
-rw-r--r-- | swift-deploy.yaml | 12 | ||||
-rw-r--r-- | swift-storage-source.yaml | 14 | ||||
-rwxr-xr-x | test_merge.bash | 2 | ||||
-rw-r--r-- | tripleo_heat_merge/merge.py | 25 | ||||
-rw-r--r-- | undercloud-bm-nova-deploy.yaml | 2 | ||||
-rw-r--r-- | undercloud-source.yaml | 26 | ||||
-rw-r--r-- | undercloud-vm-ironic-deploy.yaml | 5 | ||||
-rw-r--r-- | undercloud-vm-nova-deploy.yaml | 2 |
21 files changed, 629 insertions, 120 deletions
@@ -15,13 +15,13 @@ $(VALIDATE): heat template-validate -f $(subst validate-,,$@) 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 > $@.tmp + 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 > $@.tmp mv $@.tmp $@ 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 # a prerequisite but don't want to pass it into merge.py - python ./tripleo_heat_merge/merge.py --hot --scale NovaCompute=$${COMPUTESCALE:-'1'} --scale controller=$${CONTROLSCALE:-'1'} --scale SwiftStorage=$${SWIFTSTORAGESCALE='0'} --scale BlockStorage=$${BLOCKSTORAGESCALE:-'1'} overcloud-source.yaml block-storage-nfs.yaml nfs-server-source.yaml swift-source.yaml swift-storage-source.yaml ssl-source.yaml > $@.tmp + python ./tripleo_heat_merge/merge.py --hot --scale NovaCompute=$${COMPUTESCALE:-'1'} --scale controller=$${CONTROLSCALE:-'1'} --scale SwiftStorage=$${SWIFTSTORAGESCALE:-'0'} --scale BlockStorage=$${BLOCKSTORAGESCALE:-'1'} overcloud-source.yaml block-storage-nfs.yaml nfs-server-source.yaml swift-source.yaml swift-storage-source.yaml ssl-source.yaml > $@.tmp mv $@.tmp $@ undercloud-vm.yaml: undercloud-source.yaml undercloud-vm-nova-config.yaml undercloud-vm-nova-deploy.yaml @@ -1,4 +1,4 @@ -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 description: 'Tie OpenStack components together' parameters: TemplateRoot: @@ -12,7 +12,7 @@ resources: RabbitMQ: type: AWS::CloudFormation::Stack TemplateURL: - list_join: + Fn::Join: - {get_param: TemplateRoot} - rabbitmq.yaml parameters: @@ -22,7 +22,7 @@ resources: MySQL: type: AWS::CloudFormation::Stack TemplateURL: - list_join: + Fn::Join: - {get_param: TemplateRoot} - mysql.yaml parameters: @@ -32,14 +32,14 @@ resources: Keystone: type: AWS::CloudFormation::Stack TemplateURL: - list_join: + Fn::Join: - {get_param: TemplateRoot} - keystone.yaml parameters: AdminToken: {get_param: KeystoneAdminToken} KeyName: default KeystoneDSN: - list_join: + Fn::Join: - 'mysql://keystone:' - {get_attr: [ MySQL , KeystonePassword ]} - '@' @@ -48,13 +48,13 @@ resources: Glance: type: AWS::CloudFormation::Stack TemplateURL: - list_join: + Fn::Join: - {get_param: TemplateRoot} - glance.yaml parameters: KeyName: default HeatDSN: - list_join: + Fn::Join: - 'mysql://glance:' - {get_attr: [ MySQL, GlancePassword ] } - '@' @@ -63,13 +63,13 @@ resources: Heat: type: AWS::CloudFormation::Stack TemplateURL: - list_join: + Fn::Join: - {get_param: TemplateRoot} - heat.yaml parameters: KeyName: default HeatDSN: - list_join: + Fn::Join: - 'mysql://heat:' - {get_attr: [ MySQL, HeatPassword ] } - '@' diff --git a/block-storage-nfs.yaml b/block-storage-nfs.yaml index 8346c1f6..49473167 100644 --- a/block-storage-nfs.yaml +++ b/block-storage-nfs.yaml @@ -1,4 +1,4 @@ -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 description: 'Common Block Storage Configuration' parameters: BlockStorageImage: @@ -52,13 +52,13 @@ resources: keystone: host: {get_attr: [controller0, networks, ctlplane, 0]} cinder: - db: {list_join: ['', ['mysql://cinder:unset@', {get_attr: [controller0, networks, ctlplane, 0]} , '/cinder']]} + db: {"Fn::Join": ['', ['mysql://cinder:unset@', {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} , '/cinder']]} volume_size_mb: '5000' service-password: get_param: CinderPassword include_nfs_backend: 'true' nfs_shares: - - {list_join: ['', [{get_attr: [controller0, networks, ctlplane, 0]} , ':/mnt/state/var/lib/nfs_share']]} + - {"Fn::Join": ['', [{get_attr: [controller0, networks, ctlplane, 0]} , ':/mnt/state/var/lib/nfs_share']]} admin-password: {get_param: AdminPassword} rabbit: host: {get_attr: [controller0, networks, ctlplane, 0]} diff --git a/block-storage.yaml b/block-storage.yaml index 761de523..e75e773f 100644 --- a/block-storage.yaml +++ b/block-storage.yaml @@ -1,4 +1,4 @@ -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 description: 'Common Block Storage Configuration' parameters: BlockStorageImage: @@ -8,12 +8,6 @@ parameters: default: baremetal description: Flavor for block storage nodes to request when deploying. type: string - NeutronNetworkType: - type: string - default: 'gre' - NeutronEnableTunnelling: - type: string - default: True resources: BlockStorage0: type: OS::Nova::Server @@ -24,14 +18,14 @@ resources: key_name: {get_param: KeyName} user_data_format: SOFTWARE_CONFIG BlockStorage0Deployment: + depends_on: [controller0AllNodesDeployment] type: OS::Heat::StructuredDeployment properties: server: {get_resource: BlockStorage0} config: {get_resource: BlockStorageConfig} input_values: - controller_host: {get_attr: [controller0, networks, ctlplane, 0]} - cinder_dsn: {list_join: ['', ['mysql://cinder:unset@', {get_attr: [controller0, networks, ctlplane, 0]} , '/cinder']]} - neutron_local_ip: {get_attr: [BlockStorage0 , networks, ctlplane, 0]} + controller_virtual_ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} + cinder_dsn: {"Fn::Join": ['', ['mysql://cinder:unset@', {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} , '/cinder']]} signal_transport: NO_SIGNAL BlockStorageConfig: type: OS::Heat::StructuredConfig @@ -40,7 +34,7 @@ resources: config: admin-password: {get_param: AdminPassword} keystone: - host: {get_input: controller_host} + host: {get_input: controller_virtual_ip} cinder: db: {get_input: cinder_dsn} volume_size_mb: @@ -50,15 +44,9 @@ resources: iscsi-helper: get_param: CinderISCSIHelper rabbit: - host: {get_input: controller_host} + host: {get_input: controller_virtual_ip} 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 + glance: + host: {get_input: controller_virtual_ip} + port: {get_param: GlancePort} diff --git a/controller.yaml b/controller.yaml index 1b0cb541..8aac819f 100644 --- a/controller.yaml +++ b/controller.yaml @@ -1,6 +1,6 @@ description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL server,Dedicated RabbitMQ Server -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 parameters: AdminToken: type: string @@ -130,7 +130,7 @@ resources: password: {get_param: NeutronDBPassword} glance: db: - list_join: + Fn::Join: - '' - - 'mysql://glance:' - {get_param: GlanceDBPassword} @@ -141,7 +141,7 @@ resources: get_param: GlanceLogFile heat: db: - list_join: + Fn::Join: - '' - - 'mysql://heat:' - {get_param: HeatDBPassword} @@ -168,14 +168,14 @@ resources: host: '127.0.0.1' db: - list_join: + Fn::Join: - '' - - 'mysql://keystone:' - {get_param: KeystoneDBPassword} - '@127.0.0.1/keystone' nova: db: - list_join: + Fn::Join: - '' - - 'mysql://nova:' - {get_param: NovaDBPassword} @@ -184,7 +184,7 @@ resources: host: '127.0.0.1' ovs_db: - list_join: + Fn::Join: - '' - - 'mysql://neutron:' - {get_param: NeutronDBPassword} diff --git a/examples/scale_map_result_hot_blacklist.yaml b/examples/scale_map_result_hot_blacklist.yaml new file mode 100644 index 00000000..decb0d5e --- /dev/null +++ b/examples/scale_map_result_hot_blacklist.yaml @@ -0,0 +1,367 @@ +description: examples/scale_map_hot.yaml +heat_template_version: '2013-05-23' +resources: + ComputeUser: + properties: + Policies: + - get_param: ComputeAccessPolicy + type: AWS::IAM::User + GlobalAccessPolicy: + type: OS::Heat::AccessPolicy + NovaCompute0: + metadata: + os-collect-config: + cfn: + access_key_id: + get_resource: NovaCompute0Key + path: NovaCompute0Config.Metadata + secret_access_key: + get_attr: + - NovaCompute0Key + - SecretAccessKey + stack_name: + get_param: AWS::StackName + properties: + image: + get_param: ComputeImage + type: OS::Nova::Server + NovaCompute0CompletionCondition: + depends_on: notcompute + properties: + Count: '1' + Handle: + get_resource: NovaCompute0CompletionHandle + Timeout: '1800' + type: AWS::CloudFormation::WaitCondition + NovaCompute0CompletionHandle: + type: AWS::CloudFormation::WaitConditionHandle + NovaCompute0Config: + metadata: + completion-handle: + get_resource: NovaCompute0CompletionHandle + hosts: + list_join: + - ' + + ' + - - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute0 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute0 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute0 + - show + - local + - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute3 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute3 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute3 + - show + - local + - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute4 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute4 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute4 + - show + - local + os-collect-config: + cfn: + access_key_id: + get_resource: NovaCompute0Key + path: NovaCompute0Config.Metadata + secret_access_key: + get_attr: + - NovaCompute0Key + - SecretAccessKey + stack_name: + get_param: AWS::StackName + type: AWS::AutoScaling::LaunchConfiguration + NovaCompute0Key: + properties: + UserName: + get_param: ComputeUser + type: AWS::IAM::AccessKey + NovaCompute3: + metadata: + os-collect-config: + cfn: + access_key_id: + get_resource: NovaCompute3Key + path: NovaCompute3Config.Metadata + secret_access_key: + get_attr: + - NovaCompute3Key + - SecretAccessKey + stack_name: + get_param: AWS::StackName + properties: + image: + get_param: ComputeImage + type: OS::Nova::Server + NovaCompute3CompletionCondition: + depends_on: notcompute + properties: + Count: '1' + Handle: + get_resource: NovaCompute3CompletionHandle + Timeout: '1800' + type: AWS::CloudFormation::WaitCondition + NovaCompute3CompletionHandle: + type: AWS::CloudFormation::WaitConditionHandle + NovaCompute3Config: + metadata: + completion-handle: + get_resource: NovaCompute3CompletionHandle + hosts: + list_join: + - ' + + ' + - - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute0 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute0 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute0 + - show + - local + - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute3 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute3 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute3 + - show + - local + - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute4 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute4 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute4 + - show + - local + os-collect-config: + cfn: + access_key_id: + get_resource: NovaCompute3Key + path: NovaCompute3Config.Metadata + secret_access_key: + get_attr: + - NovaCompute3Key + - SecretAccessKey + stack_name: + get_param: AWS::StackName + type: AWS::AutoScaling::LaunchConfiguration + NovaCompute3Key: + properties: + UserName: + get_param: ComputeUser + type: AWS::IAM::AccessKey + NovaCompute4: + metadata: + os-collect-config: + cfn: + access_key_id: + get_resource: NovaCompute4Key + path: NovaCompute4Config.Metadata + secret_access_key: + get_attr: + - NovaCompute4Key + - SecretAccessKey + stack_name: + get_param: AWS::StackName + properties: + image: + get_param: ComputeImage + type: OS::Nova::Server + NovaCompute4CompletionCondition: + depends_on: notcompute + properties: + Count: '1' + Handle: + get_resource: NovaCompute4CompletionHandle + Timeout: '1800' + type: AWS::CloudFormation::WaitCondition + NovaCompute4CompletionHandle: + type: AWS::CloudFormation::WaitConditionHandle + NovaCompute4Config: + metadata: + completion-handle: + get_resource: NovaCompute4CompletionHandle + hosts: + list_join: + - ' + + ' + - - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute0 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute0 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute0 + - show + - local + - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute3 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute3 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute3 + - show + - local + - list_join: + - ' ' + - - Fn::Select: + - 0 + - Fn::Select: + - ctlplane + - get_attr: + - NovaCompute4 + - networks + - Fn::Select: + - name + - get_attr: + - NovaCompute4 + - show + - list_join: + - . + - - Fn::Select: + - name + - get_attr: + - NovaCompute4 + - show + - local + os-collect-config: + cfn: + access_key_id: + get_resource: NovaCompute4Key + path: NovaCompute4Config.Metadata + secret_access_key: + get_attr: + - NovaCompute4Key + - SecretAccessKey + stack_name: + get_param: AWS::StackName + type: AWS::AutoScaling::LaunchConfiguration + NovaCompute4Key: + properties: + UserName: + get_param: ComputeUser + type: AWS::IAM::AccessKey diff --git a/examples/source_hot.yaml b/examples/source_hot.yaml index 7b47f2b5..15314886 100644 --- a/examples/source_hot.yaml +++ b/examples/source_hot.yaml @@ -13,4 +13,4 @@ resources: Path: examples/lib_hot.yaml SubKey: resources.GenericB parameters: - ImportantValue: {list_join: [ '', ['one', 'two', 'three']]} + ImportantValue: {"Fn::Join": [ '', ['one', 'two', 'three']]} diff --git a/nagios3.yaml b/nagios3.yaml index 06cbb6a2..1e0a4615 100644 --- a/nagios3.yaml +++ b/nagios3.yaml @@ -12,7 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. # -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 description: Deploy Nagios parameters: adm_web_passwd: diff --git a/nfs-server-source.yaml b/nfs-server-source.yaml index 63a15020..8e32e963 100644 --- a/nfs-server-source.yaml +++ b/nfs-server-source.yaml @@ -7,7 +7,7 @@ resources: shares: Merge::Map: NovaCompute0: - list_join: + Fn::Join: - ' ' - - get_attr: - NovaCompute0 @@ -15,7 +15,7 @@ resources: - ctlplane - 0 BlockStorage0: - list_join: + Fn::Join: - ' ' - - get_attr: - BlockStorage0 diff --git a/nova-compute-config.yaml b/nova-compute-config.yaml index cb428ea6..90387d79 100644 --- a/nova-compute-config.yaml +++ b/nova-compute-config.yaml @@ -9,6 +9,7 @@ resources: compute_libvirt_type: { get_input: nova_compute_libvirt_type } db: {get_input: nova_dsn} 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} diff --git a/nova-compute-instance.yaml b/nova-compute-instance.yaml index 562d0ad1..f8b5ebee 100644 --- a/nova-compute-instance.yaml +++ b/nova-compute-instance.yaml @@ -1,4 +1,4 @@ -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 description: 'Nova Compute' parameters: AdminPassword: @@ -136,6 +136,8 @@ parameters: type: string NovaDSN: type: string + NovaPublicIP: + type: string NeutronDSN: type: string NeutronBridgeMappings: @@ -170,6 +172,12 @@ parameters: type: string description: The image ID for live-updates to the overcloud compute nodes. default: '' + DefaultSignalTransport: + default: CFN_SIGNAL + description: Transport to use for software-config signals. + type: string + constraints: + - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ] resources: NovaCompute0: type: OS::Nova::Server @@ -183,8 +191,8 @@ resources: networks: - network: ctlplane user_data_format: SOFTWARE_CONFIG - NovaCompute0Deploy: - depends_on: [controller0AllNodes] + NovaCompute0Deployment: + depends_on: [controller0AllNodesDeployment] type: OS::Heat::StructuredDeployment properties: signal_transport: NO_SIGNAL @@ -194,6 +202,7 @@ resources: 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} @@ -228,14 +237,15 @@ resources: nova_image: {get_param: NovaImage} live_update_image_id: {get_param: LiveUpdateComputeImage} ntp_server: {get_param: NtpServer} - NovaCompute0AllNodesDeploy: + NovaCompute0AllNodesDeployment: depends_on: [NovaCompute0Passthrough] type: OS::Heat::StructuredDeployment properties: + signal_transport: {get_param: DefaultSignalTransport} config: {get_param: AllNodesConfig} server: {get_resource: NovaCompute0} NovaCompute0Passthrough: - depends_on: [NovaCompute0Deploy] + depends_on: [NovaCompute0Deployment] type: OS::Heat::StructuredDeployment properties: config: {get_resource: NovaComputePassthrough} diff --git a/overcloud-source.yaml b/overcloud-source.yaml index 6449f8df..63ebb207 100644 --- a/overcloud-source.yaml +++ b/overcloud-source.yaml @@ -1,6 +1,6 @@ description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL server,Dedicated RabbitMQ Server,Group of Nova Computes -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 parameters: AdminPassword: default: unset @@ -106,9 +106,22 @@ parameters: 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. + 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" + 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 - default: '' NeutronPassword: default: unset description: The password for the neutron service account, used by neutron agents. @@ -159,14 +172,19 @@ parameters: hidden: true NeutronFlatNetworks: type: string - default: '' - description: If set, flat networks to configure in neutron plugins. + default: 'datacentre' + description: | + If set, flat networks to configure in neutron plugins. Defaults to + 'datacentre' to permit external network creation. HypervisorNeutronPhysicalBridge: - default: '' - description: An OVS bridge to create on each hypervisor. + 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: '' + default: 'eth0' description: What interface to add to the HypervisorNeutronPhysicalBridge. type: string NeutronPublicInterface: @@ -283,6 +301,12 @@ parameters: description: Keystone key for signing tokens. type: string hidden: true + DefaultSignalTransport: + default: CFN_SIGNAL + description: Transport to use for software-config signals. + type: string + constraints: + - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ] resources: ControlVirtualIP: type: OS::Neutron::Port @@ -295,6 +319,10 @@ resources: type: OS::Heat::RandomString properties: length: 10 + MysqlRootPassword: + type: OS::Heat::RandomString + properties: + length: 10 PublicVirtualIP: type: OS::Neutron::Port properties: @@ -308,34 +336,53 @@ resources: length: 20 salt: get_param: RabbitCookieSalt - NovaCompute0Deploy: + NovaCompute0Deployment: type: FileInclude Path: nova-compute-instance.yaml - SubKey: resources.NovaCompute0Deploy + SubKey: resources.NovaCompute0Deployment parameters: + DefaultSignalTransport: + get_param: DefaultSignalTransport NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} - NovaDSN: {list_join: ['', ['mysql://nova:unset@', {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}, '/nova']]} - CeilometerDSN: {list_join: ['', ['mysql://ceilometer:unset@', {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}, '/ceilometer']]} - NeutronDSN: {list_join: ['', ['mysql://neutron:unset@', {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}, '/ovs_neutron']]} + NovaDSN: + Fn::Join: + - '' + - - mysql://nova:unset@ + - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} + - /nova + NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]} + CeilometerDSN: + Fn::Join: + - '' + - - mysql://ceilometer:unset@ + - *compute_database_host + - /ceilometer + NeutronDSN: + Fn::Join: + - '' + - - mysql://neutron:unset@ + - *compute_database_host + - /ovs_neutron NeutronNetworkType: "gre" NeutronEnableTunnelling: "True" NeutronFlatNetworks: get_param: NeutronFlatNetworks - NeutronNetworkVLANRanges: "" + NeutronNetworkVLANRanges: + get_param: NeutronNetworkVLANRanges NeutronPhysicalBridge: get_param: HypervisorNeutronPhysicalBridge NeutronPublicInterface: get_param: HypervisorNeutronPublicInterface NeutronBridgeMappings: get_param: NeutronBridgeMappings - NovaCompute0AllNodes: + NovaCompute0AllNodesDeployment: type: FileInclude Path: nova-compute-instance.yaml - SubKey: resources.NovaCompute0AllNodesDeploy + SubKey: resources.NovaCompute0AllNodesDeployment parameters: AllNodesConfig: {get_resource: allNodesConfig} NovaCompute0Passthrough: @@ -374,8 +421,16 @@ resources: - controller0 - show nodeid: {get_input: bootstack_nodeid} + database: + host: &database_host + {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} cinder: - db: mysql://cinder:unset@localhost/cinder + db: + Fn::Join: + - '' + - - mysql://cinder:unset@ + - *database_host + - /cinder volume_size_mb: get_param: CinderLVMLoopDeviceSize service-password: @@ -400,7 +455,12 @@ resources: registry: host: {get_input: controller_virtual_ip} backend: swift - db: mysql://glance:unset@localhost/glance + db: + Fn::Join: + - '' + - - mysql://glance:unset@ + - *database_host + - /glance host: get_input: controller_virtual_ip port: @@ -422,7 +482,12 @@ resources: admin_tenant_name: service admin_user: heat auth_encryption_key: unset___________ - db: mysql://heat:unset@localhost/heat + db: + Fn::Join: + - '' + - - mysql://heat:unset@ + - *database_host + - /heat 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} @@ -435,7 +500,12 @@ resources: controller0: {get_attr: [controller0, show, name]} keystone: - db: mysql://keystone:unset@localhost/keystone + db: + Fn::Join: + - '' + - - mysql://keystone:unset@ + - *database_host + - /keystone host: get_input: controller_virtual_ip ca_certificate: {get_param: KeystoneCACertificate} @@ -443,12 +513,14 @@ resources: signing_certificate: {get_param: KeystoneSigningCertificate} mysql: innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize} + local_bind: true + root-password: {get_resource: MysqlRootPassword} nodes: Merge::Map: controller0: ip: {get_attr: [controller0, networks, ctlplane, 0]} cluster_name: - list_join: + Fn::Join: - '-' - - 'tripleo' - {get_resource: MysqlClusterUniquePart} @@ -460,6 +532,7 @@ resources: enable_tunneling: 'True' local_ip: get_input: controller_host + network_vlan_ranges: {get_param: NeutronNetworkVLANRanges} bridge_mappings: {get_param: NeutronBridgeMappings} public_interface: get_param: NeutronPublicInterface @@ -469,13 +542,23 @@ resources: get_param: NeutronPublicInterfaceDefaultRoute physical_bridge: br-ex tenant_network_type: gre - ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8 + ovs_db: + Fn::Join: + - '' + - - mysql://neutron:unset@ + - *database_host + - /ovs_neutron?charset=utf8 service-password: get_param: NeutronPassword dnsmasq-options: get_param: NeutronDnsmasqOptions ceilometer: - db: mysql://ceilometer:unset@localhost/ceilometer + db: + Fn::Join: + - '' + - - mysql://ceilometer:unset@ + - *database_host + - /ceilometer metering_secret: {get_param: CeilometerMeteringSecret} service-password: get_param: CeilometerPassword @@ -487,7 +570,12 @@ resources: get_param: SnmpdReadonlyUserPassword nova: compute_driver: libvirt.LibvirtDriver - db: mysql://nova:unset@localhost/nova + db: + Fn::Join: + - '' + - - mysql://nova:unset@ + - *database_host + - /nova default_floating_pool: ext-net host: {get_input: controller_virtual_ip} @@ -586,6 +674,13 @@ resources: - 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 @@ -624,10 +719,11 @@ resources: networks: - network: ctlplane user_data_format: SOFTWARE_CONFIG - controller0AllNodes: + controller0AllNodesDeployment: depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0Passthrough] type: OS::Heat::StructuredDeployment properties: + signal_transport: {get_param: DefaultSignalTransport} config: {get_resource: allNodesConfig} server: {get_resource: controller0} controller0Deployment: @@ -642,19 +738,19 @@ resources: controller_virtual_ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} heat.watch_server_url: - list_join: + Fn::Join: - '' - - 'http://' - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} - ':8003' heat.metadata_server_url: - list_join: + Fn::Join: - '' - - 'http://' - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} - ':8000' heat.waitcondition_server_url: - list_join: + Fn::Join: - '' - - 'http://' - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} @@ -665,36 +761,60 @@ resources: config: completion-signal: {get_input: deploy_signal_id} hosts: - list_join: + Fn::Join: - "\n" - - - list_join: + - - Fn::Join: - "\n" - Merge::Map: NovaCompute0: - list_join: + Fn::Join: - ' ' - - {get_attr: [NovaCompute0, networks, ctlplane, 0]} - {get_attr: [NovaCompute0, show, name]} - - list_join: + - Fn::Join: - '.' - - {get_attr: [NovaCompute0, show, name]} - 'novalocal' - - list_join: + - Fn::Join: + - "\n" + - Merge::Map: + BlockStorage0: + Fn::Join: + - ' ' + - - {get_attr: [BlockStorage0, networks, ctlplane, 0]} + - {get_attr: [BlockStorage0, show, name]} + - Fn::Join: + - '.' + - - {get_attr: [BlockStorage0, show, name]} + - 'novalocal' + - Fn::Join: + - "\n" + - Merge::Map: + SwiftStorage0: + Fn::Join: + - ' ' + - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]} + - {get_attr: [SwiftStorage0, show, name]} + - Fn::Join: + - '.' + - - {get_attr: [SwiftStorage0, show, name]} + - 'novalocal' + - Fn::Join: - "\n" - Merge::Map: controller0: - list_join: + Fn::Join: - ' ' - - {get_attr: [controller0, networks, ctlplane, 0]} - {get_attr: [controller0, show, name]} - - list_join: + - Fn::Join: - '.' - - {get_attr: [controller0, show, name]} - 'novalocal' - {get_param: CloudName} rabbit: nodes: - list_join: + Fn::Join: - ',' - Merge::Map: controller0: @@ -722,7 +842,7 @@ outputs: KeystoneURL: description: URL for the Overcloud Keystone service value: - list_join: + Fn::Join: - '' - - http:// - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} @@ -1,6 +1,5 @@ [metadata] name = tripleo-heat-templates -version = 0.0.1 summary = Heat templates for deploying OpenStack with OpenStack. description-file = README.md diff --git a/swift-deploy.yaml b/swift-deploy.yaml index c4fd757b..e3f475c0 100644 --- a/swift-deploy.yaml +++ b/swift-deploy.yaml @@ -25,29 +25,29 @@ resources: swift_hash_suffix: {get_param: SwiftHashSuffix} swift_password: {get_param: SwiftPassword} swift_devices: - list_join: + Fn::Join: - ', ' - Merge::Map: controller0: - list_join: + Fn::Join: - '' - - 'r1z1-' - {get_attr: [controller0, networks, ctlplane, 0]} - ':%PORT%/d1' SwiftStorage0: - list_join: + Fn::Join: - '' - - 'r1z1-' - {get_attr: [SwiftStorage0, networks, ctlplane, 0]} - ':%PORT%/d1' swift_proxy_memcache: - list_join: + Fn::Join: - ',' - Merge::Map: controller0: - list_join: + Fn::Join: - ', ' - - - list_join: + - - Fn::Join: - '' - - {get_attr: [controller0, networks, ctlplane, 0]} - ':11211' diff --git a/swift-storage-source.yaml b/swift-storage-source.yaml index 224e7712..40e0573b 100644 --- a/swift-storage-source.yaml +++ b/swift-storage-source.yaml @@ -1,4 +1,4 @@ -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 description: 'Common Swift Storage Configuration' parameters: SwiftStorageImage: @@ -53,29 +53,29 @@ resources: swift_hash_suffix: {get_param: SwiftHashSuffix} swift_password: {get_param: SwiftPassword} swift_devices: - list_join: + Fn::Join: - ', ' - Merge::Map: controller0: - list_join: + Fn::Join: - '' - - 'r1z1-' - {get_attr: [controller0, networks, ctlplane, 0]} - ':%PORT%/d1' SwiftStorage0: - list_join: + Fn::Join: - '' - - 'r1z1-' - {get_attr: [SwiftStorage0, networks, ctlplane, 0]} - ':%PORT%/d1' swift_proxy_memcache: - list_join: + Fn::Join: - ',' - Merge::Map: controller0: - list_join: + Fn::Join: - ', ' - - - list_join: + - - Fn::Join: - '' - - {get_attr: [controller0, networks, ctlplane, 0]} - ':11211' diff --git a/test_merge.bash b/test_merge.bash index d076f50a..de29d075 100755 --- a/test_merge.bash +++ b/test_merge.bash @@ -36,6 +36,8 @@ run_test "python $merge_py --hot examples/source_include_subkey_hot.yaml" exampl run_test "python $merge_py --hot examples/launchconfig1_hot.yaml examples/launchconfig2_hot.yaml" examples/launchconfig_result_hot.yaml run_test "python $merge_py --hot --scale NovaCompute=3 examples/scale1_hot.yaml" examples/scale_result_hot.yaml run_test "python $merge_py --hot --scale NovaCompute=3 examples/scale_map_hot.yaml" examples/scale_map_result_hot.yaml +run_test "python $merge_py --hot --scale NovaCompute=5,1,2 examples/scale_map_hot.yaml" examples/scale_map_result_hot_blacklist.yaml +run_test "python $merge_py --hot --scale NovaCompute=3, examples/scale_map_hot.yaml" examples/scale_map_result_hot.yaml echo trap - EXIT exit $fail diff --git a/tripleo_heat_merge/merge.py b/tripleo_heat_merge/merge.py index 3549769d..49aee6f2 100644 --- a/tripleo_heat_merge/merge.py +++ b/tripleo_heat_merge/merge.py @@ -26,7 +26,7 @@ class Cfn(object): class Hot(object): base_template = { - 'heat_template_version': '2014-10-16', + 'heat_template_version': '2013-05-23', 'description': [] } get_resource = 'get_resource' @@ -80,6 +80,8 @@ def apply_scaling(template, scaling, in_copies=None): in_copies is reset to None when a dict {'Merge::Map': someobject} is encountered. + + :param scaling: A dict of prefix -> (count, blacklists). """ in_copies = dict(in_copies or {}) # Shouldn't be needed but to avoid unexpected side effects/bugs we short @@ -125,7 +127,7 @@ def scale_value(value, scaling, in_copies): """Scale out a value. :param value: The value to scale (not a container). - :param scaling: The scaling map to use. + :param scaling: The scaling map (prefix-> (copies, blacklist) to use. :param in_copies: What containers we're currently copying. :return: An iterator of the new values for the value as tuples: (prefix, copy_num, value). E.g. Compute0, 1, Compute1Foo @@ -134,7 +136,7 @@ def scale_value(value, scaling, in_copies): - and that prefix is not in in_copies """ if isinstance(value, (str, unicode)): - for prefix, copies in scaling.items(): + for prefix, (copies, blacklist) in scaling.items(): if not value.startswith(prefix): continue suffix = value[len(prefix):] @@ -144,7 +146,8 @@ def scale_value(value, scaling, in_copies): return else: for n in range(copies): - yield prefix, n, prefix[:-1] + str(n) + suffix + if n not in blacklist: + yield prefix, n, prefix[:-1] + str(n) + suffix return yield None, None, value else: @@ -156,9 +159,11 @@ def parse_scaling(scaling_args): scaling_args = scaling_args or [] result = {} for item in scaling_args: - key, value = item.split('=') - value = int(value) - result[key + '0'] = value + key, values = item.split('=') + values = values.split(',') + value = int(values[0]) + blacklist = frozenset(int(v) for v in values[1:] if v) + result[key + '0'] = value, blacklist return result @@ -251,10 +256,12 @@ def main(argv=None): help='File to write output to. - for stdout', default='-') parser.add_argument('--scale', action="append", - help="Names to scale out. Pass Prefix=1 to cause a key Prefix0Foo to " + help="Names to scale out. Pass Prefix=2 to cause a key Prefix0Foo to " "be copied to Prefix1Foo in the output, and value Prefix0Bar to be" "renamed to Prefix1Bar inside that copy, or copied to Prefix1Bar " - "outside of any copy.") + "outside of any copy. Pass Prefix=3,1 to cause Prefix1* to be elided" + "when scaling Prefix out. Prefix=4,1,2 will likewise elide Prefix1 and" + "Prefix2.") parser.add_argument( '--change-image-params', action='store_true', default=False, help="Change parameters in templates to match resource names. This was " diff --git a/undercloud-bm-nova-deploy.yaml b/undercloud-bm-nova-deploy.yaml index 3df85970..d328449c 100644 --- a/undercloud-bm-nova-deploy.yaml +++ b/undercloud-bm-nova-deploy.yaml @@ -12,7 +12,7 @@ parameters: description: Timeout for PXE deployment of baremetal nodes type: number resources: - 01_undercloudNovaDeployment: + undercloudNovaDeployment: type: OS::Heat::StructuredDeployment properties: config: {get_resource: undercloudNovaConfig} diff --git a/undercloud-source.yaml b/undercloud-source.yaml index ef8d7cd4..a4adea08 100644 --- a/undercloud-source.yaml +++ b/undercloud-source.yaml @@ -1,5 +1,5 @@ description: All-in-one baremetal OpenStack and all dependencies. -heat_template_version: 2014-10-16 +heat_template_version: 2013-05-23 parameters: AdminPassword: default: unset @@ -181,6 +181,12 @@ parameters: description: Keystone key for signing tokens. type: string hidden: true + DefaultSignalTransport: + default: CFN_SIGNAL + description: Transport to use for software-config signals. + type: string + constraints: + - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ] resources: RabbitCookie: type: OS::Heat::RandomString @@ -188,6 +194,10 @@ resources: length: 20 salt: get_param: RabbitCookieSalt + MysqlRootPassword: + type: OS::Heat::RandomString + properties: + length: 10 undercloudConfig: type: OS::Heat::StructuredConfig properties: @@ -270,6 +280,7 @@ resources: signing_certificate: {get_param: KeystoneSigningCertificate} mysql: innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize} + root-password: {get_resource: MysqlRootPassword} neutron: host: 127.0.0.1 ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8 @@ -319,11 +330,13 @@ resources: networks: - network: ctlplane user_data_format: SOFTWARE_CONFIG - 99_undercloudDeployment: + undercloudDeployment: + depends_on: [undercloudPassthroughDeployment] type: OS::Heat::StructuredDeployment properties: config: {get_resource: undercloudConfig} server: {get_resource: undercloud} + signal_transport: {get_param: DefaultSignalTransport} input_values: bootstack_nodeid: get_attr: @@ -337,24 +350,25 @@ resources: - ctlplane - 0 heat.watch_server_url: - list_join: + Fn::Join: - '' - - 'http://' - get_attr: [undercloud, networks, ctlplane, 0] - ':8003' heat.metadata_server_url: - list_join: + Fn::Join: - '' - - 'http://' - {get_attr: [undercloud, networks, ctlplane, 0]} - ':8000' heat.waitcondition_server_url: - list_join: + Fn::Join: - '' - - 'http://' - {get_attr: [undercloud, networks, ctlplane, 0]} - ':8000/v1/waitcondition' - 00_undercloudPassthroughDeployment: + undercloudPassthroughDeployment: + depends_on: [undercloudNovaDeployment] type: OS::Heat::StructuredDeployment properties: config: {get_resource: undercloudPassthroughConfig} diff --git a/undercloud-vm-ironic-deploy.yaml b/undercloud-vm-ironic-deploy.yaml index 8fff9d54..6e778e59 100644 --- a/undercloud-vm-ironic-deploy.yaml +++ b/undercloud-vm-ironic-deploy.yaml @@ -12,7 +12,8 @@ parameters: type: string hidden: true resources: - 01_undercloudNovaDeployment: + undercloudNovaDeployment: + depends_on: [undercloudIronicDeployment] type: OS::Heat::StructuredDeployment properties: config: {get_resource: undercloudNovaConfig} @@ -20,7 +21,7 @@ resources: signal_transport: NO_SIGNAL input_values: nova_service_password: {get_param: NovaPassword} - 02_undercloudIronicDeployment: + undercloudIronicDeployment: type: OS::Heat::StructuredDeployment properties: config: {get_resource: undercloudIronicConfig} diff --git a/undercloud-vm-nova-deploy.yaml b/undercloud-vm-nova-deploy.yaml index 14809384..ebd14ef6 100644 --- a/undercloud-vm-nova-deploy.yaml +++ b/undercloud-vm-nova-deploy.yaml @@ -24,7 +24,7 @@ parameters: description: What username to ssh to the virtual power host with. type: string resources: - 01_undercloudNovaDeployment: + undercloudNovaDeployment: type: OS::Heat::StructuredDeployment properties: config: {get_resource: undercloudNovaConfig} |