summaryrefslogtreecommitdiffstats
path: root/mysql.yaml
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}