<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>kpt Documentation on kpt documentation</title><link>https://deploy-preview-4726--kptdocs.netlify.app/</link><description>Recent content in kpt Documentation on kpt documentation</description><generator>Hugo</generator><language>en</language><atom:link href="https://deploy-preview-4726--kptdocs.netlify.app/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://deploy-preview-4726--kptdocs.netlify.app/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/faq/</guid><description>&lt;h1 id="faq"&gt;
 FAQ
 &lt;a href="#faq" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h1&gt;&lt;h3 id="what-is-the-roadmap-for-kpt"&gt;
 What is the roadmap for kpt?
 &lt;a href="#what-is-the-roadmap-for-kpt" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Please visit the 
&lt;a href="https://github.com/orgs/kptdev/projects/2" target="_blank"&gt;roadmap GitHub Project&lt;/a&gt; and the 
&lt;a href="https://github.com/kptdev/kpt/milestones" target="_blank"&gt;kpt milestones&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="how-is-kpt-different-from-other-solutions"&gt;
 How is kpt different from other solutions?
 &lt;a href="#how-is-kpt-different-from-other-solutions" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Think of configuration as an API or data in a database. kpt can operate on configuration
in storage, git or OCI.&lt;/p&gt;
&lt;p&gt;Rather than expressing configuration AS code or templates that generate configuration,
kpt represents Configuration as Data. In particular, it represents configuration
as YAML or JSON objects adhering to 
&lt;a href="https://github.com/kubernetes/design-proposals-archive/blob/main/architecture/resource-management.md" target="_blank"&gt;The Kubernetes Resource Model&lt;/a&gt;, the same as the
live state in Kubernetes, which enables novel remedies to configuration drift.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/tenant-onboarding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/tenant-onboarding/</guid><description>&lt;h1 id="tenant-onboarding"&gt;
 Tenant onboarding
 &lt;a href="#tenant-onboarding" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h1&gt;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Warning&lt;/div&gt;
&lt;p&gt;This guide is a work in progress and may not fully reflect the
current state of kpt. It is due for a rewrite.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;We have seen that in large organizations using kubernetes, there is a platform
team (or infrastructure team) that is responsible for managing the kubernetes
clusters. Typically a kubernetes cluster is shared by multiple teams to run
different types of workloads. One of the common use-cases platform teams have
is onboarding a new tenant on the kubernetes cluster. In this guide, you will
learn - how you can use kpt to address the tenant use-case. Though this guide
focuses on the tenant use-case, the pattern for package workflow discussed here
can be applied to other use cases as well.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/value-propagation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/value-propagation/</guid><description>&lt;h1 id="value-propagation-pattern"&gt;
 Value propagation pattern
 &lt;a href="#value-propagation-pattern" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;Generating a string value and propagating that value to another place
(or many other places) in your configuration is a very common pattern.
In this guide, we will go through the recommended technique to
do this value propagation using our 
&lt;a href="https://catalog.kpt.dev/starlark/v0.5/" target="_blank"&gt;starlark&lt;/a&gt; and 
&lt;a href="https://catalog.kpt.dev/apply-replacements/v0.1/" target="_blank"&gt;apply-replacements&lt;/a&gt;
KRM functions.&lt;/p&gt;
&lt;h2 id="string-generation-function"&gt;
 String generation function
 &lt;a href="#string-generation-function" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Sometimes, the value that we need to propagate is a concatenation of
other values that come from various other resource fields. In order
to generate the value we need to propagate, we can make use of the

&lt;a href="https://catalog.kpt.dev/starlark/v0.5/" target="_blank"&gt;starlark&lt;/a&gt; function.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/variant-constructor-pattern/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/variant-constructor-pattern/</guid><description>&lt;h1 id="variant-construction-pattern"&gt;
 Variant construction pattern
 &lt;a href="#variant-construction-pattern" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;If you look at the config workflows, you will notice that creating a variant
of a package is a very frequent operation, so reducing the steps
required to create a variant can have significant benefits for the
package consumers. In this guide, we will look at some techniques
that a package author can use to enable automatic variant construction of a package.&lt;/p&gt;
&lt;h2 id="types-of-packages"&gt;
 Types of packages
 &lt;a href="#types-of-packages" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;kpt packages comes in two flavors: &lt;code&gt;abstract package&lt;/code&gt; and
