<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Functionality on Porch Documentation</title><link>/v1.5/docs/5_architecture_and_components/controllers/functionality/</link><description>Recent content in Functionality on Porch Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="/v1.5/docs/5_architecture_and_components/controllers/functionality/index.xml" rel="self" type="application/rss+xml"/><item><title>PackageVariant Reconciliation</title><link>/v1.5/docs/5_architecture_and_components/controllers/functionality/packagevariant-reconciliation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/controllers/functionality/packagevariant-reconciliation/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>The PackageVariant controller implements a continuous synchronization pattern between upstream and downstream packages. It monitors upstream PackageRevisions for changes, detects when downstream packages need updating, and creates appropriate drafts (clone, upgrade, or edit) to maintain synchronization while applying configured mutations.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌─────────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ PackageVariant Reconciliation System │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ State Machine │ │ Upstream │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ──&amp;gt; │ Tracking │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • No Downstream │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Upstream Chg │ │ • UpstreamLock │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Mutation Chg │ │ • Comparison │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Up-to-date │ │ • Detection │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └───────────┬─────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Draft │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Management │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Clone │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Upgrade │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Edit │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─────────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="reconciliation-state-machine">Reconciliation State Machine&lt;/h2>&lt;p>The controller implements a state machine that determines actions based on current state:&lt;/p></description></item><item><title>PackageVariantSet Reconciliation</title><link>/v1.5/docs/5_architecture_and_components/controllers/functionality/packagevariantset-reconciliation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/controllers/functionality/packagevariantset-reconciliation/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>The PackageVariantSet controller implements a declarative fan-out pattern where a single upstream package is automatically instantiated across multiple downstream targets using template-based generation with CEL expressions. It manages bulk creation of PackageVariant CRs based on target selectors and ensures the desired set of PackageVariants matches the actual set through set-based reconciliation.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌─────────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ PackageVariantSet Reconciliation System │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Target │ │ Template │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Unrolling │ ──&amp;gt; │ Evaluation │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Repository │ │ • CEL Exprs │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ List │ │ • Context │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Repository │ │ • Dynamic │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Selector │ │ Config │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Object │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Selector │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └────────┬────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Set-Based │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Reconciliation │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Desired Set │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Existing Set │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Create/Update │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Delete │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─────────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="reconciliation-flow">Reconciliation Flow&lt;/h2>&lt;p>The controller follows a structured reconciliation process:&lt;/p></description></item><item><title>Mutation Application</title><link>/v1.5/docs/5_architecture_and_components/controllers/functionality/mutation-application/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/controllers/functionality/mutation-application/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>The PackageVariant controller applies mutations to downstream package revisions to customize them based on the PackageVariant specification. Mutations are systematic transformations applied to package resources after cloning or upgrading from upstream, enabling configuration injection, function pipeline modification, and dynamic resource generation.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌─────────────────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Mutation Application System │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Package │ │ KRM │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Context │ ───&amp;gt; │ Functions │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • ConfigMap │ │ • Prepend │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Data │ │ • Naming │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Add/Remove │ │ • Pipeline │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └────────┬────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Config │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Injection │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Annotation │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Selector │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Field Copy │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─────────────────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="mutation-orchestration">Mutation Orchestration&lt;/h2>&lt;p>Mutations are applied in a specific order during package revision processing:&lt;/p></description></item></channel></rss>