blob: f93ae2831aa6a402cc629c1ef35ee1b89133494e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
HeatTemplateFormatVersion: '2012-12-12'
Description: '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: bm.small
KeystoneUser:
Description: Keystone database username.
Type: String
Default: keystone
HeatUser:
Description: Heat database username.
Type: String
Default: heat
GlanceUser:
Description: Glance database username.
Type: String
Default: glance
NovaUser:
Description: Nova database username.
Type: String
Default: nova
MySQLImage:
Type: String
BootstrapHost:
Description: Load mysqldump from this Host
Type: String
Default: ''
BootstrapRootPassword:
Description: Root password for localhost access after bootstrap
Type: String
Default: ''
BootstrapDumpPassword:
Description: Password to use for mysqldump from Bootstrap Host
Type: String
Default: ''
BootstrapSlaveUser:
Description: User to use for replication from bootstrap host
Type: String
Default: ''
BootstrapSlavePassword:
Description: Password to use with BootstrapSlaveUser
Type: String
Default: ''
Resources:
ApiAccessPolicy:
Type: OS::Heat::AccessPolicy
Properties:
AllowedResources: [ MySQL ]
ApiUser:
Type: AWS::IAM::User
Properties:
Policies: [ { Ref: ApiAccessPolicy } ]
ApiKey:
Type: AWS::IAM::AccessKey
Properties:
UserName:
Ref: ApiUser
MySQL:
Type: AWS::EC2::Instance
Metadata:
OpenStack::Role: stateful
OpenStack::ImageBuilder::Elements: [ mysql-migration ]
mysql:
create-users:
- database: keystone
username: {Ref: KeystoneUser}
userhandle: {Ref: KeystonePasswordHandle}
- database: heat
username: {Ref: HeatUser}
userhandle: {Ref: HeatPasswordHandle}
- database: glance
username: {Ref: GlanceUser}
userhandle: {Ref: GlancePasswordHandle}
- database: nova
username: {Ref: NovaUser}
userhandle: {Ref: NovaPasswordHandle}
mysql-migration:
users:
root:
username: root
password: {Ref: BootstrapRootPassword}
dump:
username: dump
password: {Ref: BootstrapDumpPassword}
bootstrap_host: {Ref: BootstrapHost}
slave_user: {Ref: BootstrapSlaveUser}
slave_password: {Ref: BootstrapSlavePassword}
heat:
access_key_id:
Ref: ApiKey
secret_key:
Fn::GetAtt: [ ApiKey, SecretAccessKey ]
stack:
name: {Ref: 'AWS::StackName'}
region: {Ref: 'AWS::Region'}
refresh:
- resource: MySQL
Properties:
ImageId:
{Ref: MySQLImage}
InstanceType: {Ref: InstanceType}
KeyName: {Ref: KeyName}
NovaPasswordHandle:
Type: AWS::CloudFormation::WaitConditionHandle
NovaPassword:
DependsOn: MySQL
Type: AWS::CloudFormation::WaitCondition
Properties:
Handle: {Ref: NovaPasswordHandle}
Timeout: 90
GlancePasswordHandle:
Type: AWS::CloudFormation::WaitConditionHandle
GlancePassword:
DependsOn: MySQL
Type: AWS::CloudFormation::WaitCondition
Properties:
Handle: {Ref: GlancePasswordHandle}
Timeout: 90
HeatPasswordHandle:
Type: AWS::CloudFormation::WaitConditionHandle
HeatPassword:
DependsOn: MySQL
Type: AWS::CloudFormation::WaitCondition
Properties:
Handle: {Ref: HeatPasswordHandle}
Timeout: 90
KeystonePasswordHandle:
Type: AWS::CloudFormation::WaitConditionHandle
KeystonePassword:
DependsOn: MySQL
Type: AWS::CloudFormation::WaitCondition
Properties:
Handle: {Ref: KeystonePasswordHandle}
Timeout: 90
Outputs:
MySQLHost:
Fn::GetAtt: [ MySQL , PrivateIp ]
KeystonePassword:
Fn::GetAtt: [ KeystonePassword, Data ]
KeystoneUser: {Ref: KeystoneUser}
HeatPassword:
Fn::GetAtt: [ HeatPassword, Data ]
HeatUser: {Ref: HeatUser}
GlancePassword:
Fn::GetAtt: [ GlancePassword, Data ]
GlanceUser: {Ref: GlanceUser}
NovaPassword:
Fn::GetAtt: [ NovaPassword, Data ]
NovaUser: {Ref: NovaUser}
|