Skip to content
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
55 changes: 55 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Build GitHub Pages
on:
push:
branches:
- master
paths:
- 'docs/**'
- mkdocs.yml
workflow_dispatch:
permissions:
contents: write
pages: write
id-token: write

jobs:
build_mkdocs:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Install requirements
run: sudo apt update && sudo apt install --yes libev-dev
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Install tox-uv
run: uv tool install tox --with tox-uv
- name: Deploy docs to GitHub Pages
run: tox -e docs-deploy

deploy_mkdocs:
needs: build_mkdocs
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: gh-pages
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: '.'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
28 changes: 28 additions & 0 deletions .github/workflows/markdownlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Markdown Lint
description: Lint Markdown files

on:
push:
branches:
- master
paths:
- 'docs/**'
- mkdocs.yml

jobs:
lint:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: tj-actions/changed-files@v47
id: changed-files
with:
files: '**/*.md'
separator: ","
- uses: DavidAnson/markdownlint-cli2-action@v22
if: steps.changed-files.outputs.any_changed == 'true'
with:
globs: ${{ steps.changed-files.outputs.all_changed_files }}
separator: ","
Comment thread Dismissed
150 changes: 150 additions & 0 deletions .markdownlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
default: false

# MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md001.md
MD001: true

# MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md003.md
MD003:
style: "consistent"

# MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md004.md
MD004:
style: "consistent"

# MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md005.md
MD005: true

# MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md007.md
MD007:
indent: 4

# MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md009.md
MD009: true

# MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md010.md
MD010: true

# MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md011.md
MD011: true

# MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md012.md
MD012: true

# MD013/line-length Line length https://github.com/DavidAnson/markdownlint/blob/v0.40.0/doc/md013.md
MD013: false

# MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md014.md
MD014: true

# MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md018.md
MD018: true

# MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md019.md
MD019: true

# MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md020.md
MD020: true

# MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md021.md
MD021: true

# MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md022.md
MD022: true

# MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md023.md
MD023: true

# MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md024.md
MD024:
siblings_only: true

# MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md025.md
MD025: true

# MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md026.md
MD026: true

# MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md027.md
MD027: true

# MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md028.md
MD028: true

# MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md
MD029:
style: "ordered"

# MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md030.md
MD030:
ul_single: 1
ol_single: 1
ul_multi: 1
ol_multi: 1

# MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md031.md
MD031: true

# MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md032.md
MD032: true

# MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md034.md
MD034: true

# MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md035.md
MD035: true

# MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md036.md
MD036: true

# MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md037.md
MD037: true

# MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md038.md
MD038: true

# MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md039.md
MD039: true

# MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md040.md
MD040: true

# MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md042.md
MD042: true

# MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md045.md
MD045: true

# MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md046.md
MD046:
style: "fenced"

# MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md047.md
MD047: true

# MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md048.md
MD048:
style: "backtick"

# MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md049.md
MD049:
style: "asterisk"

# MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md050.md
MD050:
style: "consistent"

# MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md051.md
MD051: true

# MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md053.md
MD053: true

# MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md054.md
MD054: true

# MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md055.md
MD055:
style: "consistent"

# MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md056.md
MD056: true
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,11 @@ The Genesis Core is an open source software that offers a one turnkey solution t

