summaryrefslogtreecommitdiffstats
path: root/docker/services/database/mysql.yaml
blob: fd92e99c3b3ba68c44b1d20ddd273c589e3adb60 (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
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]}
      upgrade_tasks: {get_attr: [MysqlPuppetBase, role_data, upgrade_tasks]}
      # BEGIN DOCKER SETTINGS #
      docker_image: &mysql_image
        list_join:
          - '/'
          - [ {get_param: DockerNamespace}, {get_param: DockerMysqlImage} ]
      puppet_config:
        config_volume: mysql
        puppet_tags: file # set this even though file is the default
        step_config: *step_config
        config_image: *mysql_image
      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_bootstrap:
            start_order: 0
            detach: false
            image: *mysql_image
            net: host
            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
              - mariadb:/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: 1
            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:
            - "mariadb:/var/lib/mysql/:ro"
            - "/var/lib/config-data/mysql/root:/root:ro" #provides .my.cnf