Skip to content

Commit

Permalink
Use kubebuilder conventions for controllers and webhooks setup (#747)
Browse files Browse the repository at this point in the history
* Run go mod tidy in hack/tools

Co-authored-by: Marty Spiewak <mspiewak@vmware.com>
Co-authored-by: Emily Johnson <emjohnson@vmware.com>
  • Loading branch information
Marty Spiewak and emmjohnson committed Mar 29, 2022
1 parent 66cd5c1 commit 3aefe09
Show file tree
Hide file tree
Showing 43 changed files with 805 additions and 1,004 deletions.
4 changes: 2 additions & 2 deletions cmd/cartographer/main.go
Expand Up @@ -44,13 +44,13 @@ func main() {
panic(err)
}

cmd := cmd.Command{
c := cmd.Command{
Port: port,
CertDir: certDir,
Logger: zap.New(loggerOpt, zap.UseDevMode(devMode)),
}

if err = cmd.Execute(ctrl.SetupSignalHandler()); err != nil {
if err = c.Execute(ctrl.SetupSignalHandler()); err != nil {
panic(err)
}
}
112 changes: 0 additions & 112 deletions hack/tools/go.sum

Large diffs are not rendered by default.

18 changes: 0 additions & 18 deletions pkg/apis/v1alpha1/cluster_config_template.go
Expand Up @@ -20,8 +20,6 @@ package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

// +kubebuilder:object:root=true
Expand All @@ -47,22 +45,6 @@ type ConfigTemplateSpec struct {
ConfigPath string `json:"configPath"`
}

// +kubebuilder:webhook:path=/validate-carto-run-v1alpha1-clusterconfigtemplate,mutating=false,failurePolicy=fail,sideEffects=none,admissionReviewVersions=v1beta1;v1,groups=carto.run,resources=clusterconfigtemplates,verbs=create;update,versions=v1alpha1,name=config-template-validator.cartographer.com

var _ webhook.Validator = &ClusterConfigTemplate{}

func (c *ClusterConfigTemplate) ValidateCreate() error {
return c.Spec.TemplateSpec.validate()
}

func (c *ClusterConfigTemplate) ValidateUpdate(_ runtime.Object) error {
return c.Spec.TemplateSpec.validate()
}

func (c *ClusterConfigTemplate) ValidateDelete() error {
return nil
}

// +kubebuilder:object:root=true

type ClusterConfigTemplateList struct {
Expand Down
43 changes: 43 additions & 0 deletions pkg/apis/v1alpha1/cluster_config_template_webhook.go
@@ -0,0 +1,43 @@
// Copyright 2021 VMware
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1alpha1

import (
"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

// +kubebuilder:webhook:path=/validate-carto-run-v1alpha1-clusterconfigtemplate,mutating=false,failurePolicy=fail,sideEffects=none,admissionReviewVersions=v1beta1;v1,groups=carto.run,resources=clusterconfigtemplates,verbs=create;update,versions=v1alpha1,name=config-template-validator.cartographer.com

var _ webhook.Validator = &ClusterConfigTemplate{}

func (c *ClusterConfigTemplate) ValidateCreate() error {
return c.Spec.TemplateSpec.validate()
}

func (c *ClusterConfigTemplate) ValidateUpdate(_ runtime.Object) error {
return c.Spec.TemplateSpec.validate()
}

func (c *ClusterConfigTemplate) ValidateDelete() error {
return nil
}

func (c *ClusterConfigTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(c).
Complete()
}
28 changes: 0 additions & 28 deletions pkg/apis/v1alpha1/cluster_delivery.go
Expand Up @@ -19,12 +19,8 @@
package v1alpha1

import (
"fmt"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

const (
Expand Down Expand Up @@ -164,30 +160,6 @@ type ClusterDeliveryList struct {
Items []ClusterDelivery `json:"items"`
}

// +kubebuilder:webhook:path=/validate-carto-run-v1alpha1-clusterdelivery,mutating=false,failurePolicy=fail,sideEffects=none,admissionReviewVersions=v1beta1;v1,groups=carto.run,resources=clusterdeliveries,verbs=create;update,versions=v1alpha1,name=delivery-validator.cartographer.com

var _ webhook.Validator = &ClusterDelivery{}

func (c *ClusterDelivery) ValidateCreate() error {
err := c.validateNewState()
if err != nil {
return fmt.Errorf("error validating clusterdelivery [%s]: %w", c.Name, err)
}
return nil
}

func (c *ClusterDelivery) ValidateUpdate(_ runtime.Object) error {
err := c.validateNewState()
if err != nil {
return fmt.Errorf("error validating clusterdelivery [%s]: %w", c.Name, err)
}
return nil
}

func (c *ClusterDelivery) ValidateDelete() error {
return nil
}

func (c *ClusterDelivery) GetSelectors() LegacySelector {
return c.Spec.LegacySelector
}
Expand Down
Expand Up @@ -14,7 +14,37 @@

package v1alpha1

import "fmt"
import (
"fmt"

"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

// +kubebuilder:webhook:path=/validate-carto-run-v1alpha1-clusterdelivery,mutating=false,failurePolicy=fail,sideEffects=none,admissionReviewVersions=v1beta1;v1,groups=carto.run,resources=clusterdeliveries,verbs=create;update,versions=v1alpha1,name=delivery-validator.cartographer.com

var _ webhook.Validator = &ClusterDelivery{}

func (c *ClusterDelivery) ValidateCreate() error {
err := c.validateNewState()
if err != nil {
return fmt.Errorf("error validating clusterdelivery [%s]: %w", c.Name, err)
}
return nil
}

func (c *ClusterDelivery) ValidateUpdate(_ runtime.Object) error {
err := c.validateNewState()
if err != nil {
return fmt.Errorf("error validating clusterdelivery [%s]: %w", c.Name, err)
}
return nil
}

func (c *ClusterDelivery) ValidateDelete() error {
return nil
}

func (c *ClusterDelivery) validateNewState() error {
if len(c.Spec.Selector) == 0 && len(c.Spec.SelectorMatchExpressions) == 0 && len(c.Spec.SelectorMatchFields) == 0 {
Expand Down Expand Up @@ -131,3 +161,9 @@ func validateDeliveryTemplateRef(ref DeliveryTemplateReference) error {
}
return nil
}

func (c *ClusterDelivery) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(c).
Complete()
}
41 changes: 0 additions & 41 deletions pkg/apis/v1alpha1/cluster_deployment_template.go
Expand Up @@ -19,11 +19,7 @@
package v1alpha1

import (
"fmt"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

// +kubebuilder:object:root=true
Expand Down Expand Up @@ -91,43 +87,6 @@ type ClusterDeploymentTemplateList struct {
Items []ClusterDeploymentTemplate `json:"items"`
}

// +kubebuilder:webhook:path=/validate-carto-run-v1alpha1-clusterdeploymenttemplate,mutating=false,failurePolicy=fail,sideEffects=none,admissionReviewVersions=v1beta1;v1,groups=carto.run,resources=clusterdeploymenttemplates,verbs=create;update,versions=v1alpha1,name=deployment-template-validator.cartographer.com

var _ webhook.Validator = &ClusterSourceTemplate{}

func (c *ClusterDeploymentTemplate) ValidateCreate() error {
return c.validate()
}

func (c *ClusterDeploymentTemplate) ValidateUpdate(_ runtime.Object) error {
return c.validate()
}

func (c *ClusterDeploymentTemplate) ValidateDelete() error {
return nil
}

func (c *ClusterDeploymentTemplate) validate() error {
err := c.Spec.TemplateSpec.validate()
if err != nil {
return err
}

if c.bothConditionsSet() || c.neitherConditionSet() {
return fmt.Errorf("invalid spec: must set exactly one of spec.ObservedMatches and spec.ObservedCompletion")
}

return nil
}

func (c *ClusterDeploymentTemplate) bothConditionsSet() bool {
return c.Spec.ObservedMatches != nil && c.Spec.ObservedCompletion != nil
}

func (c *ClusterDeploymentTemplate) neitherConditionSet() bool {
return c.Spec.ObservedMatches == nil && c.Spec.ObservedCompletion == nil
}

func init() {
SchemeBuilder.Register(
&ClusterDeploymentTemplate{},
Expand Down
66 changes: 66 additions & 0 deletions pkg/apis/v1alpha1/cluster_deployment_template_webhook.go
@@ -0,0 +1,66 @@
// Copyright 2021 VMware
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1alpha1

import (
"fmt"

"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

// +kubebuilder:webhook:path=/validate-carto-run-v1alpha1-clusterdeploymenttemplate,mutating=false,failurePolicy=fail,sideEffects=none,admissionReviewVersions=v1beta1;v1,groups=carto.run,resources=clusterdeploymenttemplates,verbs=create;update,versions=v1alpha1,name=deployment-template-validator.cartographer.com

var _ webhook.Validator = &ClusterDeploymentTemplate{}

func (c *ClusterDeploymentTemplate) ValidateCreate() error {
return c.validate()
}

func (c *ClusterDeploymentTemplate) ValidateUpdate(_ runtime.Object) error {
return c.validate()
}

func (c *ClusterDeploymentTemplate) ValidateDelete() error {
return nil
}

func (c *ClusterDeploymentTemplate) validate() error {
err := c.Spec.TemplateSpec.validate()
if err != nil {
return err
}

if c.bothConditionsSet() || c.neitherConditionSet() {
return fmt.Errorf("invalid spec: must set exactly one of spec.ObservedMatches and spec.ObservedCompletion")
}

return nil
}

func (c *ClusterDeploymentTemplate) bothConditionsSet() bool {
return c.Spec.ObservedMatches != nil && c.Spec.ObservedCompletion != nil
}

func (c *ClusterDeploymentTemplate) neitherConditionSet() bool {
return c.Spec.ObservedMatches == nil && c.Spec.ObservedCompletion == nil
}

func (c *ClusterDeploymentTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(c).
Complete()
}
18 changes: 0 additions & 18 deletions pkg/apis/v1alpha1/cluster_image_template.go
Expand Up @@ -20,8 +20,6 @@ package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

// +kubebuilder:object:root=true
Expand All @@ -47,22 +45,6 @@ type ImageTemplateSpec struct {
ImagePath string `json:"imagePath"`
}

// +kubebuilder:webhook:path=/validate-carto-run-v1alpha1-clusterimagetemplate,mutating=false,failurePolicy=fail,sideEffects=none,admissionReviewVersions=v1beta1;v1,groups=carto.run,resources=clusterimagetemplates,verbs=create;update,versions=v1alpha1,name=image-template-validator.cartographer.com

var _ webhook.Validator = &ClusterImageTemplate{}

func (c *ClusterImageTemplate) ValidateCreate() error {
return c.Spec.TemplateSpec.validate()
}

func (c *ClusterImageTemplate) ValidateUpdate(_ runtime.Object) error {
return c.Spec.TemplateSpec.validate()
}

func (c *ClusterImageTemplate) ValidateDelete() error {
return nil
}

// +kubebuilder:object:root=true

type ClusterImageTemplateList struct {
Expand Down
43 changes: 43 additions & 0 deletions pkg/apis/v1alpha1/cluster_image_template_webhook.go
@@ -0,0 +1,43 @@
// Copyright 2021 VMware
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1alpha1

import (
"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
)

// +kubebuilder:webhook:path=/validate-carto-run-v1alpha1-clusterimagetemplate,mutating=false,failurePolicy=fail,sideEffects=none,admissionReviewVersions=v1beta1;v1,groups=carto.run,resources=clusterimagetemplates,verbs=create;update,versions=v1alpha1,name=image-template-validator.cartographer.com

var _ webhook.Validator = &ClusterImageTemplate{}

func (c *ClusterImageTemplate) ValidateCreate() error {
return c.Spec.TemplateSpec.validate()
}

func (c *ClusterImageTemplate) ValidateUpdate(_ runtime.Object) error {
return c.Spec.TemplateSpec.validate()
}

func (c *ClusterImageTemplate) ValidateDelete() error {
return nil
}

func (c *ClusterImageTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).
For(c).
Complete()
}

0 comments on commit 3aefe09

Please sign in to comment.