parent
ffd51d6124
commit
af0ceadc13
8 changed files with 172 additions and 67 deletions
@ -1,2 +1,29 @@ |
||||
--- |
||||
# defaults file for laurivan.immich |
||||
# 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" |
||||
|
@ -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") |
||||
|
@ -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: 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: 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: Dump instance config |
||||
ansible.builtin.copy: |
||||
content: | |
||||
# Molecule managed |
||||
|
||||
{{ instance_conf | to_json | from_json | to_yaml }} |
||||
dest: "{{ molecule_instance_config }}" |
||||
mode: 0600 |
||||
- name: Print some container info |
||||
ansible.builtin.debug: |
||||
msg: "{{ result.results }}" |
||||
|
||||
- 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: 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 molecule_inventory |
||||
ansible.builtin.copy: |
||||
content: | |
||||
{{ molecule_inventory | to_yaml }} |
||||
dest: "{{ molecule_ephemeral_directory }}/inventory/molecule_inventory.yml" |
||||
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 }}" |
||||
|
@ -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. |
||||
|
||||
# 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 |
||||
- name: Stop and remove container |
||||
delegate_to: localhost |
||||
community.docker.docker_container: |
||||
name: "{{ inventory_hostname }}" |
||||
state: absent |
||||
auto_remove: true |
||||
|
||||
{{ 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 |
||||
|
@ -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 |
||||
|
||||
|
@ -0,0 +1,2 @@ |
||||
collections: |
||||
- community.docker |
@ -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 }}" |
Loading…
Reference in new issue