0b6797c38432765f23db8edae55c3db3498cd5db
[apex-tripleo-heat-templates.git] / puppet / services / database / mysql.yaml
1 heat_template_version: ocata
2
3 description: >
4   MySQL service deployment using puppet
5
6 parameters:
7   #Parameters not used EndpointMap
8   ServiceNetMap:
9     default: {}
10     description: Mapping of service_name -> network name. Typically set
11                  via parameter_defaults in the resource registry.  This
12                  mapping overrides those in ServiceNetMapDefaults.
13     type: json
14   DefaultPasswords:
15     default: {}
16     type: json
17   RoleName:
18     default: ''
19     description: Role name on which the service is applied
20     type: string
21   RoleParameters:
22     default: {}
23     description: Parameters specific to the role
24     type: json
25   EndpointMap:
26     default: {}
27     description: Mapping of service endpoint -> protocol. Typically set
28                  via parameter_defaults in the resource registry.
29     type: json
30   MysqlMaxConnections:
31     description: Configures MySQL max_connections config setting
32     type: number
33     default: 4096
34   MysqlIncreaseFileLimit:
35     description: Flag to increase MySQL open-files-limit to 16384
36     type: boolean
37     default: true
38   MysqlRootPassword:
39     type: string
40     hidden: true
41     default: ''
42   MysqlClustercheckPassword:
43     type: string
44     hidden: true
45   EnableGalera:
46     default: true
47     description: Whether to use Galera instead of regular MariaDB.
48     type: boolean
49   NovaPassword:
50     description: The password for the nova db account
51     type: string
52     hidden: true
53   EnableInternalTLS:
54     type: boolean
55     default: false
56
57 conditions:
58
59   internal_tls_enabled: {equals: [{get_param: EnableInternalTLS}, true]}
60
61 outputs:
62   role_data:
63     description: Service MySQL using composable services.
64     value:
65       service_name: mysql
66       config_settings:
67         map_merge:
68           -
69             # The Galera package should work in cluster and
70             # non-cluster modes based on the config file.
71             # We set the package name here explicitly so
72             # that it matches what we pre-install
73             # in tripleo-puppet-elements.
74             mysql::server::package_name: 'mariadb-galera-server'
75             mysql::server::manage_config_file: true
76             tripleo.mysql.firewall_rules:
77               '104 mysql galera':
78                 dport:
79                   - 873
80                   - 3306
81                   - 4444
82                   - 4567
83                   - 4568
84                   - 9200
85             mysql_max_connections: {get_param: MysqlMaxConnections}
86             mysql::server::root_password:
87               yaql:
88                 expression: $.data.passwords.where($ != '').first()
89                 data:
90                   passwords:
91                     - {get_param: MysqlRootPassword}
92                     - {get_param: [DefaultPasswords, mysql_root_password]}
93             mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
94             enable_galera: {get_param: EnableGalera}
95             # NOTE: bind IP is found in Heat replacing the network name with the
96             # local node IP for the given network; replacement examples
97             # (eg. for internal_api):
98             # internal_api -> IP
99             # internal_api_uri -> [IP]
100             # internal_api_subnet - > IP/CIDR
101             mysql_bind_host: {get_param: [ServiceNetMap, MysqlNetwork]}
102             tripleo::profile::base::database::mysql::bind_address:
103               str_replace:
104                 template:
105                   "%{hiera('fqdn_$NETWORK')}"
106                 params:
107                   $NETWORK: {get_param: [ServiceNetMap, MysqlNetwork]}
108             tripleo::profile::base::database::mysql::client_bind_address:
109               {get_param: [ServiceNetMap, MysqlNetwork]}
110             tripleo::profile::base::database::mysql::generate_dropin_file_limit:
111               {get_param: MysqlIncreaseFileLimit}
112           - generate_service_certificates: true
113             tripleo::profile::base::database::mysql::certificate_specs:
114               service_certificate: '/etc/pki/tls/certs/mysql.crt'
115               service_key: '/etc/pki/tls/private/mysql.key'
116               hostname:
117                 str_replace:
118                   template: "%{hiera('cloud_name_NETWORK')}"
119                   params:
120                     NETWORK: {get_param: [ServiceNetMap, MysqlNetwork]}
121               principal:
122                 str_replace:
123                   template: "mysql/%{hiera('cloud_name_NETWORK')}"
124                   params:
125                     NETWORK: {get_param: [ServiceNetMap, MysqlNetwork]}
126       step_config: |
127         include ::tripleo::profile::base::database::mysql
128       metadata_settings:
129         if:
130           - internal_tls_enabled
131           -
132             - service: mysql
133               network: {get_param: [ServiceNetMap, MysqlNetwork]}
134               type: vip
135           - null
136       upgrade_tasks:
137         - name: Check for galera root password
138           tags: step0
139           file: path=/root/.my.cnf state=file
140         - name: Stop service
141           tags: step2
142           service: name=mariadb state=stopped
143         - name: Start service
144           tags: step4
145           service: name=mariadb state=started
146         - name: Setup cell_v2 (create cell0 database)
147           tags: step4
148           mysql_db:
149             name: nova_cell0
150             state: present
151         - name: Setup cell_v2 (grant access to the nova DB user)
152           tags: step4
153           mysql_user:
154             str_replace:
155               template: "name=nova password=PASSWORD host=\"%\" priv=\"nova.*:ALL/nova_cell0.*:ALL,GRANT\" state=present"
156               params:
157                 PASSWORD: {get_param: NovaPassword}