Refer to the [wiki](https://github.com/infraguys/genesis_core/wiki) for more detailed information.


# 📦 Installation
# 📦 Installation

There are several ways to install Genesis Core and depend on your purpose you can choose one of them.

## Try it out
**NOTE: Under development**

If you want to try Genesis Core in a few minutes, download the `all-in-one` [stand](https://github.com/infraguys/gci_dev_all_in_one). It's a ready-to-go virtual machine image with preinstalled Genesis Core and ability to get full functionality such as creating inner(nested) virtual machines, installation elements and many others.
This stand may be used for development purposes as well if you are focusing on a new element development.
Expand All @@ -29,6 +27,7 @@ In a case you would like to run Genesis Core on your own infrastructure, you can
# 🚀 Development

**Ubuntu:**

```bash
sudo apt-get install build-essential python3.12-dev python3.12-venv \
libev-dev libvirt-dev curl
Expand All @@ -38,6 +37,7 @@ uv tool install tox --with tox-uv
```

**Fedora:**

```bash
sudo dnf install gcc libev-devel libvirt-devel curl
curl -LsSf https://astral.sh/uv/install.sh | sh
Expand All @@ -55,6 +55,7 @@ source .tox/develop/bin/activate
Follow the development guide [here](https://github.com/infraguys/genesis_core/wiki/DevelopmentGuide) for more details.

# ⚙️ Tests

**NOTE:** Python version 3.12 is supposed to be used, but you can use other versions

```bash
Expand Down Expand Up @@ -82,12 +83,11 @@ export HS256_KEY="secret"
- Genesis SDK is a set of tools for developing Genesis elements. You can find it [here](https://github.com/infraguys/gcl_sdk).
- Genesis DevTools it's a set oftools to manager life cycle of genesis projects. You can find it [here](https://github.com/infraguys/genesis_devtools).


# 💡 Contributing

Contributing to the project is highly appreciated! However, some rules should be followed for successful inclusion of new changes in the project:

- All changes should be done in a separate branch.
- Changes should include not only new functionality or bug fixes, but also tests for the new code.
- After the changes are completed and **tested**, a Pull Request should be created with a clear description of the new functionality. And add one of the project maintainers as a reviewer.
- Changes can be merged only after receiving an approve from one of the project maintainers.

Empty file removed docs/.gitkeep
Empty file.
38 changes: 23 additions & 15 deletions docs/element_manager/service.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ The Service resource provides a REST-based API for creating and managing systemd
### Service

The main service entity that manages:

- **Status**: NEW, IN_PROGRESS, ACTIVE, ERROR
- **Target Status**: enabled, disabled
- **Name**: Service identifier (alphanumeric, underscores, hyphens)
Expand All @@ -63,12 +64,12 @@ The main service entity that manages:

### Service Types

| Type | Description | Use Case |
|------|-------------|----------|
| `simple` | Regular service with configurable instance count | Long-running services like web servers |
| `oneshot` | One-time execution service | Initialization scripts, migrations |
| `monopoly` | Only one instance across all nodes | Singleton services like schedulers |
| `monopoly_oneshot` | One-time execution, only one instance | One-time initialization tasks |
| Type | Description | Use Case |
|--------------------|--------------------------------------------------|----------------------------------------|
| `simple` | Regular service with configurable instance count | Long-running services like web servers |
| `oneshot` | One-time execution service | Initialization scripts, migrations |
| `monopoly` | Only one instance across all nodes | Singleton services like schedulers |
| `monopoly_oneshot` | One-time execution, only one instance | One-time initialization tasks |

### Target Types

Expand All @@ -80,7 +81,7 @@ The main service entity that manages:
Services can define dependencies that run before or after the main service:

- **CmdShell**: Execute a shell command
- `command`: The shell command to execute
- `command`: The shell command to execute
- **ServiceTarget** (TBD): Reference another service for ordering (currently disabled, service relationships are being reworked)

## API Structure
Expand Down Expand Up @@ -227,25 +228,30 @@ Services can define dependencies that run before or after the main service:
## Validation Rules

### Service Name Validation

- Must match regex `^[A-Za-z0-9_-]{0,100}$`
- Alphanumeric characters, underscores, and hyphens only
- Maximum 100 characters

### Path Validation

- Required field
- Minimum 1 character, maximum 255 characters
- Should be an absolute path to executable

### Target Validation

- Must specify either `node` or `node_set` target
- Target node/node_set must exist

### Service Type Validation

- Must be one of: `simple`, `oneshot`, `monopoly`, `monopoly_oneshot`
- `simple` and `monopoly` types support `count` parameter
- `monopoly` types enforce count=1 across all nodes

### Dependency Validation

- `before` and `after` are required arrays (can be empty)
- Each dependency must have a valid `kind`: `shell` or `service`
- Shell dependencies require a `command` field
Expand Down Expand Up @@ -286,7 +292,7 @@ WantedBy=multi-user.target

## Status Lifecycle

```
```text
NEW → IN_PROGRESS → ACTIVE
ERROR
Expand Down Expand Up @@ -371,20 +377,22 @@ resources:

## API Endpoints

| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | `/v1/em/services/` | List all services |
| POST | `/v1/em/services/` | Create a new service |
| GET | `/v1/em/services/<uuid>` | Get service details |
| PUT | `/v1/em/services/<uuid>` | Update service |
| DELETE | `/v1/em/services/<uuid>` | Delete service |
| Method | Endpoint | Description |
|--------|--------------------------|----------------------|
| GET | `/v1/em/services/` | List all services |
| POST | `/v1/em/services/` | Create a new service |
| GET | `/v1/em/services/<uuid>` | Get service details |
| PUT | `/v1/em/services/<uuid>` | Update service |
| DELETE | `/v1/em/services/<uuid>` | Delete service |

## Permissions

The Service resource uses the following IAM policies:

- **Service**: `em.service`

Available actions:

- `create`: Create new services
- `read`: View service details
- `update`: Modify existing services
Expand Down
Loading
Loading