diff --git a/defaults/main.yml b/defaults/main.yml index b480274..d8245c4 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,2 +1,29 @@ --- -# defaults file for laurivan.immich \ No newline at end of file +# defaults file for laurivan.immich + +immich_version: "release" +immich_port: "2283" +immich_upload: "./library" + +immich_typesense_key: "SomeRandomKey" +immich_db_password: "postgres" + +# immich-Controller paths +immich_root_path: /var/local +immich_data_base: "{{ immich_root_path }}/immich-controller" +immich_config_path: "{{ immich_root_path }}/conf/immich-controller" +immich_archives: + - "/mnt/multimedia/photos" + +# Add other paths here to make sure they're created automatically +# +immich_skeleton_paths: + - "{{ immich_config_path }}" + +# Add more templates to be copied into the config +immich_configuration_files: + - "docker-compose.yml" + - "env.immich.conf" + +# Documentation +immich_documentation_link: "https://www.laurivan.com" diff --git a/meta/main.yml b/meta/main.yml index 227ad9c..725786b 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -1,7 +1,8 @@ galaxy_info: - author: your name - description: your role description - company: your company (optional) + author: Laur Ivan + description: Ansible role to install Immich + role_name: immich + namespace: laurivan # If the issue tracker for your role is not on github, uncomment the # next line and provide a value @@ -14,9 +15,9 @@ galaxy_info: # - GPL-3.0-only # - Apache-2.0 # - CC-BY-4.0 - license: license (GPL-2.0-or-later, MIT, etc) + license: MIT - min_ansible_version: 2.9 + min_ansible_version: "2.9" # If this a Container Enabled role, provide the minimum Ansible Container version. # min_ansible_container_version: diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml index e600756..ea00564 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -1,8 +1,29 @@ ---- +- name: Fail if molecule group is missing + hosts: localhost + tasks: + - name: Print some info + ansible.builtin.debug: + msg: "{{ groups }}" + + - name: Assert group existence + ansible.builtin.assert: + that: "'molecule' in groups" + fail_msg: | + molecule group was not found inside inventory groups: {{ groups }} + - name: Converge - hosts: all + hosts: molecule + # We disable gather facts because it would fail due to our container not + # having python installed. This will not prevent use from running 'raw' + # commands. Most molecule users are expected to use containers that already + # have python installed in order to avoid notable delays installing it. gather_facts: false tasks: - - name: Replace this task with one that validates your content - ansible.builtin.debug: - msg: "This is the effective test" + - name: Check uname (converge) + ansible.builtin.raw: uname -a + register: result + changed_when: false + + - name: Print some info (converge) + ansible.builtin.assert: + that: result.stdout | regex_search("^Linux") diff --git a/molecule/default/create.yml b/molecule/default/create.yml index 371214e..a427a46 100644 --- a/molecule/default/create.yml +++ b/molecule/default/create.yml @@ -1,36 +1,79 @@ ---- - name: Create hosts: localhost - connection: local gather_facts: false - # no_log: "{{ molecule_no_log }}" + vars: + molecule_inventory: + all: + hosts: {} + molecule: {} tasks: + - name: Create a container + community.docker.docker_container: + name: "{{ item.name }}" + image: "{{ item.image }}" + state: started + command: sleep 1d + log_driver: json-file + register: result + loop: "{{ molecule_yml.platforms }}" - # TODO: Developer must implement and populate 'server' variable + - name: Print some container info + ansible.builtin.debug: + msg: "{{ result.results }}" - - name: Create instance config - when: server.changed | default(false) | bool # noqa no-handler - block: - - name: Populate instance config dict # noqa jinja - ansible.builtin.set_fact: - instance_conf_dict: {} - # instance': "{{ }}", - # address': "{{ }}", - # user': "{{ }}", - # port': "{{ }}", - # 'identity_file': "{{ }}", } - with_items: "{{ server.results }}" - register: instance_config_dict + - name: Fail if container is not running + when: > + item.container.State.ExitCode != 0 or + not item.container.State.Running + ansible.builtin.include_tasks: + file: tasks/create-fail.yml + loop: "{{ result.results }}" + loop_control: + label: "{{ item.container.Name }}" - - name: Convert instance config dict to a list - ansible.builtin.set_fact: - instance_conf: "{{ instance_config_dict.results | map(attribute='ansible_facts.instance_conf_dict') | list }}" + - name: Add container to molecule_inventory + vars: + inventory_partial_yaml: | + all: + children: + molecule: + hosts: + "{{ item.name }}": + ansible_connection: community.docker.docker + ansible.builtin.set_fact: + molecule_inventory: > + {{ molecule_inventory | combine(inventory_partial_yaml | from_yaml, recursive=true) }} + loop: "{{ molecule_yml.platforms }}" + loop_control: + label: "{{ item.name }}" - - name: Dump instance config - ansible.builtin.copy: - content: | - # Molecule managed + - name: Dump molecule_inventory + ansible.builtin.copy: + content: | + {{ molecule_inventory | to_yaml }} + dest: "{{ molecule_ephemeral_directory }}/inventory/molecule_inventory.yml" + mode: "0600" - {{ instance_conf | to_json | from_json | to_yaml }} - dest: "{{ molecule_instance_config }}" - mode: 0600 + - name: Force inventory refresh + ansible.builtin.meta: refresh_inventory + + - name: Fail if molecule group is missing + ansible.builtin.assert: + that: "'molecule' in groups" + fail_msg: | + molecule group was not found inside inventory groups: {{ groups }} + run_once: true # noqa: run-once[task] + +# we want to avoid errors like "Failed to create temporary directory" +- name: Validate that inventory was refreshed + hosts: molecule + gather_facts: false + tasks: + - name: Check uname + ansible.builtin.raw: uname -a + register: result + changed_when: false + + - name: Display uname info + ansible.builtin.debug: + msg: "{{ result.stdout }}" diff --git a/molecule/default/destroy.yml b/molecule/default/destroy.yml index 5ba2d23..2b682c9 100644 --- a/molecule/default/destroy.yml +++ b/molecule/default/destroy.yml @@ -1,24 +1,19 @@ ---- -- name: Destroy - hosts: localhost - connection: local +- name: Destroy molecule containers + hosts: molecule gather_facts: false - # no_log: "{{ molecule_no_log }}" tasks: - # Developer must implement. + - name: Stop and remove container + delegate_to: localhost + community.docker.docker_container: + name: "{{ inventory_hostname }}" + state: absent + auto_remove: true - # Mandatory configuration for Molecule to function. - - - name: Populate instance config - ansible.builtin.set_fact: - instance_conf: {} - - - name: Dump instance config - ansible.builtin.copy: - content: | - # Molecule managed - - {{ instance_conf | to_json | from_json | to_yaml }} - dest: "{{ molecule_instance_config }}" - mode: 0600 - when: server.changed | default(false) | bool # noqa no-handler +- name: Remove dynamic molecule inventory + hosts: localhost + gather_facts: false + tasks: + - name: Remove dynamic inventory file + ansible.builtin.file: + path: "{{ molecule_ephemeral_directory }}/inventory/molecule_inventory.yml" + state: absent diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index b524ee7..a2259e6 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -1,6 +1,9 @@ --- +dependency: + name: galaxy + options: + requirements-file: molecule/default/requirements.yml platforms: - - name: instance - # you might want to add your own variables here based on what provisioning - # you are doing like: - # image: quay.io/centos/centos:stream8 + - name: molecule-ubuntu + image: ubuntu:18.04 + diff --git a/molecule/default/requirements.yml b/molecule/default/requirements.yml new file mode 100644 index 0000000..84c1ae6 --- /dev/null +++ b/molecule/default/requirements.yml @@ -0,0 +1,2 @@ +collections: + - community.docker \ No newline at end of file diff --git a/molecule/default/tasks/create-fail.yml b/molecule/default/tasks/create-fail.yml new file mode 100644 index 0000000..34915c6 --- /dev/null +++ b/molecule/default/tasks/create-fail.yml @@ -0,0 +1,13 @@ +- name: Retrieve container log + ansible.builtin.command: + cmd: >- + {% raw %} + docker logs + {% endraw %} + {{ item.stdout_lines[0] }} + changed_when: false + register: logfile_cmd + +- name: Display container log + ansible.builtin.fail: + msg: "{{ logfile_cmd.stderr }}"