Commit Graph

54 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
e8671790b5 feat: add --context flag to scheduler-k3s:preview
Users can override the default 3-line surrounding context per change. Pass
`--context -1` to render the full resource around every change, matching
upstream `helm diff upgrade` behavior.
2026-06-02 21:02:43 -04:00
Jose Diaz-Gonzalez
496ede44b7 feat: add scheduler-k3s:preview subcommand
Adds a `scheduler-k3s:preview <app>` command that renders a unified diff
between the manifests currently stored in the live Helm release for an app
and the manifests that the next deploy would roll out. The diff is produced
entirely via the Helm Go SDK that scheduler-k3s already uses, with no
external `helm` binary or `helm-diff` plugin install required. The
underlying diff and parse logic is vendored from `databus23/helm-diff`
(Apache 2.0) into a new internal package, trimmed of three-way-merge,
release-ownership tracking, and the non-default output formatters.

The chart-construction half of `TriggerSchedulerDeploy` has been extracted
into a reusable `BuildAppChart` helper so deploy and preview share the
same chart materialization without duplicating template logic. Secret
values are redacted by default in preview output; `--show-secrets` and
`--show-secrets-decoded` flags match the upstream `helm diff` UX. Only the
main app helm release is compared in this iteration; auxiliary releases
for config vars, image-pull secrets, and TLS certificates are out of scope
and documented as such.
2026-06-02 20:28:31 -04:00
Jose Diaz-Gonzalez
5dbb2951bb feat: add scheduler-k3s annotations:report and labels:report
The scheduler-k3s plugin exposes `annotations:set` and `labels:set` but no matching report subcommands, so scripts could not inspect the configured state for idempotent management without reading the property files directly. The new `scheduler-k3s:annotations:report` and `scheduler-k3s:labels:report` surface the configured entries with stdout, JSON, single-flag query, and `--process-type` / `--resource-type` filtering, mirroring the recently added `scheduler-k3s:charts:report`. The literal `GlobalProcessType` value `--global` is rendered as `global` in report keys to avoid leading dashes. The `scheduler-k3s:autoscaling-auth:report` command is updated alongside to loop over every app when no app and no `--global` flag is provided, matching the convention used by `scheduler-k3s:report`.
2026-05-30 20:12:00 -04:00
Jose Diaz-Gonzalez
4346a18194 feat: add scheduler-k3s:charts:set and :charts:report
Helm chart overrides on the scheduler-k3s plugin were previously set
through the generic `scheduler-k3s:set --global chart.<chart>.<property>`
interface, which mixed chart-level configuration into the same command
that manages scheduler properties and offered no focused way to inspect
which overrides were configured. A dedicated `scheduler-k3s:charts:set`
sets and clears chart-specific helm values, and a complementary
`scheduler-k3s:charts:report` surfaces configured overrides per chart
with optional JSON output and single-field flag queries. The legacy form
on `scheduler-k3s:set` continues to work but now emits a deprecation
warning pointing users at the new subcommand.
2026-05-30 19:35:20 -04:00
Jose Diaz-Gonzalez
58042b9330 feat: delegate storage:exec to scheduler plugins, harden the flow
Moves the actual exec out of the storage plugin and into a new scheduler-storage-exec plugn trigger. scheduler-docker-local does docker run with TTY-aware -it/-i selection and --user derived from entry.Chown; scheduler-k3s creates a throwaway Pod via the kubernetes API, waits for it to reach Running with structured error reporting (ImagePullBackOff and friends are surfaced from the container status verbatim, no kubectl involvement), execs the user command via the existing SPDY plumbing in k8s.go, and deletes the Pod on the way out. (Entry).Validate now accepts either an absolute path or a docker named-volume token for docker-local entries so the migration synthesizer's named-volume legacy entries work cleanly. storage:exec gains --as-user for one-off uid overrides, propagates the underlying tool's exit code via os.Exit, and detects TTY/interactive mode from os.Stdin so non-interactive scripted use no longer trips over docker's input-device-is-not-a-tty error.
2026-04-29 23:29:30 -04:00
Jose Diaz-Gonzalez
cfb7da8ec0 feat: scheduler-k3s renders pvc-backed volumes from storage attachments
Adds a per-entry storage helm chart that owns the PVC and (when host_path is set) the PV, and three triggers for the storage plugin to drive: storage-create installs/upgrades the chart with storage-class existence validation, storage-destroy uninstalls it, storage-status reports the PVC phase. App deployment and cron-job charts now consume storage-app-mounts and reference each PVC by name; the // todo: implement volumes blocks are gone. ProcessVolume gained sub_path, read_only, and persistent_claim fields and the deployment/cron-job templates render them.
2026-04-29 14:49:15 -04:00
Jose Diaz-Gonzalez
8282981361 feat: accept --global on :report subcommands
Every `:report` subcommand now recognizes `--global` as a scope selector that limits the report to globally-configured properties, including in JSON form via `--global --format json`. Previously this combination was rejected because `--global` was treated as an info flag, conflicting with `--format`. The shared `common.ParseReportArgs` helper now returns a `ReportArgs` struct exposing the parsed scope; each Go and bash report selects a global-only flag map when scope is global, and skips per-app verification.
2026-04-29 10:30:59 -04:00
Jose Diaz-Gonzalez
b8e8ea74ff feat: use certificates imported by certs plugin when deploying via scheduler-k3s
Closes #7257
2026-01-08 01:05:40 -05:00
Jose Diaz-Gonzalez
1430c2a13e refactor: rename the scheduler-k3s:cluster-* commands to use a : instead of - for a delimiter
This standardizes the commands with the other k3s commands that use a colon delimiter as well.
2025-11-20 05:00:31 -05:00
Jose Diaz-Gonzalez
ca5c887b8a feat: add the ability to create k3s node profiles
Node profiles can be used to specify repetitive options for clusters, making it easier to add specific types of instances quickly.

