Adds network/cidr mapping into a new service property
[apex-tripleo-heat-templates.git] / docker / services / database / mysql.yaml
1 heat_template_version: pike
2
3 description: >
4   MySQL service deployment using puppet
5
6 parameters:
7   DockerNamespace:
8     description: namespace
9     default: 'tripleoupstream'
10     type: string
11   DockerMysqlImage:
12     description: image
13     default: 'centos-binary-mariadb:latest'
14     type: string
15   DockerMysqlConfigImage:
16     description: The container image to use for the mysql config_volume
17     default: 'centos-binary-mariadb:latest'
18     type: string
19   EndpointMap:
20     default: {}
21     description: Mapping of service endpoint -> protocol. Typically set
22                  via parameter_defaults in the resource registry.
23     type: json
24   ServiceData:
25     default: {}
26     description: Dictionary packing service data
27     type: json
28   ServiceNetMap:
29     default: {}
30     description: Mapping of service_name -> network name. Typically set
31                  via parameter_defaults in the resource registry.  This
32                  mapping overrides those in ServiceNetMapDefaults.
33     type: json
34   DefaultPasswords:
35     default: {}
36     type: json
37   RoleName:
38     default: ''
39     description: Role name on which the service is applied
40     type: string
41   RoleParameters:
42     default: {}
43     description: Parameters specific to the role
44     type: json
45   MysqlRootPassword:
46     type: string
47     hidden: true
48     default: ''
49
50 resources:
51
52   MysqlPuppetBase:
53     type: ../../../puppet/services/database/mysql.yaml
54     properties:
55       EndpointMap: {get_param: EndpointMap}
56       ServiceData: {get_param: ServiceData}
57       ServiceNetMap: {get_param: ServiceNetMap}
58       DefaultPasswords: {get_param: DefaultPasswords}
59       RoleName: {get_param: RoleName}
60       RoleParameters: {get_param: RoleParameters}
61
62 outputs:
63   role_data:
64     description: Containerized service MySQL using composable services.
65     value:
66       service_name: {get_attr: [MysqlPuppetBase, role_data, service_name]}
67       config_settings:
68         map_merge:
69           - {get_attr: [MysqlPuppetBase, role_data, config_settings]}
70           # Set PID file to what kolla mariadb bootstrap script expects
71           - tripleo::profile::base::database::mysql::mysql_server_options:
72               mysqld:
73                 pid-file: /var/lib/mysql/mariadb.pid
74               mysqld_safe:
75                 pid-file: /var/lib/mysql/mariadb.pid
76       step_config: &step_config
77         list_join:
78           - "\n"
79           - - "['Mysql_datadir', 'Mysql_user', 'Mysql_database', 'Mysql_grant', 'Mysql_plugin'].each |String $val| { noop_resource($val) }"
80             - {get_attr: [MysqlPuppetBase, role_data, step_config]}
81       # BEGIN DOCKER SETTINGS #
82       puppet_config:
83         config_volume: mysql
84         puppet_tags: file # set this even though file is the default
85         step_config: *step_config
86         config_image: &mysql_config_image
87           list_join:
88             - '/'
89             - [ {get_param: DockerNamespace}, {get_param: DockerMysqlConfigImage} ]
90       kolla_config:
91         /var/lib/kolla/config_files/mysql.json:
92           command: /usr/bin/mysqld_safe
93           config_files:
94             - source: "/var/lib/kolla/config_files/src/*"
95               dest: "/"
96               merge: true
97               preserve_properties: true
98           permissions:
99             - path: /var/lib/mysql
100               owner: mysql:mysql
101               recurse: true
102       docker_config:
103         # Kolla_bootstrap runs before permissions set by kolla_config
104         step_1:
105           mysql_init_logs:
106             image: &mysql_image
107               list_join:
108                 - '/'
109                 - [ {get_param: DockerNamespace}, {get_param: DockerMysqlImage} ]
110             privileged: false
111             user: root
112             volumes:
113               - /var/log/containers/mysql:/var/log/mariadb
114             command: ['/bin/bash', '-c', 'chown -R mysql:mysql /var/log/mariadb']
115         step_2:
116           mysql_bootstrap:
117             detach: false
118             image: *mysql_image
119             net: host
120             # Kolla bootstraps aren't idempotent, explicitly checking if bootstrap was done
121             command: ['bash', '-c', 'test -e /var/lib/mysql/mysql || kolla_start']
122             volumes: &mysql_volumes
123               - /var/lib/kolla/config_files/mysql.json:/var/lib/kolla/config_files/config.json
124               - /var/lib/config-data/puppet-generated/mysql/:/var/lib/kolla/config_files/src:ro
125               - /etc/localtime:/etc/localtime:ro
126               - /etc/hosts:/etc/hosts:ro
127               - /var/lib/mysql:/var/lib/mysql
128               - /var/log/containers/mysql:/var/log/mariadb
129             environment:
130               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
131               - KOLLA_BOOTSTRAP=True
132               # NOTE(mandre) skip wsrep cluster status check
133               - KOLLA_KUBERNETES=True
134               -
135                 list_join:
136                   - '='
137                   - - 'DB_ROOT_PASSWORD'
138                     -
139                       yaql:
140                         expression: $.data.passwords.where($ != '').first()
141                         data:
142                           passwords:
143                             - {get_param: MysqlRootPassword}
144                             - {get_param: [DefaultPasswords, mysql_root_password]}
145           mysql:
146             start_order: 2
147             image: *mysql_image
148             restart: always
149             net: host
150             volumes: *mysql_volumes
151             environment:
152               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
153       docker_puppet_tasks:
154         # MySQL database initialization occurs only on single node
155         step_2:
156           config_volume: 'mysql_init_tasks'
157           puppet_tags: 'mysql_database,mysql_grant,mysql_user'
158           step_config: 'include ::tripleo::profile::base::database::mysql'
159           config_image: *mysql_config_image
160           volumes:
161             - /var/lib/mysql:/var/lib/mysql/:ro
162             - /var/log/containers/mysql:/var/log/mariadb
163             - /var/lib/config-data/mysql/root:/root:ro #provides .my.cnf
164       host_prep_tasks:
165         - name: create persistent directories
166           file:
167             path: "{{ item }}"
168             state: directory
169           with_items:
170             - /var/log/containers/mysql
171             - /var/lib/mysql
172       upgrade_tasks:
173         - name: Stop and disable mysql service
174           tags: step2
175           service: name=mariadb state=stopped enabled=no