diff --git a/playbook/common-k3s.yml b/common-k3s.yml similarity index 100% rename from playbook/common-k3s.yml rename to common-k3s.yml diff --git a/playbook/db.yml b/db.yml similarity index 100% rename from playbook/db.yml rename to db.yml diff --git a/playbook/docker-host.yml b/docker-host.yml similarity index 100% rename from playbook/docker-host.yml rename to docker-host.yml diff --git a/playbook/docker-lb.yml b/docker-lb.yml similarity index 100% rename from playbook/docker-lb.yml rename to docker-lb.yml diff --git a/group_vars/all/vars.yml b/group_vars/all/vars.yml index 5866842..466fc17 100644 --- a/group_vars/all/vars.yml +++ b/group_vars/all/vars.yml @@ -2,6 +2,7 @@ # Essential # +root: root user: tudattr timezone: Europe/Berlin puid: "1000" diff --git a/group_vars/docker/vars.yml b/group_vars/docker/vars.yml index 41dc226..5af16ae 100644 --- a/group_vars/docker/vars.yml +++ b/group_vars/docker/vars.yml @@ -1,7 +1,9 @@ docker: url: "https://download.docker.com/linux" apt_release_channel: "stable" - dirs: "/opt/docker" + directories: + opt: "/opt/docker/" + compose: "/opt/docker/compose" caddy: admin_email: me+acme@tudattr.dev @@ -443,6 +445,47 @@ services: - TZ=Europe/Berlin - QBT_EULA="accept" - QBT_WEBUI_PORT="8082" + - name: cadvisor + vm: + - docker-host00 + - docker-host01 + - docker-host02 + container_name: cadvisor + image: gcr.io/cadvisor/cadvisor:latest + restart: unless-stopped + ports: + - name: "" + internal: 8080 + external: 8081 + volumes: + - name: "Root" + internal: /rootfs:ro + external: / + - name: "Run" + internal: /var/run:rw + external: /var/run + - name: "System" + internal: /sys:ro + external: /sys + - name: "Docker" + internal: /var/lib/docker:ro + external: /var/lib/docker + # - name: template + # vm: + # - + # container_name: + # image: + # restart: + # volumes: + # - name: + # internal: + # external: + # ports: + # - name: + # internal: + # external: + # environment: + # - # - name: calibre # vm: # - docker-host00 diff --git a/playbook/k3s-agents.yml b/k3s-agents.yml similarity index 100% rename from playbook/k3s-agents.yml rename to k3s-agents.yml diff --git a/playbook/k3s-servers.yml b/k3s-servers.yml similarity index 100% rename from playbook/k3s-servers.yml rename to k3s-servers.yml diff --git a/playbook/k3s-storage.yml b/k3s-storage.yml similarity index 100% rename from playbook/k3s-storage.yml rename to k3s-storage.yml diff --git a/playbook/loadbalancer.yml b/loadbalancer.yml similarity index 100% rename from playbook/loadbalancer.yml rename to loadbalancer.yml diff --git a/roles/docker_host/files/daemon.json b/roles/docker_host/files/daemon.json new file mode 100644 index 0000000..aa2a42c --- /dev/null +++ b/roles/docker_host/files/daemon.json @@ -0,0 +1,3 @@ +{ + "metrics-addr": "0.0.0.0:9323" +} diff --git a/roles/docker_host/handlers/main.yml b/roles/docker_host/handlers/main.yml index a982c20..4fff2cb 100644 --- a/roles/docker_host/handlers/main.yml +++ b/roles/docker_host/handlers/main.yml @@ -4,4 +4,8 @@ name: docker state: restarted become: true -# TODO also do docker compose restart + +- name: Restart compose + community.docker.docker_compose_v2: + project_src: "{{ docker.directories.compose }}" + state: restarted diff --git a/roles/docker_host/tasks/deploy_compose.yml b/roles/docker_host/tasks/deploy_compose.yml index b5620ea..182e370 100644 --- a/roles/docker_host/tasks/deploy_compose.yml +++ b/roles/docker_host/tasks/deploy_compose.yml @@ -2,11 +2,12 @@ - name: Copy docker compose file to target ansible.builtin.template: src: "templates/compose.yaml.j2" - dest: "/opt/docker/compose/compose.yaml" + dest: "{{ docker.directories.compose }}/compose.yaml" owner: "{{ user }}" group: "{{ user }}" mode: "644" backup: true notify: - Restart docker + - Restart compose become: true diff --git a/roles/docker_host/tasks/directory_setup.yml b/roles/docker_host/tasks/directory_setup.yml index 800031d..52bc1a1 100644 --- a/roles/docker_host/tasks/directory_setup.yml +++ b/roles/docker_host/tasks/directory_setup.yml @@ -1,106 +1,40 @@ --- -- name: Create /media/docker directory +- name: Create directories ansible.builtin.file: - path: /media/docker + path: "{{ item }}" state: directory mode: "0755" + loop: + - /media/docker + - /media/series + - /media/movies + - /media/songs + - "{{ docker.directories.opt }}" + - "{{ docker.directories.compose }}" + - /opt/local become: true -- name: Create /media/series directory +- name: Set ownership to {{ user }} ansible.builtin.file: - path: /media/series - state: directory - mode: "0755" + path: "{{ item }}" + owner: "{{ user }}" + group: "{{ user }}" + loop: + - "{{ docker.directories.opt }}" + - /opt/local + - /media become: true -- name: Create /media/movies directory - ansible.builtin.file: - path: /media/movies - state: directory - mode: "0755" - become: true - -- name: Create /media/songs directory - ansible.builtin.file: - path: /media/songs - state: directory - mode: "0755" - become: true - -- name: Create /opt/docker directory - ansible.builtin.file: - path: /opt/docker - state: directory - mode: "0755" - become: true - -- name: Create /opt/docker/compose directory - ansible.builtin.file: - path: /opt/docker/compose - state: directory - mode: "0755" - become: true - -- name: Create /opt/local directory - ansible.builtin.file: - path: /opt/local - state: directory - mode: "0755" - become: true - -- name: Set ownership of /opt/local to tudattr - ansible.builtin.file: - path: /opt/local - owner: tudattr - group: tudattr - become: true - -- name: Set ownership of /opt/docker to tudattr - ansible.builtin.file: - path: /opt/docker - owner: tudattr - group: tudattr - become: true - -- name: Set ownership of /media directories to tudattr - ansible.builtin.file: - path: /media/ - owner: tudattr - group: tudattr - become: true - -- name: Ensure /media/docker is mounted via NFS +- name: Ensure NFS mounts ansible.posix.mount: - path: /media/docker - src: 192.168.20.12:/media/docker - fstype: nfs - opts: defaults,nolock - state: mounted - become: true - -- name: Ensure /media/series is mounted via NFS - ansible.posix.mount: - path: /media/series - src: 192.168.20.12:/media/series - fstype: nfs - opts: defaults,nolock - state: mounted - become: true - -- name: Ensure /media/movies is mounted via NFS - ansible.posix.mount: - path: /media/movies - src: 192.168.20.12:/media/movies - fstype: nfs - opts: defaults,nolock - state: mounted - become: true - -- name: Ensure /media/songs is mounted via NFS - ansible.posix.mount: - path: /media/songs - src: 192.168.20.12:/media/songs + path: "{{ item }}" + src: "192.168.20.12:{{ item }}" fstype: nfs opts: defaults,nolock state: mounted + loop: + - /media/docker + - /media/series + - /media/movies + - /media/songs become: true diff --git a/roles/docker_host/tasks/export.yml b/roles/docker_host/tasks/export.yml new file mode 100644 index 0000000..e83213e --- /dev/null +++ b/roles/docker_host/tasks/export.yml @@ -0,0 +1,11 @@ +--- +- name: Copy exporter config to host + ansible.builtin.copy: + src: files/daemon.json + dest: /etc/docker/daemon.json + owner: "{{ root }}" + group: "{{ root }}" + mode: "0644" + notify: + - Restart docker + become: true diff --git a/roles/docker_host/tasks/main.yml b/roles/docker_host/tasks/main.yml index c81ffbb..39f520b 100644 --- a/roles/docker_host/tasks/main.yml +++ b/roles/docker_host/tasks/main.yml @@ -13,3 +13,6 @@ - name: Deploy docker compose ansible.builtin.include_tasks: deploy_compose.yml + +- name: Publish metrics + ansible.builtin.include_tasks: export.yml diff --git a/roles/docker_host/templates/compose.yaml.j2 b/roles/docker_host/templates/compose.yaml.j2 index bb03263..2801a61 100644 --- a/roles/docker_host/templates/compose.yaml.j2 +++ b/roles/docker_host/templates/compose.yaml.j2 @@ -56,8 +56,8 @@ services: - {{device.external}}:{{device.internal}} {% endfor %} {% endif %} - {% if service.name == 'paperless' %} + {{service.name}}-broker: container_name: paperless-broker image: docker.io/library/redis:7 @@ -79,13 +79,10 @@ services: POSTGRES_DB: paperless POSTGRES_USER: paperless POSTGRES_PASSWORD: 5fnhn%u2YWY3paNvMAjdoufYPQ2Hf3Yi - {% endif %} - - {% endif %} +{% endif %} {% endfor %} - networks: net: driver: bridge diff --git a/playbook/test.yml b/test.yml similarity index 100% rename from playbook/test.yml rename to test.yml