This PR additionally fixes kubelet-args specification - the same key can be specified multiple times, such as when specifying custom sysctl rules.
2025-11-20 04:42:57 -05:00
Jose Diaz-Gonzalez
a677e05b1f Merge pull request #8105 from dokku/kubelet-args
Allow specifying kubelet-args when adding a new node to the cluster
2025-11-17 04:17:25 -05:00
Jose Diaz-Gonzalez
f33d3d852f feat: allow specifying kubelet-args when adding a new node to the cluster
Kubelet arguments are useful for specifying settings such as supported sysctl fields.
2025-11-16 23:53:02 -05:00
Jose Diaz-Gonzalez
d9073272df fix: minor help output formatting 2025-11-16 18:06:56 -05:00
Jose Diaz-Gonzalez
4a357e9896 fix: properly suspend and resume k8s CronJob objects when executing scheduler-cron-write 2025-11-09 23:16:38 -05:00
Jose Diaz-Gonzalez
882ca8781b fix: implement scheduler-is-deployed for scheduler-k3s 2025-08-22 01:51:38 -04:00
Jose Diaz-Gonzalez
3edddac0c1 fix: create the data directory 2025-07-23 18:40:43 -04:00
Jose Diaz-Gonzalez
e0617b209d feat: extract kustomize directory from repo during deploys 2025-07-23 18:40:43 -04:00
Jose Diaz-Gonzalez
7f27af260d fix: set the correct default ingress class for k3s clusters
This was accidentally left as traefik, but we document the correct value as nginx.
2025-04-14 04:39:33 -04:00
Jose Diaz-Gonzalez
8d08687706 feat: provide ability to customize chart values via scheduler-k3s:set
Dokku ships with default charts and customizes their helm values. In certain cases, it may be useful to further customize those values to better support specific installations. With this change, it is now possible to set custom values by providing the key in the format `chart.$CHART_NAME.$PROPERTY`. For instance, to increase timeouts for the keda http addon:

```shell
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.tcpConnectTimeout 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.keepAlive 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.responseHeaderTimeout 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.idleConnTimeout 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.tlsHandshakeTimeout 120s
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.expectContinueTimeout 120s
```

To reset a value to its default, simply set the value to an empty string.

```shell
dokku scheduler-k3s:set --global chart.keda-add-ons-http.interceptor.tcpConnectTimeout
```

Once the values are set, users will need to then run `scheduler-k3s:ensure-charts` with either the `--force` flag or specify the `--chart` flag with a list of charts to force apply.

```shell
dokku scheduler-k3s:ensure-charts --force

dokku scheduler-k3s:ensure-charts --chart keda-add-ons-http
```

Note that the existing dokku-provided values cannot be removed, but can be overridden.
2024-12-03 02:07:36 -05:00
Jose Diaz-Gonzalez
8aa311131e feat: add scheduler-k3s:ensure-charts
This command can be used to ensure charts are properly installed and configured according to Dokku's internal settings.
2024-11-13 01:18:40 -05:00
Jose Diaz-Gonzalez
90e8cac12f feat: implement nginx:show-config for k3s plugin
This allows users to see what nginx configs are in use for their applications.

Closes #7291
2024-10-21 22:09:09 -04:00
Jose Diaz-Gonzalez
611006af73 feat: add support for non-local nginx implementations
If the scheduler is not docker-local, we will assume that a separate plugin trigger will pull access/error logs on our behalf. For k3s, the naive implementation is to pull logs from a single container (multiple ingress-nginx pods will be supported in a future release).

