container: support bind mounted db data directory and mysql config
This commit is contained in:
@@ -2,5 +2,6 @@
|
||||
|
||||
docker_host_user: false
|
||||
docker_volume_type: named
|
||||
docker_mariadb_config: {}
|
||||
|
||||
timezone: Etc/UTC
|
||||
|
||||
@@ -37,6 +37,19 @@ argument_specs:
|
||||
description: "database_passwords[docker_service] is a string with the password used for communication between the service and database. Required if docker_database is postgres or mariadb"
|
||||
type: dict
|
||||
required: false
|
||||
docker_mariadb_config:
|
||||
description: |
|
||||
A dict specifying config for mariadb. For example
|
||||
mysqld:
|
||||
innodb_buffer_pool_size: '4G'
|
||||
aria_pagecache_buffer_size': '4G'
|
||||
would set
|
||||
[mysqld]
|
||||
innodb_buffer_pool_size = 4G
|
||||
aria_pagecache_buffer_size = 4G
|
||||
type: dict
|
||||
required: false
|
||||
default: {}
|
||||
docker_additional_services:
|
||||
description: "List of additional services to configure (in separate containers). These will be accessible with hostname <docker_service_name>[_suffix]_<additional_service>"
|
||||
type: list
|
||||
|
||||
@@ -28,6 +28,39 @@
|
||||
db_container_data: /data/db
|
||||
when: docker_database == 'mongo'
|
||||
|
||||
- name: Reset db container mount definition var
|
||||
set_fact:
|
||||
db_container_mount_definition: []
|
||||
|
||||
- name: Set up database container data bind mount
|
||||
when: docker_volume_type == 'bind'
|
||||
block:
|
||||
- name: Create db data bind mount directory for {{ docker_service_name }}
|
||||
file:
|
||||
path: "{{ docker_mounts_dir }}/db"
|
||||
state: directory
|
||||
|
||||
- name: Set db_container_mount_definition for db data bind mount
|
||||
set_fact:
|
||||
db_container_mount_definition: "{{ db_container_mount_definition + [{'source': docker_mounts_dir + '/db', 'target': db_container_data, 'type': 'bind'}] }}"
|
||||
|
||||
- name: Set up database container config bind mount
|
||||
when: db_config_mounts_needed
|
||||
block:
|
||||
- name: Put mariadb config in place
|
||||
template:
|
||||
src: mariadb.cnf.j2
|
||||
dest: "{{ docker_mounts_dir }}/mariadb.cnf"
|
||||
|
||||
- name: Set db_container_mount_definition for db config bind mount
|
||||
set_fact:
|
||||
db_container_mount_definition: "{{ db_container_mount_definition + [{'source': docker_mounts_dir + '/mariadb.cnf', 'target': '/etc/mysql/conf.d/custom.cnf', 'type': 'bind', 'read_only': true}] }}"
|
||||
|
||||
- name: Set db_container_mount_definition for db data named volume
|
||||
set_fact:
|
||||
db_container_mount_definition: "{{ db_container_mount_definition + [{'source': docker_service_name + '_db', 'target': db_container_data, 'type': 'volume'}] }}"
|
||||
when: docker_volume_type == 'named'
|
||||
|
||||
- name: Set db published ports var
|
||||
set_fact:
|
||||
db_published_ports: ["127.0.0.1:{{ ports[docker_service_name].db }}:{{ db_image_port }}"]
|
||||
@@ -41,8 +74,6 @@
|
||||
env: "{{ db_container_env | default(omit) }}"
|
||||
published_ports: "{{ db_published_ports | default(omit) }}"
|
||||
restart_policy: always
|
||||
mounts:
|
||||
- source: "{{ docker_service_name + '_db' }}"
|
||||
target: "{{ db_container_data }}"
|
||||
mounts: "{{ db_container_mount_definition }}"
|
||||
networks: "{{ container_networks | default(omit) }}"
|
||||
log_driver: local
|
||||
|
||||
@@ -13,14 +13,15 @@
|
||||
template_mounts_needed: "{{ docker_mounts | selectattr('template', 'defined') | list | length > 0 }}"
|
||||
volumes_needed: "{{ docker_mounts | selectattr('name', 'defined') | list | length > 0 }}"
|
||||
dockerfile_needed: "{{ dockerfile is defined and dockerfile | length > 0 }}"
|
||||
db_config_mounts_needed: "{{ docker_mariadb_config | length > 0 }}"
|
||||
- name: Set more assistive variables
|
||||
set_fact:
|
||||
bind_volumes_needed: "{{ volumes_needed and docker_volume_type == 'bind' }}"
|
||||
named_volumes_needed: "{{ volumes_needed and docker_volume_type == 'named' }}"
|
||||
- name: Set even more assistive variables
|
||||
set_fact:
|
||||
create_opt_directory: "{{ dockerfile_needed or docker_host_user or bind_volumes_needed or template_mounts_needed }}"
|
||||
create_mounts_directory: "{{ bind_volumes_needed or template_mounts_needed }}"
|
||||
create_opt_directory: "{{ dockerfile_needed or docker_host_user or bind_volumes_needed or template_mounts_needed or db_config_mounts_needed }}"
|
||||
create_mounts_directory: "{{ bind_volumes_needed or template_mounts_needed or db_config_mounts_needed }}"
|
||||
|
||||
- name: Set docker service full name
|
||||
set_fact:
|
||||
|
||||
@@ -24,10 +24,6 @@
|
||||
include_tasks: proxy.yml
|
||||
when: reverse_proxy_type != 'none'
|
||||
|
||||
- name: Database container
|
||||
include_tasks: database.yml
|
||||
when: docker_database != 'none'
|
||||
|
||||
- name: Additional services
|
||||
when: docker_additional_services is defined
|
||||
block:
|
||||
@@ -74,6 +70,25 @@
|
||||
container_workdir: /opt/{{ docker_service }}
|
||||
when: docker_service_suffix is not defined
|
||||
|
||||
- name: Create mounts directory
|
||||
when: create_mounts_directory
|
||||
block:
|
||||
- name: Set docker_mounts_dir
|
||||
set_fact:
|
||||
docker_mounts_dir: "{{ container_workdir }}/mounts"
|
||||
|
||||
- name: Create directory {{ docker_mounts_dir }}
|
||||
file:
|
||||
path: "{{ docker_mounts_dir }}"
|
||||
state: directory
|
||||
owner: "{{ user.uid | default(omit) }}"
|
||||
group: "{{ user.group | default(omit) }}"
|
||||
mode: 0700
|
||||
|
||||
- name: Database container
|
||||
include_tasks: database.yml
|
||||
when: docker_database != 'none'
|
||||
|
||||
- name: Container volumes
|
||||
import_tasks: volumes.yml
|
||||
|
||||
|
||||
@@ -3,18 +3,7 @@
|
||||
- name: Create directories and put files in them
|
||||
when: create_mounts_directory
|
||||
block:
|
||||
- name: Set docker_mounts_dir
|
||||
set_fact:
|
||||
docker_mounts_dir: "{{ container_workdir }}/mounts"
|
||||
|
||||
- name: Create directory {{ docker_mounts_dir }}
|
||||
file:
|
||||
path: "{{ docker_mounts_dir }}"
|
||||
state: directory
|
||||
owner: "{{ user.uid | default(omit) }}"
|
||||
group: "{{ user.group | default(omit) }}"
|
||||
mode: 0700
|
||||
- name: Define mounts directory owner
|
||||
- name: Define mount directory owner
|
||||
set_fact:
|
||||
mount_owner: "{{ user.uid if docker_host_user else image_user | default('') }}"
|
||||
mount_group: "{{ user.group if docker_host_user else '' }}"
|
||||
|
||||
8
roles/container/templates/mariadb.cnf.j2
Normal file
8
roles/container/templates/mariadb.cnf.j2
Normal file
@@ -0,0 +1,8 @@
|
||||
# {{ ansible_managed }}
|
||||
|
||||
{% for section in docker_mariadb_config | dict2items %}
|
||||
[{{ section.key }}]
|
||||
{% for item in section.value | dict2items %}
|
||||
{{ item.key }} = {{ item.value }}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
Reference in New Issue
Block a user