ansible/roles/octoprint/tasks/main.yml

152 lines
4.7 KiB
YAML

---
- name: Create group
group:
name: "{{ octoprint_group }}"
- name: Create user
user:
name: "{{ octoprint_user }}"
home: "/home/{{ octoprint_user }}"
group: "{{ octoprint_group }}"
append: yes
groups:
- video
- name: Install requirements
apt:
name:
- python3-pip
- python3-virtualenv
- name: Create virtual env and install python dependencies
pip:
name: octoprint
virtualenv: "{{ octoprint_dir }}"
- name: Create configuration directories
file:
path: "/home/{{ octoprint_user }}/{{ item }}"
owner: "{{ octoprint_user }}"
group: "{{ octoprint_group }}"
state: directory
mode: u+rw,g+rw,o+r
with_items:
- .octoprint
- .octoprint/printerProfiles
- name: Install systemd unit
template: src=octoprint.service.j2 dest=/lib/systemd/system/octoprint.service
notify:
- Reload systemd
- Restart octoprint
################################################################################
# Octoprint configuration
################################################################################
- name: Register if config already exists on target host
stat:
path: "/home/{{ octoprint_user }}/.octoprint/config.yaml"
register: octoprint_register_config_stat
- name: Default octoprint config
set_fact:
octoprint_config: "{{ lookup('template', 'config.yaml.j2') | from_yaml }}"
- name: Initial configuration of octoprint
copy:
content: "{{ octoprint_config | to_nice_yaml }}"
dest: "/home/{{ octoprint_user }}/.octoprint/config.yaml"
when: not octoprint_register_config_stat.stat.exists
- name: Update existing Octoprint configuration
block:
- name: Read Octoprint config file
slurp:
src: "/home/{{ octoprint_user }}/.octoprint/config.yaml"
register: octoprint_register_config
- name: Parse Octoprint config file
set_fact:
current_octoprint_config: "{{ octoprint_register_config['content'] | b64decode | from_yaml}}"
- name: Write updated octoprint configuration
copy:
content: "{{ octoprint_config | combine(current_octoprint_config, recursive=True) | to_nice_yaml}}"
dest: "/home/{{octoprint_user}}/.octoprint/config.yaml"
notify: Restart octoprint
################################################################################
# Octoprint Users
################################################################################
when: octoprint_register_config_stat.stat.exists
- name: Register if user databse already exists on target host
stat:
path: "/home/{{ octoprint_user }}/.octoprint.users.yaml"
register: octoprint_register_users
- name: Read default octoprint users
set_fact:
octoprint_defaut_users: "{{ lookup('file', 'users.yaml') | from_yaml }}"
- name: Copy default users
copy:
src: users.yaml
dest: "/home/{{ octoprint_user }}/.octoprint/users.yaml"
when: not octoprint_register_users.stat.exists
- name: Merge users database with default users
block:
- name: Read Octoprint users file
slurp:
src: "/home/{{ octoprint_user }}/.octoprint/users.yaml"
register: octoprint_register_users_file
- name: Parse Octoprint users file
set_fact:
current_octoprint_users: "{{ octoprint_register_users_file['content'] | b64decode | from_yaml }}"
- name: Merge current users with default users
set_fact:
octoprint_users_db: "{{ current_octoprint_users | combine(octoprint_default_users)}}"
- name: Copy new users file
copy:
content: "{{ octoprint_users_db | to_nice_yaml }}"
dest: "/home/{{ octoprint_user }}/.octoprint.users.yaml"
when: octoprint_register_users.stat.exists
################################################################################
# Reverse proxy
################################################################################
- name: Configure reverse proxy
block:
- name: Ensure certificates are available
command: openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/apache2/ssl/{{ octoprint_domain }}.key -out /etc/apache2/ssl/{{ octoprint_domain }}.crt -days 730 -subj "/CN={{ octoprint_domain }}" creates=/etc/apache2/ssl/{{ octoprint_domain }}.crt
notify: Restart apache2
when: octoprint_ssl
- name: Configure certificate manager for octoprint
template: src=certs.j2 dest=/etc/acertmgr/{{ octoprint_domain }}.conf
notify: Run acertmgr
when: octoprint_ssl
- name: Configure vhost
template: src=nginx_vhost.j2 dest=/etc/nginx/sites-available/octoprint
notify: Restart nginx
- name: Enable vhost
file: src=/etc/nginx/sites-available/octoprint dest=/etc/nginx/sites-enabled/octoprint state=link
notify: Restart nginx
- name: Enable octoprint
service:
name: octoprint
enabled: yes