set-namespace
namespace for KRM resourcesOverview #
The set-namespace function replaces the input KRM resources’ namespace fields.
Usage #
Replace namespaces are commonly used in the following scenarios:
- distinguish resources by environment. For example, you can update all resources under kpt package “prod” to namespace “prod”, and another resources under kpt package “dev” to namespace “dev”.
- distinguish resources by teams or users. For example, you can “copy” and “create” a new set of resources by simply replacing the resources namespace to a different value.
Target KRM resources #
This function not only update the namespace scoped resources’ metadata.namespace or Namespace object’s metadata.name,
but handle some special resource types. See the full targeting resources below:
- This function updates all namespace-scoped KRM resources
metadata.namespacefields. We determine whether a custom KRM resource is namespace scoped by checking if it hasmetadata.namespaceset. - This function updates
RoleBindingandClusterRoleBindingresourcessubjectselement whose kind isServiceAccountand the subject’snamespaceis set. - This function updates
CustomResourceDefinition(CRD)spec/conversion/webhook/clientConfig/service/namespacefield if the field is set. - This function updates
APIServicespec/service/namespacefield if the field is set. - This function updates the KRM resources annotation
config.kubernetes.io/depends-onif this annotation contains the namespace that shows up in other resources’ namespace.
FunctionConfig #
FunctionConfig is used to configure the set-namespace function behavior.
It itself is a KRM resource which can be either a ConfigMap object or a custom SetNamespace object.
ConfigMap as functionConfig
apiVersion: v1
kind: ConfigMap
data:
namespace: newNamespace # required
SetNamespace as functionConfig
apiVersion: fn.kpt.dev/v1alpha1
kind: SetNamespace
namespace: newNamespace # required
The package-context.yaml as functionConfig. This convention file is auto-generated by kpt pkg get --for-deploy or kpt pkg init
apiVersion: v1
kind: ConfigMap
metadata:
name: kptfile.kpt.dev
annotations:
config.kubernetes.io/local-config: "true"
data:
name: newNamespace # required, update all namespace fields to "newNamespace"
DependsOn annotation #
DependsOn annotation is a
kpt feature. This function updates the
namespace segment in a depends-on annotation if the namespace matches the Namespace object or namespaceMatcher field.