Skip to content

Conversation

@lexfrei
Copy link
Contributor

@lexfrei lexfrei commented Feb 2, 2026

Summary

Add comprehensive documentation for deploying Cozystack on non-Talos Kubernetes distributions (k3s, kubeadm, RKE2) using the isp-full-generic bundle introduced in PR cozystack/cozystack#1939.

Changes

  • New page: content/en/docs/install/kubernetes/generic.md
  • Updated: content/en/docs/install/kubernetes/_index.md to include link to generic guide

Documentation Includes

  • Host requirements (packages, services)
  • Critical sysctl configuration
  • Kubernetes configuration for k3s, kubeadm, and RKE2
  • Step-by-step installation instructions
  • ConfigMap reference
  • Example Ansible playbooks for node preparation and deployment
  • Troubleshooting section for common issues

Related

Test Plan

  • Verify Hugo builds without errors
  • Review all internal links work correctly
  • Test examples on k3s cluster

Summary by CodeRabbit

  • Documentation
    • Renamed Kubernetes installation guide to a generic "Installing and Configuring Kubernetes Cluster", expanded aliases for Talos bootstrap/configuration, and added a "Talos Linux (Recommended)" subsection with Talos prerequisites and air-gapped notes.
    • Added a comprehensive Generic Kubernetes guide (k3s, kubeadm, RKE2) covering prerequisites, sysctl and Kubernetes config requirements, installation steps, an example Ansible playbook, troubleshooting scenarios, and next-step references.
    • Clarified separation between Talos-specific and generic instructions and updated troubleshooting pointers.

@netlify
Copy link

netlify bot commented Feb 2, 2026

Deploy Preview for cozystack ready!

Name Link
🔨 Latest commit 94bbd19
🔍 Latest deploy log https://app.netlify.com/projects/cozystack/deploys/698a561fee1b88000769c6da
😎 Deploy Preview https://deploy-preview-408--cozystack.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 2, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Renames the Kubernetes install index to be distribution‑agnostic, adds a Talos‑recommended subsection, and introduces a new comprehensive "Generic Kubernetes" guide (k3s, kubeadm, RKE2, etc.) describing prerequisites, sysctl and Kubernetes configuration, install steps, examples, troubleshooting, and references.

Changes

Cohort / File(s) Summary
Kubernetes Installation Index
content/en/docs/install/kubernetes/_index.md
Front matter updated to a generic title/description; aliases expanded to include Talos paths; added "Talos Linux (Recommended)" subsection and a "Generic Kubernetes" subsection; wording and typographic fixes.
Generic Kubernetes Deployment Guide (new)
content/en/docs/install/kubernetes/generic.md
Added new comprehensive guide covering when to use generic K8s, prerequisites, host/sysctl steps, distribution-specific Kubernetes config examples (k3s, kubeadm, RKE2), CRD/operator/monitoring install steps, an Ansible example for node prep, troubleshooting items, and references.

Sequence Diagram(s)

(omitted)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Poem

🐰 I hopped through pages, tidy and bright,

Split Talos notes and opened the light,
k3s and kubeadm lined up in a row,
Nodes prepped, configs set — ready to go,
A little hop for clusters, ears all aglow.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'docs(install): add documentation for generic Kubernetes deployment' accurately and clearly summarizes the main change: adding new documentation for generic Kubernetes deployment alongside updates to the index page.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @lexfrei, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances Cozystack's documentation by providing a dedicated guide for deploying the platform on generic Kubernetes distributions. This expansion allows users to integrate Cozystack with existing Kubernetes clusters or choose non-Talos environments, offering greater flexibility and accessibility beyond the previously recommended Talos Linux setup. The new guide ensures users have all necessary information, from prerequisites to troubleshooting, for a successful deployment.

Highlights

  • New Documentation for Generic Kubernetes Deployment: A new comprehensive guide has been added for deploying Cozystack on non-Talos Kubernetes distributions, including k3s, kubeadm, and RKE2.
  • Updated Kubernetes Installation Index: The main Kubernetes installation index page has been updated to include a new section and link to the generic Kubernetes deployment guide, broadening the installation options presented to users.
  • Detailed Generic Kubernetes Guide Content: The new documentation covers essential aspects such as host requirements, critical sysctl configurations, specific Kubernetes configurations for different distributions, step-by-step Cozystack installation, ConfigMap references, example Ansible playbooks for node preparation and deployment, and a troubleshooting section.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds valuable documentation for deploying Cozystack on generic Kubernetes distributions. The new guide is comprehensive, covering prerequisites, host configuration, Kubernetes setup for different distributions, and installation steps, complete with Ansible examples and a troubleshooting section. The changes are well-structured and clear. I've identified a few areas for improvement in the new documentation to enhance correctness and prevent potential user issues, including a likely version typo, potentially risky sysctl values, and inconsistent network configuration examples.

