<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Customizer — Declarative Cluster Customizations on Cozystack</title><link>https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/</link><description>Recent content in Customizer — Declarative Cluster Customizations on Cozystack</description><generator>Hugo</generator><language>en</language><atom:link href="https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/index.xml" rel="self" type="application/rss+xml"/><item><title>Setup Guide</title><link>https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/setup/</guid><description>&lt;p&gt;This guide walks through enabling the customizer on a fresh cluster and getting your first commit reconciled. It assumes Cozystack is already installed and healthy, and you have admin access (you can patch the &lt;code&gt;cozystack.cozystack-platform&lt;/code&gt; Package CR).&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A running Cozystack cluster on version ≥ 1.5 (the customizer package landed in 1.5).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubectl&lt;/code&gt; configured against the cluster, in the &lt;code&gt;cozy-system&lt;/code&gt; namespace.&lt;/li&gt;
&lt;li&gt;A git repo you own that the cluster&amp;rsquo;s Flux can reach over HTTPS (or SSH — see the Flux 
&lt;a href="https://fluxcd.io/flux/components/source/gitrepositories/#secret-reference" target="_blank"&gt;GitRepository secret docs&lt;/a&gt; for transport options). The repo doesn&amp;rsquo;t need to exist with content yet — an empty &lt;code&gt;main&lt;/code&gt; branch is fine for the first reconcile.&lt;/li&gt;
&lt;li&gt;Credentials with read access to that repo. For GitHub HTTPS that&amp;rsquo;s a fine-grained Personal Access Token with &lt;code&gt;Contents: Read&lt;/code&gt; scope on the repo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="step-1--create-the-git-auth-secret"&gt;Step 1 — Create the git auth Secret&lt;/h2&gt;
&lt;p&gt;The customizer chart does &lt;strong&gt;not&lt;/strong&gt; generate the git credentials Secret. You create it in &lt;code&gt;cozy-system&lt;/code&gt; before enabling the package, so the platform never owns admin credentials.&lt;/p&gt;</description></item><item><title>Repo Layout and Worked Examples</title><link>https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/repo-layout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/repo-layout/</guid><description>&lt;p&gt;This page covers what to put inside the customizer repo once the loop is wired up (see &lt;strong&gt;
&lt;a href="https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/setup/"&gt;Setup&lt;/a&gt;&lt;/strong&gt; if you haven&amp;rsquo;t enabled the package yet).&lt;/p&gt;
&lt;h2 id="recommended-layout"&gt;Recommended layout&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cozystack-customizer/
 README.md
 clusters/
 prod/
 kustomization.yaml
 platform.yaml # patch for cozystack.cozystack-platform
 packages/
 metallb.yaml # patch — spec.components.metallb.values
 ingress-nginx.yaml
 sources/
 myorg-charts.yaml # extra OCIRepository
 packagesources/
 myorg-internal-portal.yaml # extra PackageSource using myorg-charts
 keycloak/
 realm-cozy.yaml
 apps/ # admin-owned HelmReleases
 ns-platform-tools.yaml
 my-monitoring-stack.yaml
 rbac/
 readonly-engineers.yaml
 networkpolicies/
 default-deny.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The corresponding entry-point &lt;code&gt;clusters/prod/kustomization.yaml&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Field Ownership, RBAC, Limitations</title><link>https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/field-ownership/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-549--cozystack.netlify.app/docs/next/operations/customizer/field-ownership/</guid><description>&lt;p&gt;The customizer Kustomization applies its manifests via Server-Side Apply through a dedicated ServiceAccount with a curated ClusterRole. This page documents what&amp;rsquo;s granted, what isn&amp;rsquo;t, and which fields on Package CRs the customizer is supposed to write.&lt;/p&gt;
&lt;h2 id="rbac-granted-to-cozystack-customizer"&gt;RBAC granted to &lt;code&gt;cozystack-customizer&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Cluster-scoped:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Resource&lt;/th&gt;
 &lt;th&gt;Verbs&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;packages.cozystack.io&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;get, list, watch, &lt;strong&gt;patch&lt;/strong&gt;, update&lt;/td&gt;
 &lt;td&gt;No &lt;code&gt;delete&lt;/code&gt; — disable a Package by adding it to &lt;code&gt;bundles.disabledPackages&lt;/code&gt; on &lt;code&gt;cozystack.cozystack-platform&lt;/code&gt; instead.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;packagesources.cozystack.io&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;full&lt;/td&gt;
 &lt;td&gt;Customizer authors its own PackageSources.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;helmreleases.helm.toolkit.fluxcd.io&lt;/code&gt; (cluster-wide)&lt;/td&gt;
 &lt;td&gt;get, list, watch&lt;/td&gt;
 &lt;td&gt;Read-only — chart-managed HelmReleases are off-limits to the customizer.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;keycloakrealmimports&lt;/code&gt;, &lt;code&gt;keycloaks&lt;/code&gt;, &lt;code&gt;keycloakusers&lt;/code&gt; (&lt;code&gt;k8s.keycloak.org&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;full&lt;/td&gt;
 &lt;td&gt;Declarative Keycloak realm management.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;*.source.toolkit.fluxcd.io&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;full&lt;/td&gt;
 &lt;td&gt;Additional &lt;code&gt;GitRepository&lt;/code&gt; / &lt;code&gt;OCIRepository&lt;/code&gt; / &lt;code&gt;HelmRepository&lt;/code&gt; / &lt;code&gt;Bucket&lt;/code&gt; sources.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Namespace-scoped (inside &lt;code&gt;customizer.rbac.ownedNamespaces&lt;/code&gt;, default &lt;code&gt;cozy-customizer&lt;/code&gt;):&lt;/p&gt;</description></item></channel></rss>