summaryrefslogtreecommitdiffstats
path: root/mysql.yaml
blob: 3c1658c209f90ac8a19460a2b36758b1e89e8880 (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
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: 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: heat
  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::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}
      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}
  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}