* modularize openapi structs * most of execute openapi * server / stack exec openapi * most of write openapi * more write openapi * add the write openapi definitions * fmt and bump mogh auth * gen types * remove user api, mogh auth handles api keys * clean up * cache latest image digests and use this for image update alerting / auto update * deploy 2.0.0-dev-108 * deploy 2.0.0-dev-109 * add back legacy Action "exec" method calling convention * typegen * improve config quick links styling * improve config styling a bit more * deploy 2.0.0-dev-110 * finish version upgrades page, and use prism theme oneLight and oneDark * stack level terminal page * fix Action import from terminal * clean up dangling action api keys on startup * improve swarm service / stack state inference * deploy 2.0.0-dev-111 * add api docs link * bump ts types and fix SwarmConfig type name conflict * use mogh auth for passkey conversion * align dashboard icon with sidebar * bump frontend node version * bump node version in all the dockerfiles * fix tailwind config module * fix require to import * skip auto update for images with pinned digest * dev 112 * cleanup * batch check for updates, add check to table multi select actions * dev-113 * mogh_server = "1.2.0" * serve static ui index.html with ETag / no-cache * check update available against all digests for image * deploy 2.0.0-dev-114 * bump rust to 1.93.0 * bump mogh server and auth * configure session allow cross site * deploy 2.0.0-dev-115 * add new config value to example config * Stack check for update prefers check against deployed service image * deploy 2.0.0-dev-116 * only send auto updated alert after verifying the deploy was successful * 2.0.0 UI (#1220) * new ui using mantine * resources page * prog on resource page * resources and resource layouts * confirm button and modal * tweaks * update details * topbar updates * add skeletons for resource implementations * add resource tables * add tags to recents cards * resource page table scrolling * table component + tags filter * export toml * New Resource button * Fix update details capture closing * tweaks * omni search * refine config * config tweaks * implement more configs / resource selector * add profile page * provider / account selectors * container table page * build config * deployment config * fix deployment build version selector * fix secrets selector * resource sync config * mobile topbar and updates * update details fz sm * stack config * terminals page * create terminal in prog * create terminal menu * finish create terminal menu * terminal pages working * stack tabs / info * add executions * add server header info * confirm pubkey modal * improve resource header styling * FileSource component * stack service table, move icons.ts * basic procedure config * tweak procedure config * container / image pages * network / volume pages * clean up docker resource pages * basic log / terminal ui * reusable log section * styling * clean up resource components * delete in resource header * log auto select stderr * fix some bgs * stack logs with service selector * stack terminals * add deployment executions * use correct icon * useResource hooks * build info * build info * tweaks * server tabs * fix terminal section target * prog on server tabs * server stats * light theme * start on historical stats * stack service page * resource sync tabs * sync tabs * more topbar icons * add settings basic * add topbar alerts * tweak stream selector behavior * tweak alert icon topbar * improve styling smaller screen * schedules page and other progress * onboarding keys * improve schedule page descriptions * improve update notifications * schedule timezone selector * tag color selector * finish settings / providers * use shared-text-update component so settings tables aren't janky * updates page * refine updates page * alert page * standardize borders * theme and swarm * swarm tabs * swarm node page * swarm config page * swarm pages * swarm task and secret pages * swarm stack page * fix stack log service selector in swarm mode * standard inspect section * swarm inspect tab * server and swarm resources tab * add disable confirm dialog (modal) option for executions * stack update available indicator * deployment update available * add template switch to resource headers * ResourceHeader + rename * set editing name onclick * repo tabs * server stats table * refine a bit * refine deployment / stack header info * show server stats dashboard. dashboard tables * action last run in config * SettingsUsers page * user page etc * manage api key * user base permissions * color the table multi select * user group page * UserAddUserGroup * active includes deployments / stacks * improve small screen view * fix docker pages execution showing * clean up * rename frontend to UI * align profile page styling * config maintenance windows * finish maintenance windows * builder config * add batch execute dropdown / confirm menu * batch execute styling * deploy 2.0.0-dev-117 * improve stats card light theme * add update page * improve mobile * terminal group nowrap * mobile improvements * allow unused again * improve mobile font sizing * improve mobile updates / alerts * mobile tabs * alert page * add server version mismatch color * new resource, clearable selector * Fix build show info tab * copy resources * keyboard shortcuts * server resource header version mismatch * fix type errors * container page server multi select * confirm button clear timeout * hash compare force uses first 8 for short hash * fix log height * copy webhooks * responsive tweaks * add icons to server stat sections * add historical server stats charts * server stat current card shows usage numbers * refine current stats more * fix shortcuts interfering with monaco brave * clean up unused * remove v1 frontend * bump rust version to 1.93.1 and dep versions * deploy 2.0.0-dev-118 * bump chef rust version * improve login no auth configured and passkey pending * Load Average is first historical stat * procedure / action webhook branch mobile style * dashboard active styling * hide actions when none * Select Template * execution buttons disabled when loading * Fix config input issue * improve tab styling * rename ConfigSwitch onChange -> onCheckedChange * ensure section headers consistent spacing * edit swarm join command * fix batch executions width * stack stopped and deployment exited warning instead of critical * smaller more consistent gaps * add close button to update / alert details drawer * stack and deployment state color include update available. Ensure server version mismatch color applied everywhere * deploy 2.0.0-dev-120 * topbar user dropdown shows user avatar if available * post link redirect should be to profile * deploy 2.0.0-dev-121 * improve profile delete styling * standard api key modal size * improve login styling * fix login github / google icon color * fix some wrapping stuff in tables and tag text disappear * fix terminal height - same as logs * single delete terminal * Update / Alert table filter selector formatted * tweaks for lg size * taller data table and blue omnisearch * refine lg screen size view * fix sidebar margin right * "never" -> "Never" * Add hoverable disk info * improve disk usage hover card styling * rename for clarity * thinner topbar * config sidebar save * setters use maps instead of mutations * notification green contents written success * fmt * read request are trace * deploy 2.0.0-dev-122 * debug level core <> periphery auth identifiers logs * mogh auth server 1.2.10 * mogh auth 1.2.11 * deploy 2.0.0-dev-123 * Deploy / DeployStack updates invalidate corresponding list query * confirm action / save modals don't need ConfirmButton * deploy 2.0.0-dev-124 * proper base64url decode * fix init admin user * improve mobile friendly tabs width, and onboardng key copy * rename resource invalidates * better maxheight for mobile friendly tabs * km cli needs to install crypto provider for tls ws * better responsive confirm save width * confirm modal better responsiveness * Fix api key modal too thin * better api key create * improve batch execs * improve tabs * sidebar more compact * add missing Repo header Info * Fix Pull repo * fix repo Links config * improve procedure config UI including run stack service * improve deployment network, restart, termination signal config * fix confirm update showing entries which have not changed * example execute terminal uses bash * Update deployments description * move build server * [Docs] Update connect-servers.mdx (#1256) * Update connect-servers.mdx * Update connect-servers.mdx * clean up connect servers * feat(ci): build (#1018) * fmt * fix: more verbose logging (#1017) * use .with_context for stack run directory canonicalize log * fix failing doc test * Improve server resource header hover info * service selector support swarm stack icon * fix stack terminals sometimes not disabled when it should be * add terminal create and delete messages * bump packages and add Mogh Tech copyright * revamp docsite * soften the borders * clean up stack config * fix config group header too much gap * procedure stage menu easier to reach * deploy 2.0.0-dev-125 * increase universal resource polling * improve server stats * fix data table * down node is critical * cli add print core info * add docker swarm feature card * improve toml resource repetition using macros, and fix Swarm toml support * swarm config: configure alerting options * add swarm header info * Implement New Swarm Config and New Swarm Secret * brighten tag colors * continue docs revamp * fmt * set more refetch intervals to keep display data fresh * fix copy not showing copy source when there are no templates * rename onboarding key fix_existing_servers to privileged * fix Privileged spelling * fmt * more docs improvement * improve docs intro * update the curl instructions with easier call method * fix clippy lints * refresh the server cache after every server connection successful login * deploy 2.0.0-dev-126 * add polling to dashboard summary data * tweak tag opacity * improve server stat table disk hover * fix change historical stat length collapse stats * KOMODO_DISABLE_INIT_RESOURCES * stack Project Missing should be red * Fix files on host stacks showing down after reboot until refresh cache * silence user level write logs SetLastSeenUpdate and PushRecentlyViewed * See the v2 migration guide * Improve api logging using more fields * deploy 2.0.0-dev-127 * cli create api key on database, can use with docker exec into core container * deploy 2.0.0-dev-128 * advanced km create api-key options * create onboarding key with cli * tweak * onboarding keys use tag name * deploy 2.0.0-dev-129 * stack procedure stages can select specific services to apply to (default all services) * docsite dockerfile * ./docusaurus.config.ts * need to yarn build * fix broken link * improve alert (dropdown) icons * fix docs sidebar collapse * add local search functionality * docs search nice * homepage features navigate to docs * only show build cancel when canCancel * more confirm button confirmprops red * fix docsite buttons and list more features * fix sidebar cmd click opens in new tab (is a link) * execute withBorder * cleaner execute section * swap docker compose and deploy containers * make docs logo align with app * better mobile button layout * linked logins / 2fa confirm red styling * bump rust version to 1.94.0 * move bollard::secret to bollard::config * deploy 2.0.0-dev-130 * feat: add compose_cmd_wrapper_include for selective command wrapping (#1124) - Add compose_cmd_wrapper_include field to StackConfig. - Fix wrapper placeholder text not displaying in MonacoEditor. * align configuration by removing bold label stuff * confirm update monaco readonly * dockerfile binaries / ui images default to :2 * fmt * refresh server cache lint * fmt * disabling send alerts should also disable in UI * clean up disabled alerting * deploy 2.0.0-dev-131 * mogh_pki 1.1.3 safer copy from slice * fix dev container issues on 2.0.0 (#1238) * fix node version and yarn build in dev container * ensure keys directories exist and are writable in dev container * update dev container image (necessary to fix compiler error) * fix CORS error in dev container * more dev container fixes KOMODO_SESSION_ALLOW_CROSS_SITE: true needed to properly run on Firefox * fix devcontainer port * update config pages to use "Webhooks" consistently and fix acronym casing (#1239) Co-authored-by: Maxwell Becker <49575486+mbecker20@users.noreply.github.com> * update local dev setup instructions (#1240) * example mongo deploy dev * check binary URL (#1116) * install script improve failed download binary log * align cli installer with periphery installer * improve terminal page create experience * deploy 2.0.0-dev-132 * improve mobile updates with full size query * fix some internal table wrapping * fix schedule expression examples * Add swarm updates / alerts filter * filter by update available uses location hash instead of localstorage * sync commit preserve meta "deploy" and "after" * UI fixes and tweaks * deploy 2.0.0-dev-133 * add error to warn log * Stack / deployment should inherit specific Swarm permissions * Fix inline span formatting (used in logs / errors) * refactor resource sync pending deploy for better display * deploy 2.0.0-dev-134 * improve terminal error handling * deploy 2.0.0-dev-135 * dedicated docs page for v2 * warning about failing to include init: true * Limit Periphery IPs in Advanced config * refine setup guide * 2.0.0 --------- Co-authored-by: Shlee <github@shl.ee> Co-authored-by: Yujia Qiao <code@rapiz.me> Co-authored-by: ChanningHe <52875777+ChanningHe@users.noreply.github.com> Co-authored-by: Steven Loria <sloria1@pm.me> Co-authored-by: Andreas Brett <andreasbrett@users.noreply.github.com>
8.7 KiB
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 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]] # 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
Swarm
[[swarm]]
name = "production-swarm"
description = "Production Docker Swarm cluster"
tags = ["prod"]
[swarm.config]
servers = ["manager-01", "manager-02", "manager-03"]
send_unhealthy_alerts = true
Builder and build
[[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 = "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" # optional
# 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
# 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 = "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 = "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]]
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 = "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]]
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, which 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]]
name = "komodo-periphery"
description = "Builds new versions of the periphery binary. Requires Rust installed on the host."
tags = ["komodo"]
[repo.config]
server = "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]]
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:
[[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" },
]