forked from github-starred/komodo
* start 1.18.5 * prevent empty additional permission check (ie for new resources) * dev-2 * bump rust to 1.88 * tweaks * repo based stack commit happens from core repo cache rather than on server to simplify * clippy auto fix * clippy lints periphery * clippy fix komodo_client * dev-3 * emphasize ferret version pinning * bump svi with PR fix * dev-4 * webhook disabled early return * Fix missing alert types for whitelist * add "ScheduleRun" * fix status cache not cleaning on resource delete * dev-5 * forgot to pipe through poll in previous refactor * refetch given in ms * fix configure build extra args * reorder resource sync config * Implement ability to run actions at startup (#664) * Implement ability to run actions at startup * run post-startup actions after server is listening * startup use action query * fmt * Fix Google Login enabled message (#668) - it was showing "Github Login" instead of "Google Login" * Allow CIDR ranges in Allowed IPs (#666) * Allow CIDR ranges in Allowed IPs * Catch mixed IPv4/IPv6 mappings that are probably intended to match * forgiving vec * dev-6 * forgiving vec log. allowed ips docs * server stats UI: move current disk breakdown above charts * searchable container stats, toggle collaple container / disk sections * Add Clear repo cache method * fix execute usage docs * Komodo managed env-file should take precedence in all cases (ie come last in env file list) * tag include unused flag for future use * combine users page search * util backup / restore * refactor backup/restore duplication * cleanup restore * core image include util binary * dev-7 * back to LinesCodec * dev-8 * clean up * clean up logs * rename to komodo-util * dev-9 * enable_fance_toml * dev-10 enable fancy toml * add user agent to oidc requests (#701) Co-authored-by: eleith <online-github@eleith.com> * fmt * use database library * clippy lint * consolidate and standardize cli * dev-11 * dev-12 implement backup using cli * dev-13 logs * command variant fields need to be #[arg] * tweak cli * gen client * fix terminal reconnect issue * rename cli to `km` * tweaks for the cli logs * wait for enter on --yes empty println * fix --yes * dev-15 * bump deps * update croner to latest, use static parser * dev-16 * cli execute polls updates until complete before logging * remove repo cache mount * cli nice * /backup -> /backups * dev-17 config loading preserves CONFIG_PATHS precedence * update dockerfile default docker cli config keywords * dev-18 * support .kmignore * add ignores log * Implement automatic backup pruning, default 14 backups before prune * db copy / restore uses idempotent upsert * cli update variable - "km set var VAR value" * improve cli initial logs * time the executions * implement update for most resources * dev 20 * add update page * dev 21 support cli update link * dev-22 test the deploy * dev-23 use indexmap * install-cli.py * Frontend mobile fixes (#714) * Allow ResourcePageHeader items to wrap * Allow CardHeader items to wrap * Increase z-index of sticky TableHeader, fixes #690 * Remove fixed widths from ActionButton, let them flex more to fit more layouts * Make Section scroll overflow * Remove grid class from Tabs, seems to prevent them from overflowing at small sizes * deploy 1.18.5-dev-24 * auto version increment and deploy * cli: profiles support aliases and merge on top of Default (root) config * fix page set titles * rust 1.89 and improve config logs * skip serializing for proper merge * fix clippy lints re 1.89 * remove layouts overflow-x-scroll * deploy 1.18.5-dev-25 * 1.89 docker images not ready yet * km cfg -a (print all profiles) * include commit variables * skip serializing profiles when empty * skip serialize default db / log configs * km cfg --debug print mode * correct defaults for CLI and only can pass restore folder from cli arg * some more skip serialization * db restore / copy index optional * add runfile command aliases * remove second schedule updating loop, can causes some schedules to be missed * deploy 1.18.5-dev-26 * add log when target db indexing disabled * cli: user password reset, update user super admin * Add manual network interface configuration for multi-NIC Docker environments (#719) * Add iproute2 to debian-debs * feat: Add manual network interface configuration for multi-NIC support Complete implementation of manual interface configuration: - Add internet_interface config option - Implement manual gateway routing - Add NET_ADMIN capability requirement - Clean up codebase changes * fix: Update internet interface handling for multi-NIC support * refactor: Enhance error messages and logging in networking module * refactor: Simplify interface argument handling and improve logging in network configuration and cleanup * refactor(network): simplify startup integration and improve error handling - Move config access and error handling into network::configure_internet_gateway() - Simplify startup.rs to single function call without parameters - Remove redundant check_network_privileges() function - Improve error handling by checking actual command output instead of pre-validation - Better separation of concerns between startup and network modules Addresses feedback from PR discussion: https://github.com/moghtech/komodo/pull/719#discussion_r2261542921 * fix(config): update default internet interface setting Addresses feedback from PR discussion: https://github.com/moghtech/komodo/pull/719#discussion_r2261552279 * fix(config): remove custom default for internet interface in CoreConfig * move mod.rs -> network.rs Addresses feedback from PR discussion: https://github.com/moghtech/komodo/pull/719#discussion_r2261558332 * add internet interface example * docs(build-images): document multi-platform builds with Docker Buildx (#721) * docs(build-images): add multi-platform buildx guide to builders.md * docs(build-images): add multi-platform buildx guide and clarify platform selection in Komodo UI Extra Args field * move to 1.19.0 * core support reading from multiple config files * config support yaml * deploy 1.19.0-dev-1 * deploy 1.19.0-dev-2 * add default komodo cli config * better config merge with base * no need to panic if empty config paths * improve km --help * prog on cli docs * tweak cli docs * tweak doc * split the runfile commands * update docsite deps * km ps initial * km ls * list resource apis * km con inspect * deploy 1.19.0-dev-3 * fix: need serde default * dev-4 fix container parsing issue * tweak * use include-based file finding for much faster discovery * just move to standard config dir .config/komodo/komodo.cli.* * update fe w/ new contianer info minimal serialization * add links to table names * deploy 1.19.0-dev-5 * links in tables * backend for Action arguments * deploy 1.19.0-dev-6 * deploy 1.19.0-dev-7 * deploy 1.19.0-dev-8 * no space at front of KeyValue default args * webhook branch / body optional * The incoming arguments * deploy 1.19.0-dev-9 * con -> cn * add config -> cf alias * .kmignore * .peripheryinclude * outdated * optional links, configurable table format * table_format -> table_borders * get types * include docsite in yarn install * update runnables command in docs * tweak * improve km ls only show important stuff * Add BackupCoreDatabase * deploy 1.19.0-dev-10 * backup command needs "--yes" * deploy 1.19.0-dev-11 * update rustc 1.89.0 * cli tweak * try chef * Fix chef (after dependencies) * try other compile command * fix * fix comment * cleanup stats page * ensure database backup procedure * UI allow configure Backup Core Database in Procedures * procedure description * deploy 1.19.0-dev-12 * deploy 1.19.0-dev-13 * GlobalAutoUpdate * deploy 1.19.0-dev-14 * default tags and global auto update procedure * deploy 1.19.0-dev-15 * trim the default procedure descriptions * deploy 1.19.0-dev-16 * in "system" theme, also poll for updates to the theme based on time. * Add next run to Action / Procedure column * km ls support filter by templates * fix procedure toml serialization when params = {} * deploy 1.19.0-dev-17 * KOMODO_INIT_ADMIN_USERNAME * KOMODO_FIRST_SERVER_NAME * add server.config.external_address for use with links * deploy 1.19.0-dev-18 * improve auto prune * fix system theme auto update * deploy 1.19.0-dev-19 * rename auth/CreateLocalUser -> SignUpLocalUser. Add write/CreateLocalUser for in-ui initialization. * deploy 1.19.0-dev-20 * UI can handle multiple active logins * deploy 1.19.0-dev-21 * fix * add logout function * fix oauth redirect * fix multi user exchange token function * default external address * just Add * style account switcher * backup and restore docs * rework docsite file / sidebar structure, start auto update docs * auto update docs * tweak * fix doc links * only pull / update running stacks / deployments images * deploy 1.19.0-dev-22 * deploy 1.19.0-dev-23 * fix #737 * community docs * add BackupCoreDatabase link to docs * update ferret v2 update guide using komodo-cli * fix data table headers overlapping topbar * don't alert when deploying * CommitSync returns Update * deploy 1.19.0-dev-24 * trim the decoded branch * action uses file contents deserializer * deploy 1.19.0-dev-25 * remove Toml from action args format * clarify External Address purpose * Fix podman compatibility in `get_container_stats` (#739) * Add podman compability for querying stats Podman and docker stats differ in results in significant ways but this filter change they will output the same stats * syntax fix * feat(dashboard): display CPU, memory, and disk usage on server cards (#729) * feat: mini-stats-card: Expose Server CPU , Memory, Disk Usage to Dashboard View * comment: resolved * Feat: fix overflow card , DRY stats-mini, add unreachable mini stats * lint: fix * deploy 1.19.0-dev-26 * 1.19.0 * linux, macos container install * cli main config --------- Co-authored-by: Brian Bradley <brian.bradley.p@gmail.com> Co-authored-by: Daniel <daniel.barabasa@gmail.com> Co-authored-by: eleith <eleith@users.noreply.github.com> Co-authored-by: eleith <online-github@eleith.com> Co-authored-by: Sam Edwards <sam@samedwards.ca> Co-authored-by: Marcel Pfennig <82059270+MP-Tool@users.noreply.github.com> Co-authored-by: itsmesid <693151+arevindh@users.noreply.github.com> Co-authored-by: mbecker20 <max@mogh.tech> Co-authored-by: Rhyn <Rhyn@users.noreply.github.com> Co-authored-by: Anh Nguyen <tuananh131001@gmail.com>
266 lines
8.4 KiB
Markdown
266 lines
8.4 KiB
Markdown
# Sync Resources
|
|
|
|
Komodo is able to create, update, delete, and deploy resources declared in TOML files by diffing them against the existing resources,
|
|
and apply updates based on the diffs. Similar to Stacks, the files can be configured in UI, in a local file, or in files pushed to a remote git repo.
|
|
The Komodo Core backend will poll the files for for any updates, and alert about pending changes when diffs are detected.
|
|
|
|
You can spread out your resource declarations across any number of files
|
|
and use any nesting of folders to organize resources inside a root folder.
|
|
Additionally, you can create multiple `ResourceSyncs` and configure `Match Tags` to filter down which resources are synced,
|
|
and each sync will be handled independently. This allows different syncs to manage resources on a "per-project" basis.
|
|
|
|
The UI will display the computed sync actions and only execute them upon manual confirmation.
|
|
Or the sync execution git webhook may be configured on the git repo to
|
|
automatically execute syncs upon pushes to the configured branch.
|
|
|
|
## Commit to Syncs
|
|
|
|
If the Sync is pointing to just a single file, you can enable "Managed Mode" to allow Core to write the updates you made in UI _back to the file_.
|
|
This works no matter where the files are located, and will create a commit to your git repository for repo based files.
|
|
|
|
## Example Declarations
|
|
|
|
### Server
|
|
|
|
- [Server config schema](https://docs.rs/komodo_client/latest/komodo_client/entities/server/struct.ServerConfig.html)
|
|
|
|
```toml
|
|
[[server]] # Declare a new server
|
|
name = "server-prod"
|
|
description = "the prod server"
|
|
tags = ["prod"]
|
|
[server.config]
|
|
address = "http://localhost:8120"
|
|
region = "AshburnDc1"
|
|
enabled = true # default: false
|
|
```
|
|
|
|
### Builder and build
|
|
|
|
- [Builder config schema](https://docs.rs/komodo_client/latest/komodo_client/entities/builder/enum.BuilderConfig.html)
|
|
- [Build config schema](https://docs.rs/komodo_client/latest/komodo_client/entities/build/struct.BuildConfig.html)
|
|
|
|
```toml
|
|
[[builder]] # Declare a builder
|
|
name = "builder-01"
|
|
tags = []
|
|
config.type = "Aws"
|
|
[builder.config.params]
|
|
region = "us-east-2"
|
|
ami_id = "ami-0e9bd154667944680"
|
|
# These things come from your specific setup
|
|
subnet_id = "subnet-xxxxxxxxxxxxxxxxxx"
|
|
key_pair_name = "xxxxxxxx"
|
|
assign_public_ip = true
|
|
use_public_ip = true
|
|
security_group_ids = [
|
|
"sg-xxxxxxxxxxxxxxxxxx",
|
|
"sg-xxxxxxxxxxxxxxxxxx"
|
|
]
|
|
|
|
##
|
|
|
|
[[build]]
|
|
name = "test_logger"
|
|
description = "Logs randomly at INFO, WARN, ERROR levels to test logging setups"
|
|
tags = ["test"]
|
|
[build.config]
|
|
builder_id = "builder-01"
|
|
repo = "mbecker20/test_logger"
|
|
branch = "master"
|
|
git_account = "mbecker20"
|
|
image_registry.type = "Standard"
|
|
image_registry.params.domain = "github.com" # or your custom domain
|
|
image_registry.params.account = "your_username"
|
|
image_registry.params.organization = "your_organization" # optinoal
|
|
# Set docker labels
|
|
labels = """
|
|
org.opencontainers.image.source = https://github.com/mbecker20/test_logger
|
|
org.opencontainers.image.description = Logs randomly at INFO, WARN, ERROR levels to test logging setups
|
|
org.opencontainers.image.licenses = GPL-3.0
|
|
"""
|
|
```
|
|
|
|
### Deployments
|
|
|
|
- [Deployment config schema](https://docs.rs/komodo_client/latest/komodo_client/entities/deployment/struct.DeploymentConfig.html)
|
|
|
|
```toml
|
|
# Declare variables
|
|
[[variable]]
|
|
name = "OTLP_ENDPOINT"
|
|
value = "http://localhost:4317"
|
|
|
|
##
|
|
|
|
[[deployment]] # Declare a deployment
|
|
name = "test-logger-01"
|
|
description = "test logger deployment 1"
|
|
tags = ["test"]
|
|
# sync will deploy the container:
|
|
# - if it is not running.
|
|
# - has relevant config updates.
|
|
# - the attached build has new version.
|
|
deploy = true
|
|
[deployment.config]
|
|
server_id = "server-01"
|
|
image.type = "Build"
|
|
image.params.build = "test_logger"
|
|
# set the volumes / bind mounts
|
|
volumes = """
|
|
# Supports comments
|
|
/data/logs = /etc/logs
|
|
# And other formats (eg yaml list)
|
|
- "/data/config:/etc/config"
|
|
"""
|
|
# Set the environment variables
|
|
environment = """
|
|
# Comments supported
|
|
OTLP_ENDPOINT = [[OTLP_ENDPOINT]] # interpolate variables into the envs.
|
|
VARIABLE_1 = value_1
|
|
VARIABLE_2 = value_2
|
|
"""
|
|
# Set Docker labels
|
|
labels = "deployment.type = logger"
|
|
|
|
##
|
|
|
|
[[deployment]]
|
|
name = "test-logger-02"
|
|
description = "test logger deployment 2"
|
|
tags = ["test"]
|
|
deploy = true
|
|
# Create a dependency on test-logger-01. This deployment will only be deployed after test-logger-01 is deployed.
|
|
# Additionally, any sync deploy of test-logger-01 will also trigger sync deploy of this deployment.
|
|
after = ["test-logger-01"]
|
|
[deployment.config]
|
|
server_id = "server-01"
|
|
image.type = "Build"
|
|
image.params.build = "test_logger"
|
|
volumes = """
|
|
/data/logs = /etc/logs
|
|
/data/config = /etc/config"""
|
|
environment = """
|
|
VARIABLE_1 = value_1
|
|
VARIABLE_2 = value_2
|
|
"""
|
|
# Set Docker labels
|
|
labels = "deployment.type = logger"
|
|
```
|
|
|
|
### Stack
|
|
|
|
- [Stack config schema](https://docs.rs/komodo_client/latest/komodo_client/entities/stack/struct.StackConfig.html)
|
|
|
|
```toml
|
|
[[stack]]
|
|
name = "test-stack"
|
|
description = "stack test"
|
|
deploy = true
|
|
after = ["test-logger-01"] # Stacks can depend on deployments, and vice versa.
|
|
tags = ["test"]
|
|
[stack.config]
|
|
server_id = "server-prod"
|
|
file_paths = ["mongo.yaml", "redis.yaml"]
|
|
git_provider = "git.mogh.tech"
|
|
git_account = "mbecker20" # clone private repo by specifying account
|
|
repo = "mbecker20/stack_test"
|
|
```
|
|
|
|
### Procedure
|
|
|
|
- [Procedure config schema](https://docs.rs/komodo_client/latest/komodo_client/entities/procedure/struct.ProcedureConfig.html)
|
|
|
|
```toml
|
|
[[procedure]]
|
|
name = "test-procedure"
|
|
description = "Do some things in a specific order"
|
|
tags = ["test"]
|
|
|
|
[[procedure.config.stage]]
|
|
name = "Build stuff"
|
|
executions = [
|
|
{ execution.type = "RunBuild", execution.params.build = "test_logger" },
|
|
# Uses the Batch version, witch matches many builds by pattern
|
|
# This one matches all builds prefixed with `foo-` (wildcard) and `bar-` (regex).
|
|
{ execution.type = "BatchRunBuild", execution.params.pattern = "foo-* , \\^bar-.*$\\" },
|
|
{ execution.type = "PullRepo", execution.params.repo = "komodo-periphery" },
|
|
]
|
|
|
|
[[procedure.config.stage]]
|
|
name = "Deploy test logger 1"
|
|
executions = [
|
|
{ execution.type = "Deploy", execution.params.deployment = "test-logger-01" },
|
|
{ execution.type = "Deploy", execution.params.deployment = "test-logger-03", enabled = false },
|
|
]
|
|
|
|
[[procedure.config.stage]]
|
|
name = "Deploy test logger 2"
|
|
enabled = false
|
|
executions = [
|
|
{ execution.type = "Deploy", execution.params.deployment = "test-logger-02" }
|
|
]
|
|
```
|
|
|
|
### Repo
|
|
|
|
- [Repo config schema](https://docs.rs/komodo_client/latest/komodo_client/entities/repo/struct.RepoConfig.html)
|
|
|
|
```toml
|
|
[[repo]]
|
|
name = "komodo-periphery"
|
|
description = "Builds new versions of the periphery binary. Requires Rust installed on the host."
|
|
tags = ["komodo"]
|
|
[repo.config]
|
|
server_id = "server-01"
|
|
git_provider = "git.mogh.tech" # use an alternate git provider (default is github.com)
|
|
git_account = "mbecker20"
|
|
repo = "moghtech/komodo"
|
|
# Run an action after the repo is pulled
|
|
on_pull.path = "."
|
|
on_pull.command = """
|
|
# Supports comments
|
|
/root/.cargo/bin/cargo build -p komodo_periphery --release
|
|
# Multiple lines will be combined together using '&&'
|
|
cp ./target/release/periphery /root/periphery
|
|
"""
|
|
```
|
|
|
|
### Resource sync
|
|
|
|
- [Resource sync config schema](https://docs.rs/komodo_client/latest/komodo_client/entities/sync/type.ResourceSync.html)
|
|
|
|
```toml
|
|
[[resource_sync]]
|
|
name = "resource-sync"
|
|
[resource_sync.config]
|
|
git_provider = "git.mogh.tech" # use an alternate git provider (default is github.com)
|
|
git_account = "mbecker20"
|
|
repo = "moghtech/komodo"
|
|
resource_path = ["stacks.toml", "repos.toml"]
|
|
```
|
|
|
|
### User Group:
|
|
|
|
- [UserGroup schema](https://docs.rs/komodo_client/latest/komodo_client/entities/toml/struct.UserGroupToml.html)
|
|
|
|
```toml
|
|
[[user_group]]
|
|
name = "groupo"
|
|
everyone = false # Set to true to give these permission to all users.
|
|
users = ["mbecker20", "karamvirsingh98"]
|
|
# Configure write access with all specific permissions
|
|
all.Server = { level = "Write", specific = ["Attach", "Logs", "Inspect", "Terminal", "Processes"] }
|
|
# Attach base level of Execute on all builds
|
|
all.Build = "Execute"
|
|
# Allow users to see all Builders, and attach builds to them.
|
|
all.Builder = { level = "Read", specific = ["Attach"] }
|
|
permissions = [
|
|
# Attach permissions to specific resources by name
|
|
{ target.type = "Repo", target.id = "komodo-periphery", level = "Execute" },
|
|
# Attach permissions to many resources with name matching regex (this uses '^(.+)-(.+)$' as regex expression)
|
|
{ target.type = "Server", target.id = "\\^(.+)-(.+)$\\", level = "Read" },
|
|
{ target.type = "Deployment", target.id = "\\^immich\\", level = "Execute" },
|
|
]
|
|
```
|