Comment on lines 66 to 68
fs.inotify.max_user_watches = 2099999999
fs.inotify.max_user_instances = 2099999999
fs.inotify.max_queued_events = 2099999999
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The inotify limits are set to an extremely high and identical value of 2099999999. This is likely a copy-paste error and poses a risk of kernel memory exhaustion, as each watch consumes non-swappable kernel memory. The values for max_user_watches, max_user_instances, and max_queued_events serve different purposes and should not be identical.

It is recommended to use more conventional and safer values, for example:

  • fs.inotify.max_user_watches = 524288
  • fs.inotify.max_user_instances = 512
  • fs.inotify.max_queued_events = 16384

Please update these values in both the 99-cozystack.conf example and the Ansible playbook example (lines 266-268).

Suggested change
fs.inotify.max_user_watches = 2099999999
fs.inotify.max_user_instances = 2099999999
fs.inotify.max_queued_events = 2099999999
fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 512
fs.inotify.max_queued_events = 16384

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These values are intentional and required for Cozystack.

Cozystack runs FluxCD, multiple controllers, LINSTOR, KubeOVN/Cilium, and nested Kubernetes clusters — all creating massive inotify watch counts. Standard values (524288) cause too many open files errors.

These values were validated in production. They work because:

  • Watches are allocated on-demand, not pre-allocated
  • Kernel only uses memory for actual watches
  • Cozystack architecture genuinely requires high counts

Comment on lines +190 to +202
ipv4-pod-cidr: "10.42.0.0/16"
ipv4-pod-gateway: "10.42.0.1"
ipv4-svc-cidr: "10.43.0.0/16"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The CIDR ranges in the cozystack-config.yaml example are inconsistent with those provided in the kubeadm configuration example. The documentation correctly states that these values must match the Kubernetes cluster configuration. To prevent deployment failures for users following the guide, these examples should be consistent.

  • kubeadm config uses podSubnet: "10.244.0.0/16" and serviceSubnet: "10.96.0.0/16".
  • cozystack-config.yaml example uses ipv4-pod-cidr: "10.42.0.0/16" and ipv4-svc-cidr: "10.43.0.0/16".

The same inconsistency is present in the Ansible deployment playbook variables (lines 295-296). I suggest aligning the cozystack-config.yaml and Ansible playbook examples with the kubeadm configuration.

Suggested change
ipv4-pod-cidr: "10.42.0.0/16"
ipv4-pod-gateway: "10.42.0.1"
ipv4-svc-cidr: "10.43.0.0/16"
ipv4-pod-cidr: "10.244.0.0/16"
ipv4-pod-gateway: "10.244.0.1"
ipv4-svc-cidr: "10.96.0.0/16"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 95848e8. Added explicit warning about distribution-specific CIDR defaults:

  • k3s: 10.42.0.0/16, 10.43.0.0/16
  • kubeadm: 10.244.0.0/16, 10.96.0.0/16
  • RKE2: 10.42.0.0/16, 10.43.0.0/16

The example now clearly states it's for k3s, with a note to adjust for other distributions.


Cozystack has been tested on:

- **k3s** v1.32+ (recommended for single-node and edge deployments)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The supported k3s version v1.32+ appears to be a typo, as this version of Kubernetes (and therefore k3s) has not been released. The latest stable Kubernetes version is v1.30. Please verify and correct the minimum supported k3s version. For consistency with kubeadm and RKE2 in this document, v1.28+ would be a reasonable value.

Suggested change
- **k3s** v1.32+ (recommended for single-node and edge deployments)
- **k3s** v1.28+ (recommended for single-node and edge deployments)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

k3s v1.32+ is correct. Kubernetes 1.32 was released in December 2024, and k3s versions follow Kubernetes releases.

This documentation was written and tested with k3s v1.35 which is current. The v1.32+ requirement reflects the minimum tested version for the isp-full-generic bundle.

