diff --git a/inventories/thinkcccentre/host_vars/esphome.yml b/inventories/thinkcccentre/host_vars/esphome.yml new file mode 100644 index 0000000..37307a1 --- /dev/null +++ b/inventories/thinkcccentre/host_vars/esphome.yml @@ -0,0 +1,4 @@ +esphome__version: "2022.11.4" +nginx__configs: + - name: esphome + content: "{{ lookup('ansible.builtin.file', 'configs/esphome/nginx/esphome.conf') }}" diff --git a/inventories/thinkcccentre/hosts.yml b/inventories/thinkcccentre/hosts.yml index ad700f7..43692d2 100644 --- a/inventories/thinkcccentre/hosts.yml +++ b/inventories/thinkcccentre/hosts.yml @@ -6,3 +6,5 @@ all: ansible_host: light.z9 automation: ansible_host: automation.z9 + esphome: + ansible_host: esphome.z9 diff --git a/playbooks/deploy_esphome.yml b/playbooks/deploy_esphome.yml new file mode 100644 index 0000000..c99c3ba --- /dev/null +++ b/playbooks/deploy_esphome.yml @@ -0,0 +1,7 @@ +--- +- name: Deploy esphome on esphome.z9 + become: true + hosts: esphome + roles: + - esphome + - nginx diff --git a/playbooks/files/configs/esphome/nginx/esphome.conf b/playbooks/files/configs/esphome/nginx/esphome.conf new file mode 100644 index 0000000..a303431 --- /dev/null +++ b/playbooks/files/configs/esphome/nginx/esphome.conf @@ -0,0 +1,8 @@ +server { + listen 80; + server_name esphome.z9; + + location / { + proxy_pass http://localhost:6052; + } +} diff --git a/playbooks/roles/esphome/files/esphome.service b/playbooks/roles/esphome/files/esphome.service new file mode 100644 index 0000000..65e134c --- /dev/null +++ b/playbooks/roles/esphome/files/esphome.service @@ -0,0 +1,10 @@ +[Unit] +Description=ESPHome + +[Service] +ExecStart=/home/esphome/.local/bin/esphome dashboard config/ +WorkingDirectory=/home/esphome/.local/bin +User=esphome + +[Install] +WantedBy=multi-user.target diff --git a/playbooks/roles/esphome/handlers/main.yml b/playbooks/roles/esphome/handlers/main.yml new file mode 100644 index 0000000..2524898 --- /dev/null +++ b/playbooks/roles/esphome/handlers/main.yml @@ -0,0 +1,4 @@ +- name: Restart esphome + ansible.builtin.systemd: + service: esphome.service + state: restarted diff --git a/playbooks/roles/esphome/meta/argument_specs.yml b/playbooks/roles/esphome/meta/argument_specs.yml new file mode 100644 index 0000000..71963ae --- /dev/null +++ b/playbooks/roles/esphome/meta/argument_specs.yml @@ -0,0 +1,8 @@ +--- +argument_specs: + main: + options: + esphome__version: + description: ESPHome version that should be installed. + type: str + required: true diff --git a/playbooks/roles/esphome/meta/main.yml b/playbooks/roles/esphome/meta/main.yml new file mode 100644 index 0000000..2c3bd99 --- /dev/null +++ b/playbooks/roles/esphome/meta/main.yml @@ -0,0 +1,8 @@ +--- +dependencies: + - role: distribution_check + vars: + distribution_check__supported_distributions: + - name: Debian + versions: + - "11" diff --git a/playbooks/roles/esphome/tasks/main.yml b/playbooks/roles/esphome/tasks/main.yml new file mode 100644 index 0000000..36e1250 --- /dev/null +++ b/playbooks/roles/esphome/tasks/main.yml @@ -0,0 +1,33 @@ +- name: Ensure acl is installed + ansible.builtin.apt: + name: acl +- name: Ensure pip is installed + ansible.builtin.apt: + name: python3-pip +- name: Ensure esphome user exists + ansible.builtin.user: + name: esphome +- name: Ensure esphome dependencies are installed + become_user: esphome + ansible.builtin.pip: + name: tornado + extra_args: --user +- name: Ensure esphome are installed + become_user: esphome + ansible.builtin.pip: + name: "esphome=={{ esphome__version }}" + extra_args: --user + notify: Restart esphome +- name: Ensure esphome systemd service file is deployed + ansible.builtin.copy: + src: esphome.service + dest: /etc/systemd/system/esphome.service + mode: 0644 + owner: root + group: root + notify: Restart esphome +- name: Ensure esphome service is enabled and started + ansible.builtin.systemd: + service: esphome.service + enabled: true + state: started