&lt;code&gt;deployable instance&lt;/code&gt;. An &lt;code&gt;abstract&lt;/code&gt; package is a reususable package that
is used to create deployable instances that can be deployed to a
kubernetes cluster. In programming language terms, you can think of an &lt;code&gt;abstract&lt;/code&gt;
packages as the class and &lt;code&gt;deployable instance&lt;/code&gt; as the instances of the class.
&lt;code&gt;deployable&lt;/code&gt; instances of package are also referred to as &lt;code&gt;variant&lt;/code&gt; of the package.&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-4726--kptdocs.netlify.app/installation/kpt-cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/installation/kpt-cli/</guid><description>&lt;h1 id="installation"&gt;
 Installation
 &lt;a href="#installation" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;Users can get kpt CLI in a variety of ways:&lt;/p&gt;
&lt;h2 id="binaries"&gt;
 Binaries
 &lt;a href="#binaries" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Download pre-compiled binaries:&lt;/p&gt;





&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist"&gt;
 &lt;li class="nav-item"&gt;
 &lt;button class="nav-link active"
 id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
 data-td-tp-persist="linux amd64" aria-controls="tabs-00-00" aria-selected="true"&gt;
 Linux amd64
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
 data-td-tp-persist="linux arm64" aria-controls="tabs-00-01" aria-selected="false"&gt;
 Linux arm64
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
 data-td-tp-persist="macos amd64" aria-controls="tabs-00-02" aria-selected="false"&gt;
 macOS amd64
 &lt;/button&gt;
 &lt;/li&gt;&lt;li class="nav-item"&gt;
 &lt;button class="nav-link"
 id="tabs-00-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-03" role="tab"
 data-td-tp-persist="macos arm64" aria-controls="tabs-00-03" aria-selected="false"&gt;
 macOS arm64
 &lt;/button&gt;
 &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="tab-content" id="tabs-0-content"&gt;
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -LO https://github.com/kptdev/kpt/releases/download/v1.0.0/kpt_linux_amd64-1.0.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -LO https://github.com/kptdev/kpt/releases/download/v1.0.0/kpt_linux_arm64-1.0.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -LO https://github.com/kptdev/kpt/releases/download/v1.0.0/kpt_darwin_amd64-1.0.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="tab-body tab-pane fade"
 id="tabs-00-03" role="tabpanel" aria-labelled-by="tabs-00-03-tab" tabindex="0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -LO https://github.com/kptdev/kpt/releases/download/v1.0.0/kpt_darwin_arm64-1.0.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Optionally verify the 
&lt;a href="https://slsa.dev/" target="_blank"&gt;SLSA3 signatures&lt;/a&gt; generated using the OpenSSF&amp;rsquo;s

&lt;a href="https://github.com/slsa-framework/slsa-github-generator" target="_blank"&gt;slsa-framework/slsa-github-generator&lt;/a&gt; during the release
process. To verify a release archive:&lt;/p&gt;</description></item><item><title/><link>https://deploy-preview-4726--kptdocs.netlify.app/installation/migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/installation/migration/</guid><description>&lt;h2 id="migrating-from-kpt-v039-to-v10"&gt;
 Migrating from kpt &lt;code&gt;v0.39&lt;/code&gt; to &lt;code&gt;v1.0&lt;/code&gt;
 &lt;a href="#migrating-from-kpt-v039-to-v10" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;a href="#Before-you-begin"&gt;Before you begin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#What%27s-new-and-changed?"&gt;What&amp;rsquo;s new and changed?&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#CLI-changes"&gt;CLI changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Kptfile-schema-changes"&gt;Kptfile schema changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#pkg"&gt;&lt;code&gt;pkg&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#sync-merged-with-update"&gt;&lt;code&gt;sync&lt;/code&gt; merged with &lt;code&gt;update&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#cfg"&gt;&lt;code&gt;cfg&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#Changes-to-Setters"&gt;Changes to Setters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Setter-validations-deprecated"&gt;Setter validations deprecated&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Auto-setters-deprecated"&gt;Auto setters deprecated&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#fn"&gt;&lt;code&gt;fn&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#run-is-split-into-eval-and-render"&gt;&lt;code&gt;run&lt;/code&gt; is split into &lt;code&gt;eval&lt;/code&gt; and &lt;code&gt;render&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Function-Config"&gt;Function Config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Function-Results"&gt;Function Results&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#live"&gt;&lt;code&gt;live&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Migration-steps"&gt;Migration steps&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#For-Package-Publishers"&gt;For Package Publishers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#Automated-portion-of-migration"&gt;Automated portion of migration&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="#Changes-made-by-the-function"&gt;Changes made by the function&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Manual-portion-of-migration"&gt;Manual portion of migration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#For-Package-Consumers"&gt;For Package Consumers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="#Timeline"&gt;Timeline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;kpt &lt;code&gt;v1.0&lt;/code&gt; is going to be the latest major release of the kpt CLI. The