@lexfrei lexfrei marked this pull request as ready for review February 2, 2026 11:44
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@content/en/docs/install/kubernetes/_index.md`:
- Around line 27-29: The phrase "command line" in the third list item should be
hyphenated as "command-line"; update the text in the list item that currently
reads "[Using talosctl]({{% ref \"./talosctl\" %}}), a specialized command line
tool for managing Talos" to use "command-line" so the item reads that talosctl
is "a specialized command-line tool for managing Talos."

In `@content/en/docs/install/kubernetes/generic.md`:
- Around line 97-104: The table separator rows use compact pipes (e.g.
|-----------|-------------|) and trigger MD060; update the separator lines for
both Markdown tables so there are spaces around each pipe (e.g. | ----------- |
------------- |) to satisfy markdownlint. Locate the header/separator rows for
the two tables (the lines immediately under the header row with dashes) and add
a single space before and after each pipe character; keep the dash counts
unchanged so column widths remain the same.
🧹 Nitpick comments (2)
content/en/docs/install/kubernetes/generic.md (2)

166-168: Pin Cozystack manifests to a specific version for reproducible installs.

Using releases/latest can change behavior without notice. Consider pinning to a version and documenting how to upgrade.

♻️ Proposed change (example)
-kubectl apply -f https://github.com/cozystack/cozystack/releases/latest/download/cozystack-crds.yaml
+kubectl apply -f https://github.com/cozystack/cozystack/releases/download/vX.Y.Z/cozystack-crds.yaml
-kubectl apply -f https://github.com/cozystack/cozystack/releases/latest/download/cozystack-operator-generic.yaml
+kubectl apply -f https://github.com/cozystack/cozystack/releases/download/vX.Y.Z/cozystack-operator-generic.yaml
-      kubernetes.core.k8s:
-        src: https://github.com/cozystack/cozystack/releases/latest/download/cozystack-crds.yaml
+      kubernetes.core.k8s:
+        src: https://github.com/cozystack/cozystack/releases/download/vX.Y.Z/cozystack-crds.yaml
-      kubernetes.core.k8s:
-        src: https://github.com/cozystack/cozystack/releases/latest/download/cozystack-operator-generic.yaml
+      kubernetes.core.k8s:
+        src: https://github.com/cozystack/cozystack/releases/download/vX.Y.Z/cozystack-operator-generic.yaml

Also applies to: 217-219, 299-301, 331-333


322-327: Document the Ansible collection dependency for ansible.utils.ipaddr.

The filter used to compute ipv4-pod-gateway requires the ansible.utils collection. If it isn’t present, the playbook fails. Please add a note in prerequisites or replace the computation with a static value.

@lexfrei lexfrei self-assigned this Feb 2, 2026
@cheese
Copy link

cheese commented Feb 5, 2026

Any possible to automate everything with k3s server manifests? Running steps of commands isn't the k3s way.

@lexfrei
Copy link
Contributor Author

lexfrei commented Feb 5, 2026

@cheese in progress. Ansible collection will be published later.

@cheese
Copy link

cheese commented Feb 9, 2026

A configmap named cozystack-operator-config is needed to run cozystack-operator.

@lexfrei
Copy link
Contributor Author

lexfrei commented Feb 9, 2026

@cheese Thanks for catching this! Added the missing cozystack-operator-config ConfigMap step to both the manual instructions and the Ansible playbook example.

lexfrei and others added 4 commits February 9, 2026 12:57
Add comprehensive guide for deploying Cozystack on non-Talos Kubernetes
distributions (k3s, kubeadm, RKE2) using the isp-full-generic bundle.

Documentation includes:
- Host and sysctl requirements
- Kubernetes configuration for each distribution
- Step-by-step installation instructions
- Example Ansible playbooks
- Troubleshooting section

Related: cozystack/cozystack#1950

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Add explicit warning that pod/service CIDRs must match the Kubernetes
distribution defaults:
- k3s: 10.42.0.0/16, 10.43.0.0/16
- kubeadm: 10.244.0.0/16, 10.96.0.0/16
- RKE2: 10.42.0.0/16, 10.43.0.0/16

Note: inotify limits (2099999999) are intentional and required for
Cozystack operation - standard values are insufficient.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
- Hyphenate "command-line" in _index.md
- Add spaces to table separators (MD060)

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
…l guide

The generic operator manifest reads KUBERNETES_SERVICE_HOST and
KUBERNETES_SERVICE_PORT from a ConfigMap named cozystack-operator-config.
Without this ConfigMap, the operator pod fails to start with
CreateContainerConfigError. Add the missing step to both the manual
instructions and the Ansible playbook example.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
@lexfrei lexfrei force-pushed the docs/generic-kubernetes branch from bdc9b5d to 500ba85 Compare February 9, 2026 09:57
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@content/en/docs/install/kubernetes/generic.md`:
- Around line 65-68: The inotify sysctl values in the Kubernetes install doc are
set to extremely high numbers (fs.inotify.max_user_watches,
fs.inotify.max_user_instances, fs.inotify.max_queued_events); either lower them
to industry-proven defaults (e.g., 524288 for max_user_watches, 8192 for
max_user_instances, 65536 for max_queued_events) and run deployment tests, or
add a clear justification in the documentation next to those keys explaining why
Cozystack needs ~2,099,999,999 values and the expected memory/behavior
tradeoffs; update the section around the inotify entries to reflect the chosen
approach and include testing notes if you keep nonstandard values.
🧹 Nitpick comments (2)
content/en/docs/install/kubernetes/generic.md (2)

239-239: Clarify the description for KUBERNETES_SERVICE_HOST.