Closes #7268
2024-10-17 00:18:24 -04:00
Jose Diaz-Gonzalez
4397533fd7 fix: implement missing scheduler-app-status trigger in k3s scheduler plugin 2024-04-04 22:14:39 -04:00
Jose Diaz-Gonzalez
6b74cd1d6b feat: implement autoscaling-auth:report 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
5b0bc0b132 fix: ensure the trigger type is properly set when handling global autoscaling auth objects 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
ba7a4d85b6 chore: document k3s autoscaling 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
9bba7843c1 fix: add labels subcommand to scheduler-k3s documentation 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
3bd61d8c7f feat: add command to add or remove auth configurations 2024-03-06 03:39:11 -05:00
Jose Diaz-Gonzalez
d8946edf91 feat: add support for manipulating labels
Closes #6625
2024-03-01 17:42:24 -05:00
Jose Diaz-Gonzalez
7203f0a6d7 refactor: move annotations subcommand to correct location 2024-03-01 17:42:24 -05:00
Jose Diaz-Gonzalez
fe262a3a3c chore: remove extra trailing newline 2024-02-12 21:43:45 -05:00
Jose Diaz-Gonzalez
3c6cc68086 refactor: capture output by default
This is almost certainly the correct default for Dokku. While it's a BC break and might cause an increase in memory usage, the api is mostly internal and therefore this is safe to use.
2024-02-12 20:28:31 -05:00
Jose Diaz-Gonzalez
047a3c00f5 chore: remove default false values when calling CallExecCommand 2024-02-12 20:07:43 -05:00
Jose Diaz-Gonzalez
1ae2df52f5 fix: use image pull secrets instead of registries.yaml to reference private repositories
While this will now more or less require a local docker login - which can be overridden by setting the image-pull-secrets property - this ensures every deploy has a valid context.

One annoying thing is that the secret is per-app vs global, meaning that if the secret must be rotated, all apps need to be redeployed. A future change can fix that by deploying a global secret, or if folks really desire, this can be done by setting the image-pull-secrets property on the app/globally.
2024-02-12 17:15:37 -05:00
Jose Diaz-Gonzalez
50239b056c fix: use new CallExecCommand when checking to see how help is being called
This is part of ongoing work to remove usage of the depreated NewShellCmd.
2024-02-12 00:55:16 -05:00
Jose Diaz-Gonzalez
5674a29211 feat: add ability to use ingress-nginx for routing instead of traefik 2024-02-06 21:19:51 -05:00
Jose Diaz-Gonzalez
81286a0673 feat: add ability to install nginx instead of traefik 2024-02-06 21:19:14 -05:00
Jose Diaz-Gonzalez
f5f583b12b feat: add support for specifying annotations
As the command contains a colon, it must be handled in the commands binary as opposed to subcommands.

Also include a simple bats test.
2024-02-06 13:54:53 -05:00
Jose Diaz-Gonzalez
a644908fbf fix: add missing help output 2024-01-23 12:52:08 -05:00
Jose Diaz-Gonzalez
204517074b fix: allow setting a custom ip address as the ip pf the dokku server
This will provide the ability to override cases where the detected ip address is invalid for whatever reason.
2024-01-23 03:26:32 -05:00
Jose Diaz-Gonzalez
0730647af7 feat: implement :cluster-list and :cluster-remove
These - and the existing :cluster-add command - do not require root.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
69e9511666 feat: implement cluster joining for server and worker nodes
Different options get applied to each depending on what is needed for the role.

This also updates how we initialize the cluster to better support how metrics exposure and cross-server networking.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
4650585ded fix: pull pass from env var 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
c2b78bb2d7 feat: implement run:list 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
9d27ff39da refactor: only delete the helm chart in the scheduler-post-delete hook 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
8b8444fb1f feat: implement run and run:detached
This utilizes a Kubernetes Job to start a pod in order to take advantage of completed Job cleanup in Kubernetes. It also properly handles interactivity by ensuring the container has a TTY.

Note that there is currently no provision for parsing docker arguments and translating them into their Kubernetes equivalents.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
6b85374857 feat: implement scheduler-k3s:show-config 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
46b6f446fd feat: implement ps:stop for k3s scheduler
This simply scales down processes.
2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
9c891563c3 feat: implement logs command for kubernetes 2024-01-23 03:00:27 -05:00
Jose Diaz-Gonzalez
737f54a5c7 feat: implement dokku enter for k8s scheduler 2024-01-23 03:00:27 -05:00