From 20f7629ff5b6cccbbc67a5392f6205d5bffa898f Mon Sep 17 00:00:00 2001 From: Rahul Agasthya Date: Wed, 13 Jul 2022 14:47:12 -0700 Subject: [PATCH 1/6] Creating new CRD for ClusterSubnetState. --- crd/clustersubnetstate/Makefile | 20 +++ .../api/v1alpha1/clustersubnetstate.go | 47 ++++++ .../api/v1alpha1/zz_generated.deepcopy.go | 69 ++++++++ crd/clustersubnetstate/client.go | 153 ++++++++++++++++++ crd/clustersubnetstate/embed.go | 25 +++ crd/clustersubnetstate/manifests/_.yaml | 14 ++ 6 files changed, 328 insertions(+) create mode 100644 crd/clustersubnetstate/Makefile create mode 100644 crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go create mode 100644 crd/clustersubnetstate/api/v1alpha1/zz_generated.deepcopy.go create mode 100644 crd/clustersubnetstate/client.go create mode 100644 crd/clustersubnetstate/embed.go create mode 100644 crd/clustersubnetstate/manifests/_.yaml diff --git a/crd/clustersubnetstate/Makefile b/crd/clustersubnetstate/Makefile new file mode 100644 index 0000000000..2304a92f64 --- /dev/null +++ b/crd/clustersubnetstate/Makefile @@ -0,0 +1,20 @@ +.DEFAULT_GOAL = all + +REPO_ROOT = $(shell git rev-parse --show-toplevel) +TOOLS_DIR = $(REPO_ROOT)/build/tools +TOOLS_BIN_DIR = $(REPO_ROOT)/build/tools/bin +CONTROLLER_GEN = $(TOOLS_BIN_DIR)/controller-gen + +.PHONY: generate manifests + +all: generate manifests + +generate: $(CONTROLLER_GEN) + $(CONTROLLER_GEN) object paths="./..." + +manifests: $(CONTROLLER_GEN) + mkdir -p manifests + $(CONTROLLER_GEN) crd paths="./..." output:crd:artifacts:config=manifests/ + +$(CONTROLLER_GEN): + @make -C $(REPO_ROOT) $(CONTROLLER_GEN) diff --git a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go new file mode 100644 index 0000000000..8d78fef6c2 --- /dev/null +++ b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go @@ -0,0 +1,47 @@ +//go:build !ignore_uncovered +// +build !ignore_uncovered + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// Important: Run "make" to regenerate code after modifying this file + +// +kubebuilder:object:root=true + +// ClusterSubnetState is the Schema for the ClusterSubnetState API +// +kubebuilder:object:root=true +// +kubebuilder:resource:scope=Namespaced +// +kubebuilder:subresource:status +type ClusterSubnetState struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec ClusterSubnetStateSpec `json:"spec,omitempty"` + Status ClusterSubnetStateStatus `json:"status,omitempty"` +} + +// ClusterSubnetStateSpec defines the desired state of ClusterSubnetState +type ClusterSubnetStateSpec struct { + Timestamp string `json:"Timestamp"` +} + +// ClusterSubnetStateStatus defines the observed state of ClusterSubnetState +type ClusterSubnetStateStatus struct { + Status bool `json:"Status"` +} + +// +kubebuilder:object:root=true + +// ClusterSubnetStateList contains a list of ClusterSubnetState +type ClusterSubnetStateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []ClusterSubnetState `json:"items"` +} + +func init() { + SchemeBuilder.Register(&ClusterSubnetState{}, &ClusterSubnetStateList{}) +} diff --git a/crd/clustersubnetstate/api/v1alpha1/zz_generated.deepcopy.go b/crd/clustersubnetstate/api/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 0000000000..894f30fed0 --- /dev/null +++ b/crd/clustersubnetstate/api/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,69 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterSubnetState) DeepCopyInto(out *ClusterSubnetState) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSubnetState. +func (in *ClusterSubnetState) DeepCopy() *ClusterSubnetState { + if in == nil { + return nil + } + out := new(ClusterSubnetState) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterSubnetState) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterSubnetStateList) DeepCopyInto(out *ClusterSubnetStateList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterSubnetState, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSubnetStateList. +func (in *ClusterSubnetStateList) DeepCopy() *ClusterSubnetStateList { + if in == nil { + return nil + } + out := new(ClusterSubnetStateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterSubnetStateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/crd/clustersubnetstate/client.go b/crd/clustersubnetstate/client.go new file mode 100644 index 0000000000..6bdd6354ae --- /dev/null +++ b/crd/clustersubnetstate/client.go @@ -0,0 +1,153 @@ +package clustersubnetstate + +import ( + "context" + "reflect" + + "github.com/Azure/azure-container-networking/crd" + "github.com/Azure/azure-container-networking/crd/clustersubnetstate/api/v1alpha" + "github.com/pkg/errors" + v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + typedv1 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + ctrlcli "sigs.k8s.io/controller-runtime/pkg/client" + ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" +) + +// Scheme is a runtime scheme containing the client-go scheme and the ClusterSubnetState scheme. +var Scheme = runtime.NewScheme() + +func init() { + _ = clientgoscheme.AddToScheme(Scheme) + _ = v1alpha.AddToScheme(Scheme) +} + +// Client is provided to interface with the ClusterSubnetState CRDs. +type Client struct { + nnccli ctrlcli.Client + crdcli typedv1.CustomResourceDefinitionInterface +} + +// NewClient creates a new ClusterSubnetState client from the passed k8s Config. +func NewClient(c *rest.Config) (*Client, error) { + crdCli, err := crd.NewCRDClient(c) + if err != nil { + return nil, errors.Wrap(err, "failed to init crd client") + } + opts := ctrlcli.Options{ + Scheme: Scheme, + } + nncCli, err := ctrlcli.New(c, opts) + if err != nil { + return nil, errors.Wrap(err, "failed to init nnc client") + } + return &Client{ + crdcli: crdCli, + nnccli: nncCli, + }, nil +} + +func (c *Client) create(ctx context.Context, res *v1.CustomResourceDefinition) (*v1.CustomResourceDefinition, error) { + res, err := c.crdcli.Create(ctx, res, metav1.CreateOptions{}) + if err != nil { + return nil, errors.Wrap(err, "failed to create nnc crd") + } + return res, nil +} + +// Get returns the ClusterSubnetState identified by the NamespacedName. +func (c *Client) Get(ctx context.Context, key types.NamespacedName) (*v1alpha.ClusterSubnetState, error) { + clusterSubnetState := &v1alpha.ClusterSubnetState{} + err := c.nnccli.Get(ctx, key, clusterSubnetState) + return clusterSubnetState, errors.Wrapf(err, "failed to get nnc %v", key) +} + +// Install installs the embedded ClusterSubnetState CRD definition in the cluster. +func (c *Client) Install(ctx context.Context) (*v1.CustomResourceDefinition, error) { + nnc, err := GetClusterSubnetStates() + if err != nil { + return nil, errors.Wrap(err, "failed to get embedded nnc crd") + } + return c.create(ctx, nnc) +} + +// InstallOrUpdate installs the embedded ClusterSubnetState CRD definition in the cluster or updates it if present. +func (c *Client) InstallOrUpdate(ctx context.Context) (*v1.CustomResourceDefinition, error) { + nnc, err := GetClusterSubnetStates() + if err != nil { + return nil, errors.Wrap(err, "failed to get embedded nnc crd") + } + current, err := c.create(ctx, nnc) + if !apierrors.IsAlreadyExists(err) { + return current, err + } + if current == nil { + current, err = c.crdcli.Get(ctx, nnc.Name, metav1.GetOptions{}) + if err != nil { + return nil, errors.Wrap(err, "failed to get existing nnc crd") + } + } + if !reflect.DeepEqual(nnc.Spec.Versions, current.Spec.Versions) { + nnc.SetResourceVersion(current.GetResourceVersion()) + previous := *current + current, err = c.crdcli.Update(ctx, nnc, metav1.UpdateOptions{}) + if err != nil { + return &previous, errors.Wrap(err, "failed to update existing nnc crd") + } + } + return current, nil +} + +// PatchSpec performs a server-side patch of the passed ClusterSubnetStateSpec to the ClusterSubnetState specified by the NamespacedName. +func (c *Client) PatchSpec(ctx context.Context, key types.NamespacedName, spec *v1alpha.ClusterSubnetStateSpec, fieldManager string) (*v1alpha.ClusterSubnetState, error) { + obj := genPatchSkel(key) + obj.Spec = *spec + if err := c.nnccli.Patch(ctx, obj, ctrlcli.Apply, ctrlcli.ForceOwnership, ctrlcli.FieldOwner(fieldManager)); err != nil { + return nil, errors.Wrap(err, "failed to patch nnc") + } + return obj, nil +} + +// UpdateSpec does a fetch, deepcopy, and update of the ClusterSubnetState with the passed spec. +// Deprecated: UpdateSpec is deprecated and usage should migrate to PatchSpec. +func (c *Client) UpdateSpec(ctx context.Context, key types.NamespacedName, spec *v1alpha.ClusterSubnetStateSpec) (*v1alpha.ClusterSubnetState, error) { + nnc, err := c.Get(ctx, key) + if err != nil { + return nil, errors.Wrap(err, "failed to get nnc") + } + spec.DeepCopyInto(&nnc.Spec) + if err := c.nnccli.Update(ctx, nnc); err != nil { + return nil, errors.Wrap(err, "failed to update nnc") + } + return nnc, nil +} + +// SetOwnerRef sets the owner of the ClusterSubnetState to the given object, using HTTP Patch +func (c *Client) SetOwnerRef(ctx context.Context, key types.NamespacedName, owner metav1.Object, fieldManager string) (*v1alpha.ClusterSubnetState, error) { + obj := genPatchSkel(key) + if err := ctrlutil.SetControllerReference(owner, obj, Scheme); err != nil { + return nil, errors.Wrapf(err, "failed to set controller reference for nnc") + } + if err := c.nnccli.Patch(ctx, obj, ctrlcli.Apply, ctrlcli.ForceOwnership, ctrlcli.FieldOwner(fieldManager)); err != nil { + return nil, errors.Wrapf(err, "failed to patch nnc") + } + return obj, nil +} + +func genPatchSkel(key types.NamespacedName) *v1alpha.ClusterSubnetState { + return &v1alpha.ClusterSubnetState{ + TypeMeta: metav1.TypeMeta{ + APIVersion: v1alpha.GroupVersion.String(), + Kind: "ClusterSubnetState", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: key.Name, + Namespace: key.Namespace, + }, + } +} diff --git a/crd/clustersubnetstate/embed.go b/crd/clustersubnetstate/embed.go new file mode 100644 index 0000000000..aea0143a7d --- /dev/null +++ b/crd/clustersubnetstate/embed.go @@ -0,0 +1,25 @@ +package clustersubnetstate + +import ( + _ "embed" + + // import the manifests package so that caller of this package have the manifests compiled in as a side-effect. + _ "github.com/Azure/azure-container-networking/crd/clustersubnetstate/manifests" + "github.com/pkg/errors" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "sigs.k8s.io/yaml" +) + +// ClusterSubnetStatesYAML embeds the CRD YAML for downstream consumers. +//go:embed manifests/acn.azure.com_clustersubnetstates.yaml +var ClusterSubnetStatesYAML []byte + +// GetClusterSubnetStatesDefinition parses the raw []byte ClusterSubnetStates in +// to a CustomResourceDefinition and returns it or an unmarshalling error. +func GetClusterSubnetStates() (*apiextensionsv1.CustomResourceDefinition, error) { + clusterSubnetStates := &apiextensionsv1.CustomResourceDefinition{} + if err := yaml.Unmarshal(ClusterSubnetStatesYAML, &clusterSubnetStates); err != nil { + return nil, errors.Wrap(err, "error unmarshalling embedded nnc") + } + return clusterSubnetStates, nil +} diff --git a/crd/clustersubnetstate/manifests/_.yaml b/crd/clustersubnetstate/manifests/_.yaml new file mode 100644 index 0000000000..c5ab01e713 --- /dev/null +++ b/crd/clustersubnetstate/manifests/_.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.9.0 + creationTimestamp: null +spec: + group: "" + names: + kind: "" + plural: "" + scope: "" + versions: null From 2aa2455ca1d8d92362ef0be1f95d1f79a18786b2 Mon Sep 17 00:00:00 2001 From: Rahul Agasthya Date: Wed, 13 Jul 2022 15:12:00 -0700 Subject: [PATCH 2/6] Changes to the CRD definition. --- .../api/v1alpha1/groupversion_info.go | 23 +++ .../api/v1alpha1/zz_generated.deepcopy.go | 30 ++++ crd/clustersubnetstate/client.go | 153 ------------------ crd/clustersubnetstate/embed.go | 25 --- crd/clustersubnetstate/manifests/_.yaml | 14 -- 5 files changed, 53 insertions(+), 192 deletions(-) create mode 100644 crd/clustersubnetstate/api/v1alpha1/groupversion_info.go delete mode 100644 crd/clustersubnetstate/client.go delete mode 100644 crd/clustersubnetstate/embed.go delete mode 100644 crd/clustersubnetstate/manifests/_.yaml diff --git a/crd/clustersubnetstate/api/v1alpha1/groupversion_info.go b/crd/clustersubnetstate/api/v1alpha1/groupversion_info.go new file mode 100644 index 0000000000..dd6e0aa535 --- /dev/null +++ b/crd/clustersubnetstate/api/v1alpha1/groupversion_info.go @@ -0,0 +1,23 @@ +//go:build !ignore_uncovered +// +build !ignore_uncovered + +// Package v1alpha contains API Schema definitions for the acn v1alpha API group +// +kubebuilder:object:generate=true +// +groupName=networking.azure.com" +package v1alpha + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +var ( + // GroupVersion is group version used to register these objects + GroupVersion = schema.GroupVersion{Group: "networking.azure.com", Version: "v1alpha"} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) diff --git a/crd/clustersubnetstate/api/v1alpha1/zz_generated.deepcopy.go b/crd/clustersubnetstate/api/v1alpha1/zz_generated.deepcopy.go index 894f30fed0..c59724acf9 100644 --- a/crd/clustersubnetstate/api/v1alpha1/zz_generated.deepcopy.go +++ b/crd/clustersubnetstate/api/v1alpha1/zz_generated.deepcopy.go @@ -67,3 +67,33 @@ func (in *ClusterSubnetStateList) DeepCopyObject() runtime.Object { } return nil } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterSubnetStateSpec) DeepCopyInto(out *ClusterSubnetStateSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSubnetStateSpec. +func (in *ClusterSubnetStateSpec) DeepCopy() *ClusterSubnetStateSpec { + if in == nil { + return nil + } + out := new(ClusterSubnetStateSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterSubnetStateStatus) DeepCopyInto(out *ClusterSubnetStateStatus) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSubnetStateStatus. +func (in *ClusterSubnetStateStatus) DeepCopy() *ClusterSubnetStateStatus { + if in == nil { + return nil + } + out := new(ClusterSubnetStateStatus) + in.DeepCopyInto(out) + return out +} diff --git a/crd/clustersubnetstate/client.go b/crd/clustersubnetstate/client.go deleted file mode 100644 index 6bdd6354ae..0000000000 --- a/crd/clustersubnetstate/client.go +++ /dev/null @@ -1,153 +0,0 @@ -package clustersubnetstate - -import ( - "context" - "reflect" - - "github.com/Azure/azure-container-networking/crd" - "github.com/Azure/azure-container-networking/crd/clustersubnetstate/api/v1alpha" - "github.com/pkg/errors" - v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - typedv1 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/types" - clientgoscheme "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - ctrlcli "sigs.k8s.io/controller-runtime/pkg/client" - ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" -) - -// Scheme is a runtime scheme containing the client-go scheme and the ClusterSubnetState scheme. -var Scheme = runtime.NewScheme() - -func init() { - _ = clientgoscheme.AddToScheme(Scheme) - _ = v1alpha.AddToScheme(Scheme) -} - -// Client is provided to interface with the ClusterSubnetState CRDs. -type Client struct { - nnccli ctrlcli.Client - crdcli typedv1.CustomResourceDefinitionInterface -} - -// NewClient creates a new ClusterSubnetState client from the passed k8s Config. -func NewClient(c *rest.Config) (*Client, error) { - crdCli, err := crd.NewCRDClient(c) - if err != nil { - return nil, errors.Wrap(err, "failed to init crd client") - } - opts := ctrlcli.Options{ - Scheme: Scheme, - } - nncCli, err := ctrlcli.New(c, opts) - if err != nil { - return nil, errors.Wrap(err, "failed to init nnc client") - } - return &Client{ - crdcli: crdCli, - nnccli: nncCli, - }, nil -} - -func (c *Client) create(ctx context.Context, res *v1.CustomResourceDefinition) (*v1.CustomResourceDefinition, error) { - res, err := c.crdcli.Create(ctx, res, metav1.CreateOptions{}) - if err != nil { - return nil, errors.Wrap(err, "failed to create nnc crd") - } - return res, nil -} - -// Get returns the ClusterSubnetState identified by the NamespacedName. -func (c *Client) Get(ctx context.Context, key types.NamespacedName) (*v1alpha.ClusterSubnetState, error) { - clusterSubnetState := &v1alpha.ClusterSubnetState{} - err := c.nnccli.Get(ctx, key, clusterSubnetState) - return clusterSubnetState, errors.Wrapf(err, "failed to get nnc %v", key) -} - -// Install installs the embedded ClusterSubnetState CRD definition in the cluster. -func (c *Client) Install(ctx context.Context) (*v1.CustomResourceDefinition, error) { - nnc, err := GetClusterSubnetStates() - if err != nil { - return nil, errors.Wrap(err, "failed to get embedded nnc crd") - } - return c.create(ctx, nnc) -} - -// InstallOrUpdate installs the embedded ClusterSubnetState CRD definition in the cluster or updates it if present. -func (c *Client) InstallOrUpdate(ctx context.Context) (*v1.CustomResourceDefinition, error) { - nnc, err := GetClusterSubnetStates() - if err != nil { - return nil, errors.Wrap(err, "failed to get embedded nnc crd") - } - current, err := c.create(ctx, nnc) - if !apierrors.IsAlreadyExists(err) { - return current, err - } - if current == nil { - current, err = c.crdcli.Get(ctx, nnc.Name, metav1.GetOptions{}) - if err != nil { - return nil, errors.Wrap(err, "failed to get existing nnc crd") - } - } - if !reflect.DeepEqual(nnc.Spec.Versions, current.Spec.Versions) { - nnc.SetResourceVersion(current.GetResourceVersion()) - previous := *current - current, err = c.crdcli.Update(ctx, nnc, metav1.UpdateOptions{}) - if err != nil { - return &previous, errors.Wrap(err, "failed to update existing nnc crd") - } - } - return current, nil -} - -// PatchSpec performs a server-side patch of the passed ClusterSubnetStateSpec to the ClusterSubnetState specified by the NamespacedName. -func (c *Client) PatchSpec(ctx context.Context, key types.NamespacedName, spec *v1alpha.ClusterSubnetStateSpec, fieldManager string) (*v1alpha.ClusterSubnetState, error) { - obj := genPatchSkel(key) - obj.Spec = *spec - if err := c.nnccli.Patch(ctx, obj, ctrlcli.Apply, ctrlcli.ForceOwnership, ctrlcli.FieldOwner(fieldManager)); err != nil { - return nil, errors.Wrap(err, "failed to patch nnc") - } - return obj, nil -} - -// UpdateSpec does a fetch, deepcopy, and update of the ClusterSubnetState with the passed spec. -// Deprecated: UpdateSpec is deprecated and usage should migrate to PatchSpec. -func (c *Client) UpdateSpec(ctx context.Context, key types.NamespacedName, spec *v1alpha.ClusterSubnetStateSpec) (*v1alpha.ClusterSubnetState, error) { - nnc, err := c.Get(ctx, key) - if err != nil { - return nil, errors.Wrap(err, "failed to get nnc") - } - spec.DeepCopyInto(&nnc.Spec) - if err := c.nnccli.Update(ctx, nnc); err != nil { - return nil, errors.Wrap(err, "failed to update nnc") - } - return nnc, nil -} - -// SetOwnerRef sets the owner of the ClusterSubnetState to the given object, using HTTP Patch -func (c *Client) SetOwnerRef(ctx context.Context, key types.NamespacedName, owner metav1.Object, fieldManager string) (*v1alpha.ClusterSubnetState, error) { - obj := genPatchSkel(key) - if err := ctrlutil.SetControllerReference(owner, obj, Scheme); err != nil { - return nil, errors.Wrapf(err, "failed to set controller reference for nnc") - } - if err := c.nnccli.Patch(ctx, obj, ctrlcli.Apply, ctrlcli.ForceOwnership, ctrlcli.FieldOwner(fieldManager)); err != nil { - return nil, errors.Wrapf(err, "failed to patch nnc") - } - return obj, nil -} - -func genPatchSkel(key types.NamespacedName) *v1alpha.ClusterSubnetState { - return &v1alpha.ClusterSubnetState{ - TypeMeta: metav1.TypeMeta{ - APIVersion: v1alpha.GroupVersion.String(), - Kind: "ClusterSubnetState", - }, - ObjectMeta: metav1.ObjectMeta{ - Name: key.Name, - Namespace: key.Namespace, - }, - } -} diff --git a/crd/clustersubnetstate/embed.go b/crd/clustersubnetstate/embed.go deleted file mode 100644 index aea0143a7d..0000000000 --- a/crd/clustersubnetstate/embed.go +++ /dev/null @@ -1,25 +0,0 @@ -package clustersubnetstate - -import ( - _ "embed" - - // import the manifests package so that caller of this package have the manifests compiled in as a side-effect. - _ "github.com/Azure/azure-container-networking/crd/clustersubnetstate/manifests" - "github.com/pkg/errors" - apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - "sigs.k8s.io/yaml" -) - -// ClusterSubnetStatesYAML embeds the CRD YAML for downstream consumers. -//go:embed manifests/acn.azure.com_clustersubnetstates.yaml -var ClusterSubnetStatesYAML []byte - -// GetClusterSubnetStatesDefinition parses the raw []byte ClusterSubnetStates in -// to a CustomResourceDefinition and returns it or an unmarshalling error. -func GetClusterSubnetStates() (*apiextensionsv1.CustomResourceDefinition, error) { - clusterSubnetStates := &apiextensionsv1.CustomResourceDefinition{} - if err := yaml.Unmarshal(ClusterSubnetStatesYAML, &clusterSubnetStates); err != nil { - return nil, errors.Wrap(err, "error unmarshalling embedded nnc") - } - return clusterSubnetStates, nil -} diff --git a/crd/clustersubnetstate/manifests/_.yaml b/crd/clustersubnetstate/manifests/_.yaml deleted file mode 100644 index c5ab01e713..0000000000 --- a/crd/clustersubnetstate/manifests/_.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.9.0 - creationTimestamp: null -spec: - group: "" - names: - kind: "" - plural: "" - scope: "" - versions: null From 1e79f36e0eec5847fb890e638a42579bd6ce198d Mon Sep 17 00:00:00 2001 From: Rahul Agasthya Date: Thu, 14 Jul 2022 12:44:57 -0700 Subject: [PATCH 3/6] Updated new ClusterSubnetState CRD. Generated YAML files. --- .../api/v1alpha1/clustersubnetstate.go | 2 + .../api/v1alpha1/groupversion_info.go | 6 +- .../acn.azure.com_clustersubnetstates.yaml | 62 +++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml diff --git a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go index 8d78fef6c2..3f609eadb7 100644 --- a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go +++ b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go @@ -15,6 +15,8 @@ import ( // +kubebuilder:object:root=true // +kubebuilder:resource:scope=Namespaced // +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name="Timestamp",type=string,JSONPath=`.status.status` +// +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.spec.timestamp` type ClusterSubnetState struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/crd/clustersubnetstate/api/v1alpha1/groupversion_info.go b/crd/clustersubnetstate/api/v1alpha1/groupversion_info.go index dd6e0aa535..e00e625a54 100644 --- a/crd/clustersubnetstate/api/v1alpha1/groupversion_info.go +++ b/crd/clustersubnetstate/api/v1alpha1/groupversion_info.go @@ -3,8 +3,8 @@ // Package v1alpha contains API Schema definitions for the acn v1alpha API group // +kubebuilder:object:generate=true -// +groupName=networking.azure.com" -package v1alpha +// +groupName=acn.azure.com +package v1alpha1 import ( "k8s.io/apimachinery/pkg/runtime/schema" @@ -13,7 +13,7 @@ import ( var ( // GroupVersion is group version used to register these objects - GroupVersion = schema.GroupVersion{Group: "networking.azure.com", Version: "v1alpha"} + GroupVersion = schema.GroupVersion{Group: "acn.azure.com", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} diff --git a/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml b/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml new file mode 100644 index 0000000000..a239841e92 --- /dev/null +++ b/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml @@ -0,0 +1,62 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.9.0 + creationTimestamp: null + name: clustersubnetstates.acn.azure.com +spec: + group: acn.azure.com + names: + kind: ClusterSubnetState + listKind: ClusterSubnetStateList + plural: clustersubnetstates + singular: clustersubnetstate + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.status + name: Timestamp + type: string + - jsonPath: .spec.timestamp + name: Status + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: ClusterSubnetState is the Schema for the ClusterSubnetState API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ClusterSubnetStateSpec defines the desired state of ClusterSubnetState + properties: + Timestamp: + type: string + required: + - Timestamp + type: object + status: + description: ClusterSubnetStateStatus defines the observed state of ClusterSubnetState + properties: + Status: + type: boolean + required: + - Status + type: object + type: object + served: true + storage: true + subresources: + status: {} From 8a07bb2d97a9a5d3127253505443ca9bb7963b6d Mon Sep 17 00:00:00 2001 From: Rahul Agasthya Date: Wed, 20 Jul 2022 18:24:11 -0700 Subject: [PATCH 4/6] Changed bool Status to Exhausted. --- crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go index 3f609eadb7..79c0a29aa6 100644 --- a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go +++ b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go @@ -32,7 +32,7 @@ type ClusterSubnetStateSpec struct { // ClusterSubnetStateStatus defines the observed state of ClusterSubnetState type ClusterSubnetStateStatus struct { - Status bool `json:"Status"` + Exhausted bool `json:"Status"` } // +kubebuilder:object:root=true From 46c5b48d5e00870a7426e5be653ae3b7f7575298 Mon Sep 17 00:00:00 2001 From: Rahul Agasthya Date: Wed, 20 Jul 2022 18:24:11 -0700 Subject: [PATCH 5/6] Changed bool Status to Exhausted. --- crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go | 2 +- .../manifests/acn.azure.com_clustersubnetstates.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go index 3f609eadb7..2f3c2842b7 100644 --- a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go +++ b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go @@ -32,7 +32,7 @@ type ClusterSubnetStateSpec struct { // ClusterSubnetStateStatus defines the observed state of ClusterSubnetState type ClusterSubnetStateStatus struct { - Status bool `json:"Status"` + Exhausted bool `json:"Exhausted"` } // +kubebuilder:object:root=true diff --git a/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml b/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml index a239841e92..644d2a83de 100644 --- a/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml +++ b/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml @@ -50,10 +50,10 @@ spec: status: description: ClusterSubnetStateStatus defines the observed state of ClusterSubnetState properties: - Status: + Exhausted: type: boolean required: - - Status + - Exhausted type: object type: object served: true From 941cfd0b6288d293432b0d8c834cce540dd80b15 Mon Sep 17 00:00:00 2001 From: Rahul Agasthya Date: Thu, 21 Jul 2022 11:27:47 -0700 Subject: [PATCH 6/6] Modified printer columns. --- crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go | 2 +- .../manifests/acn.azure.com_clustersubnetstates.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go index 2f3c2842b7..59210e835b 100644 --- a/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go +++ b/crd/clustersubnetstate/api/v1alpha1/clustersubnetstate.go @@ -15,7 +15,7 @@ import ( // +kubebuilder:object:root=true // +kubebuilder:resource:scope=Namespaced // +kubebuilder:subresource:status -// +kubebuilder:printcolumn:name="Timestamp",type=string,JSONPath=`.status.status` +// +kubebuilder:printcolumn:name="Timestamp",type=string,JSONPath=`.status.exhausted` // +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.spec.timestamp` type ClusterSubnetState struct { metav1.TypeMeta `json:",inline"` diff --git a/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml b/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml index 644d2a83de..f5fd45807e 100644 --- a/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml +++ b/crd/clustersubnetstate/manifests/acn.azure.com_clustersubnetstates.yaml @@ -16,7 +16,7 @@ spec: scope: Namespaced versions: - additionalPrinterColumns: - - jsonPath: .status.status + - jsonPath: .status.exhausted name: Timestamp type: string - jsonPath: .spec.timestamp