The current wording is confusing: "the same address used in api-server-endpoint above, without the https:// prefix and port" suggests stripping components from a URL, but KUBERNETES_SERVICE_HOST should contain only the hostname or IP address.

Consider rewording to be more explicit:

📝 Suggested clarification
-Replace `<YOUR_NODE_IP>` with the IP address of your Kubernetes API server (the same address used in `api-server-endpoint` above, without the `https://` prefix and port).
+Replace `<YOUR_NODE_IP>` with the IP address or hostname of your Kubernetes API server (extract just the host part from the `api-server-endpoint` URL above, e.g., `10.0.0.1` from `https://10.0.0.1:6443`).

271-384: Verify Ansible collection dependencies are documented.

The playbook examples use filters and modules from multiple Ansible collections:

  1. Line 293: ansible.posix.sysctl requires the ansible.posix collection
  2. Line 336: kubernetes.core.k8s requires the kubernetes.core collection
  3. Line 363: ansible.utils.ipaddr requires the ansible.utils collection

Consider adding a prerequisites note before the playbooks to inform users they need to install these collections:

📦 Suggested addition

Add before line 273:

{{% alert color="info" %}}
**Note**: The playbooks below require the following Ansible collections:
- `ansible.posix`
- `kubernetes.core`
- `ansible.utils`

Install them with: `ansible-galaxy collection install ansible.posix kubernetes.core ansible.utils`
{{% /alert %}}

Replace extreme inotify values (2099999999) with proven industry
defaults: max_user_watches=524288, max_user_instances=8192,
max_queued_events=65536. Updated both the sysctl configuration
example and the Ansible playbook.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@content/en/docs/install/kubernetes/generic.md`:
- Around line 335-338: The play task named "Apply Cozystack CRDs" uses
kubernetes.core.k8s with a remote URL in src which may not be supported; update
this task (and the similar block referenced at lines 380-383) to first fetch the
YAML to a local temporary file using ansible.builtin.uri (or fetch into a
variable) and then apply it with kubernetes.core.k8s via the definition
parameter, or alternatively replace the task with an
ansible.builtin.command/ansible.builtin.shell step that runs kubectl apply -f
<downloaded-file-or-URL>—modify the task referencing "Apply Cozystack CRDs" and
the kubernetes.core.k8s usage accordingly.
- Around line 443-445: Update the broken link in the ordered list item that
currently points to
"/docs/getting-started/install-cozystack#4-access-the-dashboard": change its
anchor to the correct dashboard section anchor for "5.3 Access the Cozystack
Dashboard" (i.e., use the slug for section 5.3) so the second item in the list
correctly reads [Set up the root tenant]({{% ref
"/docs/getting-started/install-cozystack#5-3-access-the-cozystack-dashboard"
%}}) and leaves the other two links unchanged; edit the line containing that
list item in content/en/docs/install/kubernetes/generic.md.
🧹 Nitpick comments (4)
content/en/docs/install/kubernetes/generic.md (4)

119-119: Consider documenting the max-pods value.

The --kubelet-arg=max-pods=220 flag sets a specific limit without explanation. Consider adding a brief comment explaining why 220 is recommended (e.g., to accommodate Cozystack's resource requirements).


201-201: Consider adding a note about calculating the gateway IP.

The ipv4-pod-gateway is shown as "10.42.0.1", which is the first IP in the pod CIDR. Consider adding a brief note that this should be the first IP of your pod CIDR (e.g., for 10.244.0.0/16, use 10.244.0.1). The Ansible playbook at line 363 demonstrates automatic calculation.


271-384: Add Ansible collection requirements for the playbooks.

The playbooks use modules and filters from collections that must be installed:

  • kubernetes.core (for k8s module)
  • ansible.utils (for ipaddr filter at line 363)
  • ansible.posix (for sysctl module at line 293)
📦 Recommended addition

Add a requirements note before the playbook examples:

### Prerequisites

Install required Ansible collections:

```bash
ansible-galaxy collection install kubernetes.core ansible.utils ansible.posix

Ensure kubectl is configured with access to your cluster.

</details>

---

`402-411`: **Clarify what a Platform Package is and how to edit it.**

The troubleshooting solution references "Platform Package" configuration without explaining what it is, where to find it, or how to edit it. Users encountering this issue won't know how to apply the fix.


<details>
<summary>📝 Suggested improvement</summary>

Add a brief explanation before the YAML snippet:

```markdown
**Solution**: Edit your Platform custom resource to include explicit `MASTER_NODES` configuration.

Find your Platform resource:
```bash
kubectl get platform -A

Edit it to add the configuration:

kubectl edit platform <platform-name> -n <namespace>

Add the following under spec:


This helps users understand what to edit and how to do it.
</details>

Also applies to: 419-429

</blockquote></details>

