cd88f4d8e9
We used named Docker volume for MariaDB storage, which meant that when moving from BM to containerized wit MariaDB, we lost data and reinitialized the storage from scratch. With this commit we keep the data by mounting the original data into the container. We also need to make sure that file ownership is correct according to the MariaDB container image used, and that Kolla bootstrap mechanisms aren't retriggered, as they aren't idempotent. Change-Id: I1fc955021c6dd83f1a366495dd8c7281fb9e7cc5
154 lines
5.4 KiB
YAML
154 lines
5.4 KiB
YAML
heat_template_version: ocata
|
|
|
|
description: >
|
|
MySQL service deployment using puppet
|
|
|
|
parameters:
|
|
DockerNamespace:
|
|
description: namespace
|
|
default: 'tripleoupstream'
|
|
type: string
|
|
DockerMysqlImage:
|
|
description: image
|
|
default: 'centos-binary-mariadb:latest'
|
|
type: string
|
|
EndpointMap:
|
|
default: {}
|
|
description: Mapping of service endpoint -> protocol. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
ServiceNetMap:
|
|
default: {}
|
|
description: Mapping of service_name -> network name. Typically set
|
|
via parameter_defaults in the resource registry. This
|
|
mapping overrides those in ServiceNetMapDefaults.
|
|
type: json
|
|
DefaultPasswords:
|
|
default: {}
|
|
type: json
|
|
MysqlRootPassword:
|
|
type: string
|
|
hidden: true
|
|
default: ''
|
|
|
|
resources:
|
|
|
|
MysqlPuppetBase:
|
|
type: ../../../puppet/services/database/mysql.yaml
|
|
properties:
|
|
EndpointMap: {get_param: EndpointMap}
|
|
ServiceNetMap: {get_param: ServiceNetMap}
|
|
DefaultPasswords: {get_param: DefaultPasswords}
|
|
|
|
outputs:
|
|
role_data:
|
|
description: Containerized service MySQL using composable services.
|
|
value:
|
|
service_name: {get_attr: [MysqlPuppetBase, role_data, service_name]}
|
|
config_settings:
|
|
map_merge:
|
|
- {get_attr: [MysqlPuppetBase, role_data, config_settings]}
|
|
# Set PID file to what kolla mariadb bootstrap script expects
|
|
- tripleo::profile::base::database::mysql::mysql_server_options:
|
|
mysqld:
|
|
pid-file: /var/lib/mysql/mariadb.pid
|
|
mysqld_safe:
|
|
pid-file: /var/lib/mysql/mariadb.pid
|
|
step_config: &step_config
|
|
list_join:
|
|
- "\n"
|
|
- - "['Mysql_datadir', 'Mysql_user', 'Mysql_database', 'Mysql_grant', 'Mysql_plugin'].each |String $val| { noop_resource($val) }"
|
|
- {get_attr: [MysqlPuppetBase, role_data, step_config]}
|
|
# BEGIN DOCKER SETTINGS #
|
|
puppet_config:
|
|
config_volume: mysql
|
|
puppet_tags: file # set this even though file is the default
|
|
step_config: *step_config
|
|
config_image: &mysql_image
|
|
list_join:
|
|
- '/'
|
|
- [ {get_param: DockerNamespace}, {get_param: DockerMysqlImage} ]
|
|
kolla_config:
|
|
/var/lib/kolla/config_files/mysql.json:
|
|
command: /usr/bin/mysqld_safe
|
|
config_files:
|
|
- dest: /etc/mysql/my.cnf
|
|
source: /var/lib/kolla/config_files/src/etc/my.cnf
|
|
owner: mysql
|
|
perm: '0644'
|
|
- dest: /etc/my.cnf.d/galera.cnf
|
|
source: /var/lib/kolla/config_files/src/etc/my.cnf.d/galera.cnf
|
|
owner: mysql
|
|
perm: '0644'
|
|
docker_config:
|
|
step_2:
|
|
mysql_data_ownership:
|
|
start_order: 0
|
|
detach: false
|
|
image: *mysql_image
|
|
net: host
|
|
user: root
|
|
# Kolla does only non-recursive chown
|
|
command: ['chown', '-R', 'mysql:', '/var/lib/mysql']
|
|
volumes:
|
|
- /var/lib/mysql:/var/lib/mysql
|
|
mysql_bootstrap:
|
|
start_order: 1
|
|
detach: false
|
|
image: *mysql_image
|
|
net: host
|
|
# Kolla bootstraps aren't idempotent, explicitly checking if bootstrap was done
|
|
command: ['bash', '-c', 'test -e /var/lib/mysql/mysql || kolla_start']
|
|
volumes: &mysql_volumes
|
|
- /var/lib/kolla/config_files/mysql.json:/var/lib/kolla/config_files/config.json
|
|
- /var/lib/config-data/mysql/:/var/lib/kolla/config_files/src:ro
|
|
- /etc/localtime:/etc/localtime:ro
|
|
- /etc/hosts:/etc/hosts:ro
|
|
- /var/lib/mysql:/var/lib/mysql
|
|
environment:
|
|
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
|
|
- KOLLA_BOOTSTRAP=True
|
|
# NOTE(mandre) skip wsrep cluster status check
|
|
- KOLLA_KUBERNETES=True
|
|
-
|
|
list_join:
|
|
- '='
|
|
- - 'DB_ROOT_PASSWORD'
|
|
-
|
|
yaql:
|
|
expression: $.data.passwords.where($ != '').first()
|
|
data:
|
|
passwords:
|
|
- {get_param: MysqlRootPassword}
|
|
- {get_param: [DefaultPasswords, mysql_root_password]}
|
|
mysql:
|
|
start_order: 2
|
|
image: *mysql_image
|
|
restart: always
|
|
net: host
|
|
volumes: *mysql_volumes
|
|
environment:
|
|
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
|
|
docker_puppet_tasks:
|
|
# MySQL database initialization occurs only on single node
|
|
step_2:
|
|
config_volume: 'mysql_init_tasks'
|
|
puppet_tags: 'mysql_database,mysql_grant,mysql_user'
|
|
step_config: 'include ::tripleo::profile::base::database::mysql'
|
|
config_image:
|
|
list_join:
|
|
- '/'
|
|
- [ {get_param: DockerNamespace}, {get_param: DockerMysqlImage} ]
|
|
volumes:
|
|
- "/var/lib/mysql:/var/lib/mysql/:ro"
|
|
- "/var/lib/config-data/mysql/root:/root:ro" #provides .my.cnf
|
|
host_prep_tasks:
|
|
- name: create /var/lib/mysql
|
|
file:
|
|
path: /var/lib/mysql
|
|
state: directory
|
|
upgrade_tasks:
|
|
- name: Stop and disable mysql service
|
|
tags: step2
|
|
service: name=mariadb state=stopped enabled=no
|