Compare commits

...

8 Commits

Author SHA1 Message Date
uumas
e51052c34b v0.8.4 2023-04-21 08:21:37 +03:00
uumas
2893a99036 container: build docker image in separate directory 2023-04-21 08:13:01 +03:00
uumas
9ca48d376a container: fix db volume 2023-04-21 08:12:31 +03:00
uumas
079b008111 container: support bind mounted db data directory and mysql config 2023-04-21 07:44:23 +03:00
uumas
20e38332e6 container: reorganize volume directory creation 2023-04-21 05:09:14 +03:00
uumas
f845962ed9 container: use mount instead of volume for db 2023-04-21 04:08:15 +03:00
uumas
165a04fa51 wordpress: add customizable php.ini 2023-04-21 03:24:24 +03:00
uumas
309bd41836 wordpress: move wordpress_docker_volumes to vars as it should generally not be overridden 2023-04-21 03:24:10 +03:00
12 changed files with 140 additions and 44 deletions

View File

@@ -3,7 +3,7 @@
namespace: uumas
name: docker
description: Roles for installing services in docker containers
version: 0.8.3
version: 0.8.4
readme: README.md
repository: https://git.uumas.fi/uumas/ansible-docker
license_file: LICENSE

View File

@@ -2,5 +2,6 @@
docker_host_user: false
docker_volume_type: named
docker_mariadb_config: {}
timezone: Etc/UTC

View File

@@ -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

View File

@@ -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,7 +74,6 @@
env: "{{ db_container_env | default(omit) }}"
published_ports: "{{ db_published_ports | default(omit) }}"
restart_policy: always
volumes:
- "{{ docker_service_name }}_db:{{ db_container_data }}"
mounts: "{{ db_container_mount_definition }}"
networks: "{{ container_networks | default(omit) }}"
log_driver: local

View File

@@ -1,12 +1,21 @@
---
- name: Image build
when: dockerfile is defined and dockerfile | length > 0
when: dockerfile_needed
block:
- name: Set docker_build_directory variable
set_fact:
docker_build_directory: /opt/{{ docker_service }}/build
- name: Create container build directory
file:
path: "{{ docker_build_directory }}"
state: directory
- name: Put dockerfile in place
template:
src: Dockerfile.j2
dest: "/opt/{{ docker_service }}/Dockerfile"
dest: "{{ docker_build_directory }}/Dockerfile"
mode: 0644
- name: Build docker image for {{ docker_service }}
@@ -16,7 +25,7 @@
force_source: true
build:
pull: true
path: "/opt/{{ docker_service }}"
path: "{{ docker_build_directory }}"
register: built_image
- name: Pull container image for {{ docker_service }}

View File

@@ -8,12 +8,26 @@
final_docker_volumes: "{{ docker_volumes }}"
container_image: ''
- name: Set assistive variables
set_fact:
template_mounts_needed: "{{ docker_mounts | selectattr('template', 'defined') | list | length > 0 }}"
volumes_needed: "{{ docker_mounts | selectattr('name', 'defined') | list | length > 0 or docker_database != 'none' }}"
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 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:
docker_service_name: "{{ docker_service }}_{{ docker_service_suffix }}"
when: docker_service_suffix is defined
- name: Warn about docker_volumes legacy format
debug:
msg: "docker_volumes is deprecated. This support may be removed after december 2022. Use docker_mounts instead!"

View File

@@ -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:
@@ -46,7 +42,7 @@
path: "/opt/{{ docker_service }}"
state: directory
mode: 0755
when: (dockerfile is defined and dockerfile | length > 0) or docker_host_user or docker_volume_type == 'bind'
when: create_opt_directory
- name: Container image
import_tasks: image.yml
@@ -55,6 +51,44 @@
include_tasks: host_user.yml
when: docker_host_user
- name: Create suffix directory
when: create_opt_directory and docker_service_suffix is defined
block:
- name: Create directory /opt/{{ docker_service + '/' + docker_service_suffix }}
file:
path: "/opt/{{ docker_service }}/{{ docker_service_suffix }}"
state: directory
owner: "{{ user.uid | default(omit) }}"
group: "{{ user.group | default(omit) }}"
mode: 0755
- name: Set container_workdir variable
set_fact:
container_workdir: /opt/{{ docker_service }}/{{ docker_service_suffix }}
- name: Set container_workdir variable
set_fact:
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

View File

@@ -1,36 +1,9 @@
---
- name: Create directories and put files in them
when:
- docker_mounts | length > 0
- (docker_volume_type == 'bind' and docker_mounts | selectattr('name', 'defined') | list | length > 0) or (docker_mounts | selectattr('template', 'defined') | list | length > 0)
when: create_mounts_directory
block:
- name: Create directory /opt/{{ docker_service + '/' + docker_service_suffix }}
file:
path: "/opt/{{ docker_service }}/{{ docker_service_suffix }}"
state: directory
owner: "{{ user.uid | default(omit) }}"
group: "{{ user.group | default(omit) }}"
mode: 0755
when: docker_service_suffix is defined
- name: Set docker_mounts_dir
set_fact:
docker_mounts_dir: "/opt/{{ docker_service }}/{{ docker_service_suffix }}/mounts"
when: docker_service_suffix is defined
- name: Set docker_mounts_dir
set_fact:
docker_mounts_dir: "/opt/{{ docker_service }}/mounts"
when: docker_service_suffix is not defined
- 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 '' }}"

View 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 %}

View File

@@ -7,6 +7,6 @@ docker_additional_services: []
docker_host_user: false
wordpress_symlinks: false
wordpress_docker_volumes:
- name: html
path: /var/www/html
wordpress_php_memory_limit: 256M
wordpress_php_post_max_size: 128M
wordpress_php_upload_max_filesize: 32M

View File

@@ -0,0 +1,5 @@
; {{ ansible_managed }}
memory_limit = {{ wordpress_php_memory_limit }}
post_max_size = {{ wordpress_php_post_max_size }}
upload_max_filesize = {{ wordpress_php_upload_max_filesize }}

View File

@@ -0,0 +1,7 @@
---
wordpress_docker_volumes:
- name: html
path: /var/www/html
- template: php.ini
path: /usr/local/etc/php/conf.d/custom.ini