</blockquote></details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Comment on lines +335 to +338
- name: Apply Cozystack CRDs
kubernetes.core.k8s:
src: https://github.com/cozystack/cozystack/releases/latest/download/cozystack-crds.yaml
state: present
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

The kubernetes.core.k8s module may not support remote URLs in the src parameter.

The src parameter typically expects a local file path. Loading remote YAML files requires either:

  1. Using ansible.builtin.uri to fetch and then apply with definition
  2. Using kubectl apply -f via ansible.builtin.command
🔧 Proposed fix using kubectl command
-    - name: Apply Cozystack CRDs
-      kubernetes.core.k8s:
-        src: https://github.com/cozystack/cozystack/releases/latest/download/cozystack-crds.yaml
-        state: present
+    - name: Apply Cozystack CRDs
+      ansible.builtin.command:
+        cmd: kubectl apply -f https://github.com/cozystack/cozystack/releases/latest/download/cozystack-crds.yaml
+      changed_when: true

Also applies to: 380-383

🤖 Prompt for AI Agents
In `@content/en/docs/install/kubernetes/generic.md` around lines 335 - 338, The
play task named "Apply Cozystack CRDs" uses kubernetes.core.k8s with a remote
URL in src which may not be supported; update this task (and the similar block
referenced at lines 380-383) to first fetch the YAML to a local temporary file
using ansible.builtin.uri (or fetch into a variable) and then apply it with
kubernetes.core.k8s via the definition parameter, or alternatively replace the
task with an ansible.builtin.command/ansible.builtin.shell step that runs
kubectl apply -f <downloaded-file-or-URL>—modify the task referencing "Apply
Cozystack CRDs" and the kubernetes.core.k8s usage accordingly.

Comment on lines +443 to +445
1. [Configure storage with LINSTOR]({{% ref "/docs/getting-started/install-cozystack#3-configure-storage" %}})
2. [Set up the root tenant]({{% ref "/docs/getting-started/install-cozystack#4-access-the-dashboard" %}})
3. [Deploy your first application]({{% ref "/docs/applications" %}})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify internal Hugo ref link targets

echo "=== Checking for install-cozystack documentation ==="
find content/en/docs -name "*install-cozystack*" -type f 2>/dev/null | head -20

echo "=== Checking for applications documentation ==="
find content/en/docs -name "applications*" -type d 2>/dev/null | head -10

echo "=== Looking for any markdown files in getting-started ==="
find content/en/docs/getting-started -name "*.md" -type f 2>/dev/null

echo "=== Looking for any markdown files in applications ==="
find content/en/docs/applications -name "*.md" -type f 2>/dev/null

Repository: cozystack/website

Length of output: 1659


🏁 Script executed:

#!/bin/bash
# Check the content of install-cozystack.md to verify anchor sections

echo "=== Checking install-cozystack.md for section headings ==="
cat -n content/en/docs/getting-started/install-cozystack.md | head -100

echo ""
echo "=== Searching for 'Configure storage' and 'dashboard' sections ==="
rg -i "##.*configure.*storage|##.*dashboard|##.*access" content/en/docs/getting-started/install-cozystack.md -A 2

Repository: cozystack/website

Length of output: 5369


🏁 Script executed:

#!/bin/bash
# Get the complete section structure of install-cozystack.md

echo "=== Full section headings in install-cozystack.md ==="
rg "^## |^### " content/en/docs/getting-started/install-cozystack.md

echo ""
echo "=== Counting total lines in the file ==="
wc -l content/en/docs/getting-started/install-cozystack.md

echo ""
echo "=== Last 50 lines to see section 5 and beyond ==="
tail -50 content/en/docs/getting-started/install-cozystack.md

Repository: cozystack/website

Length of output: 2442


Fix broken documentation link in step 2.

The link to /docs/getting-started/install-cozystack#4-access-the-dashboard is incorrect. Section 4 covers "Configure Networking", not dashboard access. The dashboard access section is "5.3 Access the Cozystack Dashboard". Update the link to point to the correct section anchor.

The other two links are valid:

  • /docs/getting-started/install-cozystack#3-configure-storage
  • /docs/applications
🤖 Prompt for AI Agents
In `@content/en/docs/install/kubernetes/generic.md` around lines 443 - 445, Update
the broken link in the ordered list item that currently points to
"/docs/getting-started/install-cozystack#4-access-the-dashboard": change its
anchor to the correct dashboard section anchor for "5.3 Access the Cozystack
Dashboard" (i.e., use the slug for section 5.3) so the second item in the list
correctly reads [Set up the root tenant]({{% ref
"/docs/getting-started/install-cozystack#5-3-access-the-cozystack-dashboard"
%}}) and leaves the other two links unchanged; edit the line containing that
list item in content/en/docs/install/kubernetes/generic.md.

@cheese
Copy link

cheese commented Feb 9, 2026

I tried. operator and flux are running but not deploying anything.

