From 34e7d63908a2b78a2b170c691d4dbeffccf573cc Mon Sep 17 00:00:00 2001 From: Fenris Wolf Date: Tue, 31 Mar 2026 21:12:54 +0200 Subject: [PATCH] [ini] --- .gitignore | 1 + README.md | 3 + galaxy.yml | 70 +++++++++++++++++++++++ meta/runtime.yml | 53 +++++++++++++++++ plugins/README.md | 31 ++++++++++ roles/heimdall-order/cfg.schema.json | 33 +++++++++++ roles/heimdall-order/defaults/main.json | 7 +++ roles/heimdall-order/tasks/main.json | 35 ++++++++++++ roles/heimdall-program/cfg.schema.json | 31 ++++++++++ roles/heimdall-program/defaults/main.json | 8 +++ roles/heimdall-program/tasks/main.json | 52 +++++++++++++++++ 11 files changed, 324 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 galaxy.yml create mode 100644 meta/runtime.yml create mode 100644 plugins/README.md create mode 100644 roles/heimdall-order/cfg.schema.json create mode 100644 roles/heimdall-order/defaults/main.json create mode 100644 roles/heimdall-order/tasks/main.json create mode 100644 roles/heimdall-program/cfg.schema.json create mode 100644 roles/heimdall-program/defaults/main.json create mode 100644 roles/heimdall-program/tasks/main.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6d94939 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.geany diff --git a/README.md b/README.md new file mode 100644 index 0000000..b2f717a --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Ansible Collection - roydfalk.heimdall + +Documentation for the collection. diff --git a/galaxy.yml b/galaxy.yml new file mode 100644 index 0000000..f14f117 --- /dev/null +++ b/galaxy.yml @@ -0,0 +1,70 @@ +#SPDX-License-Identifier: MIT-0 +### REQUIRED +# The namespace of the collection. This can be a company/brand/organization or product namespace under which all +# content lives. May only contain alphanumeric lowercase characters and underscores. Namespaces cannot start with +# underscores or numbers and cannot contain consecutive underscores +namespace: fenris + +# The name of the collection. Has the same character restrictions as 'namespace' +name: heimdall + +# The version of the collection. Must be compatible with semantic versioning +version: 1.0.0 + +# The path to the Markdown (.md) readme file. This path is relative to the root of the collection +readme: README.md + +# A list of the collection's content authors. Can be just the name or in the format 'Full Name (url) +# @nicks:irc/im.site#channel' +authors: +- Fenris + + +### OPTIONAL but strongly recommended +# A short summary description of the collection +description: "Sammlung von Rollen für Heimdall" + +# Either a single license or a list of licenses for content inside of a collection. Ansible Galaxy currently only +# accepts L(SPDX,https://spdx.org/licenses/) licenses. This key is mutually exclusive with 'license_file' +license: +- GPL-2.0-or-later + +# The path to the license file for the collection. This path is relative to the root of the collection. This key is +# mutually exclusive with 'license' +license_file: '' + +# A list of tags you want to associate with the collection for indexing/searching. A tag name has the same character +# requirements as 'namespace' and 'name' +tags: [] + +# Collections that this collection requires to be installed for it to be usable. The key of the dict is the +# collection label 'namespace.name'. The value is a version range +# L(specifiers,https://python-semanticversion.readthedocs.io/en/latest/#requirement-specification). Multiple version +# range specifiers can be set and are separated by ',' +dependencies: {} + +# The URL of the originating SCM repository +# repository: http://example.com/repository + +# The URL to any online docs +# documentation: http://docs.example.com + +# The URL to the homepage of the collection/project +# homepage: http://example.com + +# The URL to the collection issue tracker +# issues: http://example.com/issue/tracker + +# A list of file glob-like patterns used to filter any files or directories that should not be included in the build +# artifact. A pattern is matched from the relative path of the file or directory of the collection directory. This +# uses 'fnmatch' to match the files or directories. Some directories and files like 'galaxy.yml', '*.pyc', '*.retry', +# and '.git' are always filtered. Mutually exclusive with 'manifest' +build_ignore: [] + +# A dict controlling use of manifest directives used in building the collection artifact. The key 'directives' is a +# list of MANIFEST.in style +# L(directives,https://packaging.python.org/en/latest/guides/using-manifest-in/#manifest-in-commands). The key +# 'omit_default_directives' is a boolean that controls whether the default directives are used. Mutually exclusive +# with 'build_ignore' +# manifest: null + diff --git a/meta/runtime.yml b/meta/runtime.yml new file mode 100644 index 0000000..936cae9 --- /dev/null +++ b/meta/runtime.yml @@ -0,0 +1,53 @@ +#SPDX-License-Identifier: MIT-0 +--- +# Collections must specify a minimum required ansible version to upload +# to galaxy +# requires_ansible: '>=2.9.10' + +# Content that Ansible needs to load from another location or that has +# been deprecated/removed +# plugin_routing: +# action: +# redirected_plugin_name: +# redirect: ns.col.new_location +# deprecated_plugin_name: +# deprecation: +# removal_version: "4.0.0" +# warning_text: | +# See the porting guide on how to update your playbook to +# use ns.col.another_plugin instead. +# removed_plugin_name: +# tombstone: +# removal_version: "2.0.0" +# warning_text: | +# See the porting guide on how to update your playbook to +# use ns.col.another_plugin instead. +# become: +# cache: +# callback: +# cliconf: +# connection: +# doc_fragments: +# filter: +# httpapi: +# inventory: +# lookup: +# module_utils: +# modules: +# netconf: +# shell: +# strategy: +# terminal: +# test: +# vars: + +# Python import statements that Ansible needs to load from another location +# import_redirection: +# ansible_collections.ns.col.plugins.module_utils.old_location: +# redirect: ansible_collections.ns.col.plugins.module_utils.new_location + +# Groups of actions/modules that take a common set of options +# action_groups: +# group_name: +# - module1 +# - module2 diff --git a/plugins/README.md b/plugins/README.md new file mode 100644 index 0000000..74076b6 --- /dev/null +++ b/plugins/README.md @@ -0,0 +1,31 @@ +# Collections Plugins Directory + +This directory can be used to ship various plugins inside an Ansible collection. Each plugin is placed in a folder that +is named after the type of plugin it is in. It can also include the `module_utils` and `modules` directory that +would contain module utils and modules respectively. + +Here is an example directory of the majority of plugins currently supported by Ansible: + +``` +└── plugins + ├── action + ├── become + ├── cache + ├── callback + ├── cliconf + ├── connection + ├── filter + ├── httpapi + ├── inventory + ├── lookup + ├── module_utils + ├── modules + ├── netconf + ├── shell + ├── strategy + ├── terminal + ├── test + └── vars +``` + +A full list of plugin types can be found at [Working With Plugins](https://docs.ansible.com/ansible-core/2.19/plugins/plugins.html). diff --git a/roles/heimdall-order/cfg.schema.json b/roles/heimdall-order/cfg.schema.json new file mode 100644 index 0000000..d28ac09 --- /dev/null +++ b/roles/heimdall-order/cfg.schema.json @@ -0,0 +1,33 @@ +{ + "nullable": false, + "type": "object", + "properties": { + "user": { + "nullable": false, + "type": "string", + "default": "heimdall" + }, + "directory": { + "nullable": false, + "type": "string", + "default": "/etc/heimdall" + }, + "rate": { + "nullable": false, + "type": "integer", + "default": 15 + }, + "name": { + "nullable": false, + "type": "string" + }, + "conf": { + "type": "any" + } + }, + "additionalProperties": false, + "required": [ + "name", + "conf" + ] +} diff --git a/roles/heimdall-order/defaults/main.json b/roles/heimdall-order/defaults/main.json new file mode 100644 index 0000000..76c4cbe --- /dev/null +++ b/roles/heimdall-order/defaults/main.json @@ -0,0 +1,7 @@ +{ + "cfg_heimdall_order_defaults": { + "user": "heimdall", + "directory": "/etc/heimdall", + "rate": 15 + } +} diff --git a/roles/heimdall-order/tasks/main.json b/roles/heimdall-order/tasks/main.json new file mode 100644 index 0000000..eda03ae --- /dev/null +++ b/roles/heimdall-order/tasks/main.json @@ -0,0 +1,35 @@ +[ + { + "name": "directory", + "become": true, + "ansible.builtin.file": { + "state": "directory", + "path": "{{cfg_heimdall_order.directory}}", + "owner": "{{cfg_heimdall_order.user}}" + } + }, + { + "name": "file", + "become": true, + "ansible.builtin.copy": { + "content": "{{cfg_heimdall_order.conf}} | json", + "dest": "{{cfg_heimdall_order.directory}}/{{cfg_heimdall_order.name}}.hmdl.json" + } + }, + { + "name": "cronjob", + "become": true, + "ansible.builtin.cron": { + "state": "present", + "user": "{{cfg_heimdall_order.user}}", + "disabled": false, + "name": "heimdall:{{cfg_heimdall_order.name}}", + "minute": "*/{{cfg_heimdall_program.rate | string}}", + "hour": "*", + "day": "*", + "month": "*", + "weekday": "*", + "job": "{{cfg_heimdall_program.directory}}/heimdall {{cfg_heimdall_order.directory}}/{{cfg_heimdall_order.name}}.hmdl.json --mutex-path=/tmp/heimdall-{{cfg_heimdall_order.name}}.lock" + } + } +] diff --git a/roles/heimdall-program/cfg.schema.json b/roles/heimdall-program/cfg.schema.json new file mode 100644 index 0000000..9a9c1a2 --- /dev/null +++ b/roles/heimdall-program/cfg.schema.json @@ -0,0 +1,31 @@ +{ + "nullable": false, + "type": "object", + "properties": { + "user": { + "nullable": false, + "type": "string", + "default": "heimdall" + }, + "directory": { + "nullable": false, + "type": "string", + "default": "/opt/heimdall" + }, + "git_repository_url": { + "nullable": false, + "type": "string", + "default": "pv-svartalfheim-git:heimdall/core" + }, + "git_reference": { + "nullable": false, + "type": "string", + "default": "main" + } + }, + "additionalProperties": false, + "required": [ + ], + "default": { + } +} diff --git a/roles/heimdall-program/defaults/main.json b/roles/heimdall-program/defaults/main.json new file mode 100644 index 0000000..8949fa1 --- /dev/null +++ b/roles/heimdall-program/defaults/main.json @@ -0,0 +1,8 @@ +{ + "cfg_heimdall_program_defaults": { + "user": "heimdall", + "directory": "/opt/heimdall", + "git_repository_url": "pv-svartalfheim-git:heimdall/core", + "git_reference": "main" + } +} diff --git a/roles/heimdall-program/tasks/main.json b/roles/heimdall-program/tasks/main.json new file mode 100644 index 0000000..4819332 --- /dev/null +++ b/roles/heimdall-program/tasks/main.json @@ -0,0 +1,52 @@ +[ + { + "name": "packages", + "become": true, + "ansible.builtin.apt": { + "update_cache": true, + "pkg": [ + "git", + "make", + "rsync", + "nodejs" + ] + } + }, + { + "name": "user and directory", + "become": true, + "ansible.builtin.user": { + "name": "{{cfg_heimdall_program.user}}", + "create_home": true, + "home": "{{cfg_heimdall_program.directory}" + } + }, + { + "name": "program | fetch", + "become": true, + "become_user": "{{cfg_heimdall_program.user}}", + "ansible.builtin.git": { + "repo": "{{cfg_heimdall_program.git_repository_url}}", + "version": "{{cfg_heimdall_program.git_reference}}", + "dest": "/tmp/heimdall-repo" + } + }, + { + "name": "program | build", + "become": true, + "become_user": "{{cfg_heimdall_program.user}}", + "ansible.builtin.command": { + "chdir": "/tmp/heimdall-repo", + "cmd": "tools/build" + } + }, + { + "name": "program | deploy", + "become": true, + "become_user": "{{cfg_heimdall_program.user}}", + "ansible.builtin.command": { + "chdir": "/tmp/heimdall-repo", + "cmd": "tools/deploy localhost --target-directory={{cfg_heimdall_program.directory}}" + } + } +]