diff options
author | Clint Byrum <clint@fewbar.com> | 2013-07-31 14:13:36 -0700 |
---|---|---|
committer | Clint Byrum <clint@fewbar.com> | 2013-08-14 20:27:58 -0700 |
commit | 46c4ce37173e23a1a5bc68f9f5b0921e6f83be8b (patch) | |
tree | b47dae5d58787e90a9807c9522989014f614b18a | |
parent | 99a1e7525015f4e710e3de6e041cffcd264153cf (diff) |
Load local IP using separate post-boot Metadata.
Previously we could not feed the IP of an instance into its own
Metadata because of circular dependency problems. 0.0.0.0 was used
with the heat-localip element to work around this problem. This
caused problems though, as heat-localip would edit the source local
heat metadata, which would make cfn-hup and/or os-collect-config think
that the Metadata had changed, causing it to restart everything every
time we query the Metadata, which was about every five minutes.
Now we can just query this inert LaunchConfiguration resource to get
its' Metadata once it is ready. This resource will only change when
legitimate things are changed in the stack, and so we won't restart
everything every five minutes anymore. Note that when the native Heat
DSL lands, the OS::Heat::SoftwareConfig resource is meant for exactly
this purpose.
After this is merged we no longer need the heat-localip element.
Fixes bug #1202322
Change-Id: Id06323ba43203570eeebfa5b3d03fa56c16c0c10
-rw-r--r-- | overcloud-source.yaml | 86 | ||||
-rw-r--r-- | undercloud-vm.yaml | 50 |
2 files changed, 116 insertions, 20 deletions
diff --git a/overcloud-source.yaml b/overcloud-source.yaml index 88e21f08..cb385ed1 100644 --- a/overcloud-source.yaml +++ b/overcloud-source.yaml @@ -34,6 +34,7 @@ Resources: Properties: AllowedResources: - notcompute + - notcomputeConfig Type: OS::Heat::AccessPolicy ComputeAccessPolicy: Properties: @@ -78,7 +79,11 @@ Resources: Policies: - Ref: AccessPolicy Type: AWS::IAM::User - notcompute: + notcomputeConfig: + Type: AWS::AutoScaling::LaunchConfiguration + Properties: + ImageId: '0' + InstanceType: '0' Metadata: OpenStack::Heat::Stack: {} Openstack::ImageBuilder::Elements: @@ -91,16 +96,22 @@ Resources: cinder: db: mysql://cinder:unset@localhost/cinder volume_size_mb: '5000' - controller-address: 0.0.0.0 + controller-address: + Fn::GetAtt: + - notcompute + - PrivateIp db-password: unset glance: db: mysql://glance:unset@localhost/glance - host: 0.0.0.0 + host: + Fn::GetAtt: + - notcompute + - PrivateIp os-collect-config: cfn: access_key_id: Ref: Key - path: notcompute.Metadata + path: notcomputeConfig.Metadata secret_access_key: Fn::GetAtt: - Key @@ -113,33 +124,71 @@ Resources: admin_user: heat auth_encryption_key: unset___________ db: mysql://heat:unset@localhost/heat - heat_watch_server_url: http://0.0.0.0:8003 - metadata_server_url: http://0.0.0.0:8000 - waitcondition_server_url: http://0.0.0.0:8000/v1/waitcondition + heat_watch_server_url: + Fn::Join: + - '' + - - 'http://' + - Fn::GetAtt: + - notcompute + - PrivateIp + - ':8003' + metadata_server_url: + Fn::Join: + - '' + - - 'http://' + - Fn::GetAtt: + - notcompute + - PrivateIp + - ':8000' + waitcondition_server_url: + Fn::Join: + - '' + - - 'http://' + - Fn::GetAtt: + - notcompute + - PrivateIp + - ':8000/v1/waitcondition' interfaces: control: eth0 keystone: db: mysql://keystone:unset@localhost/keystone - host: 0.0.0.0 + host: + Fn::GetAtt: + - notcompute + - PrivateIp nova: compute_driver: libvirt.LibvirtDriver db: mysql://nova:unset@localhost/nova - host: 0.0.0.0 + host: + Fn::GetAtt: + - notcompute + - PrivateIp metadata-proxy: true neutron: - host: 0.0.0.0 + host: + Fn::GetAtt: + - notcompute + - PrivateIp metadata_proxy_shared_secret: unset ovs: enable_tunneling: 'True' - local_ip: 0.0.0.0 + local_ip: + Fn::GetAtt: + - notcompute + - PrivateIp public_interface: eth0 physical_bridge: br-ex tenant_network_type: gre ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8 rabbit: - host: 0.0.0.0 + host: + Fn::GetAtt: + - notcompute + - PrivateIp password: guest service-password: unset + notcompute: + Type: AWS::EC2::Instance Properties: ImageId: Ref: notcomputeImage @@ -147,4 +196,15 @@ Resources: Ref: InstanceType KeyName: Ref: KeyName - Type: AWS::EC2::Instance + Metadata: + os-collect-config: + cfn: + access_key_id: + Ref: Key + path: notcomputeConfig.Metadata + secret_access_key: + Fn::GetAtt: + - Key + - SecretAccessKey + stack_name: + Ref: AWS::StackName diff --git a/undercloud-vm.yaml b/undercloud-vm.yaml index b68c0e57..5fbe51f8 100644 --- a/undercloud-vm.yaml +++ b/undercloud-vm.yaml @@ -20,7 +20,7 @@ Resources: AccessPolicy: Properties: AllowedResources: - - notcompute + - notcomputeConfig Type: OS::Heat::AccessPolicy Key: Properties: @@ -32,13 +32,20 @@ Resources: Policies: - Ref: AccessPolicy Type: AWS::IAM::User - notcompute: + notcomputeConfig: + Type: AWS::AutoScaling::LaunchConfiguration + Properties: + ImageId: '0' + InstanceType: foo Metadata: OpenStack::Heat::Stack: {} Openstack::ImageBuilder::Elements: [ boot-stack, heat-cfntools, neutron-network-node ] admin-password: unset admin-token: unset - controller-address: 0.0.0.0 + controller-address: + Fn::GetAtt: + - notcompute + - PrivateIp cinder: db: mysql://cinder:unset@localhost/cinder volume_size_mb: '5000' @@ -52,14 +59,29 @@ Resources: admin_user: heat auth_encryption_key: unset___________ db: mysql://heat:unset@localhost/heat - heat_watch_server_url: http://0.0.0.0:8003 - metadata_server_url: http://0.0.0.0:8000 - waitcondition_server_url: http://0.0.0.0:8000/v1/waitcondition + heat_watch_server_url: + Fn::Join: + - '' + - - http:// + - {"Fn::GetAtt": [ notcompute, PrivateIp ]} + - ":8003" + metadata_server_url: + Fn::Join: + - '' + - - http:// + - {"Fn::GetAtt": [ notcompute, PrivateIp ]} + - ":8000" + waitcondition_server_url: + Fn::Join: + - '' + - - http:// + - {"Fn::GetAtt": [ notcompute, PrivateIp ]} + - ":8000/v1/waitcondition" os-collect-config: cfn: access_key_id: Ref: Key - path: Resources.notcompute + path: notcomputeConfig.Metadata secret_access_key: Fn::GetAtt: - Key @@ -110,6 +132,8 @@ Resources: store_user: unset store_key: unset service-password: unset + notcompute: + Type: AWS::EC2::Instance Properties: ImageId: Ref: Image @@ -118,3 +142,15 @@ Resources: KeyName: Ref: KeyName Type: AWS::EC2::Instance + Metadata: + os-collect-config: + cfn: + access_key_id: + Ref: Key + path: notcomputeConfig.Metadata + secret_access_key: + Fn::GetAtt: + - Key + - SecretAccessKey + stack_name: + Ref: AWS::StackName |