implementation of kpt &lt;code&gt;v1.0&lt;/code&gt; has changed considerably from kpt &lt;code&gt;v0.39&lt;/code&gt;. A rich
set of new features have been added as a result of the users’ input and
requirements. Some features have been deprecated or refactored in ways that make
them incompatible with kpt &lt;code&gt;v0.39&lt;/code&gt;. Since these are backwards incompatible
changes, there should be a way for users to migrate/fix their existing kpt
packages which are compatible with &lt;code&gt;v0.39&lt;/code&gt; version of kpt, to become compatible
with kpt &lt;code&gt;v1.0&lt;/code&gt;. This document outlines the end to end migration journey of
users using a comprehensive kpt package example.&lt;/p&gt;</description></item><item><title>Understanding 3-Way Merge in kpt</title><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/3-way-merge/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/3-way-merge/</guid><description>&lt;h2 id="overview"&gt;
 Overview
 &lt;a href="#overview" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;When you run &lt;code&gt;kpt pkg update&lt;/code&gt;, kpt needs to intelligently combine three versions of your package:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Original&lt;/strong&gt; (origin): The upstream package version you initially fetched&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updated&lt;/strong&gt; (upstream): The new upstream package version you&amp;rsquo;re updating to&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local&lt;/strong&gt; (destination): Your local package with your customizations&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;kpt uses a &lt;strong&gt;3-way merge&lt;/strong&gt; algorithm to combine these versions, similar to how &lt;code&gt;git merge&lt;/code&gt; works. This allows you to receive upstream improvements while preserving your local customizations.&lt;/p&gt;</description></item><item><title>Containerizing</title><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/containerizing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/containerizing/</guid><description>&lt;p&gt;KRM functions are distributed as container images. This guide covers building
and running containerized functions.&lt;/p&gt;
&lt;h2 id="dockerfile"&gt;
 Dockerfile
 &lt;a href="#dockerfile" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;The 
&lt;a href="https://github.com/kptdev/krm-functions-catalog" target="_blank"&gt;krm-functions-catalog&lt;/a&gt;
provides a shared Dockerfile at &lt;code&gt;build/docker/go/Dockerfile&lt;/code&gt; that all the catalog
functions use. It accepts &lt;code&gt;BUILDER_IMAGE&lt;/code&gt; and &lt;code&gt;BASE_IMAGE&lt;/code&gt; as build args.&lt;/p&gt;
&lt;p&gt;For standalone functions or local development, use a multi-stage build with a
minimal base image. The function binary should be statically linked (no CGO), so
it can run on &lt;code&gt;scratch&lt;/code&gt; or &lt;code&gt;distroless&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Interfaces</title><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/interfaces/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/interfaces/</guid><description>&lt;p&gt;The SDK provides two interfaces for implementing KRM functions. Choose according
to your function requirements.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;main&lt;/code&gt; functions below call &lt;code&gt;fn.AsMain&lt;/code&gt; without &lt;code&gt;fn.WithDocs&lt;/code&gt; to keep the
interface examples focused. Production functions should embed documentation and
pass &lt;code&gt;fn.WithDocs(readme, metadata)&lt;/code&gt; — see the

&lt;a href="https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/tutorial/"&gt;tutorial&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="fnrunner"&gt;
 fn.Runner
 &lt;a href="#fnrunner" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Use &lt;code&gt;fn.Runner&lt;/code&gt; for &lt;strong&gt;transformers&lt;/strong&gt; (mutators) and &lt;strong&gt;validators&lt;/strong&gt;. This is the
recommended interface for most functions.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Runner&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Run&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;context&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#000"&gt;Context&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;functionConfig&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#000"&gt;KubeObject&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;items&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;KubeObjects&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;results&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#000"&gt;Results&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;bool&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Characteristics:&lt;/p&gt;</description></item><item><title>Namespace provisioning using kpt CLI</title><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/namespace-provisioning-cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/namespace-provisioning-cli/</guid><description>&lt;h2 id="what-package-are-we-creating-"&gt;
 What package are we creating ?
 &lt;a href="#what-package-are-we-creating-" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Onboarding a new application or a micro-service is a very common task for a
