Merge branch 'main' into prometheus

This commit is contained in:
Julian-Samuel Gebühr 2023-07-26 23:39:56 +02:00
commit 80c07322e1
11 changed files with 455 additions and 10 deletions

6
.gitignore vendored
View file

@ -3,3 +3,9 @@
# ignore roles pulled by ansible-galaxy
/roles/galaxy/*
!/roles/galaxy/.gitkeep
# ignores vscode file
.vscode
# ingores macos files
.DS_Store

157
bin/feeds.py Normal file
View file

@ -0,0 +1,157 @@
import os
import sys
import argparse
from urllib.parse import urlparse
import xml.etree.ElementTree as ET
parser = argparse.ArgumentParser(description='Extracts release feeds from roles')
parser.add_argument('root_dir', help='Root dir which to traverse recursively for defaults/main.yml roles files')
parser.add_argument('action', help='Pass "check" to list roles with missing feeds or "dump" to dump an OPML file')
args = parser.parse_args()
if args.action not in ['check', 'dump', 'hookshot']:
sys.exit('Error: possible arguments are "check" or "dump"')
excluded_paths = [
# appservice-kakaotalk defines a Project URL, but that Gitea repository does not have an Atom/RSS feed.
# It doesn't have any tags anyway.
'./upstream/roles/custom/matrix-bridge-appservice-kakaotalk/defaults',
]
project_source_url_str = '# Project source code URL:'
def get_roles_files_from_dir(root_dir):
file_paths = []
for dir_name, sub_dur_list, file_list in os.walk(root_dir):
for file_name in file_list:
if not dir_name.endswith('defaults') or file_name != 'main.yml':
continue
if dir_name in excluded_paths:
continue
file_paths.append(os.path.join(dir_name, file_name))
return file_paths
def get_git_repos_from_files(file_paths, break_on_missing_repos=False):
git_repos = {}
missing_repos = []
for file in file_paths:
file_lines = open(file, 'r').readlines()
found_project_repo = False
for line in file_lines:
project_repo_val = ''
if project_source_url_str in line:
# extract the value from a line like this:
# Project source code URL: https://github.com/mautrix/signal
project_repo_val = line.split(project_source_url_str)[1].strip()
if not validate_url(project_repo_val):
print('Invalid url for line ', line)
break
if project_repo_val != '':
if file not in git_repos:
git_repos[file] = []
git_repos[file].append(project_repo_val)
found_project_repo = True
if not found_project_repo:
missing_repos.append(file)
if break_on_missing_repos and len(missing_repos) > 0:
print('Missing `{0}` comment for:\n{1}'.format(project_source_url_str, '\n'.join(missing_repos)))
return git_repos
def validate_url(text):
if text == '':
return False
try:
result = urlparse(text)
return all([result.scheme, result.netloc])
except:
return False
def format_feeds_from_git_repos(git_repos):
feeds = {
'ansible': {
'text': 'ansible',
'title': 'ansible',
'type': 'rss',
'htmlUrl': 'https://pypi.org/project/ansible/#history',
'xmlUrl': 'https://pypi.org/rss/project/ansible/releases.xml'
},
'ansible-core': {
'text': 'ansible-core',
'title': 'ansible-core',
'type': 'rss',
'htmlUrl': 'https://pypi.org/project/ansible-core/#history',
'xmlUrl': 'https://pypi.org/rss/project/ansible-core/releases.xml'
}
}
for role, git_repos in git_repos.items():
for idx, git_repo in enumerate(git_repos):
if 'github' in git_repo:
atomFilePath = git_repo.replace('.git', '') + '/releases.atom'
elif ('gitlab' in git_repo or 'mau.dev' in git_repo):
atomFilePath = git_repo.replace('.git', '') + '/-/tags?format=atom'
elif 'git.zx2c4.com' in git_repo:
atomFilePath = git_repo + '/atom/'
else:
print('Unrecognized git repository: %s' % git_repo)
continue
role_name = role.split('/')[4]
if role_name == 'defaults':
role_name = role.split('/')[3]
role_name = role_name.removeprefix('matrix-bot-').removeprefix('matrix-bridge-').removeprefix('matrix-client-').removeprefix('matrix-')
if idx > 0:
# there is more than 1 project source code for this role
role_name += '-' + str(idx+1)
feeds[role_name] = {
'text': role_name,
'title': role_name,
'type': 'rss',
'htmlUrl': git_repo,
'xmlUrl': atomFilePath
}
feeds = {key: val for key, val in sorted(feeds.items(), key = lambda item: item[0])}
return feeds
def dump_opml_file_from_feeds(feeds):
tree = ET.ElementTree('tree')
opml = ET.Element('opml', {'version': '1.0'})
head = ET.SubElement(opml, 'head')
title = ET.SubElement(head, 'title')
title.text = 'Release feeds for roles'
body = ET.SubElement(opml, 'body')
for role, feed_dict in feeds.items():
outline = ET.SubElement(body, 'outline', feed_dict)
ET.indent(opml)
tree._setroot(opml)
file_name = 'releases.opml'
tree.write(file_name, encoding = 'UTF-8', xml_declaration = True)
print('Generated %s' % file_name)
def dump_hookshot_commands(feeds):
file_name = 'releases.hookshot.txt'
f = open(file_name, 'w')
for role, feed_dict in feeds.items():
f.write('!hookshot feed %s %s\n' % (feed_dict['xmlUrl'], role))
f.close()
print('Generated %s' % file_name)
if __name__ == '__main__':
file_paths = get_roles_files_from_dir(root_dir=args.root_dir)
break_on_missing = args.action == 'check'
git_repos = get_git_repos_from_files(file_paths=file_paths, break_on_missing_repos=break_on_missing)
feeds = format_feeds_from_git_repos(git_repos)
if args.action == 'dump':
dump_opml_file_from_feeds(feeds)
if args.action == 'hookshot':
dump_hookshot_commands(feeds)

View file

@ -116,7 +116,7 @@ Make sure the user you want to login as has an email address in authentik, other
## Usage
After installation, you should be able to access your new Gitea instance at the configured URL (see above).
After installation, you should be able to access your new Grafana instance at the configured URL (see above).
Going there, you'll be taken to the initial setup wizard, which will let you assign some paswords and other configuration.

52
docs/services/linkding.md Normal file
View file

@ -0,0 +1,52 @@
# Linkding
[Linkding](https://github.com/sissbruecker/linkding) bookmark manager that is designed be to be minimal and fast.
## Dependencies
This service requires the following other services:
- a [Postgres](postgres.md) database, but [SQLite](https://www.sqlite.org/) is also a possibility (see `linkding_database_engine` below)
- a [Traefik](traefik.md) reverse-proxy server
## Configuration
To enable this service, add the following configuration to your `vars.yml` file and re-run the [installation](../installing.md) process:
```yaml
########################################################################
# #
# linkding #
# #
########################################################################
linkding_enabled: true
linkding_hostname: mash.example.com
linkding_path_prefix: /linkding
# We configure Linkding to use Postgres by default. See docs/services/postgres.md.
# To use an external Postgres server, you need to tweak additional `linkding_database_*` variables.
# Feel free to remove the line below to make Linkding use SQLite.
linkding_database_engine: postgres
linkding_superuser_username: change me
linkding_superuser_password: change me
########################################################################
# #
# /linkding #
# #
########################################################################
```
In the example configuration above, we configure the service to be hosted at `https://mash.example.com/linkding`.
You can remove the `linkding_path_prefix` variable definition, so that the service is served at `https://mash.example.com/`.
### Superuser
Please note the use of [`linkding_superuser_username`](https://github.com/sissbruecker/linkding/blob/master/docs/Options.md#ld_superuser_name) and [`linkding_superuser_password`](https://github.com/sissbruecker/linkding/blob/master/docs/Options.md#ld_superuser_password) variables. These are not mandatory and are meant to be set the first time you run this role.
## Usage
After installation, you can log in with your superuser login (`linkding_superuser_username`) and password (`linkding_superuser_password`).

41
docs/services/n8n.md Normal file
View file

@ -0,0 +1,41 @@
# n8n
[n8n](https://n8n.io/) is a workflow automation tool for technical people.
## Dependencies
This service requires the following other services:
- a [Postgres](postgres.md) database
- a [Traefik](traefik.md) reverse-proxy server
## Configuration
To enable this service, add the following configuration to your `vars.yml` file and re-run the [installation](../installing.md) process:
```yaml
########################################################################
# #
# n8n #
# #
########################################################################
n8n_enabled: true
n8n_hostname: mash.example.com
n8n_path_prefix: /n8n
########################################################################
# #
# /n8n #
# #
########################################################################
```
In the example configuration above, we configure the service to be hosted at `https://mash.example.com/n8n`.
You can remove the `n8n_path_prefix` variable definition, to make it default to `/`, so that the service is served at `https://mash.example.com/`.
## Usage
You can create additional users (admin-privileged or not) after logging in.

View file

@ -26,12 +26,14 @@
| [Jitsi](https://jitsi.org/) | A fully encrypted, 100% Open Source video conferencing solution | [Link](services/jitsi.md) |
| [Keycloak](https://www.keycloak.org/) | An open source identity and access management solution. | [Link](services/keycloak.md) |
| [Lago](https://www.getlago.com/) | Open-source metering and usage-based billing | [Link](services/lago.md) |
| [linkding](https://github.com/sissbruecker/linkding/) | Bookmark manager designed to be minimal and fast. | [Link](services/linkding.md) |
| [MariaDB](https://mariadb.org/) | A powerful, open source object-relational database system | [Link](services/mariadb.md) |
| [Matrix Rooms Search API](https://gitlab.com/etke.cc/mrs/api) | A fully-featured, standalone, matrix rooms search service. | [Link](services/mrs.md) |
| [MongoDB](https://www.mongodb.com/) | A source-available cross-platform document-oriented (NoSQL) database program. | [Link](services/mongodb.md) |
| [Mosquitto](https://mosquitto.org/) | An open-source MQTT broker | [Link](services/mosquitto.md) |
| [Miniflux](https://miniflux.app/) | Minimalist and opinionated feed reader. | [Link](services/miniflux.md) |
| [Mobilizon](https://joinmobilizon.org/en/) | An ActivityPub/Fediverse server to create and share events. | [Link](services/mobilizon.md) |
| [n8n](https://n8n.io/) | Workflow automation for technical people. | [Link](services/n8n.md) |
| [Navidrome](https://www.navidrome.org/) | [Subsonic-API](http://www.subsonic.org/pages/api.jsp) compatible music server | [Link](services/navidrome.md)
| [NetBox](https://docs.netbox.dev/en/stable/) | Web application that provides [IP address management (IPAM)](https://en.wikipedia.org/wiki/IP_address_management) and [data center infrastructure management (DCIM)](https://en.wikipedia.org/wiki/Data_center_management#Data_center_infrastructure_management) functionality | [Link](services/netbox.md) |
| [Nextcloud](https://nextcloud.com/) | The most popular self-hosted collaboration solution for tens of millions of users at thousands of organizations across the globe. | [Link](services/nextcloud.md) |

View file

@ -149,6 +149,8 @@ devture_systemd_service_manager_services_list_auto: |
+
([{'name': (lago_identifier + '-pdf.service'), 'priority': 1900, 'groups': ['mash', 'lago', 'lago-pdf']}] if lago_enabled else [])
+
([{'name': (linkding_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'linkding']}] if linkding_enabled else [])
+
([{'name': (miniflux_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'miniflux']}] if miniflux_enabled else [])
+
([{'name': (mongodb_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'mongodb']}] if mongodb_enabled else [])
@ -157,6 +159,8 @@ devture_systemd_service_manager_services_list_auto: |
+
([{'name': (mrs_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'mrs']}] if mrs_enabled else [])
+
([{'name': (n8n_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'n8n']}] if n8n_enabled else [])
+
([{'name': (navidrome_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'navidrome']}] if navidrome_enabled else [])
+
([{'name': (netbox_identifier + '.service'), 'priority': 2000, 'groups': ['mash', 'netbox', 'netbox-server']}] if netbox_enabled else [])
@ -237,6 +241,10 @@ devture_postgres_systemd_services_to_stop_for_maintenance_list: |
{{
([(miniflux_identifier + '.service')] if miniflux_enabled else [])
+
([(n8n_identifier + '.service')] if n8n_enabled else [])
+
([(linkding_identifier + '.service')] if linkding_enabled and linkding_database_engine == 'postgres' else [])
+
([(redmine_identifier + '.service')] if redmine_enabled else [])
}}
@ -301,6 +309,12 @@ devture_postgres_managed_databases_auto: |
'password': lago_database_password,
}] if lago_enabled and lago_database_hostname == devture_postgres_identifier else [])
+
([{
'name': linkding_database_name,
'username': linkding_database_username,
'password': linkding_database_password,
}] if linkding_enabled and linkding_database_engine == 'postgres' else [])
+
([{
'name': miniflux_database_name,
'username': miniflux_database_username,
@ -313,6 +327,12 @@ devture_postgres_managed_databases_auto: |
'password': redmine_database_password,
}] if redmine_enabled else [])
+
([{
'name': n8n_database_name,
'username': n8n_database_username,
'password': n8n_database_password,
}] if n8n_enabled else [])
+
([{
'name': netbox_database_name,
'username': netbox_database_username,
@ -1316,6 +1336,22 @@ hubsite_service_miniflux_logo_location: "{{ role_path }}/assets/miniflux.png"
hubsite_service_miniflux_description: "An opinionated feed reader"
hubsite_service_miniflux_priority: 1000
# n8n
hubsite_service_n8n_enabled: "{{ n8n_enabled }}"
hubsite_service_n8n_name: n8n
hubsite_service_n8n_url: "https://{{ n8n_hostname }}{{ n8n_path_prefix }}"
hubsite_service_n8n_logo_location: "{{ role_path }}/assets/n8n.png"
hubsite_service_n8n_description: "Workflow automation for technical people."
hubsite_service_n8n_priority: 1000
# Linkding
hubsite_service_linkding_enabled: "{{ linkding_enabled }}"
hubsite_service_linkding_name: Linkding
hubsite_service_linkding_url: "https://{{ linkding_hostname }}{{ linkding_path_prefix }}"
hubsite_service_linkding_logo_location: "{{ role_path }}/assets/linkding.png"
hubsite_service_linkding_description: "Bookmark manager that is designed be to be minimal and fast."
hubsite_service_linkding_priority: 1000
# Nextcloud
hubsite_service_nextcloud_enabled: "{{ nextcloud_enabled }}"
hubsite_service_nextcloud_name: Nextcloud
@ -1409,8 +1445,12 @@ hubsite_service_list_auto: |
+
([{'name': hubsite_service_miniflux_name, 'url': hubsite_service_miniflux_url, 'logo_location': hubsite_service_miniflux_logo_location, 'description': hubsite_service_miniflux_description, 'priority': hubsite_service_miniflux_priority}] if hubsite_service_miniflux_enabled else [])
+
([{'name': hubsite_service_n8n_name, 'url': hubsite_service_n8n_url, 'logo_location': hubsite_service_n8n_logo_location, 'description': hubsite_service_n8n_description, 'priority': hubsite_service_n8n_priority}] if hubsite_service_n8n_enabled else [])
+
([{'name': hubsite_service_nextcloud_name, 'url': hubsite_service_nextcloud_url, 'logo_location': hubsite_service_nextcloud_logo_location, 'description': hubsite_service_nextcloud_description, 'priority': hubsite_service_nextcloud_priority}] if hubsite_service_nextcloud_enabled else [])
+
([{'name': hubsite_service_linkding_name, 'url': hubsite_service_linkding_url, 'logo_location': hubsite_service_linkding_logo_location, 'description': hubsite_service_linkding_description, 'priority': hubsite_service_linkding_priority}] if hubsite_service_linkding_enabled else [])
+
([{'name': hubsite_service_owncast_name, 'url': hubsite_service_owncast_url, 'logo_location': hubsite_service_owncast_logo_location, 'description': hubsite_service_owncast_description, 'priority': hubsite_service_owncast_priority}] if hubsite_service_owncast_enabled else [])
+
([{'name': hubsite_service_peertube_name, 'url': hubsite_service_peertube_url, 'logo_location': hubsite_service_peertube_logo_location, 'description': hubsite_service_peertube_description, 'priority': hubsite_service_peertube_priority}] if hubsite_service_peertube_enabled else [])
@ -1729,6 +1769,48 @@ lago_api_environment_variable_encryption_key_derivation_salt: "{{ '%s' | format(
# #
########################################################################
########################################################################
# #
# linkding #
# #
########################################################################
linkding_enabled: false
linkding_identifier: "{{ mash_playbook_service_identifier_prefix }}linkding"
linkding_base_path: "{{ mash_playbook_base_path }}/{{ mash_playbook_service_base_directory_name_prefix }}linkding"
linkding_uid: "{{ mash_playbook_uid }}"
linkding_gid: "{{ mash_playbook_gid }}"
linkding_systemd_required_services_list: |
{{
(['docker.service'])
+
([devture_postgres_identifier ~ '.service'] if devture_postgres_enabled and linkding_database_hostname == devture_postgres_identifier else [])
}}
linkding_container_additional_networks: |
{{
([mash_playbook_reverse_proxyable_services_additional_network] if mash_playbook_reverse_proxyable_services_additional_network else [])
+
([devture_postgres_container_network] if devture_postgres_enabled and linkding_database_hostname == devture_postgres_identifier and linkding_container_network != devture_postgres_container_network else [])
}}
linkding_container_labels_traefik_enabled: "{{ mash_playbook_traefik_labels_enabled }}"
linkding_container_labels_traefik_docker_network: "{{ mash_playbook_reverse_proxyable_services_additional_network }}"
linkding_container_labels_traefik_entrypoints: "{{ devture_traefik_entrypoint_primary }}"
linkding_container_labels_traefik_tls_certResolver: "{{ devture_traefik_certResolver_primary }}"
linkding_database_hostname: "{{ devture_postgres_connection_hostname if devture_postgres_enabled else '' }}"
linkding_database_password: "{{ '%s' | format(mash_playbook_generic_secret_key) | password_hash('sha512', 'linkding.db', rounds=655555) | to_uuid }}"
########################################################################
# #
# /linkding #
# #
########################################################################
########################################################################
@ -1911,6 +1993,53 @@ mrs_container_labels_traefik_tls_certResolver: "{{ devture_traefik_certResolver_
########################################################################
# #
# n8n #
# #
########################################################################
n8n_enabled: false
n8n_identifier: "{{ mash_playbook_service_identifier_prefix }}n8n"
n8n_base_path: "{{ mash_playbook_base_path }}/{{ mash_playbook_service_base_directory_name_prefix }}n8n"
# Please see the note attached to this comment on why we can't use mash's playbook uid and gid
# https://github.com/kinduff/ansible-docker-n8n/blob/v1.4.2/defaults/main.yml
n8n_uid: "1000"
n8n_gid: "1000"
n8n_systemd_required_services_list: |
{{
(['docker.service'])
+
([devture_postgres_identifier ~ '.service'] if devture_postgres_enabled and n8n_database_hostname == devture_postgres_identifier else [])
}}
n8n_container_additional_networks: |
{{
([mash_playbook_reverse_proxyable_services_additional_network] if mash_playbook_reverse_proxyable_services_additional_network else [])
+
([devture_postgres_container_network] if devture_postgres_enabled and n8n_database_hostname == devture_postgres_identifier and n8n_container_network != devture_postgres_container_network else [])
}}
n8n_container_labels_traefik_enabled: "{{ mash_playbook_traefik_labels_enabled }}"
n8n_container_labels_traefik_docker_network: "{{ mash_playbook_reverse_proxyable_services_additional_network }}"
n8n_container_labels_traefik_entrypoints: "{{ devture_traefik_entrypoint_primary }}"
n8n_container_labels_traefik_tls_certResolver: "{{ devture_traefik_certResolver_primary }}"
n8n_database_hostname: "{{ devture_postgres_connection_hostname if devture_postgres_enabled else '' }}"
n8n_database_password: "{{ '%s' | format(mash_playbook_generic_secret_key) | password_hash('sha512', 'n8n.db', rounds=655555) | to_uuid }}"
########################################################################
# #
# /n8n #
# #
########################################################################
########################################################################
# #
# navidrome #

View file

@ -13,13 +13,18 @@ roles:
fi
# Updates requirements.yml if there are any new tags available. Requires agru
update:
update: && opml
@agru -u
# Runs ansible-lint against all roles in the playbook
lint:
ansible-lint
# dumps an OPML file with extracted git feeds for roles
opml:
@echo "generating opml..."
@python bin/feeds.py . dump
# Runs the playbook with --tags=install-all,start and optional arguments
install-all *extra_args: (run-tags "install-all,start" extra_args)

43
releases.opml Normal file
View file

@ -0,0 +1,43 @@
<?xml version='1.0' encoding='UTF-8'?>
<opml version="1.0">
<head>
<title>Release feeds for roles</title>
</head>
<body>
<outline text="adguard_home" title="adguard_home" type="rss" htmlUrl="https://github.com/AdguardTeam/AdguardHome" xmlUrl="https://github.com/AdguardTeam/AdguardHome/releases.atom" />
<outline text="ansible" title="ansible" type="rss" htmlUrl="https://pypi.org/project/ansible/#history" xmlUrl="https://pypi.org/rss/project/ansible/releases.xml" />
<outline text="ansible-core" title="ansible-core" type="rss" htmlUrl="https://pypi.org/project/ansible-core/#history" xmlUrl="https://pypi.org/rss/project/ansible-core/releases.xml" />
<outline text="appsmith" title="appsmith" type="rss" htmlUrl="https://github.com/appsmithorg/appsmith" xmlUrl="https://github.com/appsmithorg/appsmith/releases.atom" />
<outline text="backup_borg" title="backup_borg" type="rss" htmlUrl="https://gitlab.com/etke.cc/borgmatic" xmlUrl="https://gitlab.com/etke.cc/borgmatic/-/tags?format=atom" />
<outline text="com.devture.ansible.role.container_socket_proxy" title="com.devture.ansible.role.container_socket_proxy" type="rss" htmlUrl="https://github.com/Tecnativa/docker-socket-proxy" xmlUrl="https://github.com/Tecnativa/docker-socket-proxy/releases.atom" />
<outline text="com.devture.ansible.role.postgres" title="com.devture.ansible.role.postgres" type="rss" htmlUrl="https://github.com/postgres/postgres" xmlUrl="https://github.com/postgres/postgres/releases.atom" />
<outline text="com.devture.ansible.role.postgres_backup" title="com.devture.ansible.role.postgres_backup" type="rss" htmlUrl="https://github.com/prodrigestivill/docker-postgres-backup-local" xmlUrl="https://github.com/prodrigestivill/docker-postgres-backup-local/releases.atom" />
<outline text="com.devture.ansible.role.traefik" title="com.devture.ansible.role.traefik" type="rss" htmlUrl="https://github.com/traefik/traefik" xmlUrl="https://github.com/traefik/traefik/releases.atom" />
<outline text="com.devture.ansible.role.woodpecker_ci_agent" title="com.devture.ansible.role.woodpecker_ci_agent" type="rss" htmlUrl="https://github.com/woodpecker-ci/woodpecker" xmlUrl="https://github.com/woodpecker-ci/woodpecker/releases.atom" />
<outline text="com.devture.ansible.role.woodpecker_ci_server" title="com.devture.ansible.role.woodpecker_ci_server" type="rss" htmlUrl="https://github.com/woodpecker-ci/woodpecker" xmlUrl="https://github.com/woodpecker-ci/woodpecker/releases.atom" />
<outline text="focalboard" title="focalboard" type="rss" htmlUrl="https://github.com/mattermost/focalboard" xmlUrl="https://github.com/mattermost/focalboard/releases.atom" />
<outline text="grafana" title="grafana" type="rss" htmlUrl="https://github.com/grafana/grafana" xmlUrl="https://github.com/grafana/grafana/releases.atom" />
<outline text="healthchecks" title="healthchecks" type="rss" htmlUrl="https://github.com/healthchecks/healthchecks" xmlUrl="https://github.com/healthchecks/healthchecks/releases.atom" />
<outline text="infisical" title="infisical" type="rss" htmlUrl="https://github.com/Infisical/infisical" xmlUrl="https://github.com/Infisical/infisical/releases.atom" />
<outline text="jitsi" title="jitsi" type="rss" htmlUrl="https://github.com/jitsi/docker-jitsi-meet" xmlUrl="https://github.com/jitsi/docker-jitsi-meet/releases.atom" />
<outline text="keycloak" title="keycloak" type="rss" htmlUrl="https://github.com/keycloak/keycloak" xmlUrl="https://github.com/keycloak/keycloak/releases.atom" />
<outline text="lago" title="lago" type="rss" htmlUrl="https://github.com/lago/lago" xmlUrl="https://github.com/lago/lago/releases.atom" />
<outline text="linkding" title="linkding" type="rss" htmlUrl="https://github.com/sissbruecker/linkding" xmlUrl="https://github.com/sissbruecker/linkding/releases.atom" />
<outline text="miniflux" title="miniflux" type="rss" htmlUrl="https://github.com/miniflux/v2" xmlUrl="https://github.com/miniflux/v2/releases.atom" />
<outline text="mongodb" title="mongodb" type="rss" htmlUrl="https://github.com/mongodb/mongo" xmlUrl="https://github.com/mongodb/mongo/releases.atom" />
<outline text="n8n" title="n8n" type="rss" htmlUrl="https://github.com/n8n-io/n8n" xmlUrl="https://github.com/n8n-io/n8n/releases.atom" />
<outline text="navidrome" title="navidrome" type="rss" htmlUrl="https://github.com/navidrome/navidrome" xmlUrl="https://github.com/navidrome/navidrome/releases.atom" />
<outline text="netbox" title="netbox" type="rss" htmlUrl="https://github.com/netbox-community/netbox-docker/" xmlUrl="https://github.com/netbox-community/netbox-docker//releases.atom" />
<outline text="owncast" title="owncast" type="rss" htmlUrl="https://github.com/owncast/owncast" xmlUrl="https://github.com/owncast/owncast/releases.atom" />
<outline text="prometheus" title="prometheus" type="rss" htmlUrl="https://github.com/prometheus/prometheus" xmlUrl="https://github.com/prometheus/prometheus/releases.atom" />
<outline text="prometheus_blackbox_exporter" title="prometheus_blackbox_exporter" type="rss" htmlUrl="https://github.com/prometheus/blackbox_exporter" xmlUrl="https://github.com/prometheus/blackbox_exporter/releases.atom" />
<outline text="prometheus_node_exporter" title="prometheus_node_exporter" type="rss" htmlUrl="https://github.com/prometheus/node_exporter" xmlUrl="https://github.com/prometheus/node_exporter/releases.atom" />
<outline text="prometheus_postgres_exporter" title="prometheus_postgres_exporter" type="rss" htmlUrl="https://github.com/prometheus-community/postgres_exporter" xmlUrl="https://github.com/prometheus-community/postgres_exporter/releases.atom" />
<outline text="radicale" title="radicale" type="rss" htmlUrl="https://github.com/tomsquest/docker-radicale" xmlUrl="https://github.com/tomsquest/docker-radicale/releases.atom" />
<outline text="redis" title="redis" type="rss" htmlUrl="https://github.com/redis/redis" xmlUrl="https://github.com/redis/redis/releases.atom" />
<outline text="redmine" title="redmine" type="rss" htmlUrl="https://github.com/redmine/redmine" xmlUrl="https://github.com/redmine/redmine/releases.atom" />
<outline text="soft_serve" title="soft_serve" type="rss" htmlUrl="https://github.com/charmbracelet/soft-serve" xmlUrl="https://github.com/charmbracelet/soft-serve/releases.atom" />
<outline text="uptime_kuma" title="uptime_kuma" type="rss" htmlUrl="https://github.com/louislam/uptime-kuma" xmlUrl="https://github.com/louislam/uptime-kuma/releases.atom" />
<outline text="wg_easy" title="wg_easy" type="rss" htmlUrl="https://github.com/WeeJeWel/wg-easy" xmlUrl="https://github.com/WeeJeWel/wg-easy/releases.atom" />
</body>
</opml>

View file

@ -4,7 +4,7 @@
version: v0.107.26-1
name: adguard_home
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-appsmith.git
version: v1.9.27-0
version: v1.9.29-0
name: appsmith
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-authentik.git
version: v2023.6.1-0
@ -41,7 +41,7 @@
- src: git+https://github.com/devture/com.devture.ansible.role.timesync.git
version: v1.0.0-0
- src: git+https://github.com/devture/com.devture.ansible.role.traefik.git
version: v2.10.3-0
version: v2.10.4-0
- src: git+https://github.com/devture/com.devture.ansible.role.woodpecker_ci_agent.git
version: v0.15.8-0
- src: git+https://github.com/devture/com.devture.ansible.role.woodpecker_ci_server.git
@ -61,7 +61,7 @@
version: v0.7.30-0
name: firezone
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-focalboard.git
version: v7.9.3-2
version: v7.10.4-0
name: focalboard
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-funkwhale.git
version: v1.3.0-rc6-0
@ -70,10 +70,10 @@
version: 6.1.0
name: geerlingguy.docker
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-gitea.git
version: v1.20.0-0
version: v1.20.1-0
name: gitea
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-gotosocial.git
version: v0.9.0-3
version: v0.10.0-0
name: gotosocial
- src: git+https://gitlab.com/etke.cc/roles/grafana.git
version: v10.0.2-1
@ -101,13 +101,16 @@
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-lago.git
version: v0.40.0-0
name: lago
- src: git+https://github.com/kinduff/ansible-docker-linkding.git
version: v1.9.0
name: linkding
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-mariadb.git
version: v10.11.4-0
name: mariadb
- src: git+https://gitlab.com/etke.cc/roles/miniflux.git
version: v2.0.45-0
version: v2.0.46-0
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-mobilizon.git
version: v3.1.0-2
version: v3.1.3-0
name: mobilizon
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-mongodb.git
version: v6.0.6-0
@ -118,6 +121,9 @@
- src: git+https://gitlab.com/etke.cc/mrs/ansible-role-mrs.git
version: v0.0.0-9
name: mrs
- src: git+https://github.com/kinduff/ansible-docker-n8n.git
version: v1.4.2
name: n8n
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-navidrome.git
version: v0.49.3-2
name: navidrome
@ -144,7 +150,7 @@
- src: git+https://gitlab.com/etke.cc/roles/prometheus_node_exporter.git
version: v1.6.1-0
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-prometheus-postgres-exporter.git
version: v0.13.1-0
version: v0.13.2-0
name: prometheus_postgres_exporter
- src: git+https://gitlab.com/etke.cc/roles/radicale.git
version: v3.1.8.3-0

View file

@ -90,6 +90,8 @@
- role: galaxy/mrs
- role: galaxy/n8n
- role: galaxy/healthchecks
- role: galaxy/infisical
@ -106,6 +108,8 @@
- role: galaxy/lago
- role: galaxy/linkding
- role: galaxy/mobilizon
- role: galaxy/mosquitto