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 | 55 | ||||
-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 | 3 | ||||
-rw-r--r-- | nova-compute-instance.yaml | 5 | ||||
-rw-r--r-- | overcloud-source.yaml | 154 | ||||
-rw-r--r-- | ssl-source.yaml | 3 | ||||
-rw-r--r-- | swift-deploy.yaml | 12 | ||||
-rw-r--r-- | swift-source.yaml | 4 | ||||
-rw-r--r-- | swift-storage-source.yaml | 18 | ||||
-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 | 38 | ||||
-rw-r--r-- | undercloud-vm-ironic-deploy.yaml | 5 | ||||
-rw-r--r-- | undercloud-vm-nova-deploy.yaml | 2 |
22 files changed, 605 insertions, 138 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 6e5d503c..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 @@ -30,9 +24,8 @@ resources: 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 @@ -41,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,42 +43,10 @@ resources: get_param: CinderPassword iscsi-helper: get_param: CinderISCSIHelper - admin-password: {get_param: AdminPassword} 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 - 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 + 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 081ca81a..cb428ea6 100644 --- a/nova-compute-config.yaml +++ b/nova-compute-config.yaml @@ -40,7 +40,8 @@ resources: service-password: {get_input: neutron_password} admin-password: {get_input: admin_password} rabbit: - username: {get_input: rabbit_user_name} + host: {get_input: rabbit_host} + username: {get_input: rabbit_username} password: {get_input: rabbit_password} live-update: host: {get_input: live_update_host} diff --git a/nova-compute-instance.yaml b/nova-compute-instance.yaml index de5787a2..86115293 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: @@ -77,6 +77,8 @@ parameters: default: '' description: A port to add to the NeutronPhysicalBridge. type: string + RabbitHost: + type: string RabbitUserName: type: string RabbitPassword: @@ -216,6 +218,7 @@ resources: 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} diff --git a/overcloud-source.yaml b/overcloud-source.yaml index bf3f85ec..93a68344 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 @@ -283,10 +283,6 @@ parameters: description: Keystone key for signing tokens. type: string hidden: true - BootstrapNodeResource: - default: controller0 - description: Name of the bootstrap controller resource - type: string resources: ControlVirtualIP: type: OS::Neutron::Port @@ -321,9 +317,25 @@ resources: 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]} - 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']]} + RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} + NovaDSN: + Fn::Join: + - '' + - - mysql://nova:unset@ + - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} + - /nova + 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: @@ -364,10 +376,29 @@ resources: public_interface_ip: get_param: NeutronPublicInterfaceIP bootstrap_host: - bootstrap_nodeid: {get_attr: [{get_param: BootstrapNodeResource}, show, name]} + bootstrap_nodeid: + Fn::Select: + - 0 + - Fn::Select: + - 0 + - Merge::Map: + controller0: + - Fn::Select: + - name + - get_attr: + - 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: @@ -392,7 +423,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: @@ -414,7 +450,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} @@ -427,7 +468,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} @@ -435,12 +481,13 @@ resources: signing_certificate: {get_param: KeystoneSigningCertificate} mysql: innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize} + local_bind: true nodes: Merge::Map: controller0: ip: {get_attr: [controller0, networks, ctlplane, 0]} cluster_name: - list_join: + Fn::Join: - '-' - - 'tripleo' - {get_resource: MysqlClusterUniquePart} @@ -461,13 +508,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 @@ -479,7 +536,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} @@ -487,6 +549,7 @@ resources: service-password: get_param: NovaPassword rabbit: + host: {get_input: controller_virtual_ip} username: get_param: RabbitUserName password: @@ -577,6 +640,10 @@ resources: - name: heat_cfn port: 8000 net_binds: *public_binds + - name: mysql + port: 3306 + extra_server_params: + - backup - name: nova_ec2 port: 8773 - name: nova_osapi @@ -591,6 +658,11 @@ resources: - 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: @@ -628,19 +700,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]} @@ -651,36 +723,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: @@ -708,7 +804,7 @@ outputs: KeystoneURL: description: URL for the Overcloud Keystone service value: - list_join: + Fn::Join: - '' - - http:// - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} diff --git a/ssl-source.yaml b/ssl-source.yaml index 09ea52a2..ac1ef42d 100644 --- a/ssl-source.yaml +++ b/ssl-source.yaml @@ -20,6 +20,9 @@ resources: properties: group: os-apply-config config: + ssl: + ca_certificate: + get_input: ssl_ca_certificate stunnel: cert: get_input: ssl_certificate diff --git a/swift-deploy.yaml b/swift-deploy.yaml index eaa01317..239a4d48 100644 --- a/swift-deploy.yaml +++ b/swift-deploy.yaml @@ -21,29 +21,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-source.yaml b/swift-source.yaml index a0336872..9c7b04f5 100644 --- a/swift-source.yaml +++ b/swift-source.yaml @@ -12,7 +12,7 @@ resources: replicas: 1 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 } + enable_tunnelling: { get_input: neutron_enable_tunnelling} + tenant_network_type: { get_input: neutron_tenant_network_type} diff --git a/swift-storage-source.yaml b/swift-storage-source.yaml index d6539663..3dbdda95 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: @@ -35,7 +35,7 @@ resources: config: {get_resource: SwiftKeystoneConfig} signal_transport: NO_SIGNAL input_values: - keystone_host: {get_attr: [controller0, networks, ctlplane, 0]} + keystone_host: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} SwiftStorage0Deploy: type: OS::Heat::StructuredDeployment properties: @@ -44,32 +44,34 @@ resources: signal_transport: NO_SIGNAL input_values: neutron_local_ip: {get_attr: [SwiftStorage0, networks, ctlplane, 0]} + neutron_tenant_network_type: {get_param: NeutronNetworkType} + neutron_enable_tunneling: {get_param: NeutronEnableTunnelling} 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 be743ce3..e09b3db5 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 @@ -198,13 +198,35 @@ resources: admin-token: get_param: AdminToken bootstrap_host: - bootstrap_nodeid: {get_attr: [undercloud, show, name]} + bootstrap_nodeid: + Fn::Select: + - 0 + - Fn::Select: + - 0 + - Merge::Map: + undercloud: + - Fn::Select: + - name + - get_attr: + - undercloud + - show nodeid: {get_input: bootstack_nodeid} bootstack: public_interface_ip: get_param: NeutronPublicInterfaceIP controller-address: get_input: controller_host + corosync: + bindnetaddr: {get_input: controller_host} + mcastport: 5577 + nodes: + Merge::Map: + controller0: + ip: {get_attr: [undercloud, networks, ctlplane, 0]} + pacemaker: + stonith_enabled : false + recheck_interval : 5 + quorum_policy : ignore ceilometer: db: mysql://ceilometer:unset@localhost/ceilometer metering_secret: {get_param: CeilometerMeteringSecret} @@ -297,7 +319,8 @@ resources: networks: - network: ctlplane user_data_format: SOFTWARE_CONFIG - 99_undercloudDeployment: + undercloudDeployment: + depends_on: [undercloudPassthroughDeployment] type: OS::Heat::StructuredDeployment properties: config: {get_resource: undercloudConfig} @@ -315,24 +338,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} |