aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base.yaml32
-rw-r--r--keystone.yaml53
-rw-r--r--mysql.yaml84
3 files changed, 169 insertions, 0 deletions
diff --git a/base.yaml b/base.yaml
new file mode 100644
index 00000000..adff04ed
--- /dev/null
+++ b/base.yaml
@@ -0,0 +1,32 @@
+HeatTemplateFormatVersion: '2012-12-12'
+Description: 'HEAT Template - Tie OpenStack components together'
+Parameters:
+ TemplateRoot:
+ Description: URL Base where all of our templates are available
+ Type: String
+Resources:
+ MySQL:
+ Type: AWS::CloudFormation::Stack
+ TemplateURL:
+ Fn::Join:
+ - {Ref: TemplateRoot}
+ - mysql.yaml
+ Parameters:
+ InstanceType: m1.small
+ KeyName: default
+ MySQLImage: image-mysql
+ Keystone:
+ Type: AWS::CloudFormation::Stack
+ TemplateURL:
+ Fn::Join:
+ - {Ref: TemplateRoot}
+ - keystone.yaml
+ Parameters:
+ KeyName: default
+ KeystoneDSN:
+ Fn::Join:
+ - 'mysql://keystone:'
+ - {Fn::GetAtt: [ MySQL , KeystonePassword ]}
+ - '@'
+ - {Fn::GetAtt: [ MySQL , MySQLHost ]}
+ - '/keystone'
diff --git a/keystone.yaml b/keystone.yaml
new file mode 100644
index 00000000..b17397a1
--- /dev/null
+++ b/keystone.yaml
@@ -0,0 +1,53 @@
+HeatTemplateFormatVersion: '2012-12-12'
+Description: 'HEAT Template - Keystone'
+Parameters:
+ KeyName:
+ Description: Name of an existing EC2 KeyPair to enable SSH access to the instances
+ Type: String
+ Default: default
+ InstanceType:
+ Description: Use this flavor
+ Type: String
+ Default: bm.small
+ KeystoneDSN:
+ Description: DSN for connecting to keystone
+ Type: String
+ KeystoneImage:
+ Type: String
+Resources:
+ ApiAccessPolicy:
+ Type: OS::Heat::AccessPolicy
+ Properties:
+ AllowedResources: [ KeystoneLaunch, Keystone ]
+ ApiUser:
+ Type: AWS::IAM::User
+ Properties:
+ Policies: [ { Ref: ApiAccessPolicy } ]
+ ApiKey:
+ Type: AWS::IAM::AccessKey
+ Properties:
+ UserName:
+ Ref: ApiUser
+ KeystoneLaunch:
+ Type: AWS::AutoScaling::LaunchConfiguration
+ Properties:
+ ImageId:
+ {Ref: KeystoneImage}
+ InstanceType: {Ref: InstanceType}
+ KeyName: {Ref: KeyName}
+ Metadata:
+ OpenStack::Heat::CFNTools:
+ AWSAccessKeyId:
+ Ref: ApiKey
+ AWSSecretAccessKey:
+ Fn::GetAtt: [ ApiKey, SecretAccessKey ]
+ OpenStack::ImageBuilder::Elements: [ keystone ]
+ OpenStack:
+ keystone:
+ db: {Ref: KeystoneDSN}
+ Keystone:
+ Type: OS::Heat::InstanceGroup
+ Properties:
+ LaunchConfigurationName: { Ref: KeystoneLaunch }
+ AvailabilityZones: [ 1 ]
+ Size: '1'
diff --git a/mysql.yaml b/mysql.yaml
new file mode 100644
index 00000000..3df3d0e3
--- /dev/null
+++ b/mysql.yaml
@@ -0,0 +1,84 @@
+HeatTemplateFormatVersion: '2012-12-12'
+Description: 'HEAT Template - Dedicated MySQL server'
+Parameters:
+ KeyName:
+ Description: Name of an existing EC2 KeyPair to enable SSH access to the instances
+ Type: String
+ Default: default
+ InstanceType:
+ Description: Use this flavor
+ Type: String
+ Default: m1.small
+ MySQLImage:
+ Type: String
+Resources:
+ ApiAccessPolicy:
+ Type: OS::Heat::AccessPolicy
+ Properties:
+ AllowedResources: [ MySQL0 ]
+ ApiUser:
+ Type: AWS::IAM::User
+ Properties:
+ Policies: [ { Ref: ApiAccessPolicy } ]
+ MySQL0:
+ Type: AWS::EC2::Instance
+ Metadata:
+ OpenStack::ImageBuilder::Elements: [ mysql ]
+ OpenStack::MySQL:
+ masterhandle: {Ref: MySQLMasterHandle}
+ keystone:
+ userhandle: {Ref: KeystonePasswordHandle}
+ OpenStack::Heat::CFNTools:
+ AWSAccessKeyId:
+ Ref: ApiKey
+ AWSSecretAccessKey:
+ Fn::GetAtt: [ ApiKey, SecretAccessKey ]
+ Properties:
+ ImageId:
+ {Ref: MySQLImage}
+ InstanceType: {Ref: InstanceType}
+ KeyName: {Ref: KeyName}
+ MySQL1:
+ Type: AWS::EC2::Instance
+ DependsOn: MySQL0
+ Metadata:
+ OpenStack::ImageBuilder::Elements: [ mysql ]
+ OpenStack::MySQL:
+ masterinfo: {Fn::GetAtt: [ MySQLMaster, Data ]}
+ consumers: {Ref: Consumers}
+ keystone:
+ userhandle: {Ref: KeystonePasswordHandle}
+ OpenStack::Heat::CFNTools:
+ AWSAccessKeyId:
+ Ref: ApiKey
+ AWSSecretAccessKey:
+ Fn::GetAtt: [ ApiKey, SecretAccessKey ]
+ Properties:
+ ImageId:
+ {Ref: MySQLImage}
+ InstanceType: {Ref: InstanceType}
+ KeyName: {Ref: KeyName}
+ MySQLMasterHandle:
+ Type: AWS::CloudFormation::WaitConditionHandle
+ MySQLMaster:
+ DependsOn: MySQL0
+ Type: AWS::CloudFormation::WaitCondition
+ Properties:
+ Handle: {Ref: MySQLMasterHandle}
+ Timeout: 60
+ KeystonePasswordHandle:
+ Type: AWS::CloudFormation:WaitConditionHandle
+ Properties:
+ KeystonePassword:
+ DependsOn: MySQL1
+ Type: AWS::CloudFormation::WaitCondition
+ Properties:
+ Handle: {Ref: KeystonePasswordHandle}
+ Timeout: 60
+Outputs:
+ MySQLHost:
+ Fn::GetAtt: [ MySQL0 , PrivateIp ]
+ MySQLSlaves:
+ Fn::GetAtt: [ MySQL1, PrivateIp ]
+ KeystonePassword:
+ Fn::GetAtt: [ KeystonePassword, Data ]