Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

homepage: use v2 #1038

Merged
merged 3 commits into from
Nov 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ix-dev/community/homarr/app.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ sources:
- https://github.com/ajnart/homarr
title: Homarr
train: community
version: 1.1.0
version: 1.1.1
2 changes: 1 addition & 1 deletion ix-dev/community/homarr/questions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ groups:
- name: Storage Configuration
description: Configure Storage for Homarr
- name: Labels Configuration
description: Configure Labels for Plex
description: Configure Labels for Homarr
- name: Resources Configuration
description: Configure Resources for Homarr

Expand Down
6 changes: 3 additions & 3 deletions ix-dev/community/homepage/app.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ host_mounts: []
icon: https://media.sys.truenas.net/apps/homepage/icons/icon.png
keywords:
- dashboard
lib_version: 1.1.7
lib_version_hash: d05e43e25b7dc1736be6cc1efa4b9255368aa346e3e7a4350a38440f29b73186
lib_version: 2.0.23
lib_version_hash: 8909de0f230ddb07f219f65eb8e67f9b8a112e9c310bee801834248854aa91af
maintainers:
- email: [email protected]
name: truenas
Expand All @@ -33,4 +33,4 @@ sources:
- https://github.com/benphelps/homepage
title: Homepage
train: community
version: 1.0.28
version: 1.1.0
46 changes: 46 additions & 0 deletions ix-dev/community/homepage/questions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ groups:
description: Configure Network for Homepage
- name: Storage Configuration
description: Configure Storage for Homepage
- name: Labels Configuration
description: Configure Labels for Homepage
- name: Resources Configuration
description: Configure Resources for Homepage

Expand All @@ -15,6 +17,13 @@ questions:
schema:
type: dict
attrs:
- variable: mount_docker_socket
label: Mount Docker Socket
description: |
Mount the Docker socket (read only) to the container.
schema:
type: boolean
default: false
- variable: additional_envs
label: Additional Environment Variables
description: Configure additional environment variables for Homepage.
Expand Down Expand Up @@ -280,6 +289,43 @@ questions:
description: The domain to use for the SMB share.
schema:
type: string
- variable: labels
label: ""
group: Labels Configuration
schema:
type: list
default: []
items:
- variable: label
label: Label
schema:
type: dict
attrs:
- variable: key
label: Key
schema:
type: string
required: true
- variable: value
label: Value
schema:
type: string
required: true
- variable: containers
label: Containers
description: Containers where the label should be applied
schema:
type: list
items:
- variable: container
label: Container
schema:
type: string
required: true
enum:
- value: homepage
description: homepage

