diff --git a/README.md b/README.md index 2e927a22aa..002a1d0585 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ If you have a spare domain name you can configure applications to be accessible * [Lowcoder](https://github.com/lowcoder-org/lowcoder) - The Open Source Retool, Tooljet and Appsmith Alternative. * [LubeLogger](https://github.com/hargata/lubelog) - LubeLogger is a web-based vehicle maintenance and fuel mileage tracker. * [Mainsail](https://github.com/mainsail-crew/mainsail) - popular web interface for managing and controlling 3D printers with Klipper +* [Maker Management Platform](https://github.com/Maker-Management-Platform/docs) - management of a variety of digital assets related to 3d printing, manufacturing, laser engraving and such. * [Mantium](https://github.com/diogovalentte/mantium) - dashboard for tracking mangas from multiple source sites, like Mangadex and ComicK. * [Mattermost](https://mattermost.com/) - open source platform for secure collaboration across the entire software development lifecycle * [MariaDB](https://mariadb.org/) - one of the most popular open source relational databases diff --git a/nas.yml b/nas.yml index 3950e5f4c9..69dabd882b 100644 --- a/nas.yml +++ b/nas.yml @@ -521,6 +521,10 @@ tags: - miniserve + - role: mmp + tags: + - mmp + - role: mosquitto tags: - mosquitto diff --git a/roles/mmp/defaults/main.yml b/roles/mmp/defaults/main.yml new file mode 100644 index 0000000000..edafb0b50f --- /dev/null +++ b/roles/mmp/defaults/main.yml @@ -0,0 +1,26 @@ +--- +mmp_enabled: false +mmp_available_externally: false + +# directories +mmp_data_directory: "{{ docker_home }}/mmp" + +# network +mmp_ui_port: "8152" +mmp_agent_port: "8153" +mmp_hostname: "mmp" +mmp_network_name: "mmp" + +# specs +mmp_agent_memory: 1g +mmp_ui_memory: 1g + +# docker +mmp_agent_container_name: mmp-agent +mmp_agent_image_name: "ghcr.io/maker-management-platform/agent" +mmp_agent_image_version: main +mmp_ui_container_name: mmp-ui +mmp_ui_image_name: "ghcr.io/maker-management-platform/mmp-ui" +mmp_ui_image_version: master +mmp_user_id: "1000" +mmp_group_id: "1000" diff --git a/roles/mmp/docs/mmp.md b/roles/mmp/docs/mmp.md new file mode 100644 index 0000000000..6b918bcc2d --- /dev/null +++ b/roles/mmp/docs/mmp.md @@ -0,0 +1,11 @@ +# Maker Management Platform + +Homepage: [https://github.com/Maker-Management-Platform/docs](https://github.com/Maker-Management-Platform/docs) + +Maker Management Platform, or mmp, aims to simplify and unify the management of a variety of digital assets related to 3d printing, manufacturing, laser engraving and such. + +## Usage + +Set `mmp_enabled: true` in your `inventories//group_vars/nas.yml` file. + +Maker Management Platform web interface can be found at [http://ansible_nas_host_or_ip:8152](http://ansible_nas_host_or_ip:8152). diff --git a/roles/mmp/molecule/default/molecule.yml b/roles/mmp/molecule/default/molecule.yml new file mode 100644 index 0000000000..d7a20dcff0 --- /dev/null +++ b/roles/mmp/molecule/default/molecule.yml @@ -0,0 +1,6 @@ +--- +provisioner: + inventory: + group_vars: + all: + mmp_enabled: true diff --git a/roles/mmp/molecule/default/side_effect.yml b/roles/mmp/molecule/default/side_effect.yml new file mode 100644 index 0000000000..64116220ae --- /dev/null +++ b/roles/mmp/molecule/default/side_effect.yml @@ -0,0 +1,10 @@ +--- +- name: Stop + hosts: all + become: true + tasks: + - name: "Include {{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') | basename }} role" + ansible.builtin.include_role: + name: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') | basename }}" + vars: + mmp_enabled: false diff --git a/roles/mmp/molecule/default/verify.yml b/roles/mmp/molecule/default/verify.yml new file mode 100644 index 0000000000..1bb20b8b0e --- /dev/null +++ b/roles/mmp/molecule/default/verify.yml @@ -0,0 +1,26 @@ +--- +- name: Verify + hosts: all + gather_facts: false + tasks: + - name: Include vars + ansible.builtin.include_vars: + file: ../../defaults/main.yml + + - name: Get mmp db container state + community.docker.docker_container: + name: "{{ mmp_db_container_name }}" + register: result_db + + - name: Get mmp container state + community.docker.docker_container: + name: "{{ mmp_container_name }}" + register: result + + - name: Check if mmp containers are running + ansible.builtin.assert: + that: + - result_db.container['State']['Status'] == "running" + - result_db.container['State']['Restarting'] == false + - result.container['State']['Status'] == "running" + - result.container['State']['Restarting'] == false diff --git a/roles/mmp/molecule/default/verify_stopped.yml b/roles/mmp/molecule/default/verify_stopped.yml new file mode 100644 index 0000000000..f42687e232 --- /dev/null +++ b/roles/mmp/molecule/default/verify_stopped.yml @@ -0,0 +1,26 @@ +--- +- name: Verify + hosts: all + gather_facts: false + tasks: + - name: Include vars + ansible.builtin.include_vars: + file: ../../defaults/main.yml + + - name: Try and stop and remove mmp db + community.docker.docker_container: + name: "{{ mmp_db_container_name }}" + state: absent + register: result_db + + - name: Try and stop and remove mmp + community.docker.docker_container: + name: "{{ mmp_container_name }}" + state: absent + register: result + + - name: Check if mmp is stopped + ansible.builtin.assert: + that: + - not result_db.changed + - not result.changed diff --git a/roles/mmp/requirements.yml b/roles/mmp/requirements.yml new file mode 120000 index 0000000000..9a736435ab --- /dev/null +++ b/roles/mmp/requirements.yml @@ -0,0 +1 @@ +../../requirements.yml \ No newline at end of file diff --git a/roles/mmp/tasks/main.yml b/roles/mmp/tasks/main.yml new file mode 100644 index 0000000000..6b61296878 --- /dev/null +++ b/roles/mmp/tasks/main.yml @@ -0,0 +1,69 @@ +--- +- name: Start Mmp + block: + - name: Create mmp Directories + ansible.builtin.file: + path: "{{ item }}" + state: directory + with_items: + - "{{ mmp_data_directory }}" + + - name: Create Mmp network + community.docker.docker_network: + name: "{{ mmp_network_name }}" + + - name: Create Mmp Agent Docker Container + community.docker.docker_container: + name: "{{ mmp_agent_container_name }}" + image: "{{ mmp_agent_image_name }}:{{ mmp_agent_image_version }}" + pull: true + ports: + - "{{ mmp_agent_port }}:8000" + volumes: + - "{{ mmp_data_directory }}/library:/library:rw" + - "{{ mmp_data_directory }}/data:/data:rw" + networks: + - name: "{{ mmp_network_name }}" + network_mode: "{{ mmp_network_name }}" + container_default_behavior: no_defaults + labels: + traefik.enable: "false" + restart_policy: always + memory: "{{ mmp_agent_memory }}" + + - name: Create Mmp UI Docker Container + community.docker.docker_container: + container_default_behavior: no_defaults + name: "{{ mmp_ui_container_name }}" + image: "{{ mmp_ui_image_name }}:{{ mmp_ui_image_version }}" + pull: true + networks: + - name: "{{ mmp_network_name }}" + network_mode: "{{ mmp_network_name }}" + ports: + - "{{ mmp_ui_port }}:8081" + env: + AGENT_ADDRESS: "{{ mmp_agent_container_name }}:8000" + restart_policy: unless-stopped + memory: "{{ mmp_ui_memory }}" + labels: + traefik.enable: "{{ mmp_available_externally | string }}" + traefik.http.routers.mmp.rule: "Host(`{{ mmp_hostname }}.{{ ansible_nas_domain }}`)" + traefik.http.routers.mmp.tls.certresolver: "letsencrypt" + traefik.http.routers.mmp.tls.domains[0].main: "{{ ansible_nas_domain }}" + traefik.http.routers.mmp.tls.domains[0].sans: "*.{{ ansible_nas_domain }}" + traefik.http.services.mmp.loadbalancer.server.port: "8081" + when: mmp_enabled is true + +- name: Stop Mmp + block: + - name: Stop Mmp db + community.docker.docker_container: + name: "{{ mmp_db_container_name }}" + state: absent + + - name: Stop Mmp + community.docker.docker_container: + name: "{{ mmp_container_name }}" + state: absent + when: mmp_enabled is false diff --git a/website/docs/applications/other/mmp.md b/website/docs/applications/other/mmp.md new file mode 100644 index 0000000000..bfeca5bf6d --- /dev/null +++ b/website/docs/applications/other/mmp.md @@ -0,0 +1,14 @@ +--- +title: "Maker Management Platform" +description: "Management of a variety of digital assets related to 3d printing, manufacturing, laser engraving and such." +--- + +Homepage: [https://github.com/Maker-Management-Platform/docs](https://github.com/Maker-Management-Platform/docs) + +Maker Management Platform, or mmp, aims to simplify and unify the management of a variety of digital assets related to 3d printing, manufacturing, laser engraving and such. + +## Usage + +Set `mmp_enabled: true` in your `inventories//group_vars/nas.yml` file. + +Maker Management Platform web interface can be found at [http://ansible_nas_host_or_ip:8152](http://ansible_nas_host_or_ip:8152).