Add docker mysql service
authorFlavio Percoco <flaper87@gmail.com>
Fri, 23 Dec 2016 14:13:23 +0000 (15:13 +0100)
committerDan Prince <dprince@redhat.com>
Thu, 23 Feb 2017 03:25:06 +0000 (03:25 +0000)
Co-Authored-By: Dan Prince <dprince@redhat.com>
Co-Authored-By: Martin André <m.andre@redhat.com>
Change-Id: If0ee671acbf6a9931622003a859089d61e2050b3

docker/services/database/mysql.yaml [new file with mode: 0644]

diff --git a/docker/services/database/mysql.yaml b/docker/services/database/mysql.yaml
new file mode 100644 (file)
index 0000000..2ef068d
--- /dev/null
@@ -0,0 +1,130 @@
+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:
+        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_tags: file # set this even though file is the default
+      config_volume: mysql
+      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:
+          - 'mysql_init_tasks'
+          - 'mysql_database,mysql_grant,mysql_user'
+          - 'include ::tripleo::profile::base::database::mysql'
+          - list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerMysqlImage} ]
+          - - "mariadb:/var/lib/mysql/:ro"
+            - "/var/lib/config-data/mysql/root:/root:ro" #provides .my.cnf