diff --git a/docker/app/frank.Dockerfile b/docker/app/frank.Dockerfile index 6532c05..1a41541 100644 --- a/docker/app/frank.Dockerfile +++ b/docker/app/frank.Dockerfile @@ -4,7 +4,7 @@ WORKDIR /app ADD https://git.tanshu.com/tanshu/barker/raw/branch/main/frank/pyproject.toml /app/pyproject.toml # Install Poetry -RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | POETRY_HOME=/opt/poetry python && \ +RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | POETRY_HOME=/opt/poetry python && \ cd /usr/local/bin && \ ln -s /opt/poetry/bin/poetry && \ poetry config virtualenvs.create false && \ diff --git a/docker/files/build-frank.sh b/docker/files/build-frank.sh new file mode 100755 index 0000000..a947138 --- /dev/null +++ b/docker/files/build-frank.sh @@ -0,0 +1 @@ +docker build --file /home/pi/dockerfile/app/frank.Dockerfile --tag frank:latest /home/pi/dockerfile/app diff --git a/docker/files/frank.service b/docker/files/frank.service new file mode 100644 index 0000000..0e73437 --- /dev/null +++ b/docker/files/frank.service @@ -0,0 +1,13 @@ +[Unit] +Description=Frank container service +After=docker.service knox-redis-tunnel.service +Wants=network-online.target docker.socket knox-redis-tunnel.service +Requires=docker.socket knox-redis-tunnel.service + +[Service] +Restart=always +ExecStart=/usr/bin/docker start -a frank +ExecStop=/usr/bin/docker stop -t 10 frank + +[Install] +WantedBy=multi-user.target diff --git a/docker/files/frank.sh b/docker/files/frank.sh index e69de29..5d81694 100644 --- a/docker/files/frank.sh +++ b/docker/files/frank.sh @@ -0,0 +1 @@ +docker run --detach --name frank --hostname=moh1 --env-file=/home/pi/frank.env --network=host --restart=no --device /dev/usb/lp0:/printer frank:latest diff --git a/docker/playbook-frank.yml b/docker/playbook-frank.yml index 19dbad6..f0902eb 100755 --- a/docker/playbook-frank.yml +++ b/docker/playbook-frank.yml @@ -9,19 +9,27 @@ tasks: - name: Copy dockerfile - synchronize: src=app dest=/tmp + synchronize: src=app dest=/home/pi/dockerfile - name: Build frank image docker_image: name: frank:latest build: - path: /tmp/app/ - dockerfile: /tmp/app/frank.Dockerfile + path: /home/pi/dockerfile/app + dockerfile: /home/pi/dockerfile/app/frank.Dockerfile pull: yes state: present source: build - - name: Upload the worker .env file + - name: Check if frank .env file exists + stat: path="/home/pi/frank.env" + register: status + + - name: No need to upload the frank .env file + debug: msg= {{ "No need to upload the frank .env file as it already exists." }} + + - name: Upload the frank .env file + when: status.stat.exists == false template: src: "files/frank.env" dest: "/home/pi/frank.env" @@ -31,8 +39,30 @@ name: "frank" image: frank:latest state: started - restart_policy: "unless-stopped" + restart_policy: "no" env_file: "/home/pi/frank.env" network_mode: "host" devices: - "{{ printer_port }}:/printer" + + - name: Copy docker build script + synchronize: src=files/build-frank.sh dest=/home/pi/dockerfile/build-frank.sh + + - name: Copy docker run script + synchronize: src=files/frank.sh dest=/home/pi/dockerfile/frank.sh + + - name: install frank systemd unit file + template: + src: "files/frank.service" + dest: "/etc/systemd/system/frank.service" + + - name: enable service frank and ensure it is not masked + systemd: + name: frank + enabled: yes + masked: no + + - name: Make sure frank service is running + systemd: + state: started + name: frank diff --git a/frank/pyproject.toml b/frank/pyproject.toml index f170dd7..d2d0777 100644 --- a/frank/pyproject.toml +++ b/frank/pyproject.toml @@ -6,8 +6,8 @@ authors = ["tanshu "] [tool.poetry.dependencies] python = "^3.8" -pydantic = {extras = ["dotenv"], version = "^1.8.1"} -arq = "^0.19.1" +pydantic = {extras = ["dotenv"], version = "^1.8.2"} +arq = "^0.20" aiohttp = "^3.7.4" [build-system]