$ kubectl get pods -A
NAMESPACE     NAME                                  READY   STATUS    RESTARTS   AGE
cozy-fluxcd   flux-74c549bb7f-dt542                 5/5     Running   0          18h
cozy-fluxcd   flux-tenants-cbd7bd5b4-xm2lp          0/1     Pending   0          25h
cozy-system   cozystack-operator-567d4f8fdf-cq5mz   1/1     Running   0          144m
kube-system   coredns-67d69c9b5b-7b86l              0/1     Pending   0          25h
kube-system   metrics-server-7b9c9c4b9c-nxjbn       0/1     Pending   0          25h

operator log:

$ kubectl logs -n cozy-system deploy/cozystack-operator
2026-02-09T08:02:38Z	INFO	setup	Starting controller manager
2026-02-09T08:02:38Z	INFO	setup	Installing Flux components before starting reconcile loop
2026-02-09T08:02:38Z	INFO	Installing Flux components	{"namespace": "cozy-fluxcd"}
2026-02-09T08:02:38Z	INFO	Applying Flux manifests	{"count": 23, "files": 3, "namespace": "cozy-fluxcd"}
2026-02-09T08:02:38Z	INFO	Applying cluster definitions	{"count": 16}
2026-02-09T08:02:40Z	INFO	Applying resources	{"count": 7}
2026-02-09T08:02:40Z	INFO	Flux installation completed successfully
2026-02-09T08:02:40Z	INFO	setup	Flux installation completed successfully
2026-02-09T08:02:40Z	INFO	setup	Generating platform source resource	{"url": "oci://ghcr.io/cozystack/cozystack/cozystack-packages", "name": "cozystack-platform", "ref": "digest=sha256:f59e562f2c91446117773ad457251d567706ea2964251a2b0acc65060fd1f3bc"}
2026-02-09T08:02:40Z	INFO	Applying platform source resource	{"apiVersion": "source.toolkit.fluxcd.io/v1", "kind": "OCIRepository", "name": "cozystack-platform", "namespace": "cozy-system"}
2026-02-09T08:02:40Z	INFO	Updated platform source resource	{"kind": "OCIRepository", "name": "cozystack-platform"}
2026-02-09T08:02:40Z	INFO	setup	Platform source resource installation completed successfully
2026-02-09T08:02:40Z	INFO	setup	Starting controller manager
I0209 08:02:40.443831       1 leaderelection.go:257] attempting to acquire leader lease cozy-system/cozystack-operator.cozystack.io...
I0209 08:02:56.104794       1 leaderelection.go:271] successfully acquired lease cozy-system/cozystack-operator.cozystack.io
2026-02-09T08:02:56Z	DEBUG	events	testxxxx_bb8da011-c94c-4a2e-8670-1131675eb32d became leader	{"type": "Normal", "object": {"kind":"Lease","namespace":"cozy-system","name":"cozystack-operator.cozystack.io","uid":"f50f70c7-d550-4a99-b847-024e6128d9b5","apiVersion":"coordination.k8s.io/v1","resourceVersion":"68848"}, "reason": "LeaderElection"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "source": "kind source: *v1beta1.ArtifactGenerator"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "secret", "controllerGroup": "", "controllerKind": "Secret", "source": "kind source: *v1.Namespace"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "cozystack-package", "controllerGroup": "cozystack.io", "controllerKind": "Package", "source": "kind source: *v1alpha1.Package"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "source": "kind source: *v1alpha1.PackageSource"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "secret", "controllerGroup": "", "controllerKind": "Secret", "source": "kind source: *v1.Secret"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "secret", "controllerGroup": "", "controllerKind": "Secret", "source": "kind source: *v1.Secret"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "cozystack-package", "controllerGroup": "cozystack.io", "controllerKind": "Package", "source": "kind source: *v1alpha1.PackageSource"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "cozystack-package", "controllerGroup": "cozystack.io", "controllerKind": "Package", "source": "kind source: *v1alpha1.Package"}
2026-02-09T08:02:56Z	INFO	Starting EventSource	{"controller": "cozystack-package", "controllerGroup": "cozystack.io", "controllerKind": "Package", "source": "kind source: *v2.HelmRelease"}
2026-02-09T08:02:56Z	INFO	Starting Controller	{"controller": "secret", "controllerGroup": "", "controllerKind": "Secret"}
2026-02-09T08:02:56Z	INFO	Starting workers	{"controller": "secret", "controllerGroup": "", "controllerKind": "Secret", "worker count": 1}
2026-02-09T08:02:56Z	INFO	Starting Controller	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource"}
2026-02-09T08:02:56Z	INFO	Starting Controller	{"controller": "cozystack-package", "controllerGroup": "cozystack.io", "controllerKind": "Package"}
2026-02-09T08:02:56Z	INFO	Starting workers	{"controller": "cozystack-package", "controllerGroup": "cozystack.io", "controllerKind": "Package", "worker count": 1}
2026-02-09T08:02:56Z	INFO	Starting workers	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "worker count": 1}
2026-02-09T08:02:56Z	DEBUG	processing component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "variant": "default", "component": "platform", "path": "core/platform"}
2026-02-09T08:02:56Z	INFO	added OutputArtifact for component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "variant": "default", "component": "platform", "artifactName": "cozystack-cozystack-platform-default-platform"}
2026-02-09T08:02:56Z	DEBUG	processing component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "variant": "isp-full", "component": "platform", "path": "core/platform"}
2026-02-09T08:02:56Z	INFO	added OutputArtifact for component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "variant": "isp-full", "component": "platform", "artifactName": "cozystack-cozystack-platform-isp-full-platform"}
2026-02-09T08:02:56Z	DEBUG	processing component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "variant": "isp-hosted", "component": "platform", "path": "core/platform"}
2026-02-09T08:02:56Z	INFO	added OutputArtifact for component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "variant": "isp-hosted", "component": "platform", "artifactName": "cozystack-cozystack-platform-isp-hosted-platform"}
2026-02-09T08:02:56Z	DEBUG	processing component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "variant": "isp-full-generic", "component": "platform", "path": "core/platform"}
2026-02-09T08:02:56Z	INFO	added OutputArtifact for component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "variant": "isp-full-generic", "component": "platform", "artifactName": "cozystack-cozystack-platform-isp-full-generic-platform"}
2026-02-09T08:02:56Z	INFO	creating ArtifactGenerator for package source	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "agName": "cozystack.cozystack-platform", "namespace": "cozy-system", "outputArtifactCount": 4}
2026-02-09T08:02:56Z	INFO	reconciled ArtifactGenerator for package source	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "name": "cozystack.cozystack-platform", "namespace": "cozy-system", "outputArtifactCount": 4}
2026-02-09T08:02:56Z	DEBUG	updated PackageSource status from ArtifactGenerator	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "f519e0da-5f31-4183-92f9-b2e06516d3da", "packageSource": "cozystack.cozystack-platform", "status": "True", "reason": "Succeeded"}
2026-02-09T08:02:56Z	DEBUG	processing component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "variant": "default", "component": "platform", "path": "core/platform"}
2026-02-09T08:02:56Z	INFO	added OutputArtifact for component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "variant": "default", "component": "platform", "artifactName": "cozystack-cozystack-platform-default-platform"}
2026-02-09T08:02:56Z	DEBUG	processing component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "variant": "isp-full", "component": "platform", "path": "core/platform"}
2026-02-09T08:02:56Z	INFO	added OutputArtifact for component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "variant": "isp-full", "component": "platform", "artifactName": "cozystack-cozystack-platform-isp-full-platform"}
2026-02-09T08:02:56Z	DEBUG	processing component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "variant": "isp-hosted", "component": "platform", "path": "core/platform"}
2026-02-09T08:02:56Z	INFO	added OutputArtifact for component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "variant": "isp-hosted", "component": "platform", "artifactName": "cozystack-cozystack-platform-isp-hosted-platform"}
2026-02-09T08:02:56Z	DEBUG	processing component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "variant": "isp-full-generic", "component": "platform", "path": "core/platform"}
2026-02-09T08:02:56Z	INFO	added OutputArtifact for component	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "variant": "isp-full-generic", "component": "platform", "artifactName": "cozystack-cozystack-platform-isp-full-generic-platform"}
2026-02-09T08:02:56Z	INFO	creating ArtifactGenerator for package source	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "agName": "cozystack.cozystack-platform", "namespace": "cozy-system", "outputArtifactCount": 4}
2026-02-09T08:02:56Z	INFO	reconciled ArtifactGenerator for package source	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "name": "cozystack.cozystack-platform", "namespace": "cozy-system", "outputArtifactCount": 4}
2026-02-09T08:02:56Z	DEBUG	updated PackageSource status from ArtifactGenerator	{"controller": "cozystack-packagesource", "controllerGroup": "cozystack.io", "controllerKind": "PackageSource", "PackageSource": {"name":"cozystack.cozystack-platform"}, "namespace": "", "name": "cozystack.cozystack-platform", "reconcileID": "aaf8ad68-037e-499a-8d37-c1d1fd13a35c", "packageSource": "cozystack.cozystack-platform", "status": "True", "reason": "Succeeded"}
2026-02-09T08:03:26Z	DEBUG	Failed to send metrics: unexpected status code: 504
2026-02-09T08:33:26Z	DEBUG	Failed to send metrics: unexpected status code: 504
2026-02-09T09:18:26Z	DEBUG	Failed to send metrics: unexpected status code: 504
2026-02-09T09:48:36Z	DEBUG	Failed to send metrics: unexpected status code: 504
2026-02-09T10:03:26Z	DEBUG	Failed to send metrics: unexpected status code: 504
2026-02-09T10:18:36Z	DEBUG	Failed to send metrics: unexpected status code: 504

