These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)
| Commit: | 4c4db1b | |
|---|---|---|
| Author: | despire | |
initial rework on the templates for terraformer service
| Commit: | e347e46 | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
Support spot instances on AWS, Azure and OCI (#2151) Extends spot worker pool support (already available for GCP and Verda) to AWS, Azure and OCI. The spot validation allow-list now accepts these three provider types; control-plane pools stay rejected. Pairs with the matching template changes in claudie-config. Validated end-to-end on all three providers, fixed-count and autoscaled. --- Related PRs: - berops/claudie-config#38 — renders the spot templates; ships together with this one. - berops/claudie-autoscaler#3 — Azure scale-from-zero arch fix (branch `fix/azure-arch-resolve-latest`); independent of this feature. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Expanded support for Spot/pre-emptible worker node pools to AWS, Azure, OCI, GCP, and Verda, applying `claudie.io/spot=true` plus the `NoSchedule` taint and providing tolerations guidance. * **Documentation** * Updated supported-provider tables (including DNS healthchecks and Spot) and added OVHcloud as a supported Kubernetes provider. * Extended the InputManifest API reference and added/expanded “Spot instance support” guides for AWS, Azure, and OCI; clarified webhook wording to “unsupported providers” and refined the GPU Spot example text. * Marked Spot/pre-emptible support as complete in the roadmap. * **Tests** * Added/expanded coverage for Spot validation across AWS, Azure, and OCI. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
The documentation is generated from this commit.
| Commit: | f3e26ed | |
|---|---|---|
| Author: | Samuel Stolicny | |
Allow spot instances on AWS, Azure and OCI worker pools
The documentation is generated from this commit.
| Commit: | dea5bfb | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
Support Verda spot instances in dynamic nodepools (#2149) Allow `spot: true` on Verda worker nodepools (previously GCP-only). The spot label (`claudie.io/spot=true`) and taint (`claudie.io/spot=true:NoSchedule`) plumbing is already provider-agnostic, so this relaxes the validation gate to also permit Verda, refreshes the generated CRD and proto comment, and updates the docs. Verda rendering (`is_spot = true` on `verda_instance`) lives in the companion claudie-config change. Verda GPU autoscaling capacity is fixed separately in berops/claudie-autoscaler. Validated live on a Verda cluster: spot nodes provisioned with `is_spot`, carrying the spot label and taint; control plane unaffected. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Verda provider now supports spot instances for dynamic worker nodepools, enabling cost-optimized cluster deployments. * **Documentation** * Added comprehensive spot instance guidance for Verda, including configuration examples and scheduling mechanics with labels and taints. * Updated API reference and autoscaling documentation to reflect spot support across GCP and Verda. * Roadmap updated to show spot instance support completion for GCP and Verda. * **Updates** * Template version examples updated to v0.11.5. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
| Commit: | a431711 | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | Samuel Stolicny | |
Support Verda spot instances in dynamic nodepools Allow spot: true on Verda worker nodepools (previously GCP-only). The spot label/taint plumbing is already provider-agnostic; this relaxes the validation gate to permit Verda and refreshes the generated CRD/proto and docs. Verda rendering lives in claudie-config.
| Commit: | 01330c6 | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
Support GCP Spot VMs in dynamic nodepools (#2145) Adds an optional `spot` field to dynamic nodepools. On a GCP worker pool the nodes are provisioned as GCP Spot VMs (`provisioning_model = SPOT`), which cuts cost for fault-tolerant or autoscaled-from-zero workloads. - New `spot` bool on DynamicNodePool (proto, manifest, CRD). - Validation rejects `spot` on non-GCP providers and on control-plane pools. - Spot nodes get the `claudie.io/spot=true` label and a `claudie.io/spot=true:NoSchedule` taint, so only tolerating pods land there. - Docs plus a GPU inference example. Needs the matching template change: berops/claudie-config#37. Closes #2078 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **New Features** * Added GCP Spot VM support for **worker** Dynamic nodepools via `spot: true`. Spot-enabled nodes now receive the `claudie.io/spot` label and `claudie.io/spot=true:NoSchedule` taint; workloads must set the matching toleration. * **Validation / Bug Fixes** * `spot: true` is rejected for non-GCP providers and for control-plane nodepools. * **Documentation** * Updated InputManifest API reference, GCP provider docs, GPU Spot inference example, CRD schema, and the roadmap. * **Tests** * Added coverage for Spot label/taint generation and Spot validation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | ecdb7ef | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
add manifest state timestamp (#2139) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Manifests now include and persist a dedicated state timestamp whenever their state changes. * **Bug Fixes** * Timestamp handling standardized: unparsable timestamps are no longer auto-replaced with the current time and will be returned as empty/null. * **Tests** * Tests updated to cover the new state timestamp field and the revised behavior for invalid timestamps. * **Chores** * Container image tags updated for deployment manifests. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 9119ccb | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
chore: remove tee override (#2136) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated GPU operator Helm install guide to enable CDI with the NRI plugin and added a note about containerd reconciliation behavior. * **Chores** * Updated Go module dependency versions. * Bumped container image tags used in manifests. * **Refactor** * Removed the tee-override step and its associated provisioning/task handling from node-addition and cluster creation pipelines. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: Bernard Halas <bernard.halas@berops.com>
| Commit: | 62114fe | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
Support per-node SSH and WireGuard ports for shared-IP nodes (#2130) Some providers (for example CloudRift) place nodes behind a shared public IP and expose each node's SSH and WireGuard on randomly mapped ports instead of the usual 22 and 51820. This adds per-node sshPort and wireguardPort to the Node spec, parses them from the terraformer output ([ip, ssh, wg]), and uses the per-node SSH port across the Ansible inventories and the KubeOne config, plus the per-node WireGuard endpoint port in the peer config. When the ports are unset they fall back to the node pool port (and the 22 / 51820 defaults), so all existing providers are unaffected. ## Compatibility The CloudRift shared-IP path here only works together with the matching claudie-config template change, which ships in **claudie-config v0.11.3**. To use it, point your InputManifest `Provider.Templates` at **claudie-config v0.11.3 (or later)** so the CloudRift templates emit the per-node `[ip, sshPort, wgPort]` output this PR parses. The parsing stays backward compatible with the older template output (plain IP string and the 2-element `[ip, sshPort]` form), so clusters on earlier template versions are unaffected. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Per-node SSH and WireGuard port overrides; per-node ports take precedence over pool/default * Inventory, WireGuard and cluster templates now emit per-node SSH/WireGuard ports * Cluster autoscaler deployment now accepts configurable manager hostname and port * **Bug Fixes** * Correct SSH port selection so shared-IP/NAT nodes use node-specific ports * **Tests** * Added unit tests for per-node SSH-port selection and node-output parsing <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: despire <matus.mrekaj@icloud.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 3bf6350 | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
feat: add OVH as native compute and DNS provider (#2117) Adds OVH Public Cloud as a Claudie provider. Authentication is OAuth2 client-credentials via the native ovh/ovh OpenTofu provider. Covers compute, DNS, and the autoscaler-adapter. Validated end-to-end on real cloud: single-region (BHS5), multi-region (BHS5 + GRA9, WireGuard cross-region mesh), GPU (t2-45 / V100S), autoscaling (0 to 2 to 1), LB plus DNS, and multi-cloud with Hetzner. Requires the matching templates from berops/claudie-config (linked PR). Earlier review thread (closed in favor of this internal-branch PR): #2116 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * OVHcloud is now a supported cloud provider across manifests, validation, tooling, autoscaler, and templates. * **Documentation** * Added full OVHcloud provider docs, API credential specs, regions, GPU nodepool guidance, examples, and site navigation entry. * **Validation & UX** * CRD/API schemas, load balancer DNS, and manifest validation accept OVH entries. * **Tooling** * Terraform, autoscaler, and instance-type handling updated to support OVH. * **Bug Fixes** * Corrected README provider link for OVHcloud. * **Chores** * Updated several deployment image tags and dependency metadata. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/berops/claudie/pull/2117?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 81dd065 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
feat: move to ebpf cilium (#2091) Use ebpf instead of kube-proxy with cilium. This PR fixes deletion for newer kubernetes versions. Fixes credentials propagation infinite loop if providers change. Removes Kube Proxy and moves cilium into ebpf mode. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Infrastructure Improvements** * Cluster networking: kube-proxy installation skipped; Cilium proxy mode set to strict with Hubble enabled. * Deletion workflow: Terraform destroy stage now always runs during standard cluster removal. * **Bug Fixes** * Node removal: etcd member removal is now targeted per-node, reducing risk of unintended etcd deletions. * **Chores** * Updated runtime image tags for multiple services to a new revision. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/berops/claudie/pull/2091) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | ec46c53 | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
feat: add Verda Cloud provider (#2088) Supersedes #2082, which was opened from a fork. After the claudie-runner app token migration, fork PRs can no longer mint app tokens because GitHub doesn't pass repo secrets to fork workflows. Recreating the PR from a branch on `berops/claudie` directly so CI works end to end. Closes #2068. Adds Verda Cloud (verda.com) as a Claudie compute provider. Helsinki-based GPU and CPU host. OAuth2 client credentials, no native networking or DNS. Single-cloud, multi-cloud (with AWS), and autoscaling scenarios all validated end to end on a kind cluster against the live Verda API. ## What changed 1. **Proto + CRD + manifest + operator (commit 1).** New `VerdaProvider` proto with `clientId`, `clientSecret`, optional `baseUrl`. CRD enum gains `verda` plus the three SecretField names. Manifest API gets a `Verda` struct, validation, and conversion. Operator extracts the secret fields when constructing a manifest. 2. **Terraformer (commit 2).** `providers.tpl` declares `verda-cloud/verda` and additionally `hashicorp/http` and `hashicorp/time` (the Verda nodepool template uses them, see workaround below). 3. **Autoscaler-adapter (commit 3).** `cacheVerda` calls Verda's catalog via OAuth client_credentials. `getTypeInfoVerda` parses the response (a bare JSON array of instance types). Arch resolver returns Amd64. 4. **Docs (commit 4).** New provider page with credentials howto, locations and instance type queries, GPU notes, and three manifest examples (single-location, GPU pool, autoscaling). README, mkdocs nav, and api-reference updated. ## Companion claudie-config PR samuelstolicny/claudie-config -> berops/claudie-config:release. Required because the verda nodepool template uses an HTTP poll workaround for an upstream provider bug (see below). ## Upstream provider workaround The terraform-provider-verda's verda_instance.Create returns to Terraform as soon as Verda's API hands back an instance ID, before the public IP is assigned. That leaves verda_instance.<n>.ip null in stored state and Claudie's terraformer fails with nil output value. The nodepool template works around this with a time_sleep, an OAuth POST via data.http, and a re-fetch of the instance via GET /v1/instances/<id>. The block is clearly marked TEMPORARY and removable once the upstream Create function calls its existing waitForInstanceIP helper. An issue against verda-cloud/terraform-provider-verda will track the fix. ## Validation (kind + live Verda + live AWS) | Scenario | Result | |---|---| | Single-location FIN-01, 1 ctrl + 1 cmpt + Longhorn PVC | green | | Multi-cloud Verda + AWS, 3 ctrl + 3 cmpt | green | | Autoscaling FIN-03, scale-up 1 to 3 in 10s decision plus 10 min pipeline, scale-down 3 to 1 after 10 min cooldown | green | | Multi-location FIN-01 + FIN-03 (same cluster) | green | | GPU instance type (1B200.30V) | not run yet | ## Notes - Description on verda_instance must fit 60 chars. Template renders Claudie {clusterName}-{clusterHash}. - Custom SSH port 22522 follows the Claudie convention added in upstream claudie-config v0.11.0. - Pre-existing pain points uncovered along the way (not fixed here, just documenting): - services/manager/.../cluster-autoscaler.goyaml hardcodes the autoscaler-adapter image tag, which causes a double-tag pod after make containerimgs runs its sed. - The AWS template's auto-zone-distribution renders availability_zone as empty for some manifests, requiring an explicit zone. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added Verda cloud provider support (usable as a node pool target) * **Documentation** * Added full Verda provider docs with credential setup, API/query examples, images/locations, GPU guidance, SSH/port notes, and YAML examples * **Compatibility** * Input manifest, API surface and tooling updated to accept and surface Verda provider entries * **Infra / Tooling** * Terraform templates and autoscaler tooling updated to recognize and cache Verda instance types [](https://app.coderabbit.ai/change-stack/berops/claudie/pull/2088) <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | bec2e7d | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
feat: add historical counters for self canceling autoscaling (#2069) Closes https://github.com/berops/claudie/issues/2050 Claudie will now stop autoscaling a nodepool after 3 failed attempts. "Stop" can be interpreted here as changing the `TargetSize` of the autoscaled nodepool (which is set by the autoscaler-adapter) back to the current number of nodes in the Nodepool which effectively signals back to the autoscaler-adapter that no scale-up is on-going. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Cluster state now records per-nodepool autoscaling failure counters for scale-up attempts. * Reconciler uses these counters to adjust autoscaler targets and skip a reconciliation cycle when persistent failures are detected. * **Improvements** * Repeated scale-up failures automatically pause autoscaling for the affected nodepool and mark the cluster as not ready. * Failure counters are persisted, synchronized, and cleared on successful scale operations. * Clearer messaging and more accurate handling for removing unreachable control-plane nodes. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | b96cc1c | |
|---|---|---|
| Author: | Matus Brandys | |
| Committer: | GitHub | |
Add custom SSH port support for dynamic and static nodepools (#2026) - Adds configurable SSH port support for static node pools, replacing the hardcoded port 22 -> optional `sshPort field `in the manifest - New dynamic nodepools (created via new terraform templates) use port 22522 by default, with the port confirmed from terraform output - Existing dynamic nodepools retain port 22 for backward compatibility via state transfer - Terraform templates output [IP, port] tuples; old templates outputting just IP. This will be handled in ansibler and kube-eleven stage as ssh port 22 for VMs - With this PR comes new templates https://github.com/berops/claudie-config/pull/32. But changes in PR also works with old templates. Migration from old to new templates also tested - **This PR replaces the earlier PR https://github.com/berops/claudie/pull/1997** - Closes https://github.com/berops/claudie/issues/1837 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added configurable SSH port support for node pools, enabling SSH connections through non-standard ports. Defaults to port 22 when not specified. * Infrastructure provisioning and management services now fully support custom SSH port configurations for cluster operations. * **Documentation** * Updated API documentation, deployment examples, and platform-specific guides with the new optional `sshPort` field for node pool specifications. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Matus Brandys <matus.brandys@berops.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | b65026a | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
feat: add CloudRift cloud provider support (#2000) ## Summary - Add CloudRift as a new compute provider (GPU-focused) - Implement NAT hairpinning fix for same-subnet CloudRift nodes (iptables DNAT before WireGuard) - Add provider documentation, API reference, and README entry Closes #1982 **Depends on:** berops/claudie-config#31 (CloudRift Terraform templates) ## Test plan - [x] Single-datacenter cluster (2 UK nodes) - [x] Multi-datacenter cluster (2 UK + 1 US nodes) - [x] Multi-cloud cluster (3 CloudRift + 2 GCP, dual control plane) - [x] Autoscaling (scale-up 0→1→2, scale-down 2→1) - [x] WireGuard VPN, Longhorn storage, DNAT same-subnet-only <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * CloudRift added as a supported provider (node pools, GPU support; DNS marked N/A). Autoscaler, node manager, provisioning and validation updated to handle CloudRift. * **Infrastructure & Operations** * New NAT-fix Ansible playbook and VPN pre-step to ensure LAN-based tunnel endpoints for CloudRift nodes. * **Documentation** * Full CloudRift provider docs, README entry, and site navigation added. * **Terraform** * Optional CloudRift provider block added to provisioning templates. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | 02417e8 | |
|---|---|---|
| Author: | Matus Brandys | |
Added sshPort to protobuf
| Commit: | 3bee924 | |
|---|---|---|
| Author: | Matus Brandys | |
feat: custom SSH port for nodepools (old=22, new=22522) Add sshPort field to NodePool proto message to differentiate between old nodepools (port 22) and new nodepools (port 22522). Both dynamic and static nodepools are supported. - Add SSHPort helper and constants in internal/nodepools - Set SshPort=22522 for all new nodepools in CreateNodepools() - Transfer sshPort as immutable state for existing nodepools - Add ansible_port to all Ansible inventory templates - Add sshPort template function for Go templates - Update healthcheck to use dynamic SSH port instead of hardcoded 22 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| Commit: | 13f5ea2 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
chore: replace hetznerdns with native hetzner dns (#1993) related to: https://github.com/berops/claudie-config/pull/29 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Removed the HetznerDNS provider option — manifests and runtime no longer accept "hetznerdns"; update manifests to use "hetzner" or other DNS providers. Added OpenStack and Exoscale to provider options. Updated deployment image tags and tooling protobuf version. * **Documentation** * Updated docs, examples and API reference to remove HetznerDNS guidance and reflect the revised provider list, examples, and validation rules. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | bd23afa | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
feat: add Exoscale cloud provider support (#1978) Closes #1975 ## Summary - Adds Exoscale as the 8th compute provider with full support for node pools, DNS, GPU instances, and autoscaling - Implements all required changes across the stack: proto definitions, CRD types, manifest validation, operator, terraformer, and autoscaler-adapter - Adds documentation (provider guide, GPU examples, API reference) and E2E test coverage ## Changes - **Proto**: `ExoscaleProvider` message (apiKey, apiSecret) in `provider.proto`, credentials case in `utils.go` - **CRD**: `EXOSCALE` provider type, secret fields (apikey, apisecret) - **Manifest API**: Exoscale struct, GetProvider/ForEachProvider/Validate support - **Operator**: Secret extraction and validation for EXOSCALE provider type - **Terraformer**: `exoscale/exoscale` v0.68.0 provider block, DNS provider case - **Autoscaler-Adapter**: `cacheExoscale()` via egoscale/v3, instance type info resolution - **Arch Resolver**: Exoscale defaults to Amd64 - **Docs**: Provider guide, GPU examples, mkdocs nav, README providers table, API reference - **Tests**: Exoscale compute node added to test-set1 (multi-cloud cluster with Hetzner) ## External dependency Requires corresponding claudie-config PR with Exoscale Terraform templates: berops/claudie-config#26 ## Test plan - [x] E2E: Single-provider Exoscale cluster (1 ctrl + 1 cmpt, ch-gva-2) - [x] E2E: Multi-cloud cluster (Exoscale + GCP ctrl, Exoscale + AWS cmpt) - [x] E2E: WireGuard cross-provider VPN, Longhorn storage, DNS, pod scheduling - [x] E2E: Autoscaling full cycle (scale-up 1→2, scale-down 2→1) - [x] E2E: GPU instance (gpu2.small, at-vie-1) — node provisioned and Ready - [x] E2E: Loadbalancer with Exoscale DNS zone — A record created, Envoy HTTP proxy verified with round-robin across nodes <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added Exoscale as a supported cloud provider across the product (credentials, DNS, GPU instance types, dynamic node pools, autoscaling and provider workflows). * **Documentation** * Added comprehensive Exoscale docs, README provider table entry, API/provider reference, input-manifest examples (including GPU), navigation update, and sample manifests. * **Chores** * Added ignore rule to exclude PLAN files from repository tracking. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 0c970dd | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat/infra refresh (#1979) Add periodic refresh of the `current state` infrastructure that is healthchecked before scheduling. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Automatic infrastructure refresh cadence with a new ticks field and a centralized pipeline builder for create/refresh flows; added a refresh scheduler. * **Bug Fixes** * Missing or invalid node addresses now surface errors/warnings instead of being skipped. * Ping behavior updated to mark invalid targets as unhealthy. * Improved handling to report partial successes during infrastructure builds. * **Chores** * Increased pending-task polling interval. * **Tests** * Expanded tests to validate common node-pool views and diff behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | b98393c | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat/reconciliation loop (#1951) Aims to resolve the following issues: Initial work on https://github.com/berops/claudie/issues/150 Closes https://github.com/berops/claudie/issues/1627 Closes https://github.com/berops/claudie/issues/1617 Closes https://github.com/berops/claudie/issues/1316 This PR introduces a refactor that get rids of the Builder service and adds NATS as a worker queue to distribute the messages between the workers (terraformer, ansibler, kube-eleven, kuber). Further, this PR introduces the initial work on the reconciliation loop which works as follows: Once a change is detected the diff is worked out and is applied, if it fails claudie rolls back to the original state will proceed to again diff with the desired state. This will be an endless reconciliation loop that will always try to build the desired state even on failures. Contrary to how claudie in `master` works, which after a failure is encountered logs the error and nothing is done until the manifest is again updated. Usually on errors it was enough to retry, thus some users were manually editing nodepool labels to trigger the reconciliation. Which is now completely obsolete as claudie will work it out on itself, it will be enough to update the manifest for the desired state. --------- Co-authored-by: Matus Brandys <152224158+m-brando@users.noreply.github.com> Co-authored-by: Matus Brandys <matus.brandys@berops.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Jakub Hlavačka <jakubhlavacka123@gmail.com>
| Commit: | 2a4c922 | |
|---|---|---|
| Author: | Samuel Stolicny | |
| Committer: | GitHub | |
feat(gcp): add GPU guest accelerator support for GCP nodepools (#1952) ## Summary Closes #1845 This PR adds GPU guest accelerator support for GCP nodepools, allowing users to attach NVIDIA GPUs to GCP compute instances via Claudie's InputManifest. ### Changes - **Proto**: Added `nvidiaGpuCount` (renamed from `nvidiaGpu`) and `nvidiaGpuType` fields to `MachineSpec` - **Manifest**: Updated `MachineSpec` struct with new GPU fields and backward compatibility for `nvidiaGpu` - **Validation**: Added `validateGCPGpuConfig()` to ensure GCP nodepools with GPUs have the required type specified - **CRD**: Regenerated with new `nvidiaGpuCount` and `nvidiaGpuType` fields - **Autoscaler**: Updated to use `NvidiaGpuCount` field name - **Documentation**: Added GPU configuration docs for GCP provider - **Makefile**: Added `kind-deploy` target for easier local testing ### Example Usage ```yaml nodePools: dynamic: - name: gpu-workers providerSpec: name: gcp-provider region: europe-west1 zone: europe-west1-b count: 1 serverType: n1-standard-4 image: ubuntu-2204-lts machineSpec: nvidiaGpuCount: 1 nvidiaGpuType: nvidia-tesla-t4 ``` ### Backward Compatibility - The old `nvidiaGpu` field is preserved as a deprecated alias for `nvidiaGpuCount` - Non-GCP providers can still use GPU count without specifying type - Proto field numbers maintained for wire compatibility ### Template Changes GCP template changes implemented in https://github.com/berops/claudie-config/pull/22 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** - GCP now supports NVIDIA GPUs with configurable GPU count and explicit GPU type; deprecated GPU field retained for compatibility. - Local "kind" cluster deploy target added to update and rollout workloads. * **Documentation** - Added GCP GPU docs, examples, provider guidance and a GPU Operator deployment guide; updated provider matrix. * **Validation** - GCP-specific validation requires GPU type when GPUs are requested. * **Tests** - Added validation tests covering GCP and non‑GCP GPU scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Samuel STOLICNY (contractor) <samuel.stolicny@amadeus.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | a3f545d | |
|---|---|---|
| Author: | Jakub Hlavačka | |
| Committer: | GitHub | |
chore: remove Genesis Cloud provider support (#1941) Remove Genesis Cloud as a supported cloud provider from the codebase and replace the GPU example in documentation with AWS using `g4dn.xlarge` instance type. closes https://github.com/berops/claudie/issues/1940 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Removed GenesisCloud as a supported provider; existing GenesisCloud configurations will no longer be recognized—please migrate to an alternative provider. * Updated deployment image tags used in manifests to a new release version. * **Documentation** * Removed GenesisCloud references across docs, examples, and navigation; sample manifests and external templates now use alternative providers (e.g., AWS, Hetzner). <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 53fdb2d | |
|---|---|---|
| Author: | Jakub Hlavačka | |
| Committer: | GitHub | |
Deploy kubelet-csr-approver to approve kubelet server CSRs (#1934) Sometimes, kubeone fails to approve the kubelet server CSRs. As a result, `longhorn-driver-deployer` in the `longhorn-system` keeps restarting. This PR deploys a third-party application [kubelet-csr-approver](https://github.com/postfinance/kubelet-csr-approver) to resolve this issue. You can read more about the problem in the linked GH issue below. closes https://github.com/berops/claudie/issues/1920 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Remote API to trigger deployment of a kubelet CSR approver to managed clusters. * **New Components** * Server-side workflow to deploy kubelet-csr-approver. * Utility that generates and applies kubelet-csr-approver manifests (RBAC, ServiceAccount, Deployment, probes, metrics). * Embedded manifest template for kubelet-csr-approver deployment. * **Bug Fixes / Reliability** * Per-cluster temporary working directories with automatic cleanup and improved error context. * **Chores** * Updated image tags in deployment manifests. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 8ca36ce | |
|---|---|---|
| Author: | Jakub Hlavačka | |
| Committer: | GitHub | |
Prevent `config.toml` override by kubeone (#1916) This PR creates a `tee` file in `/opt/claudie/bin` to prevent `kubeone` from overriding `config.toml` after the [nvidia-container-toolkit](https://github.com/NVIDIA/nvidia-container-toolkit) (part of the [gpu-operator](https://github.com/NVIDIA/gpu-operator)) updated this file to allow containers to use the GPU device. The `/opt/claudie/tee` overrides the `/usr/bin/tee`. Suppose someone/something uses the `tee` command to write to `/etc/containerd/config.toml`. The overridden `tee` will discard the write and return a success to a parent process if there's a `/etc/containerd/conf.d` directory with a `*nvidia*` file. Otherwise, the `tee` command works as expected. In order for the script to work, the `/opt/claudie/bin` has to be before `/usr/bin` in the PATH. Claudie handles this. I have performed the following tests. The first was to ensure the `tee` override works. 1. Provisioned a downstream cluster with a GPU instance 2. Deployed GPU operator 3. Upscaled the downstream cluster 4. Deployed a Python application with `bash` on a GPU instance 5. Executed to the Python application and checked the `CUDA` utilization by running `torch.cuda.is_available()` 6. The command from the previous step returned `True` The second one verified that the `/opt/claudie/tee` is cleaned from the static nodes. 1. Provisioned a downstream cluster with a static node 2. The static node had the `/opt/claudie/tee` 3. Removed the static node from the downstream cluster 4. Ensure the `/opt/claudie/tee` was successfully removed You can read more in the [design doc](https://docs.google.com/document/d/13CCn-ff89YMNeTb2tXraBPj3_HwmEs2rBomaDSWD-8c/edit?usp=sharing) closes https://github.com/berops/claudie/issues/1840 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * New API action to install a tee binary override across cluster nodes; integrated into infrastructure workflow. * New Ansible playbook that conditionally intercepts writes to containerd config when NVIDIA-related configs are present. * **Removals** * Optional NVIDIA GPU operator rollout step removed from update and reconciliation workflows. * **Chores** * Uninstall now removes tee override and PATH augmentation; added completion log, updated deployment image tags, and .gitignore. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 32a1e55 | |
|---|---|---|
| Author: | despire | |
initial work on ansibler
| Commit: | 3b2882d | |
|---|---|---|
| Author: | despire | |
replace original terraformer with new version
| Commit: | 7bc4c77 | |
|---|---|---|
| Author: | despire | |
handler results in managerv2
| Commit: | 1f7163a | |
|---|---|---|
| Author: | despire | |
have working terraformerv2 service
| Commit: | 8e0954d | |
|---|---|---|
| Author: | despire | |
restructure nats msgs
| Commit: | 10eba87 | |
|---|---|---|
| Author: | despire | |
initial work on reconciliation loop and move to NATS
| Commit: | 39a6fde | |
|---|---|---|
| Author: | Matus Brandys | |
| Committer: | GitHub | |
Feat/openstack provider (#1857) Added openstack provider to claudie (tested on OVH public cloud) Added docs regarding openstack provider <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - OpenStack added as a supported provider: manifests, APIs, and tooling updated. Dynamic node pools can specify an external network name; region ↔ external-network mapping exposed. Autoscaler can discover OpenStack flavors and templates now include OpenStack provider support for Terraform. - **Documentation** - Full OpenStack provider guide, input-manifest examples, README entry, and site navigation added. - **Chores** - Added OpenStack client dependency, bumped provider/template versions, updated test sets, and refreshed deployment image tags. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Matus Brandys <matus.brandys@berops.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: despire <matus.mrekaj@icloud.com>
| Commit: | 97099c9 | |
|---|---|---|
| Author: | Matus Brandys | |
Merge master
| Commit: | c3cc2ea | |
|---|---|---|
| Author: | despire | |
replace TTL with lease for builder
| Commit: | 73a7445 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
chore: expand machine spec to contain number of gpus (#1854) Expands the machine spec to describe the number of GPUs the given instance type has. This will then be used in the Node Template for the cluster-autoscaler. Partially also implements https://github.com/berops/claudie/issues/1853 where applicable. But it seems that for not all of the Claudie supported providers we can programmatically determine the number of NVIDIA GPUs attached. Thats why the change in the InputManifest for a dynamic nodepool: ``` machineSpec: nvidiaGpu: 1 ``` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - New Features - Dynamic nodepools can declare NVIDIA GPU counts; autoscaler exposes and honors GPU resources (per-node counts take precedence). - Documentation - API reference and autoscaling guide updated with NVIDIA GPU field, clarified CPU/Memory wording, and example GPU-enabled nodepool. - Bug Fixes - Autoscaler now guards against missing dynamic nodepool data and returns safely when capacity info is absent. - API Changes - CPU and Memory validations relaxed to be optional/mutually dependent; CRD and proto schemas include nvidiaGpu. - Tests - Diff-based tests made deterministic by sorting outputs. - Chores - YAML/manifest formatting and testing manifests updated; container image tags and test cluster versions bumped. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 04ed3d0 | |
|---|---|---|
| Author: | Matus Brandys | |
| Committer: | Matus Brandys | |
Added openstack provider to claudie (#1067)
| Commit: | 066fb95 | |
|---|---|---|
| Author: | despire | |
expand machine spec to contain number of gpus
| Commit: | e726587 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
correctly remove taints,annotations,labels (#1852) Closes https://github.com/berops/claudie/issues/1826 This PR also includes update to the minor version of the protoc compiler <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - New Features - Patch nodes now supports removing labels, annotations, and taints per node for cleaner reconciliation. - Request payload extended to include structured "toRemove" data so removals can be specified per node. - Added direct taint removal on nodes. - Refactor - Patching workflow now applies removals prior to standard patching using the new removal payload. - Tests - New unit tests covering label, annotation, and taint removal diff logic. - Chores - Updated container image tags and required protoc version. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | b6fe925 | |
|---|---|---|
| Author: | despire | |
remove specific taints not all under the same key
| Commit: | b70e45a | |
|---|---|---|
| Author: | despire | |
correctly remove taints,annotations,labels
| Commit: | 036b49a | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
feat: add rollout restart for gpu operator (#1790) Closes https://github.com/berops/claudie/issues/1786 By restarting the `nvidia-toolkit-daemonset` after the `kubeone` step the config in `/etc/containerd/config.toml` on each node will be re-written again to work with the gpu operator, if deployed. Has no side effect if the GPU operator is not deployed, errors will simply be ignored. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added support for performing a rollout restart of the NVIDIA container toolkit daemonset as part of the GPU operator deployment, if present. * Users can now trigger this restart operation through the system’s workflow when updating or reconciling Kubernetes cluster configurations. * **Bug Fixes** * Improved handling to ensure the NVIDIA toolkit daemonset is properly restarted only when necessary, avoiding unnecessary restarts during node deletion. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 65a4673 | |
|---|---|---|
| Author: | despire | |
add rollout restart for gpu operator
| Commit: | 7418084 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat/envoy (#1735) Closes https://github.com/berops/claudie/issues/1175 Tested: - Docker is restarted across reboots and the envoy services are restarted as well - Sticky Session always point to the same node based on the IP address. - Proxy-Protocol [TCP - OK] [UDP not supported] - Support up to 65000 concurrent connections - TCP connections stay alive during runtime upgrade of the envoy configs - Containers are removed/added based on the roles specified in the InputManifest The following infra was used for testing. ``` dynamic: - name: lb providerSpec: name: hetzner-1 region: fsn1 zone: fsn1-dc14 count: 1 serverType: cpx51 image: ubuntu-24.04 storageDiskSize: 50 - name: control providerSpec: name: hetzner-1 region: fsn1 zone: fsn1-dc14 count: 1 serverType: cpx31 image: ubuntu-24.04 storageDiskSize: 50 labels: label: test3 - name: compute providerSpec: name: hetzner-1 region: fsn1 zone: fsn1-dc14 count: 2 serverType: cpx51 image: ubuntu-24.04 storageDiskSize: 50 ``` Load test for 65k connections, **NOTE:** Ignore the Number of seconds required for a response, as only a single replica was used to handle all of the incoming request significantly increasing the time to response. ``` $ hey -t 800 -c 64307 -m GET -n 64307 https://mj1zfpmfqk9jyvdwj.aws.e2e.claudie.io Summary: Total: 144.7371 secs Slowest: 144.1493 secs Fastest: 2.5743 secs Average: 105.1451 secs Requests/sec: 449.0901 Response time histogram: 2.574 [1] | 16.732 [48] | 30.889 [8197] |■■■■■■■■ 45.047 [50] | 59.204 [11] | 73.362 [0] | 87.519 [953] |■ 101.677 [2100] |■■ 115.834 [13797] |■■■■■■■■■■■■■■ 129.992 [38869] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 144.149 [281] | Latency distribution: 10% in 24.6098 secs 25% in 113.3476 secs 50% in 117.4154 secs 75% in 121.2006 secs 90% in 123.8030 secs 95% in 125.7526 secs 99% in 128.7546 secs Details (average, fastest, slowest): DNS+dialup: 15.0526 secs, 2.5743 secs, 144.1493 secs DNS-lookup: 6.9391 secs, 0.0000 secs, 22.5128 secs req write: 0.0575 secs, 0.0000 secs, 9.7602 secs resp wait: 86.2944 secs, 0.5457 secs, 123.3686 secs resp read: 0.2651 secs, 0.0000 secs, 18.5657 secs Status code distribution: [200] 64307 responses ``` Same but with only 1000 concurrent connections where the response is much more acceptable (still again a single replica for all of them) ``` hey -t 800 -c 1000 -m GET -n 1000 https://mj1zfpmfqk9jyvdwj.aws.e2e.claudie.io Summary: Total: 6.9368 secs Slowest: 6.9323 secs Fastest: 0.0815 secs Average: 1.9870 secs Requests/sec: 144.1579 Response time histogram: 0.082 [1] | 0.767 [30] |■ 1.452 [13] |■ 2.137 [921] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2.822 [0] | 3.507 [0] | 4.192 [0] | 4.877 [0] | 5.562 [0] | 6.247 [0] | 6.932 [35] |■■ Latency distribution: 10% in 1.6816 secs 25% in 1.7209 secs 50% in 1.9079 secs 75% in 1.9518 secs 90% in 1.9805 secs 95% in 1.9927 secs 99% in 6.9290 secs Details (average, fastest, slowest): DNS+dialup: 0.1172 secs, 0.0815 secs, 6.9323 secs DNS-lookup: 0.0118 secs, 0.0002 secs, 0.0512 secs req write: 0.0002 secs, 0.0000 secs, 0.0053 secs resp wait: 1.8082 secs, 0.0524 secs, 6.8171 secs resp read: 0.0120 secs, 0.0001 secs, 0.0460 secs Status code distribution: [200] 1000 responses ``` On the Loadbalancer during the testing all of the 65k connection were kept alive until the response was returned, `cluster.https.upstream_cx_active: 63486`, `listener.0.0.0.0_443.downstream_cx_active: 63486` ``` cluster.https.upstream_cx_active: 63486 cluster.https.upstream_cx_destroy_local_with_active_rq: 3246 cluster.https.upstream_cx_destroy_remote_with_active_rq: 513794 cluster.https.upstream_cx_destroy_with_active_rq: 517040 cluster.https.upstream_rq_active: 63486 listener.0.0.0.0_443.downstream_cx_active: 63486 listener.0.0.0.0_443.downstream_pre_cx_active: 0 listener.0.0.0.0_443.worker_0.downstream_cx_active: 3937 listener.0.0.0.0_443.worker_1.downstream_cx_active: 3929 listener.0.0.0.0_443.worker_10.downstream_cx_active: 4018 listener.0.0.0.0_443.worker_11.downstream_cx_active: 3951 listener.0.0.0.0_443.worker_12.downstream_cx_active: 3968 listener.0.0.0.0_443.worker_13.downstream_cx_active: 3999 listener.0.0.0.0_443.worker_14.downstream_cx_active: 4098 listener.0.0.0.0_443.worker_15.downstream_cx_active: 3954 listener.0.0.0.0_443.worker_2.downstream_cx_active: 4025 listener.0.0.0.0_443.worker_3.downstream_cx_active: 4029 listener.0.0.0.0_443.worker_4.downstream_cx_active: 3914 listener.0.0.0.0_443.worker_5.downstream_cx_active: 3947 listener.0.0.0.0_443.worker_6.downstream_cx_active: 3890 listener.0.0.0.0_443.worker_7.downstream_cx_active: 3971 listener.0.0.0.0_443.worker_8.downstream_cx_active: 3930 listener.0.0.0.0_443.worker_9.downstream_cx_active: 3926 ``` The CPU load during the Load test of the envoy Loadbalancer. < 1000 requests ``` PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7473 root 20 0 4605912 1.2g 41216 S 0.7 3.8 9:01.73 envoy ``` ~65000 requests ``` PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7473 root 20 0 4605912 1.2g 41216 S 120.3 3.8 9:19.64 envoy ``` 3000 requests ``` PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7473 root 20 0 4605912 1.2g 41216 S 31.6 3.8 9:24.16 envoy ``` For the customization of envoy a new CRD called `Setting` under the `claudie.io` group has been created that allows to create custom settings that then can be referenced in the InputManifest ``` - name: udp protocol: udp port: 8084 targetPort: 30181 targetPools: - compute-gcp-2 settings: proxyProtocol: true stickySessions: true settingsRef: name: "envoy" namespace: "default" ``` This is optional and by will use claudie defaults if not specified. The definition of the new CRD can be viewed at https://github.com/berops/claudie/blob/fb07ee595a8ad085b58194550eae8e5805575714/docs/input-manifest/example-settings.md ** Finally, this PR also introduces a reservation of ports. The last 1003 ports will be reserved by claudie for internal use. That is ports within the range 65535 - 64532. The number of roles that can be defined was limited to 999, we will also reserve a single port for each role definition. Additional 4 ports were also reserved. One is used for the node-exporter service and 3 are reserved for future use. ** <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Switched load balancer technology from Nginx to Envoy, enabling dynamic configuration and improved flexibility. * Added support for custom Envoy settings via a new Kubernetes CRD. * Load balancer roles now support specifying Envoy admin ports and advanced settings. * Introduced a new CRD for managing custom settings to override Envoy defaults. * Added default healthcheck role and automatic Envoy admin port assignment in load balancer clusters. * **Improvements** * Enhanced validation for load balancer roles and ports, including reserved port ranges and role limits. * Expanded Prometheus monitoring with new scrape targets for Envoy metrics. * Updated documentation to reflect Envoy usage and provide custom settings examples. * Improved load balancer setup with automated uninstallation of Nginx and deployment of Envoy via Docker Compose. * Refined internal API usage and manifest handling for load balancer roles and settings. * Simplified Makefile by removing local controller-gen binary management. * Improved error handling and subscription checks for Cloudflare API integration. * Added retry logic and deferred cleanup in load balancer setup for robustness. * Enhanced system limits configuration via new Ansible playbook for load balancer nodes. * Adjusted kubeone retry attempts to reduce redundant retries. * **Bug Fixes** * Corrected documentation and configuration formatting for improved clarity and accuracy. * Fixed troubleshooting docs with command correction and whitespace cleanup. * Fixed indentation and resource list in RBAC manifests. * **Chores** * Updated dependencies and internal API references. * Refactored playbooks and templates to remove Nginx and introduce Envoy configurations. * Reorganized and added new embedded templates for Envoy and Nginx uninstallation. * Migrated operator and controller code to newer API versions and updated webhook signatures. * Updated internal manifest imports across multiple packages for consistency. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | cbb3196 | |
|---|---|---|
| Author: | despire | |
Merge branch 'master' into feat/envoy
| Commit: | 2a705f5 | |
|---|---|---|
| Author: | Matus Brandys | |
| Committer: | GitHub | |
DNS Loadbalancing feat (#1777) Closes #1759 - Added functionality for cloudflare to recognize accountId parameter from manifest. This param is required when building cloudflare's tofu resources cloudflare_load_balancer_pool and cloudflare_load_balancer_monitor - Updated google tf provider to be able to use DNS loadbalancing - To test functionality you need to use templates from https://github.com/berops/claudie-config/tree/bux/fix-domain-balancing <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added support for specifying and validating a required Cloudflare Account ID in provider configurations. * The system now checks for an active Cloudflare Load Balancing subscription and exposes this status in DNS-related features. * **Improvements** * Updated the Google Cloud Platform provider version to 6.42.0 for Terraform configurations. * Updated container image tags across core components and testing framework for consistency. * **Bug Fixes** * Enhanced error handling and logging for Cloudflare subscription checks. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Matus Brandys <matus.brandys@berops.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 46afb80 | |
|---|---|---|
| Author: | despire | |
remove settings CRD
| Commit: | 5167dee | |
|---|---|---|
| Author: | Matus Brandys | |
| Committer: | Matus Brandys | |
- Added a new parameter AccountId to the Cloudflare manifest, which is required for cloudflare_load_balancer_* tofu resources. - Refactored code for retrieving the Cloudflare subscription - Relates to #1759
| Commit: | 09b6d76 | |
|---|---|---|
| Author: | despire | |
Merge branch 'master' into feat/envoy
| Commit: | 7c84555 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat/noproxy (#1745) Closes https://github.com/berops/claudie/issues/1637 Adds the ability to adjust the default NoProxy list that claudie uses by the user to bypass specified endpoint to be routed via the proxy. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added support for specifying custom endpoints to bypass the HTTP proxy using a new `noProxy` field in the configuration. - **Documentation** - Updated the HTTP proxy documentation to include details and examples for the new `noProxy` option. - **Bug Fixes** - Improved YAML formatting in configuration files for better compatibility and readability. - **Chores** - Updated container image tags for multiple components. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 6d87630 | |
|---|---|---|
| Author: | despire | |
add noProxy option to the input manifest
| Commit: | ffd79cb | |
|---|---|---|
| Author: | despire | |
reserve ports,d deploy envoy admin server to wg interface
| Commit: | 8e1ae8c | |
|---|---|---|
| Author: | despire | |
add customization to envoy
| Commit: | a0f3275 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat/lb alternative names (#1693) Closes https://github.com/berops/claudie/issues/1662 Adds alternative names support to claudie. This PR only implements the support at the input manifest level and the terraform service. The templates that claudie uses will have to be adjusted individually. The templates can use the following pattern to check if the alternative names extension is used or not ``` // {{- if hasExtension .Data "AlternativeNamesExtension"}} // ... access .AlternativeNamesExtension // {{- end }} ``` --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 5beeeb3 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
add additional role settings (#1685) Closes https://github.com/berops/claudie/issues/1683 Adds additional settings for the role: `proxyProtocol` - the role will use the proxy protocol for any forwarded traffic `stickySessions` - the traffic will be forwarded to the same node based on the hash of the source ip. https://github.com/berops/claudie/blob/26a8dd8b83f2a3d7df822692f66c7884073b5350/services/ansibler/templates/conf.gotpl#L1-L25 The lb role will now have the following structure ``` loadBalancers: roles: - name: example-role protocol: tcp port: 6443 targetPort: 6443 targetPools: - htz-kube-nodes # added settings: proxyProtocol: off (default will be on) stickySession: on. (default will be off) ``` --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 7f3cf4e | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Fix/unreachable node (#1658) This PR aims at resolving issues as described in https://github.com/berops/claudie/issues/1631 Closes https://github.com/berops/claudie/issues/1512 by Increasing the memory limit for builder to twice the amount. If any node becomes unreachable claudie will report this error until it is resolved. If any unreachable nodes occurs for a loadbalancer claudie will prompt be user to: - either deleted the nodepool from the loadbalancer or - delete the whole loadbalancer. If any unreachable nodes occurs for a k8s cluster, claudie will prompt the user to: - either delete the nodepool from the k8s cluster or - delete the node from the k8s cluster via `kubectl` --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | 73ce8f9 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
correct proxy on/off (#1636) Closes https://github.com/berops/claudie/issues/1623 --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 404d52e | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Chore/move decisions into manager (#1634) Closes https://github.com/berops/claudie/issues/1576 Closes https://github.com/berops/claudie/issues/1597 The manager service now handles what will be build and how by the other services. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | a016914 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat/autoscaler reconciliation (#1582) Closes https://github.com/berops/claudie/issues/1567 --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 5d26193 | |
|---|---|---|
| Author: | Jakub Hlavačka | |
| Committer: | GitHub | |
Allow turning proxy on and off (#1540) closes https://github.com/berops/claudie/issues/1526 --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: despire <matus.mrekaj@icloud.com>
| Commit: | 09c8278 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
remove targetNodes & disable proxy (#1547) Removes lagacy targetNodes and disables proxy by default. --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 424b86d | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
fix: dangling lb infra (#1533) Closes https://github.com/berops/claudie/issues/1521 --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 84d830b | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat/templates rolling update (#1525) Closes https://github.com/berops/claudie/issues/1441 Closes https://github.com/berops/claudie/issues/1518 This PR includes changes made from PR https://github.com/berops/claudie/pull/1520 due to dependencies. Closes https://github.com/berops/claudie/issues/1519 Closes https://github.com/berops/claudie/issues/1515 The proxy settings have been adjusted to `default` which will be turned on when a cluster uses hetzner nodepools. The proxy will always be turned on in the e2e pipeline. This PR introduces rolling updates for nodepools for k8s clusters and load balancer clusters as described in issue https://github.com/berops/claudie/issues/1441. Changes to the templates configurations in https://github.com/berops/claudie-config have been made to prepare this PR, as the previous templates would fail due to naming collisions and validation on various cloud providers due to naming length of various resources. This PR complements the previous https://github.com/berops/claudie/pull/1498 and https://github.com/berops/claudie/pull/1460 --------- Co-authored-by: Jakub Hlavacka <jakub.hlavacka@berops.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 28f4a87 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat/Manager (#1498) Closes https://github.com/berops/claudie/issues/1481 https://github.com/berops/claudie/issues/1392 https://github.com/berops/claudie/issues/1340 https://github.com/berops/claudie/issues/1318 https://github.com/berops/claudie/issues/1247 https://github.com/berops/claudie/issues/1065 https://github.com/berops/claudie/issues/1500 https://github.com/berops/claudie/issues/1502 This PR introduces the Manager service, which is a combination of the context-box and scheduler service. Manger is the brain and main entry point for claudie. To build clusters users/services submit their configs to the manager service. The manager creates the desired state and schedules a number of jobs to be executed in order to achieve the desired state based on the current state. The jobs are then picked up by the builder service. With this new service the schema in the database has also changed to reflect the same datastructures that we used when building the clusters. That is the schema (on a high level) for a configuration is as follows: ``` type Config struct { Version uint64 `bson:"version"` Name string `bson:"name"` K8SCtx KubernetesContext `bson:"kubernetesContext"` Manifest Manifest `bson:"manifest"` Clusters map[string]*ClusterState `bson:"clusters"` } type ClusterState struct { Current Clusters `bson:"current"` Desired Clusters `bson:"desired"` Events Events `bson:"events"` State Workflow `bson:"state"` } type Clusters struct { K8s []byte `bson:"k8s"` LoadBalancers []byte `bson:"loadBalancers"` } ``` Since we are working with k8s clusters, and we allow multiple loadbalancers to be attached to a single k8s cluster, the schema in the database will now reflect this, by grouping a k8s cluster with relevant lb clusters, we can simplify the logic in the application code, as we no longer need to parse and match them repeatedly when building. We also attach a state and events to this single entity. The state simply describes where the k8s clusters and their lbs are in the workflow, for example in the terraformer building infrastructure. The events are tasks created by the manager that describe how to get from the current state to the desired state. The builder service will gradually pull events until the current state reflects the desired state. Additionally, a new field has been added, `Version`. This is needed to implement optimistic locking. It is rarely the case that we really need to lock access to a resource, since the flow of claudie has relatively low contention at the document level in MongoDB, so with optimistic locking we can get rid of locks in the application code and simply rely on the versioning of the document. It will protect against concurrent writes by only allowing a single change to be accepted where the other changes have to repeat the read/update/write cycle, which as mentioned does not happen that often with the way claudie works. These changes aim to resolve a number of issues we had with claudie that I did not encounter during testing. The changes will continue to be monitored in the near future, and if any of the issues arise, they will be reopened. In addition, these changes implemented are also a prerequisite for the change for rolling updates as described in the https://github.com/berops/claudie/issues/1441 issue. We have agreed that the rolling update will be done one nodepool at a time. This was not possible with the way claudie worked (and works) until the changes in this PR. Claudie always works on the whole config and all the clusters in it, so gradually updating one nodepool at a time would not have been straightforward and would have caused more technical debt in the future than with the changes in this PR. With the changes in this PR, rolling update of all node pools within a single cluster should be relatively easy to implement by simply spawning a task for each node pool. If an error occurs, this will also prevent updates to the rest of the nodepools, allowing the cluster to function. --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: Jakub Hlavačka <jakubhlavacka123@gmail.com>
| Commit: | bafac0a | |
|---|---|---|
| Author: | Jakub Hlavačka | |
| Committer: | GitHub | |
Feat/use claudie http proxy when building cluster in hetzner (#1440) closes https://github.com/berops/claudie/issues/783 https://github.com/berops/claudie/issues/1272 This PR adds support for HTTP proxy in `kube-eleven`. The default workflow is as follows. Claudie utilizes an HTTP proxy (http://proxy.claudie.io:48213) only when a user wants to build a K8s cluster that contains at least 1 node from the Hetzner Cloud provider. If the k8s cluster doesn't have any nodes from the Hetzner Cloud provider Claudie won't use an HTTP proxy in `kube-eleven` to build the desired k8s cluster. The usage of an HTTP proxy is customizable. A user can turn off the HTTP proxy usage by setting `HTTP_PROXY_MODE` to `off`. This means Claudie won't use the HTTP proxy at all (even when there are nodes in the K8s cluster from the Hetzner cloud provider). On the other hand, the user can turn on the HTTP proxy usage whenever building a K8s cluster (even when there aren't any nodes in the K8s cluster from the Hetzner cloud provider) by setting `HTTP_PROXY_MODE` to `on`. Besides that users can use their own HTTP proxy by setting `HTTP_PROXY_URL` to point to their proxy URL. --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 41c23d2 | |
|---|---|---|
| Author: | Matus Mrekaj | |
| Committer: | GitHub | |
Feat: Support for External Terraform Templates (#1460) **NOTE: The large number of diff (lines added/deleted) are from restructuring the Protobuf files.** First part of https://github.com/berops/claudie/issues/1441 This PR introduces work with external terraform files which can be downloaded from any publicly available git repository. The syntax for specifing the template repository was added at the provider level. ``` gcp: - name: gcp-1 templates: repository: "https://github.com/berops/claudie-config" tag: v0.1.2 path: "templates/terraformer/gcp" ... ``` - if no templates are specified it will always default to the latest commit on the Master/Main branch of the respective cloudprovider on the berops repository. - if templates are specified, but no tag is present it will default to the latest commit of the Master/Main branch of the respective repository. The template repository need to follow a certain convention to work properly. For example: If we consider an external template repository accessible via a public git repository at: https://github.com/berops/claudie-config The repository may either only contain the necessary templates files or they can be stored at a subtree. To handle this a path is required to be passed along the public git repository such as: templates/terraformer/gcp This denotes that the necessary templates for Google Cloud Platform can be found in the subtree at: claudie-config/templates/terraformer/gcp To only deal with the necessary template files a sparse-checkout is used when downloading the external repository to have a local mirror present which will then be used to generate the terraform files. When using the template files for generation the subtree present at "claudie-config/templates/terraformer/gcp" the directory is traversed and the following rules apply: - if a subdirectory with name "provider" is present, all files within this directory will be considered as related to Providers for interacting with the API of respective Cloud Providers, SaaS providers etc. When using the templates for generation, the struct [templates.Provider](https://github.com/berops/claudie/blob/5dc0e7c8f5503a6f2c202a982f5c4aa11bed0346/services/terraformer/server/domain/utils/templates/structures.go#L54) will be passed for each file individually. - if a subdirectory with name "networking" is present all files within this directory will be considered as related spawning a common networking infrastructure for all nodepools from a single provider. The files in this subdirectory will use the providers generated in the previous step. When using the templates the struct [templates.Networking](https://github.com/berops/claudie/blob/5dc0e7c8f5503a6f2c202a982f5c4aa11bed0346/services/terraformer/server/domain/utils/templates/structures.go#L92) will be passed for each file individually. - if a subdirectory with name "nodepool" is present all files within this directory will be considered as related to spawning the VM instances along with attached disk and related resources for a single node coming from a specific nodepool. When using the templates the struct [templates.Nodepools](https://github.com/berops/claudie/blob/5dc0e7c8f5503a6f2c202a982f5c4aa11bed0346/services/terraformer/server/domain/utils/templates/structures.go#L138) will be passed for each file individually. - if a subdirectory with name "dns" is present, all files within this directory will be considered as related to DNS. Thus, the [templates.DNS](https://github.com/berops/claudie/blob/5dc0e7c8f5503a6f2c202a982f5c4aa11bed0346/services/terraformer/server/domain/utils/templates/structures.go#L151) struct will be passed for each file when generating the templates. Note: This subdirectory should contain its own file that will generate the Provider needed for interacting with the necessary API of the respective cloud providers (the ones that will be generated from the "provider" subdirectory will not be used in this case). The complete structure of a subtree for a single provider for external templates located at claudie-config/templates/terraformer/gcp can look as follows: └── terraformer |── gcp │ ├── dns │ └── dns.tpl │ ├── networking │ └── networking.tpl │ ├── nodepool │ ├── node.tpl │ └── node_networking.tpl │ └── provider │ └── provider.tpl ... Examples of external templates can be found on: https://github.com/berops/claudie-config --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | c037245 | |
|---|---|---|
| Author: | despire | |
Merge branch 'refs/heads/master' into terraform/plug # Conflicts: # proto/config.proto # proto/pb/config.pb.go # services/terraformer/Dockerfile # services/terraformer/server/domain/utils/cluster-builder/cluster_builder.go # services/terraformer/templates/aws/networking.tpl # services/terraformer/templates/aws/node.tpl # services/terraformer/templates/azure/node.tpl # services/terraformer/templates/gcp/node.tpl # services/terraformer/templates/genesiscloud/networking.tpl # services/terraformer/templates/genesiscloud/node.tpl # services/terraformer/templates/hetzner/networking.tpl # services/terraformer/templates/hetzner/node.tpl # services/terraformer/templates/oci/node.tpl
| Commit: | 3ae7f8b | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
Feat/ssh per nodepool (#1442) * add SSH key per Dynamic Nodepool * update docs * fix linter * Auto commit - update kustomization.yaml * fix panic * lower tf version * Auto commit - update kustomization.yaml * fix creation ssh keys * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | b2065b0 | |
|---|---|---|
| Author: | despire | |
initial changes for individual nodepool processing
| Commit: | 5de6306 | |
|---|---|---|
| Author: | despire | |
decouple tf files from claudie
| Commit: | 9ae30c0 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
correct api endpoint change (#1366) * correct api endpoint change * fix typo * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 3bab709 | |
|---|---|---|
| Author: | Jakub Hlavačka | |
| Committer: | GitHub | |
Feat/allow other usernames with root access (#1335) * add username for static nodes into the InputManifest * add new InputManifest CRD definition * add username for static nodes in ansible inventory and remove remote_user from playbooks * update kubeone template to support username for static nodes * fix typo in ansible LB template * add generated proto files; use UserName in getStaticNodes in internal/manifest/utils.go * check if user with provided username for static node has sudo privileges * add "username" attribute to InputManifest example in docs * add username to InputManifest API reference; replace sudo privileges with root ones * Auto commit - update kustomization.yaml * remove basic root privileges check for user with provided username in static nodes * Auto commit - update kustomization.yaml --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 4742a6f | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
Feat/target nodepools (#1241) * drop target in favor or targetNodepools * fix typos * fix conflicts * update tests & docs * update docs * Auto commit - update kustomization.yaml * trigger CI * Auto commit - update kustomization.yaml * trigger CI * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml * fix new case introduced with using taget pools * remove comment * Auto commit - update kustomization.yaml * fix static nodes * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | eac7a45 | |
|---|---|---|
| Author: | Cloudziu | |
| Committer: | GitHub | |
Feature/custom annotations (#1238) * Add custom annotations on NodePools * Auto commit - update kustomization.yaml * Update docs, test-sets - include annotations * Auto commit - update kustomization.yaml * Trigger CI * Auto commit - update kustomization.yaml * Docs: Correct typos, TestsSets: escape annotation values * Auto commit - update kustomization.yaml * Trigger CI * Auto commit - update kustomization.yaml * Trigger CI * Auto commit - update kustomization.yaml * Handle multiline complex anntations * Auto commit - update kustomization.yaml * Trigger CI * Auto commit - update kustomization.yaml --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 61dec1f | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
Fix/lb keys (#1167) * add lb ips&key to md * update metadata * Auto commit - update kustomization.yaml * add cmds to obtain LB private key and LB IPs into the docs * minor changes on wording the LB cmds in docs * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
| Commit: | ac765c1 | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Allow 0 disk size use for disabling additional volumes (#1138) * Use `-1` to disable storage disk * Allow use of `0` * Docs * Fix templates * Create directory for longhorn data * Create directory for longhorn data * Revert change * Nit * Add repository to actions --------- Co-authored-by: Matúš Mrekaj <matus.mrekaj@icloud.com>
| Commit: | e1b2e40 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
add wireguard cleanup (#1059) * add wireguard cleanup * Auto commit - update kustomization.yaml * fix lint * Auto commit - update kustomization.yaml * trigger CI * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 3797039 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
destroy k8s cluster (#1038) * destroy k8s cluster * fix lint * Auto commit - update kustomization.yaml * fix empty cluster error * Auto commit - update kustomization.yaml * trigger CI * Auto commit - update kustomization.yaml * fix panic * Auto commit - update kustomization.yaml * fix error handling * Auto commit - update kustomization.yaml * simplify tests * Auto commit - update kustomization.yaml * fixup tests * delete DS_Store * fix typo * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 29d562c | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
support flex instances (#993) * support flex instances * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | a8eb918 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
migrate to cilium (#984) * migrate to cilium * update dockerfile * Auto commit - update kustomization.yaml * cilium poc * Auto commit - update kustomization.yaml * trigger CI * Auto commit - update kustomization.yaml --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | e8391c4 | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Feat/ref builder (#955) * Start refactoring builder * Reorder files * Create first callers * Resolve errors * Clean up workflow helpers * Clean up * Clean up Kube-eleven * Clean up * Clean up * Add comments * Add comments * Clean up * Fix comment * Fix deletion of config * Auto commit - update kustomization.yaml * Address feedback * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 6557fc9 | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Feat/ref kuber (#949) * Reorder files * Rename files to adhere to convention * Embed yaml manifests * Reorganise dir * Clean up and add error printing * Clean up * Trigger CI * Auto commit - update kustomization.yaml * Revert manifest embedding * Fix Makefile * Fix typos * Auto commit - update kustomization.yaml * Fix function name * Auto commit - update kustomization.yaml * Update to v3 * Resolve conflicts * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | 8580e64 | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Feat/labels taints (#876) * Save WIP of custom labels/taints * Use patch to annotate and label * Use all labels/taints * Fix flag * Fix node patching * Clean up * Fix linter * Remove unused function * Fix proto file * Address feedback * Add examples for labels/taints * Generate CRDs * Remove debug print * Fix typos * Add logger to Patcher * Use k8s package for validation * Auto commit - update kustomization.yaml * Fix conflicts * Update docs * Remove unused function * Auto commit - update kustomization.yaml * Add labels/taints to tests * Fix panic in kuber * Fix panic in Builder * Auto commit - update kustomization.yaml * Remove taint from OCI compute * Auto commit - update kustomization.yaml * Remove taints from AWS compute * Auto commit - update kustomization.yaml * Remove taints from all compute nodes * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | a35523c | |
|---|---|---|
| Author: | Cloudziu | |
| Committer: | GitHub | |
Feature/rename frontend service (#939) * Rename frontend service to claudie-operator * Update troubleshoouting guide with new frontend name * run go fmt * Correct Merged naming * Trigger e2e * Auto commit - update kustomization.yaml * Remove unused env from CI * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 4ec1e40 | |
|---|---|---|
| Author: | Cloudziu | |
| Committer: | GitHub | |
Feature/crd autoscaler status (#901) * WIP add grcp server to frontend * Add autoscaler-statuses to InputManifest controller * Add env vars for autoscaler-adapter, add proto fields for resourceName and resourceNamespace * Change back GOLOGLEVE to info * Trigger e2e * Auto commit - update kustomization.yaml * Correct CI * Auto commit - update kustomization.yaml * Fix spelling * Address comments, remove CI sleep time after finishing the tests * remove additional logs in controller --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 9c5aba5 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
Fix/partial failure (#875) * handle partial infrastructure failure * fix linter * Auto commit - update kustomization.yaml * fix bug & reflect feedback * fix linter * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | a824055 | |
|---|---|---|
| Author: | Cloudziu | |
| Committer: | GitHub | |
Feature/manifest as crd (#872) * WIP: Add CRDs, controller, Edit Makefile, Change contex-box logs lvl to debug * WIP: Add validation function, Add proto status fields, Add setting status on delete * WIP: Cleanup frontend, Add validation webhook, Fix deletion bug * WIP: Revert changes to cb and sched. Modify controller to watch CS and DS instead of Status fields * WIP: Change REQUEUE times * Add RBAC for claudie-controller (frontend), add comments at internal/manifest.go, extend REQUEUE_IN_PROGRES * Change Merged GetEnvOr to GetEnvDefault * Remove TODO comments, add err in createConfig/deleteConfig * Remove secret filling in CI, Edit test-sets - rewrite to inputmanifest type, Target PR comments, Edit testing-framework that it adapts inputmanifest type * Remove manifestFile from proto, address PR review changes * Correct e2e manifests files, CRD validation on LBRole target * Trigger CI * Auto commit - update kustomization.yaml * Fix kustomization in testing-framework * Auto commit - update kustomization.yaml * Fix kustomization in testing-framework * Auto commit - update kustomization.yaml * Add RBAC for testing-framework * Auto commit - update kustomization.yaml * Fix geting inputManifest id, fix CI loadbalancers altering * Auto commit - update kustomization.yaml * Fix golangci-lint * Auto commit - update kustomization.yaml * Remove testing-framework RBAC for secret * Auto commit - update kustomization.yaml * TEMP change hetzner nodes region-zone * Auto commit - update kustomization.yaml * Trigger e2e with disabled auto-cleanup * Auto commit - update kustomization.yaml * Trigger e2e with disabled auto-cleanup * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 687f7db | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Feat/hybrid cloud prep (#832) * Add option for static nodepools * Fix cbox and scheduler * Fix kuber and part of Builder * Clean up * Conflict * Rework proto structure * Fix Ansibler * Fix testing framework * Fix kube-eleven and kuber * Fix cbox * Fix Autoscaler Adapter * Fix LB * Fix Builder and Kuber * Fix terraformer * Fix Ansible templates * Fix LB and kubeone templates * Finish the changes * Clean up * Fix lint errors * Auto commit - update kustomization.yaml * Fix validation * Auto commit - update kustomization.yaml * Fix typo * Auto commit - update kustomization.yaml * Change proto definition of nodepool * Remove local issues code * Fix linter * Auto commit - update kustomization.yaml * Add missing template variable * Auto commit - update kustomization.yaml * Fix template issues in Kuber * Add comments * Auto commit - update kustomization.yaml * Fix queueing error * Fix API endpoint node selection * Fix comment * Fix linter * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | 23f9d91 | |
|---|---|---|
| Author: | __noob__coder__ | |
| Committer: | GitHub | |
Refactoring the ansibler microservice (#806) * save work * completing refactoring for the ansible microservice * fixing GoLang CI lint errors * Clean up * Unify naming * Fix linter * Auto commit - update kustomization.yaml * Fix template variables * Auto commit - update kustomization.yaml * Fix typo * Auto commit - update kustomization.yaml * Remove tf templates * Fix bugs related to refactoring * Fix returned variables * Add missing playbook generation * Assign IPs from master to worker * Auto commit - update kustomization.yaml --------- Co-authored-by: Miroslav Repka <repka438@gmail.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | 232556f | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Feat/output labeling (#837) * Add labels to Claudie output * Update docs * Add missing flag * Auto commit - update kustomization.yaml * Simplify command --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 1579dc4 | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Remove unnecessary docs (#797) * Remove unnecessary docs * Enforce same protoc version * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 262c2c9 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
Fix/deletion (#728) * correctly handle workflow dependencies * fix linter * fix linter * update kubeone * fix linter * trigger ci * Auto commit - update kustomization.yaml * implement feedback * fix typo * Auto commit - update kustomization.yaml * fix test-set4 * Auto commit - update kustomization.yaml * fix deletion * fix after merge conflight * Auto commit - update kustomization.yaml * fix test-set4 * Auto commit - update kustomization.yaml * fix provider issues if wf fails in mid of processing * fix test-set4 * Auto commit - update kustomization.yaml * fix provider generation * fix dockerfile * Auto commit - update kustomization.yaml * revert calico addon * Auto commit - update kustomization.yaml * trigger CI * Auto commit - update kustomization.yaml * fix failure on node deletion * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | 3347cfc | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Fix/frontend bug (#744) * Add additional info for Frontend * Fix issue with invalid yaml in input manifest * Fix pointer dereference * Auto commit - update kustomization.yaml * Revert "Fix pointer dereference" This reverts commit e55f154f329b060d1d89c768310754914367e898. * Trigger CI * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | f927b6e | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Feat/storage disk (#698) * Update docs * Add new disk to AWS * Implement separate disk for Azure * Add volumes to templates * Mount volume to VM * Add missing shebang * Mount disk to azure * Fix Azure template * Remove disks from LBs * Mount disk to VM * Fix Hetzner template * Finish LB templates * Enable storage disks for worker only * Use separate disk for longhorn data * Update Calico * Rename mounted dir * Make `diskSize` optional * Fix docs * Clarify docs * Clarify error * Make EBS volume separate resource * Update examples * Rename `diskSize` to `storageDiskSize` * Auto commit - update kustomization.yaml * Fix validation * Auto commit - update kustomization.yaml * Update docs * Implement dynamic disk mounting for AWS and Azure * Implement GCP dynamic disk mounting * Refactor AWS template * Implement Hetzner dynamic disk mounting * Update hetzner provider * Implement predictable disk mounting for GCP * Mount OCI disk dynamically * Set default size to 50 * Auto commit - update kustomization.yaml * Fix multiple variable declaration * Auto commit - update kustomization.yaml * Fix issues with templates * Auto commit - update kustomization.yaml * Fix the variable name * Auto commit - update kustomization.yaml * Fix issues with variable names * Auto commit - update kustomization.yaml * Fix provider alias * Auto commit - update kustomization.yaml * Remove duplicate variable name * Auto commit - update kustomization.yaml * Increase boot volume on OCI LBs * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml * Use 50gb boot disk for all LBs * Auto commit - update kustomization.yaml --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: leo <adam.mirre@berops.com>
| Commit: | 026d7ce | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
Feat/cluster status (#605) * frontend workflow logs * fix typo * add initial check * Auto commit - update kustomization.yaml * add missing update * Auto commit - update kustomization.yaml * add more granular descriptions * Add better progress descriptions * Merge conflict * Fix merge error * Fix errors from merge * correctly handle picked up manifests * trigger ci * Auto commit - update kustomization.yaml --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: Miroslav Repka <repka438@gmail.com>
| Commit: | cfdf7d0 | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Cluster Autoscaler integration (#644) * Add parsing of the input manifest * Rename `Berops` tp `berops` * Small changes * Improve logs * Merge conflicts * Add node manager and new cache * Cache only autoscaler nodepools * Rename proto makerule * Add kubectl patch * Add new RPC method * Bugfixes * Implement patching of the ProviderID * Rename a label * Update cache when installing dep * Add LB to print * Fix error message * Refactor templates * Clean up * Implement granular node deletion * Fix removal of prefix * Replace assumption with node name * Fix missing ClusterID * Integrate cluster autoscaler to claudie * Fix applying of CA * Add missing args to request * Add port to template data * Add Test for templates * Add comment * Add AWS and GCP cache * Clean up node manager * Implement all cloud provider SDKs * Make CA setting in longhorn dynamic * Remove debug log * Clean up Makefile * Update .dockerignore * Update dockerignore * Add autoscaler adapter to pipelines * Update Dockerfile metadata * Use string instead of bool * Temporarily disable merge job * Remove dependency from merge job * Save sed output * Use HTTP for hcloud * Rename `Berops` to `berops` * Fix the inserting of the tag to template * Fix badge * Rework aws client * Fix TLS version * Change base image to alpine * Use scratch as base and Alpine for certs * Fix memory leak * Clean up node manager * Clean up and add verbose logs * Rework parsing of the manifest * Disable testing-framework build * Add min count when no current state defined * Fix CI * Add test for autoscaler-adapter * Fix for loop * Cache even non autoscaled nodepools * Add autoscaling test to testing-framework * Finish the new tests * Fix condition * Enable testing-framework build * Fix logging error * Auto commit - update kustomization.yaml * Add more logging * Fix double test run bug * Auto commit - update kustomization.yaml * Clean up * Build all services * Auto commit - update kustomization.yaml * Fix the decision tree * Add autoscaling test set * Auto commit - update kustomization.yaml * Add more debug logs * Auto commit - update kustomization.yaml * Temporarily disable test sets * Add debug output * Refactor `kubectl` * Specify default namespace * Revert to old approach * Fix typo * Add cluster adapter tag * Auto commit - update kustomization.yaml * Update `kubectl` version * Auto commit - update kustomization.yaml * Add missing `/` * Auto commit - update kustomization.yaml * Add comments * Update longhorn to `v1.4.1` * Rename function * Small changes * Clean up * Update docs * Fix lint issues * Add autoscaling docs * Clean up * Add section about nodepool spec change * Remove comments * Address feedback * Fix typo * Fix comments * Add missing comments for proto * Improve the sed command * Add changes for kubectl delete * Add locking to prevent race conditions * Add refresh for node manager * Fix merge conflicts * Fix linter issues * Fix Azure templates * Disable debug print * Print only under condition * Add more steps to autoscaling test set * Auto commit - update kustomization.yaml * Fix kubectl usage * Calculate CIDR in destroy function. * Auto commit - update kustomization.yaml * Force usage of `default` ns * Fix docs * Address feedback * Auto commit - update kustomization.yaml * Address feedback * Fix comment * Update dependencies * Auto commit - update kustomization.yaml * Disable line numbers in info level * Auto commit - update kustomization.yaml * Update terraform and providers * Auto commit - update kustomization.yaml * Increase resources * Auto commit - update kustomization.yaml * Fix typo in resources * Auto commit - update kustomization.yaml * Remove Falkenstein nodepools * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | 846e78b | |
|---|---|---|
| Author: | Miroslav Repka | |
| Committer: | GitHub | |
Feat/cidr caching (#661) * Implement CIDR caching for nodepool subnet * Implement caching of subnet CIDRs * Remove unused const * Fix issues with resource names * Fix comments * Auto commit - update kustomization.yaml * Fix templates * Auto commit - update kustomization.yaml * Fix missing quote * Address feedback * Auto commit - update kustomization.yaml * Save CIDR which were just calculated * Auto commit - update kustomization.yaml * Fix errors * Auto commit - update kustomization.yaml --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | f59e479 | |
|---|---|---|
| Author: | Cloudziu | |
| Committer: | GitHub | |
Feature/lb node exporter (#608) * Add ansibler node-exporter playbook * Add kuber loadbalancer scrape config deployment * Run go fmt, go mod tidy * Run golangci-lint, fix lint errors * Add Removing scrape connfig, correct PR comments * Post merge go mod tidy * ansibler: move ssh key createion for LB's * missing go fmt * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml * Add missing fix on ansibler * Auto commit - update kustomization.yaml * Trigger CI * Auto commit - update kustomization.yaml * Fix template * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Miroslav Repka <repka438@gmail.com>
| Commit: | 5613ea4 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
Feat/cluster processing (#584) * cluster workflow * fix linter * update comments * Auto commit - update kustomization.yaml * fix panic * Auto commit - update kustomization.yaml * add feedback * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
| Commit: | 6ad16e3 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
add support for various DNS providers (#530) * add support for various DNS providers * address feedback * update docs * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml * fix kubernetes version * fix typo * Auto commit - update kustomization.yaml * add missing nodepools * Auto commit - update kustomization.yaml * update test-set3 * Auto commit - update kustomization.yaml * grace period for test-framework & fix LB deletion issue * Auto commit - update kustomization.yaml * fix api endpoint change * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml --------- Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>
| Commit: | 040d6b3 | |
|---|---|---|
| Author: | Matúš Mrekaj | |
| Committer: | GitHub | |
Feat/node metadata (#449) * create cluster metadata as k8s secret * update docs * fix linter * fix delete state lock from dynamoDB * improve cluster metadata * Auto commit - update kustomization.yaml * fix missing logs for kube-eleven * Auto commit - update kustomization.yaml * reorder nodepools in k8s cluster definition * Auto commit - update kustomization.yaml * rewrite tests to exclude OCI/GCP combination * Auto commit - update kustomization.yaml * Auto commit - update kustomization.yaml * fix: master role for compute nodepools * Auto commit - update kustomization.yaml Co-authored-by: CI/CD pipeline <CI/CD-pipeline@users.noreply.github.com>