platform team. It involves provisioning a dedicated namespace (and other
associated resources) where all resources that belong to the application reside.
In this guide, we will create a package that will be used for provisioning a namespace.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;
 Prerequisites
 &lt;a href="#prerequisites" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id="repositories"&gt;
 Repositories
 &lt;a href="#repositories" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Platform teams will have to setup two repos:&lt;/p&gt;</description></item><item><title>Search Results</title><link>https://deploy-preview-4726--kptdocs.netlify.app/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/search/</guid><description/></item><item><title>Testing</title><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/testing/</guid><description>&lt;p&gt;The SDK provides a golden test framework in &lt;code&gt;fn/testhelpers&lt;/code&gt; for snapshot-based
testing of KRM functions.&lt;/p&gt;
&lt;h2 id="golden-test-pattern"&gt;
 Golden Test Pattern
 &lt;a href="#golden-test-pattern" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Golden tests compare the function output against the expected baseline files. This
approach catches regressions and makes it easy to review output changes.&lt;/p&gt;
&lt;h3 id="directory-structure"&gt;
 Directory Structure
 &lt;a href="#directory-structure" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;testdata/
├── test-case-1/
│ ├── _expected.yaml # Expected output (full ResourceList YAML)
│ ├── _fnconfig.yaml # FunctionConfig for this test case
│ └── resources.yaml # Input KRM resources
└── test-case-2/
 ├── _expected.yaml
 ├── _fnconfig.yaml
 └── resources.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Conventions:&lt;/p&gt;</description></item><item><title>The Rationale behind kpt</title><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/rationale/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/rationale/</guid><description>&lt;p&gt;Most Kubernetes users either manage their resources using conventional imperative graphical user interfaces,
command-line tools (kubectl), and automation (e.g., Operators) that operate directly against Kubernetes APIs, or
declarative configuration tools, such as Helm, Terraform, cdk8s, or one of the

&lt;a href="https://docs.google.com/spreadsheets/d/1FCgqz1Ci7_VCz_wdh8vBitZ3giBtac_H8SBw4uxnrsE/edit#gid=0" target="_blank"&gt;dozens of other tools&lt;/a&gt;.
At small scale, this is largely driven by preference and familiarity.&lt;/p&gt;
&lt;p&gt;As companies expand the number of Kubernetes development and production clusters they use, creating and enforcing
consistent configurations and security policies across a growing environment becomes difficult. At that point, the
choice of management surface is no longer driven by preference, but by capabilities. To address this challenge, it is
increasingly common for platform administrators to use “GitOps” methodology to deploy configuration consistently across
clusters and environments with a version-controlled deployment process. Using the same principles as Kubernetes itself,
GitOps reconciles the desired state of clusters with a set of Kubernetes declarative configuration files in a source
control system, namely git.&lt;/p&gt;</description></item><item><title>Tutorial</title><link>https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/tutorial/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-4726--kptdocs.netlify.app/guides/krm-functions/tutorial/</guid><description>&lt;p&gt;This tutorial walks through the end-to-end workflow for building a KRM function
using the Go SDK. By the end, you will have a working function with embedded
documentation, golden tests, and support for &lt;code&gt;--help&lt;/code&gt;, &lt;code&gt;--doc&lt;/code&gt;, and standalone
file mode.&lt;/p&gt;
&lt;p&gt;For a complete working example, see 
&lt;a href="https://github.com/kptdev/krm-functions-sdk/tree/main/go/get-started" target="_blank"&gt;&lt;code&gt;go/get-started/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="1-create-your-function"&gt;
 1. Create Your Function
 &lt;a href="#1-create-your-function" class="anchor-link"&gt;#&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;A KRM function implements the &lt;code&gt;fn.Runner&lt;/code&gt; interface:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Runner&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Run&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;context&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#000"&gt;Context&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;functionConfig&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#000"&gt;KubeObject&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;items&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;KubeObjects&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;results&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;*&lt;/span&gt;&lt;span style="color:#000"&gt;Results&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;bool&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is a minimal function that sets labels on all the resources:&lt;/p&gt;</description></item></channel></rss>