diff --git a/group_vars/all/09_ports.yml b/group_vars/all/09_ports.yml index 419b292c..d0d9fb12 100644 --- a/group_vars/all/09_ports.yml +++ b/group_vars/all/09_ports.yml @@ -46,7 +46,7 @@ ports: web-app-openproject: 8023 gitlab: 8024 web-app-akaunting: 8025 - moodle: 8026 + web-app-moodle: 8026 taiga: 8027 friendica: 8028 web-app-port-ui: 8029 diff --git a/group_vars/all/10_networks.yml b/group_vars/all/10_networks.yml index 08d95c20..f7e1656d 100644 --- a/group_vars/all/10_networks.yml +++ b/group_vars/all/10_networks.yml @@ -46,7 +46,7 @@ defaults_networks: # Use one of the last container ips for dns resolving so that it isn't used dns: 192.168.102.29 subnet: 192.168.102.16/28 - moodle: + web-app-moodle: subnet: 192.168.102.32/28 web-app-mybb: subnet: 192.168.102.48/28 diff --git a/roles/web-app-moodle/config/main.yml b/roles/web-app-moodle/config/main.yml index b9f82259..61f46e2f 100644 --- a/roles/web-app-moodle/config/main.yml +++ b/roles/web-app-moodle/config/main.yml @@ -1,5 +1,4 @@ site_titel: "Academy on {{primary_domain}}" -version: "4.5" # Latest LTS - Necessary for OIDC features: matomo: true css: false @@ -28,4 +27,12 @@ domains: docker: services: database: - enabled: true \ No newline at end of file + enabled: true + moodle: + version: "4.5" # Latest LTS - Necessary for OIDC + image: bitnami/moodle + name: moodle + volumes: + data: + name: moodle_data + \ No newline at end of file diff --git a/roles/web-app-moodle/tasks/database.yml b/roles/web-app-moodle/tasks/database.yml new file mode 100644 index 00000000..3ddc9e9e --- /dev/null +++ b/roles/web-app-moodle/tasks/database.yml @@ -0,0 +1,47 @@ +- name: Check if config.php exists + command: docker exec --user root {{ moodle_name }} test -f {{ moodle_config }} + register: config_file_exists + changed_when: false + failed_when: false + +- name: Backup config.php to host + when: config_file_exists.rc == 0 + block: + - name: Create backup directory on host + ansible.builtin.file: + path: "/opt/docker/moodle/_backup" + state: directory + mode: "0755" + + - name: Copy config.php from container to host + command: > + docker cp {{ moodle_name }}:{{ moodle_config }} /opt/docker/moodle/_backup/config.php.bak + +- name: Check if config.php exists + command: docker exec --user root {{ moodle_name }} test -f {{ moodle_config }} + register: config_file_exists + changed_when: false + failed_when: false + +- name: Patch Moodle config.php with updated DB credentials + when: config_file_exists.rc == 0 + block: + - name: Update DB host + command: > + docker exec --user root {{ moodle_name }} + sed -i "s/^\$CFG->dbhost *= *.*/\$CFG->dbhost = '{{ database_host }}';/" {{ moodle_config }} + + - name: Update DB name + command: > + docker exec --user root {{ moodle_name }} + sed -i "s/^\$CFG->dbname *= *.*/\$CFG->dbname = '{{ database_name }}';/" {{ moodle_config }} + + - name: Update DB user + command: > + docker exec --user root {{ moodle_name }} + sed -i "s/^\$CFG->dbuser *= *.*/\$CFG->dbuser = '{{ database_username }}';/" {{ moodle_config }} + + - name: Update DB password + command: > + docker exec --user root {{ moodle_name }} + sed -i "s/^\$CFG->dbpass *= *.*/\$CFG->dbpass = '{{ database_password }}';/" {{ moodle_config }} diff --git a/roles/web-app-moodle/tasks/main.yml b/roles/web-app-moodle/tasks/main.yml index 8d7fa440..3f7017c6 100644 --- a/roles/web-app-moodle/tasks/main.yml +++ b/roles/web-app-moodle/tasks/main.yml @@ -3,6 +3,12 @@ include_role: name: cmp-db-docker-proxy +- name: "Update database credentials" + include_tasks: database.yml + +- name: flush docker service + meta: flush_handlers + - name: Wait until the Moodle container is healthy shell: docker inspect --format '{% raw %}{{.State.Health.Status}}{% endraw %}' {{ container_name }} register: health_check diff --git a/roles/web-app-moodle/templates/Dockerfile.j2 b/roles/web-app-moodle/templates/Dockerfile.j2 index 90e75e3a..d53971f5 100644 --- a/roles/web-app-moodle/templates/Dockerfile.j2 +++ b/roles/web-app-moodle/templates/Dockerfile.j2 @@ -1,4 +1,4 @@ -FROM bitnami/moodle:{{ applications | get_app_conf(application_id, 'version', True) }} +FROM {{ moodle_image }}:{{ moodle_version }} {% if applications | get_app_conf(application_id, 'features.oidc', False) %} RUN install_packages unzip curl jq \ diff --git a/roles/web-app-moodle/templates/docker-compose.yml.j2 b/roles/web-app-moodle/templates/docker-compose.yml.j2 index 8b88226c..a810052d 100644 --- a/roles/web-app-moodle/templates/docker-compose.yml.j2 +++ b/roles/web-app-moodle/templates/docker-compose.yml.j2 @@ -19,7 +19,9 @@ {% include 'roles/docker-compose/templates/volumes.yml.j2' %} code: + name: {{ moodle_volume_code }} data: + name: {{ moodle_volume_data }} {% include 'roles/docker-compose/templates/networks.yml.j2' %} \ No newline at end of file diff --git a/roles/web-app-moodle/vars/main.yml b/roles/web-app-moodle/vars/main.yml index 2fb45490..1c4f80df 100644 --- a/roles/web-app-moodle/vars/main.yml +++ b/roles/web-app-moodle/vars/main.yml @@ -1,11 +1,18 @@ --- -application_id: "moodle" +application_id: "web-app-moodle" database_type: "mariadb" -container_name: "{{ application_id }}" bitnami_code_link: "/bitnami/moodle" bitnami_code_dir: "/opt{{bitnami_code_link}}" bitnami_data_dir: "/bitnami/moodledata" bitnami_oidc_plugin_dir: "{{ bitnami_code_dir }}/auth/oidc" bitnami_user: "daemon" bitnami_user_group: "{{ bitnami_user }}:{{ bitnami_user }}" -docker_compose_flush_handlers: true \ No newline at end of file + +docker_compose_flush_handlers: false # Wait for env update + +moodle_config: "/bitnami/moodle/config.php" +moodle_version: "{{ applications | get_app_conf(application_id, 'docker.services.moodle.version', True) }}" +moodle_image: "{{ applications | get_app_conf(application_id, 'docker.services.moodle.image', True) }}" +moodle_name: "{{ applications | get_app_conf(application_id, 'docker.services.moodle.name', True) }}" +moodle_volume: "{{ applications | get_app_conf(application_id, 'docker.volumes.data', True) }}" +moodle_code: "{{ applications | get_app_conf(application_id, 'docker.volumes.code', True) }}" \ No newline at end of file