@lexfrei lexfrei marked this pull request as draft February 9, 2026 10:58
lexfrei and others added 2 commits February 9, 2026 15:00
The Node Preparation Playbook was missing fs.file-max, fs.aio-max-nr,
and vm.swappiness sysctl values that are listed in the Sysctl
Configuration section of the same document.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
The documentation was missing the step to create the Package resource
after deploying the operator. Without this step, Cozystack components
are never installed. Added step 6 to the manual instructions and
corresponding tasks to the Ansible playbook example.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
@lexfrei
Copy link
Contributor Author

lexfrei commented Feb 9, 2026

@cheese Thanks for testing this! The issue you're seeing (operator + flux running but nothing deploying) is because a Package resource needs to be created after the operator starts.

In v1.0.0, the operator reconciles the PackageSource and sets up FluxCD, but doesn't automatically create the platform package. You need to explicitly create it:

apiVersion: cozystack.io/v1alpha1
kind: Package
metadata:
  name: cozystack.cozystack-platform
spec:
  variant: isp-full-generic

The name must match the PackageSource name — you can check it with kubectl get packagesource.

I've already added this as step 6 in the docs (plus a corresponding task in the Ansible playbook example). After applying this, you should see HelmReleases being created and Cilium starting to install.

lexfrei and others added 2 commits February 9, 2026 20:55
Cozystack deploys its own metrics-server. The k3s built-in
metrics-server addon controller overwrites the RBAC RoleBinding,
breaking Cozystack's metrics-server with a permission error on
the extension-apiserver-authentication configmap in kube-system.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
Fix incorrect deployment name in monitoring step (deploy/cozystack →
deploy/cozystack-operator) and add info alert about expected transient
errors during initial Cilium reconciliation.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
lexfrei and others added 2 commits February 10, 2026 00:43
Replace vague "all releases will show READY: True" with an actionable
kubectl wait command to verify Cilium deployment and node networking.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
…y text

