cleanup
This commit is contained in:
parent
db1379631f
commit
03aa7bf62c
6 changed files with 40 additions and 232 deletions
|
@ -95,15 +95,14 @@ def update_project(state: State) -> State:
|
|||
|
||||
volume_sources = [
|
||||
vol["source"] for service in services.values() for vol in service.get("volumes", [])
|
||||
if vol.get("type") == "volume"
|
||||
]
|
||||
|
||||
network_names = [
|
||||
network for service in services.values() for network in service.get("networks", {})
|
||||
]
|
||||
|
||||
duplicate_sources = [source for source in volume_sources if volume_sources.count(source) > 1]
|
||||
|
||||
project["volumes"] = {source: None for source in duplicate_sources} | {
|
||||
project["volumes"] = {source: None for source in volume_sources} | {
|
||||
source: {"external": True}
|
||||
for source in volume_sources
|
||||
if source in settings.get("external_volumes", [])
|
||||
|
|
|
@ -38,10 +38,6 @@ def get_base_definition(state: State, service_name: str) -> dict[str, Any]:
|
|||
"environment": {},
|
||||
"labels": {},
|
||||
"volumes": [],
|
||||
# TODO: this should be set per service helper
|
||||
# "networks": {
|
||||
# "internal": None,
|
||||
# },
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -12,22 +12,26 @@
|
|||
)
|
||||
)
|
||||
}}
|
||||
tags: [always]
|
||||
|
||||
- name: Login in to registries
|
||||
community.docker.docker_login: "{{ item }}" # noqa: args[module]
|
||||
loop: "{{ ez_docker_registry_logins }}"
|
||||
no_log: true
|
||||
when: ez_docker_registry_logins
|
||||
tags: [registries]
|
||||
|
||||
- name: Ensure shared networks exist # noqa: args[module]
|
||||
community.docker.docker_network: "{{ item }}"
|
||||
loop: "{{ ez_docker_shared_networks }}"
|
||||
when: ez_docker_shared_networks
|
||||
tags: [shared_networks]
|
||||
|
||||
- name: Ensure shared volumes exist # noqa: args[module]
|
||||
community.docker.docker_volume: "{{ item }}"
|
||||
loop: "{{ ez_docker_shared_volumes }}"
|
||||
when: ez_docker_shared_volumes
|
||||
tags: [shared_volumes]
|
||||
|
||||
- name: Import per-project tasks
|
||||
ansible.builtin.include_tasks: project.yml
|
||||
|
@ -36,4 +40,5 @@
|
|||
loop: "{{ ez_docker_projects }}"
|
||||
loop_control:
|
||||
loop_var: project_definition
|
||||
no_log: true
|
||||
# no_log: true
|
||||
tags: [always]
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
ansible.builtin.set_fact:
|
||||
project_name: "{{ project_definition.key | split('_') | last }}"
|
||||
project_dir: "{{ ez_docker_project_dir }}/{{ project_definition.key | split('_') | last }}"
|
||||
|
||||
tags: [always]
|
||||
|
||||
- name: "project | Create project directory: {{ project_name }}"
|
||||
ansible.builtin.file:
|
||||
|
@ -12,6 +12,7 @@
|
|||
owner: root
|
||||
group: docker
|
||||
mode: "750"
|
||||
tags: [compose]
|
||||
|
||||
- name: "project | Write compose files: {{ project_name }}"
|
||||
snailed.ez_docker.compose:
|
||||
|
@ -19,8 +20,15 @@
|
|||
services: "{{ project_definition.value }}"
|
||||
settings: "{{ ez_docker_settings }}"
|
||||
project_dir: "{{ project_dir }}"
|
||||
no_log: true
|
||||
check_mode: >-
|
||||
{{
|
||||
(
|
||||
"files" in ansible_run_tags
|
||||
and not "compose" in ansible_run_tags
|
||||
) or omit
|
||||
}}
|
||||
register: compose
|
||||
tags: [compose, files]
|
||||
|
||||
- name: "project | Start project: {{ project_name }}"
|
||||
community.docker.docker_compose_v2:
|
||||
|
@ -28,21 +36,37 @@
|
|||
project_src: "{{ project_dir }}"
|
||||
remove_orphans: true
|
||||
state: "present"
|
||||
tags: [start, files]
|
||||
|
||||
- name: "project | Reset file changes: {{ project_name }}"
|
||||
ansible.builtin.set_fact:
|
||||
services_changed: []
|
||||
tags: [files]
|
||||
|
||||
- name: "project | Import per-service tasks: {{ project_name }}"
|
||||
ansible.builtin.include_tasks: service.yml
|
||||
loop: "{{ compose.diff.after.services | dict2items }}"
|
||||
loop_control:
|
||||
loop_var: service
|
||||
no_log: true
|
||||
# no_log: true
|
||||
tags: [files]
|
||||
|
||||
- name: "project | Restart docker projects: {{ project_name }}"
|
||||
community.docker.docker_compose_v2:
|
||||
services: "{{ services_changed }}"
|
||||
services: "{{ omit if compose.changed else services_changed }}"
|
||||
project_src: "{{ project_dir }}"
|
||||
state: "restarted"
|
||||
when: services_changed
|
||||
when: services_changed or compose.changed
|
||||
tags: [compose, files]
|
||||
|
||||
- name: "project | Restart docker projects: {{ project_name }}"
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ project_dir }}"
|
||||
state: "restarted"
|
||||
tags: [never, restart]
|
||||
|
||||
- name: "project | Stop docker projects: {{ project_name }}"
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ project_dir }}"
|
||||
state: "stopped"
|
||||
tags: [never, stop]
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
with_community.general.filetree:
|
||||
- "{{ ez_docker_controller_files_root }}/{{ project_name }}/{{ service.key }}"
|
||||
register: copy
|
||||
tags: [files]
|
||||
|
||||
- name: "service | Template files into container: {{ service.value.container_name }}"
|
||||
community.docker.docker_container_copy_into:
|
||||
|
@ -28,8 +29,10 @@
|
|||
with_community.general.filetree:
|
||||
- "{{ ez_docker_controller_templates_root }}/{{ project_name }}/{{ service.key }}"
|
||||
register: template
|
||||
tags: [files]
|
||||
|
||||
- name: "service | Register file changes: {{ service.value.container_name }}"
|
||||
ansible.builtin.set_fact:
|
||||
services_changed: "{{ services_changed | default([]) + [service.key] }}"
|
||||
when: copy.changed or template.changed
|
||||
tags: [files]
|
||||
|
|
219
test.json
219
test.json
|
@ -1,219 +0,0 @@
|
|||
{
|
||||
"ANSIBLE_MODULE_ARGS": {
|
||||
"_ansible_check_mode": true,
|
||||
"_ansible_diff": true,
|
||||
"name": "traefik",
|
||||
"project_dir": "/var/lib/ez_compose",
|
||||
"services": {
|
||||
"custom": [
|
||||
{
|
||||
"definition": {
|
||||
"image": "traefik:v3.3.1",
|
||||
"labels": {
|
||||
"homepage.group": "Services",
|
||||
"homepage.href": "https://traefik.snaile.de/",
|
||||
"homepage.icon": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/traefik.png",
|
||||
"homepage.name": "Traefik",
|
||||
"homepage.widget.password": "redacted",
|
||||
"homepage.widget.type": "traefik",
|
||||
"homepage.widget.url": "https://traefik.snaile.de",
|
||||
"homepage.widget.username": "luca"
|
||||
},
|
||||
"networks": {
|
||||
"proxy": {}
|
||||
},
|
||||
"ports": [
|
||||
{
|
||||
"app_protocol": "smtp",
|
||||
"mode": "host",
|
||||
"name": "smtp",
|
||||
"protocol": "tcp",
|
||||
"published": 25,
|
||||
"target": 25
|
||||
},
|
||||
{
|
||||
"app_protocol": "http",
|
||||
"mode": "host",
|
||||
"name": "web",
|
||||
"protocol": "tcp",
|
||||
"published": 80,
|
||||
"target": 80
|
||||
},
|
||||
{
|
||||
"app_protocol": "https",
|
||||
"mode": "host",
|
||||
"name": "web-secure",
|
||||
"protocol": "tcp",
|
||||
"published": 443,
|
||||
"target": 443
|
||||
},
|
||||
{
|
||||
"app_protocol": "smtps",
|
||||
"mode": "host",
|
||||
"name": "smtp-ssl",
|
||||
"protocol": "tcp",
|
||||
"published": 465,
|
||||
"target": 465
|
||||
},
|
||||
{
|
||||
"app_protocol": "imaps",
|
||||
"mode": "host",
|
||||
"name": "imap-ssl",
|
||||
"protocol": "tcp",
|
||||
"published": 993,
|
||||
"target": 993
|
||||
},
|
||||
{
|
||||
"app_protocol": "ssh",
|
||||
"mode": "host",
|
||||
"name": "git-ssh",
|
||||
"protocol": "tcp",
|
||||
"published": 2222,
|
||||
"target": 2222
|
||||
},
|
||||
{
|
||||
"app_protocol": "managesieve",
|
||||
"mode": "host",
|
||||
"name": "sieve",
|
||||
"protocol": "tcp",
|
||||
"published": 4190,
|
||||
"target": 4190
|
||||
},
|
||||
{
|
||||
"mode": "host",
|
||||
"name": "matrix-federation",
|
||||
"protocol": "tcp",
|
||||
"published": 8448,
|
||||
"target": 8448
|
||||
}
|
||||
],
|
||||
"volumes": [
|
||||
{
|
||||
"source": "/var/log/traefik",
|
||||
"target": "/var/log/traefik",
|
||||
"type": "bind"
|
||||
},
|
||||
{
|
||||
"source": "/etc/traefik",
|
||||
"target": "/etc/traefik",
|
||||
"type": "bind"
|
||||
},
|
||||
{
|
||||
"read_only": true,
|
||||
"source": "/etc/localtime",
|
||||
"target": "/etc/localtime",
|
||||
"type": "bind"
|
||||
},
|
||||
{
|
||||
"read_only": true,
|
||||
"source": "/var/run/docker.sock",
|
||||
"target": "/var/run/docker.sock",
|
||||
"type": "bind"
|
||||
}
|
||||
]
|
||||
},
|
||||
"label_helpers": {
|
||||
"docker_volume_backupper": null,
|
||||
"traefik_middleware": [
|
||||
{
|
||||
"middleware": "basicAuth",
|
||||
"name": "traefik_basicauth",
|
||||
"proxy_type": "http",
|
||||
"settings": {
|
||||
"users": "redacted"
|
||||
}
|
||||
}
|
||||
],
|
||||
"traefik_router": [
|
||||
{
|
||||
"certresolver": null,
|
||||
"entrypoints": null,
|
||||
"middlewares": ["traefik_basicauth"],
|
||||
"name": null,
|
||||
"proxy_type": "http",
|
||||
"rule": "Host(`traefik.snaile.de`)",
|
||||
"service": "api@internal"
|
||||
}
|
||||
],
|
||||
"traefik_service": null
|
||||
},
|
||||
"name": "traefik"
|
||||
}
|
||||
],
|
||||
"docker_in_docker": null,
|
||||
"docker_socket_proxy": null,
|
||||
"docker_volume_backupper": null,
|
||||
"mariadb": null,
|
||||
"postgres": null,
|
||||
"redis": null
|
||||
},
|
||||
"settings": {
|
||||
"external_networks": ["proxy"],
|
||||
"default_definition": {
|
||||
"environment": {
|
||||
"TZ": "Europe/Berlin"
|
||||
}
|
||||
},
|
||||
"label_default_args": {
|
||||
"docker_volume_backupper": null,
|
||||
"traefik_middleware": null,
|
||||
"traefik_router": {
|
||||
"certresolver": "letsencrypt",
|
||||
"entrypoints": ["web-secure"],
|
||||
"middlewares": ["hsts"],
|
||||
"name": null,
|
||||
"proxy_type": null,
|
||||
"rule": null,
|
||||
"service": null
|
||||
},
|
||||
"traefik_service": null
|
||||
},
|
||||
"service_default_args": {
|
||||
"custom": null,
|
||||
"docker_in_docker": null,
|
||||
"docker_socket_proxy": null,
|
||||
"docker_volume_backupper": {
|
||||
"archive": "/tank/docker-backups",
|
||||
"backup_volumes": null
|
||||
},
|
||||
"mariadb": null,
|
||||
"postgres": null,
|
||||
"redis": null
|
||||
},
|
||||
"service_default_definitions": {
|
||||
"docker_volume_backupper": {
|
||||
"environment": {
|
||||
"BACKUP_CRON_EXPRESSION": "0 6 * * *",
|
||||
"BACKUP_RETENTION_DAYS": "7",
|
||||
"EXEC_FORWARD_OUTPUT": true,
|
||||
"GPG_PASSPHRASE": "redacted",
|
||||
"GZIP_PARALLELISM": "2",
|
||||
"NOTIFICATION_URLS": "redacted",
|
||||
"SSH_HOST_NAME": "redacted",
|
||||
"SSH_PASSWORD": "redacted",
|
||||
"SSH_PORT": "23",
|
||||
"SSH_REMOTE_PATH": "/home/docker-backups",
|
||||
"SSH_USER": "redacted"
|
||||
},
|
||||
"image": "offen/docker-volume-backup:v2.43.1"
|
||||
},
|
||||
"custom": null,
|
||||
"docker_in_docker": {
|
||||
"image": "docker:27.4.1-dind"
|
||||
},
|
||||
"mariadb": {
|
||||
"image": "mariadb:11.6.2"
|
||||
},
|
||||
"postgres": {
|
||||
"image": "postgres:16.6-alpine"
|
||||
},
|
||||
"redis": {
|
||||
"image": "redis:7.4.2-alpine"
|
||||
},
|
||||
"docker_socket_proxy": {
|
||||
"image": "tecnativa/docker-socket-proxy:0.3.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue