Skip to content

Commit

Permalink
feat: allow node annotations to be set by the provisioner
Browse files Browse the repository at this point in the history
  • Loading branch information
ellistarn committed Nov 25, 2022
1 parent 308c133 commit 6150a5c
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 4 deletions.
5 changes: 5 additions & 0 deletions pkg/apis/crds/karpenter.sh_provisioners.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ spec:
Node properties are determined from a combination of provisioner and
pod scheduling constraints.
properties:
annotations:
additionalProperties:
type: string
description: Annotations are applied to every node.
type: object
consolidation:
description: Consolidation are the consolidation parameters
properties:
Expand Down
3 changes: 3 additions & 0 deletions pkg/apis/provisioning/v1alpha5/provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ import (
// is capable of managing a diverse set of nodes. Node properties are determined
// from a combination of provisioner and pod scheduling constraints.
type ProvisionerSpec struct {
// Annotations are applied to every node.
//+optional
Annotations map[string]string `json:"annotations,omitempty"`
// Labels are layered with Requirements and applied to every node.
//+optional
Labels map[string]string `json:"labels,omitempty"`
Expand Down
7 changes: 7 additions & 0 deletions pkg/apis/provisioning/v1alpha5/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions pkg/controllers/provisioning/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,18 @@ var _ = Describe("Provisioning", func() {
Expect(*allocatable.Memory()).To(Equal(resource.MustParse("4Gi")))
})
})
Context("Annotations", func() {
It("should annotate nodes", func() {
provisioner := test.Provisioner(test.ProvisionerOptions{
Annotations: map[string]string{v1alpha5.DoNotConsolidateNodeAnnotationKey: "true"},
})
ExpectApplied(ctx, env.Client, provisioner)
for _, pod := range ExpectProvisioned(ctx, env.Client, recorder, pendingPodController, prov, test.UnschedulablePod()) {
node := ExpectScheduled(ctx, env.Client, pod)
Expect(node.Annotations).To(HaveKeyWithValue(v1alpha5.DoNotConsolidateNodeAnnotationKey, "true"))
}
})
})
Context("Labels", func() {
It("should label nodes", func() {
provisioner := test.Provisioner(test.ProvisionerOptions{
Expand Down
5 changes: 3 additions & 2 deletions pkg/controllers/state/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions pkg/scheduling/nodetemplate.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ type NodeTemplate struct {
ProvisionerName string
Provider *v1alpha5.Provider
ProviderRef *v1alpha5.ProviderRef
Annotations map[string]string
Labels map[string]string
Taints Taints
StartupTaints Taints
Expand All @@ -47,6 +48,7 @@ func NewNodeTemplate(provisioner *v1alpha5.Provisioner) *NodeTemplate {
Provider: provisioner.Spec.Provider,
ProviderRef: provisioner.Spec.ProviderRef,
KubeletConfiguration: provisioner.Spec.KubeletConfiguration,
Annotations: provisioner.Spec.Annotations,
Labels: labels,
Taints: provisioner.Spec.Taints,
StartupTaints: provisioner.Spec.StartupTaints,
Expand All @@ -57,8 +59,9 @@ func NewNodeTemplate(provisioner *v1alpha5.Provisioner) *NodeTemplate {
func (n *NodeTemplate) ToNode() *v1.Node {
return &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Labels: lo.Assign(n.Labels, n.Requirements.Labels()),
Finalizers: []string{v1alpha5.TerminationFinalizer},
Labels: lo.Assign(n.Labels, n.Requirements.Labels()),
Annotations: n.Annotations,
Finalizers: []string{v1alpha5.TerminationFinalizer},
},
Spec: v1.NodeSpec{
Taints: append(n.Taints, n.StartupTaints...),
Expand Down
2 changes: 2 additions & 0 deletions pkg/test/provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ type ProvisionerOptions struct {
Provider interface{}
ProviderRef *v1alpha5.ProviderRef
Kubelet *v1alpha5.KubeletConfiguration
Annotations map[string]string
Labels map[string]string
Taints []v1.Taint
StartupTaints []v1.Taint
Expand Down Expand Up @@ -73,6 +74,7 @@ func Provisioner(overrides ...ProvisionerOptions) *v1alpha5.Provisioner {
ProviderRef: options.ProviderRef,
Taints: options.Taints,
StartupTaints: options.StartupTaints,
Annotations: options.Annotations,
Labels: lo.Assign(options.Labels, map[string]string{DiscoveryLabel: "unspecified"}), // For node cleanup discovery
Limits: &v1alpha5.Limits{Resources: options.Limits},
TTLSecondsAfterEmpty: options.TTLSecondsAfterEmpty,
Expand Down

0 comments on commit 6150a5c

Please sign in to comment.