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
This commit is contained in:
Clint Byrum 2013-07-31 14:13:36 -07:00
parent 99a1e75250
commit 46c4ce3717
2 changed files with 116 additions and 20 deletions

@ -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

@ -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