- variable: resources
label: ""
group: Resources Configuration
Expand Down
93 changes: 25 additions & 68 deletions ix-dev/community/homepage/templates/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -1,76 +1,33 @@
{# Stores storage items that contains info for volumes, vol mounts, perms dirs and perms mounts #}
{% set storage_items = namespace(items=[]) %}
{# Stores the top level volumes #}
{% set volumes = namespace(items={}) %}
{# Stores the container volume mounts #}
{% set volume_mounts = namespace(items=[]) %}
{# Stores the perms container volume mounts #}
{% set perms_mounts = namespace(items=[]) %}
{# Stores the perms container dirs #}
{% set perms_dirs = namespace(items=[]) %}
{% set tpl = ix_lib.base.render.Render(values) %}

{% do storage_items.items.append(ix_lib.base.storage.storage_item(data=dict(values.storage.config, **{"mount_path": "/app/config"}),
values=values, perm_opts={"mount_path": "/mnt/homepage/config", "mode": "check", "uid": values.consts.run_user, "gid": values.consts.run_group}
)) %}
{% do storage_items.items.append(ix_lib.base.storage.storage_item(data={"type":"anonymous", "mount_path": "/tmp"})) %}
{% set c1 = tpl.add_container(values.consts.homepage_container_name, "image") %}
{% set perm_container = tpl.deps.perms(values.consts.perms_container_name) %}
{% set perms_config = {"uid": values.consts.run_user, "gid": values.consts.run_group, "mode": "check"} %}

{% for store in values.storage.additional_storage %}
{% do storage_items.items.append(ix_lib.base.storage.storage_item(data=store, values=values,
perm_opts={"mount_path": "/mnt/homepage/dir_%s"|format(loop.index0), "mode": "check", "uid": values.consts.run_user, "gid": values.consts.run_group}
)) %}
{% endfor %}
{% do c1.set_user(values.consts.run_user, values.consts.run_group) %}
{% if values.homepage.mount_docker_socket %}
{% do c1.add_docker_socket() %}
{% endif %}
{% do c1.healthcheck.set_test("wget", {"port": values.network.web_port, "path": "/api/healthcheck"}) %}

{# Add each item to the above lists #}
{% for item in storage_items.items %}
{% if item.vol and volumes.items.update(item.vol) %}{% endif %}
{% if item.vol_mount and volume_mounts.items.append(item.vol_mount) %}{% endif %}
{% if item.perms_item and (perms_dirs.items.append(item.perms_item.perm_dir), perms_mounts.items.append(item.perms_item.vol_mount)) %}{% endif %}
{% endfor %}
{% do c1.environment.add_env("PORT", values.network.web_port) %}
{% do c1.environment.add_user_envs(values.homepage.additional_envs) %}

{#
TODO: Add docker socket mounting toggle
Will probably also need to change the user to root
#}
{% do c1.ports.add_port(values.network.web_port, values.network.web_port) %}

{# Containers #}
services:
{{ values.consts.homepage_container_name }}:
user: {{ "%d:%d" | format(values.consts.run_user, values.consts.run_group) }}
image: {{ ix_lib.base.utils.get_image(images=values.images, name="image") }}
restart: unless-stopped
deploy:
resources: {{ ix_lib.base.resources.resources(values.resources) | tojson }}
devices: {{ ix_lib.base.resources.get_devices(values.resources) | tojson }}
{% if perms_dirs.items %}
depends_on:
{{ values.consts.perms_container_name }}:
condition: service_completed_successfully
{% endif %}
{% if values.network.host_network %}
network_mode: host
{% endif %}
cap_drop: {{ ix_lib.base.security.get_caps().drop | tojson }}
security_opt: {{ ix_lib.base.security.get_sec_opts() | tojson }}
{% if values.network.dns_opts %}
dns_opt: {{ ix_lib.base.network.dns_opts(values.network.dns_opts) | tojson }}
{% endif %}
{% set test = ix_lib.base.healthchecks.wget_test(port=values.network.web_port, path="/api/healthcheck") %}
healthcheck: {{ ix_lib.base.healthchecks.check_health(test) | tojson }}
environment: {{ ix_lib.base.environment.envs(app={
"PORT": values.network.web_port
}, user=values.homepage.additional_envs, values=values) | tojson }}
{% if not values.network.host_network %}
ports:
- {{ ix_lib.base.ports.get_port(port={"target": values.network.web_port, "published": values.network.web_port}) | tojson }}
{% endif %}
volumes: {{ volume_mounts.items | tojson }}
{% if perms_dirs.items %}
{{ values.consts.perms_container_name }}: {{ ix_lib.base.permissions.perms_container(items=perms_dirs.items, volumes=perms_mounts.items) | tojson }}
{% endif %}
{% do c1.add_storage("/app/config", values.storage.config) %}
{% do perm_container.add_or_skip_action("config", values.storage.config, perms_config) %}

{% if volumes.items %}
volumes: {{ volumes.items | tojson }}
{% for store in values.storage.additional_storage %}
{% do c1.add_storage(store.mount_path, store) %}
{% do perm_container.add_or_skip_action(store.mount_path, store, perms_config) %}
{% endfor %}

{% if perm_container.has_actions() %}
{% do perm_container.activate() %}
{% do c1.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
{% endif %}

x-portals: {{ ix_lib.base.metadata.get_portals([{"port": values.network.web_port}]) | tojson }}
x-notes: {{ ix_lib.base.metadata.get_notes("Homepage") | tojson }}
{% do tpl.portals.add_portal({"port": values.network.web_port}) %}

{{ tpl.render() | tojson }}

This file was deleted.

Loading