Add missing net.bridge.bridge-nf-call-iptables and
net.bridge.bridge-nf-call-ip6tables to the Ansible playbook sysctl
entries to match the manual configuration section.

Update _index.md "Further Steps" to be distribution-agnostic instead
of referencing Talos Linux specifically.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
@lexfrei lexfrei marked this pull request as ready for review February 10, 2026 00:44
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@content/en/docs/install/kubernetes/generic.md`:
- Around line 423-430: The until check on the registered variable pkg_source
dereferences the Ready condition
unsafely—(pkg_source.resources[0].status.conditions | selectattr('type',
'equalto', 'Ready') | first).status—causing failures if Ready isn't present;
update the until expression to guard against missing values by providing a safe
default before accessing .status (for example, use first | default({}) or check
that the filtered conditions list has an element and that .status exists) so the
play will retry instead of aborting when the Ready condition is absent.

Comment on lines +423 to +430
- name: Wait for PackageSource to be ready
kubernetes.core.k8s_info:
api_version: cozystack.io/v1alpha1
kind: PackageSource
name: cozystack.cozystack-platform
register: pkg_source
until: pkg_source.resources | length > 0 and (pkg_source.resources[0].status.conditions | selectattr('type', 'equalto', 'Ready') | first).status == "True"
retries: 30
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Guard against missing Ready condition to avoid first/.status failures.

If Ready isn’t present yet, first returns undefined and .status will raise an error, aborting the play early. Add a safe default before dereferencing.

Suggested fix
-      until: pkg_source.resources | length > 0 and (pkg_source.resources[0].status.conditions | selectattr('type', 'equalto', 'Ready') | first).status == "True"
+      until: >
+        pkg_source.resources | length > 0 and
+        (
+          (pkg_source.resources[0].status.conditions
+            | selectattr('type', 'equalto', 'Ready')
+            | map(attribute='status')
+            | first
+            | default('False')
+          ) == "True"
+        )
🤖 Prompt for AI Agents
In `@content/en/docs/install/kubernetes/generic.md` around lines 423 - 430, The
until check on the registered variable pkg_source dereferences the Ready
condition unsafely—(pkg_source.resources[0].status.conditions |
selectattr('type', 'equalto', 'Ready') | first).status—causing failures if Ready
isn't present; update the until expression to guard against missing values by
providing a safe default before accessing .status (for example, use first |
default({}) or check that the filtered conditions list has an element and that
.status exists) so the play will retry instead of aborting when the Ready
condition is absent.

@cheese
Copy link

cheese commented Feb 10, 2026

Is bundle-name in cozystack configmap still needed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants