diff --git a/apis/kubernetesconfiguration/v1beta1/zz_generated.conversion_hubs.go b/apis/kubernetesconfiguration/v1beta1/zz_generated.conversion_hubs.go new file mode 100755 index 000000000..9902c0156 --- /dev/null +++ b/apis/kubernetesconfiguration/v1beta1/zz_generated.conversion_hubs.go @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +// Hub marks this type as a conversion hub. +func (tr *KubernetesClusterExtension) Hub() {} diff --git a/apis/kubernetesconfiguration/v1beta1/zz_generated.deepcopy.go b/apis/kubernetesconfiguration/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 000000000..c6c63623e --- /dev/null +++ b/apis/kubernetesconfiguration/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,571 @@ +//go:build !ignore_autogenerated + +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by controller-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "github.com/crossplane/crossplane-runtime/apis/common/v1" + 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 *AksAssignedIdentityInitParameters) DeepCopyInto(out *AksAssignedIdentityInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AksAssignedIdentityInitParameters. +func (in *AksAssignedIdentityInitParameters) DeepCopy() *AksAssignedIdentityInitParameters { + if in == nil { + return nil + } + out := new(AksAssignedIdentityInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AksAssignedIdentityObservation) DeepCopyInto(out *AksAssignedIdentityObservation) { + *out = *in + if in.PrincipalID != nil { + in, out := &in.PrincipalID, &out.PrincipalID + *out = new(string) + **out = **in + } + if in.TenantID != nil { + in, out := &in.TenantID, &out.TenantID + *out = new(string) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AksAssignedIdentityObservation. +func (in *AksAssignedIdentityObservation) DeepCopy() *AksAssignedIdentityObservation { + if in == nil { + return nil + } + out := new(AksAssignedIdentityObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AksAssignedIdentityParameters) DeepCopyInto(out *AksAssignedIdentityParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AksAssignedIdentityParameters. +func (in *AksAssignedIdentityParameters) DeepCopy() *AksAssignedIdentityParameters { + if in == nil { + return nil + } + out := new(AksAssignedIdentityParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubernetesClusterExtension) DeepCopyInto(out *KubernetesClusterExtension) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesClusterExtension. +func (in *KubernetesClusterExtension) DeepCopy() *KubernetesClusterExtension { + if in == nil { + return nil + } + out := new(KubernetesClusterExtension) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KubernetesClusterExtension) 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 *KubernetesClusterExtensionInitParameters) DeepCopyInto(out *KubernetesClusterExtensionInitParameters) { + *out = *in + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ClusterIDRef != nil { + in, out := &in.ClusterIDRef, &out.ClusterIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ClusterIDSelector != nil { + in, out := &in.ClusterIDSelector, &out.ClusterIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.ConfigurationProtectedSettings != nil { + in, out := &in.ConfigurationProtectedSettings, &out.ConfigurationProtectedSettings + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.ConfigurationSettings != nil { + in, out := &in.ConfigurationSettings, &out.ConfigurationSettings + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.ExtensionType != nil { + in, out := &in.ExtensionType, &out.ExtensionType + *out = new(string) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(PlanInitParameters) + (*in).DeepCopyInto(*out) + } + if in.ReleaseNamespace != nil { + in, out := &in.ReleaseNamespace, &out.ReleaseNamespace + *out = new(string) + **out = **in + } + if in.ReleaseTrain != nil { + in, out := &in.ReleaseTrain, &out.ReleaseTrain + *out = new(string) + **out = **in + } + if in.TargetNamespace != nil { + in, out := &in.TargetNamespace, &out.TargetNamespace + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesClusterExtensionInitParameters. +func (in *KubernetesClusterExtensionInitParameters) DeepCopy() *KubernetesClusterExtensionInitParameters { + if in == nil { + return nil + } + out := new(KubernetesClusterExtensionInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubernetesClusterExtensionList) DeepCopyInto(out *KubernetesClusterExtensionList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KubernetesClusterExtension, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesClusterExtensionList. +func (in *KubernetesClusterExtensionList) DeepCopy() *KubernetesClusterExtensionList { + if in == nil { + return nil + } + out := new(KubernetesClusterExtensionList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KubernetesClusterExtensionList) 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 *KubernetesClusterExtensionObservation) DeepCopyInto(out *KubernetesClusterExtensionObservation) { + *out = *in + if in.AksAssignedIdentity != nil { + in, out := &in.AksAssignedIdentity, &out.AksAssignedIdentity + *out = make([]AksAssignedIdentityObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ConfigurationProtectedSettings != nil { + in, out := &in.ConfigurationProtectedSettings, &out.ConfigurationProtectedSettings + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.ConfigurationSettings != nil { + in, out := &in.ConfigurationSettings, &out.ConfigurationSettings + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.CurrentVersion != nil { + in, out := &in.CurrentVersion, &out.CurrentVersion + *out = new(string) + **out = **in + } + if in.ExtensionType != nil { + in, out := &in.ExtensionType, &out.ExtensionType + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(PlanObservation) + (*in).DeepCopyInto(*out) + } + if in.ReleaseNamespace != nil { + in, out := &in.ReleaseNamespace, &out.ReleaseNamespace + *out = new(string) + **out = **in + } + if in.ReleaseTrain != nil { + in, out := &in.ReleaseTrain, &out.ReleaseTrain + *out = new(string) + **out = **in + } + if in.TargetNamespace != nil { + in, out := &in.TargetNamespace, &out.TargetNamespace + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesClusterExtensionObservation. +func (in *KubernetesClusterExtensionObservation) DeepCopy() *KubernetesClusterExtensionObservation { + if in == nil { + return nil + } + out := new(KubernetesClusterExtensionObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubernetesClusterExtensionParameters) DeepCopyInto(out *KubernetesClusterExtensionParameters) { + *out = *in + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ClusterIDRef != nil { + in, out := &in.ClusterIDRef, &out.ClusterIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ClusterIDSelector != nil { + in, out := &in.ClusterIDSelector, &out.ClusterIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.ConfigurationProtectedSettings != nil { + in, out := &in.ConfigurationProtectedSettings, &out.ConfigurationProtectedSettings + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.ConfigurationSettings != nil { + in, out := &in.ConfigurationSettings, &out.ConfigurationSettings + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.ExtensionType != nil { + in, out := &in.ExtensionType, &out.ExtensionType + *out = new(string) + **out = **in + } + if in.Plan != nil { + in, out := &in.Plan, &out.Plan + *out = new(PlanParameters) + (*in).DeepCopyInto(*out) + } + if in.ReleaseNamespace != nil { + in, out := &in.ReleaseNamespace, &out.ReleaseNamespace + *out = new(string) + **out = **in + } + if in.ReleaseTrain != nil { + in, out := &in.ReleaseTrain, &out.ReleaseTrain + *out = new(string) + **out = **in + } + if in.TargetNamespace != nil { + in, out := &in.TargetNamespace, &out.TargetNamespace + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesClusterExtensionParameters. +func (in *KubernetesClusterExtensionParameters) DeepCopy() *KubernetesClusterExtensionParameters { + if in == nil { + return nil + } + out := new(KubernetesClusterExtensionParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubernetesClusterExtensionSpec) DeepCopyInto(out *KubernetesClusterExtensionSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesClusterExtensionSpec. +func (in *KubernetesClusterExtensionSpec) DeepCopy() *KubernetesClusterExtensionSpec { + if in == nil { + return nil + } + out := new(KubernetesClusterExtensionSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubernetesClusterExtensionStatus) DeepCopyInto(out *KubernetesClusterExtensionStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubernetesClusterExtensionStatus. +func (in *KubernetesClusterExtensionStatus) DeepCopy() *KubernetesClusterExtensionStatus { + if in == nil { + return nil + } + out := new(KubernetesClusterExtensionStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PlanInitParameters) DeepCopyInto(out *PlanInitParameters) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Product != nil { + in, out := &in.Product, &out.Product + *out = new(string) + **out = **in + } + if in.PromotionCode != nil { + in, out := &in.PromotionCode, &out.PromotionCode + *out = new(string) + **out = **in + } + if in.Publisher != nil { + in, out := &in.Publisher, &out.Publisher + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlanInitParameters. +func (in *PlanInitParameters) DeepCopy() *PlanInitParameters { + if in == nil { + return nil + } + out := new(PlanInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PlanObservation) DeepCopyInto(out *PlanObservation) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Product != nil { + in, out := &in.Product, &out.Product + *out = new(string) + **out = **in + } + if in.PromotionCode != nil { + in, out := &in.PromotionCode, &out.PromotionCode + *out = new(string) + **out = **in + } + if in.Publisher != nil { + in, out := &in.Publisher, &out.Publisher + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlanObservation. +func (in *PlanObservation) DeepCopy() *PlanObservation { + if in == nil { + return nil + } + out := new(PlanObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PlanParameters) DeepCopyInto(out *PlanParameters) { + *out = *in + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Product != nil { + in, out := &in.Product, &out.Product + *out = new(string) + **out = **in + } + if in.PromotionCode != nil { + in, out := &in.PromotionCode, &out.PromotionCode + *out = new(string) + **out = **in + } + if in.Publisher != nil { + in, out := &in.Publisher, &out.Publisher + *out = new(string) + **out = **in + } + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlanParameters. +func (in *PlanParameters) DeepCopy() *PlanParameters { + if in == nil { + return nil + } + out := new(PlanParameters) + in.DeepCopyInto(out) + return out +} diff --git a/apis/kubernetesconfiguration/v1beta1/zz_generated.managed.go b/apis/kubernetesconfiguration/v1beta1/zz_generated.managed.go new file mode 100644 index 000000000..948fe9669 --- /dev/null +++ b/apis/kubernetesconfiguration/v1beta1/zz_generated.managed.go @@ -0,0 +1,68 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 +// Code generated by angryjet. DO NOT EDIT. + +package v1beta1 + +import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" + +// GetCondition of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this KubernetesClusterExtension. +func (mg *KubernetesClusterExtension) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} diff --git a/apis/kubernetesconfiguration/v1beta1/zz_generated.managedlist.go b/apis/kubernetesconfiguration/v1beta1/zz_generated.managedlist.go new file mode 100644 index 000000000..f86b31fe1 --- /dev/null +++ b/apis/kubernetesconfiguration/v1beta1/zz_generated.managedlist.go @@ -0,0 +1,17 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 +// Code generated by angryjet. DO NOT EDIT. + +package v1beta1 + +import resource "github.com/crossplane/crossplane-runtime/pkg/resource" + +// GetItems of this KubernetesClusterExtensionList. +func (l *KubernetesClusterExtensionList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} diff --git a/apis/kubernetesconfiguration/v1beta1/zz_generated.resolvers.go b/apis/kubernetesconfiguration/v1beta1/zz_generated.resolvers.go new file mode 100644 index 000000000..8d69eae83 --- /dev/null +++ b/apis/kubernetesconfiguration/v1beta1/zz_generated.resolvers.go @@ -0,0 +1,68 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 +// Code generated by angryjet. DO NOT EDIT. +// Code transformed by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + "context" + reference "github.com/crossplane/crossplane-runtime/pkg/reference" + resource "github.com/crossplane/upjet/pkg/resource" + errors "github.com/pkg/errors" + + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + apisresolver "github.com/upbound/provider-azure/internal/apis" + client "sigs.k8s.io/controller-runtime/pkg/client" +) + +func (mg *KubernetesClusterExtension) ResolveReferences( // ResolveReferences of this KubernetesClusterExtension. + ctx context.Context, c client.Reader) error { + var m xpresource.Managed + var l xpresource.ManagedList + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + { + m, l, err = apisresolver.GetManagedResource("containerservice.azure.upbound.io", "v1beta2", "KubernetesCluster", "KubernetesClusterList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ClusterID), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.ForProvider.ClusterIDRef, + Selector: mg.Spec.ForProvider.ClusterIDSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ClusterID") + } + mg.Spec.ForProvider.ClusterID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ClusterIDRef = rsp.ResolvedReference + { + m, l, err = apisresolver.GetManagedResource("containerservice.azure.upbound.io", "v1beta2", "KubernetesCluster", "KubernetesClusterList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ClusterID), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.InitProvider.ClusterIDRef, + Selector: mg.Spec.InitProvider.ClusterIDSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ClusterID") + } + mg.Spec.InitProvider.ClusterID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ClusterIDRef = rsp.ResolvedReference + + return nil +} diff --git a/apis/kubernetesconfiguration/v1beta1/zz_groupversion_info.go b/apis/kubernetesconfiguration/v1beta1/zz_groupversion_info.go new file mode 100755 index 000000000..db288c1b5 --- /dev/null +++ b/apis/kubernetesconfiguration/v1beta1/zz_groupversion_info.go @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +// +kubebuilder:object:generate=true +// +groupName=kubernetesconfiguration.azure.upbound.io +// +versionName=v1beta1 +package v1beta1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +// Package type metadata. +const ( + CRDGroup = "kubernetesconfiguration.azure.upbound.io" + CRDVersion = "v1beta1" +) + +var ( + // CRDGroupVersion is the API Group Version used to register the objects + CRDGroupVersion = schema.GroupVersion{Group: CRDGroup, Version: CRDVersion} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: CRDGroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) diff --git a/apis/kubernetesconfiguration/v1beta1/zz_kubernetesclusterextension_terraformed.go b/apis/kubernetesconfiguration/v1beta1/zz_kubernetesclusterextension_terraformed.go new file mode 100755 index 000000000..a03d2a00d --- /dev/null +++ b/apis/kubernetesconfiguration/v1beta1/zz_kubernetesclusterextension_terraformed.go @@ -0,0 +1,129 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this KubernetesClusterExtension +func (mg *KubernetesClusterExtension) GetTerraformResourceType() string { + return "azurerm_kubernetes_cluster_extension" +} + +// GetConnectionDetailsMapping for this KubernetesClusterExtension +func (tr *KubernetesClusterExtension) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this KubernetesClusterExtension +func (tr *KubernetesClusterExtension) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this KubernetesClusterExtension +func (tr *KubernetesClusterExtension) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this KubernetesClusterExtension +func (tr *KubernetesClusterExtension) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this KubernetesClusterExtension +func (tr *KubernetesClusterExtension) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this KubernetesClusterExtension +func (tr *KubernetesClusterExtension) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this KubernetesClusterExtension +func (tr *KubernetesClusterExtension) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this KubernetesClusterExtension +func (tr *KubernetesClusterExtension) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this KubernetesClusterExtension using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *KubernetesClusterExtension) LateInitialize(attrs []byte) (bool, error) { + params := &KubernetesClusterExtensionParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *KubernetesClusterExtension) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/kubernetesconfiguration/v1beta1/zz_kubernetesclusterextension_types.go b/apis/kubernetesconfiguration/v1beta1/zz_kubernetesclusterextension_types.go new file mode 100755 index 000000000..2ca274c04 --- /dev/null +++ b/apis/kubernetesconfiguration/v1beta1/zz_kubernetesclusterextension_types.go @@ -0,0 +1,287 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type AksAssignedIdentityInitParameters struct { +} + +type AksAssignedIdentityObservation struct { + + // The principal ID of resource identity. + PrincipalID *string `json:"principalId,omitempty" tf:"principal_id,omitempty"` + + // The tenant ID of resource. + TenantID *string `json:"tenantId,omitempty" tf:"tenant_id,omitempty"` + + // The identity type. + Type *string `json:"type,omitempty" tf:"type,omitempty"` +} + +type AksAssignedIdentityParameters struct { +} + +type KubernetesClusterExtensionInitParameters struct { + + // Specifies the Cluster ID. Changing this forces a new Kubernetes Cluster Extension to be created. + // +crossplane:generate:reference:type=github.com/upbound/provider-azure/apis/containerservice/v1beta2.KubernetesCluster + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // Reference to a KubernetesCluster in containerservice to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDRef *v1.Reference `json:"clusterIdRef,omitempty" tf:"-"` + + // Selector for a KubernetesCluster in containerservice to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDSelector *v1.Selector `json:"clusterIdSelector,omitempty" tf:"-"` + + // Configuration settings that are sensitive, as name-value pairs for configuring this extension. + // +mapType=granular + ConfigurationProtectedSettings map[string]*string `json:"configurationProtectedSettings,omitempty" tf:"configuration_protected_settings,omitempty"` + + // Configuration settings, as name-value pairs for configuring this extension. + // +mapType=granular + ConfigurationSettings map[string]*string `json:"configurationSettings,omitempty" tf:"configuration_settings,omitempty"` + + // Specifies the type of extension. It must be one of the extension types registered with Microsoft.KubernetesConfiguration by the Extension publisher. For more information, please refer to Available Extensions for AKS. Changing this forces a new Kubernetes Cluster Extension to be created. + ExtensionType *string `json:"extensionType,omitempty" tf:"extension_type,omitempty"` + + // A plan block as defined below. Changing this forces a new resource to be created. + Plan *PlanInitParameters `json:"plan,omitempty" tf:"plan,omitempty"` + + // Namespace where the extension release must be placed for a cluster scoped extension. If this namespace does not exist, it will be created. Changing this forces a new Kubernetes Cluster Extension to be created. + ReleaseNamespace *string `json:"releaseNamespace,omitempty" tf:"release_namespace,omitempty"` + + // The release train used by this extension. Possible values include but are not limited to Stable, Preview. Changing this forces a new Kubernetes Cluster Extension to be created. + ReleaseTrain *string `json:"releaseTrain,omitempty" tf:"release_train,omitempty"` + + // Namespace where the extension will be created for a namespace scoped extension. If this namespace does not exist, it will be created. Changing this forces a new Kubernetes Cluster Extension to be created. + TargetNamespace *string `json:"targetNamespace,omitempty" tf:"target_namespace,omitempty"` + + // User-specified version that the extension should pin to. If it is not set, Azure will use the latest version and auto upgrade it. Changing this forces a new Kubernetes Cluster Extension to be created. + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type KubernetesClusterExtensionObservation struct { + + // An aks_assigned_identity block as defined below. + AksAssignedIdentity []AksAssignedIdentityObservation `json:"aksAssignedIdentity,omitempty" tf:"aks_assigned_identity,omitempty"` + + // Specifies the Cluster ID. Changing this forces a new Kubernetes Cluster Extension to be created. + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // Configuration settings that are sensitive, as name-value pairs for configuring this extension. + // +mapType=granular + ConfigurationProtectedSettings map[string]*string `json:"configurationProtectedSettings,omitempty" tf:"configuration_protected_settings,omitempty"` + + // Configuration settings, as name-value pairs for configuring this extension. + // +mapType=granular + ConfigurationSettings map[string]*string `json:"configurationSettings,omitempty" tf:"configuration_settings,omitempty"` + + // The current version of the extension. + CurrentVersion *string `json:"currentVersion,omitempty" tf:"current_version,omitempty"` + + // Specifies the type of extension. It must be one of the extension types registered with Microsoft.KubernetesConfiguration by the Extension publisher. For more information, please refer to Available Extensions for AKS. Changing this forces a new Kubernetes Cluster Extension to be created. + ExtensionType *string `json:"extensionType,omitempty" tf:"extension_type,omitempty"` + + // The ID of the Kubernetes Cluster Extension. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // A plan block as defined below. Changing this forces a new resource to be created. + Plan *PlanObservation `json:"plan,omitempty" tf:"plan,omitempty"` + + // Namespace where the extension release must be placed for a cluster scoped extension. If this namespace does not exist, it will be created. Changing this forces a new Kubernetes Cluster Extension to be created. + ReleaseNamespace *string `json:"releaseNamespace,omitempty" tf:"release_namespace,omitempty"` + + // The release train used by this extension. Possible values include but are not limited to Stable, Preview. Changing this forces a new Kubernetes Cluster Extension to be created. + ReleaseTrain *string `json:"releaseTrain,omitempty" tf:"release_train,omitempty"` + + // Namespace where the extension will be created for a namespace scoped extension. If this namespace does not exist, it will be created. Changing this forces a new Kubernetes Cluster Extension to be created. + TargetNamespace *string `json:"targetNamespace,omitempty" tf:"target_namespace,omitempty"` + + // User-specified version that the extension should pin to. If it is not set, Azure will use the latest version and auto upgrade it. Changing this forces a new Kubernetes Cluster Extension to be created. + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type KubernetesClusterExtensionParameters struct { + + // Specifies the Cluster ID. Changing this forces a new Kubernetes Cluster Extension to be created. + // +crossplane:generate:reference:type=github.com/upbound/provider-azure/apis/containerservice/v1beta2.KubernetesCluster + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + // +kubebuilder:validation:Optional + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // Reference to a KubernetesCluster in containerservice to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDRef *v1.Reference `json:"clusterIdRef,omitempty" tf:"-"` + + // Selector for a KubernetesCluster in containerservice to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDSelector *v1.Selector `json:"clusterIdSelector,omitempty" tf:"-"` + + // Configuration settings that are sensitive, as name-value pairs for configuring this extension. + // +kubebuilder:validation:Optional + // +mapType=granular + ConfigurationProtectedSettings map[string]*string `json:"configurationProtectedSettings,omitempty" tf:"configuration_protected_settings,omitempty"` + + // Configuration settings, as name-value pairs for configuring this extension. + // +kubebuilder:validation:Optional + // +mapType=granular + ConfigurationSettings map[string]*string `json:"configurationSettings,omitempty" tf:"configuration_settings,omitempty"` + + // Specifies the type of extension. It must be one of the extension types registered with Microsoft.KubernetesConfiguration by the Extension publisher. For more information, please refer to Available Extensions for AKS. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + ExtensionType *string `json:"extensionType,omitempty" tf:"extension_type,omitempty"` + + // A plan block as defined below. Changing this forces a new resource to be created. + // +kubebuilder:validation:Optional + Plan *PlanParameters `json:"plan,omitempty" tf:"plan,omitempty"` + + // Namespace where the extension release must be placed for a cluster scoped extension. If this namespace does not exist, it will be created. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + ReleaseNamespace *string `json:"releaseNamespace,omitempty" tf:"release_namespace,omitempty"` + + // The release train used by this extension. Possible values include but are not limited to Stable, Preview. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + ReleaseTrain *string `json:"releaseTrain,omitempty" tf:"release_train,omitempty"` + + // Namespace where the extension will be created for a namespace scoped extension. If this namespace does not exist, it will be created. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + TargetNamespace *string `json:"targetNamespace,omitempty" tf:"target_namespace,omitempty"` + + // User-specified version that the extension should pin to. If it is not set, Azure will use the latest version and auto upgrade it. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type PlanInitParameters struct { + + // Specifies the name of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Specifies the product of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + Product *string `json:"product,omitempty" tf:"product,omitempty"` + + // Specifies the promotion code to use with the plan. Changing this forces a new Kubernetes Cluster Extension to be created. + PromotionCode *string `json:"promotionCode,omitempty" tf:"promotion_code,omitempty"` + + // Specifies the publisher of the plan. Changing this forces a new Kubernetes Cluster Extension to be created. + Publisher *string `json:"publisher,omitempty" tf:"publisher,omitempty"` + + // Specifies the version of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type PlanObservation struct { + + // Specifies the name of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Specifies the product of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + Product *string `json:"product,omitempty" tf:"product,omitempty"` + + // Specifies the promotion code to use with the plan. Changing this forces a new Kubernetes Cluster Extension to be created. + PromotionCode *string `json:"promotionCode,omitempty" tf:"promotion_code,omitempty"` + + // Specifies the publisher of the plan. Changing this forces a new Kubernetes Cluster Extension to be created. + Publisher *string `json:"publisher,omitempty" tf:"publisher,omitempty"` + + // Specifies the version of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +type PlanParameters struct { + + // Specifies the name of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + Name *string `json:"name" tf:"name,omitempty"` + + // Specifies the product of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + Product *string `json:"product" tf:"product,omitempty"` + + // Specifies the promotion code to use with the plan. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + PromotionCode *string `json:"promotionCode,omitempty" tf:"promotion_code,omitempty"` + + // Specifies the publisher of the plan. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + Publisher *string `json:"publisher" tf:"publisher,omitempty"` + + // Specifies the version of the plan from the marketplace. Changing this forces a new Kubernetes Cluster Extension to be created. + // +kubebuilder:validation:Optional + Version *string `json:"version,omitempty" tf:"version,omitempty"` +} + +// KubernetesClusterExtensionSpec defines the desired state of KubernetesClusterExtension +type KubernetesClusterExtensionSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider KubernetesClusterExtensionParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider KubernetesClusterExtensionInitParameters `json:"initProvider,omitempty"` +} + +// KubernetesClusterExtensionStatus defines the observed state of KubernetesClusterExtension. +type KubernetesClusterExtensionStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider KubernetesClusterExtensionObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion + +// KubernetesClusterExtension is the Schema for the KubernetesClusterExtensions API. Manages a Kubernetes Cluster Extension. +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,azure} +type KubernetesClusterExtension struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.extensionType) || (has(self.initProvider) && has(self.initProvider.extensionType))",message="spec.forProvider.extensionType is a required parameter" + Spec KubernetesClusterExtensionSpec `json:"spec"` + Status KubernetesClusterExtensionStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// KubernetesClusterExtensionList contains a list of KubernetesClusterExtensions +type KubernetesClusterExtensionList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []KubernetesClusterExtension `json:"items"` +} + +// Repository type metadata. +var ( + KubernetesClusterExtension_Kind = "KubernetesClusterExtension" + KubernetesClusterExtension_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: KubernetesClusterExtension_Kind}.String() + KubernetesClusterExtension_KindAPIVersion = KubernetesClusterExtension_Kind + "." + CRDGroupVersion.String() + KubernetesClusterExtension_GroupVersionKind = CRDGroupVersion.WithKind(KubernetesClusterExtension_Kind) +) + +func init() { + SchemeBuilder.Register(&KubernetesClusterExtension{}, &KubernetesClusterExtensionList{}) +} diff --git a/apis/zz_register.go b/apis/zz_register.go index 66eea1ad4..ddf3d7525 100755 --- a/apis/zz_register.go +++ b/apis/zz_register.go @@ -95,6 +95,7 @@ import ( v1beta2iotcentral "github.com/upbound/provider-azure/apis/iotcentral/v1beta2" v1beta1keyvault "github.com/upbound/provider-azure/apis/keyvault/v1beta1" v1beta2keyvault "github.com/upbound/provider-azure/apis/keyvault/v1beta2" + v1beta1kubernetesconfiguration "github.com/upbound/provider-azure/apis/kubernetesconfiguration/v1beta1" v1beta1kusto "github.com/upbound/provider-azure/apis/kusto/v1beta1" v1beta2kusto "github.com/upbound/provider-azure/apis/kusto/v1beta2" v1beta1labservices "github.com/upbound/provider-azure/apis/labservices/v1beta1" @@ -260,6 +261,7 @@ func init() { v1beta2iotcentral.SchemeBuilder.AddToScheme, v1beta1keyvault.SchemeBuilder.AddToScheme, v1beta2keyvault.SchemeBuilder.AddToScheme, + v1beta1kubernetesconfiguration.SchemeBuilder.AddToScheme, v1beta1kusto.SchemeBuilder.AddToScheme, v1beta2kusto.SchemeBuilder.AddToScheme, v1beta1labservices.SchemeBuilder.AddToScheme, diff --git a/cmd/provider/kubernetesconfiguration/zz_main.go b/cmd/provider/kubernetesconfiguration/zz_main.go new file mode 100644 index 000000000..1ffd9f4c8 --- /dev/null +++ b/cmd/provider/kubernetesconfiguration/zz_main.go @@ -0,0 +1,218 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +package main + +import ( + "context" + "fmt" + "io" + "log" + "os" + "path/filepath" + "time" + + "github.com/alecthomas/kingpin/v2" + xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" + "github.com/crossplane/crossplane-runtime/pkg/certificates" + xpcontroller "github.com/crossplane/crossplane-runtime/pkg/controller" + "github.com/crossplane/crossplane-runtime/pkg/feature" + "github.com/crossplane/crossplane-runtime/pkg/logging" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + "github.com/crossplane/crossplane-runtime/pkg/resource" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/conversion" + kerrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/leaderelection/resourcelock" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/cache" + "sigs.k8s.io/controller-runtime/pkg/log/zap" + "sigs.k8s.io/controller-runtime/pkg/metrics" + "sigs.k8s.io/controller-runtime/pkg/webhook" + + "github.com/upbound/provider-azure/apis" + "github.com/upbound/provider-azure/apis/v1alpha1" + "github.com/upbound/provider-azure/config" + resolverapis "github.com/upbound/provider-azure/internal/apis" + "github.com/upbound/provider-azure/internal/clients" + "github.com/upbound/provider-azure/internal/controller" + "github.com/upbound/provider-azure/internal/features" +) + +const ( + webhookTLSCertDirEnvVar = "WEBHOOK_TLS_CERT_DIR" + tlsServerCertDirEnvVar = "TLS_SERVER_CERTS_DIR" + certsDirEnvVar = "CERTS_DIR" + tlsServerCertDir = "/tls/server" +) + +func deprecationAction(flagName string) kingpin.Action { + return func(c *kingpin.ParseContext) error { + _, err := fmt.Fprintf(os.Stderr, "warning: Command-line flag %q is deprecated and no longer used. It will be removed in a future release. Please remove it from all of your configurations (ControllerConfigs, etc.).\n", flagName) + kingpin.FatalIfError(err, "Failed to print the deprecation notice.") + return nil + } +} + +func main() { + var ( + app = kingpin.New(filepath.Base(os.Args[0]), "Terraform based Crossplane provider for Azure").DefaultEnvars() + debug = app.Flag("debug", "Run with debug logging.").Short('d').Bool() + syncInterval = app.Flag("sync", "Sync interval controls how often all resources will be double checked for drift.").Short('s').Default("1h").Duration() + pollInterval = app.Flag("poll", "Poll interval controls how often an individual resource should be checked for drift.").Default("10m").Duration() + pollStateMetricInterval = app.Flag("poll-state-metric", "State metric recording interval").Default("5s").Duration() + leaderElection = app.Flag("leader-election", "Use leader election for the controller manager.").Short('l').Default("false").OverrideDefaultFromEnvar("LEADER_ELECTION").Bool() + maxReconcileRate = app.Flag("max-reconcile-rate", "The global maximum rate per second at which resources may checked for drift from the desired state.").Default("100").Int() + + namespace = app.Flag("namespace", "Namespace used to set as default scope in default secret store config.").Default("crossplane-system").Envar("POD_NAMESPACE").String() + essTLSCertsPath = app.Flag("ess-tls-cert-dir", "Path of ESS TLS certificates.").Envar("ESS_TLS_CERTS_DIR").String() + enableExternalSecretStores = app.Flag("enable-external-secret-stores", "Enable support for ExternalSecretStores.").Default("false").Envar("ENABLE_EXTERNAL_SECRET_STORES").Bool() + enableManagementPolicies = app.Flag("enable-management-policies", "Enable support for Management Policies.").Default("true").Envar("ENABLE_MANAGEMENT_POLICIES").Bool() + + certsDirSet = false + // we record whether the command-line option "--certs-dir" was supplied + // in the registered PreAction for the flag. + certsDir = app.Flag("certs-dir", "The directory that contains the server key and certificate.").Default(tlsServerCertDir).Envar(certsDirEnvVar).PreAction(func(_ *kingpin.ParseContext) error { + certsDirSet = true + return nil + }).String() + + // now deprecated command-line arguments with the Terraform SDK-based upjet architecture + _ = app.Flag("provider-ttl", "[DEPRECATED: This option is no longer used and it will be removed in a future release.] TTL for the native plugin processes before they are replaced. Changing the default may increase memory consumption.").Hidden().Action(deprecationAction("provider-ttl")).Int() + _ = app.Flag("terraform-version", "[DEPRECATED: This option is no longer used and it will be removed in a future release.] Terraform version.").Envar("TERRAFORM_VERSION").Hidden().Action(deprecationAction("terraform-version")).String() + _ = app.Flag("terraform-provider-version", "[DEPRECATED: This option is no longer used and it will be removed in a future release.] Terraform provider version.").Envar("TERRAFORM_PROVIDER_VERSION").Hidden().Action(deprecationAction("terraform-provider-version")).String() + _ = app.Flag("terraform-native-provider-path", "[DEPRECATED: This option is no longer used and it will be removed in a future release.] Terraform native provider path for shared execution.").Envar("TERRAFORM_NATIVE_PROVIDER_PATH").Hidden().Action(deprecationAction("terraform-native-provider-path")).String() + _ = app.Flag("terraform-provider-source", "[DEPRECATED: This option is no longer used and it will be removed in a future release.] Terraform provider source.").Envar("TERRAFORM_PROVIDER_SOURCE").Hidden().Action(deprecationAction("terraform-provider-source")).String() + ) + + kingpin.MustParse(app.Parse(os.Args[1:])) + log.Default().SetOutput(io.Discard) + ctrl.SetLogger(zap.New(zap.WriteTo(io.Discard))) + + zl := zap.New(zap.UseDevMode(*debug)) + logr := logging.NewLogrLogger(zl.WithName("provider-azure")) + if *debug { + // The controller-runtime runs with a no-op logger by default. It is + // *very* verbose even at info level, so we only provide it a real + // logger when we're running in debug mode. + ctrl.SetLogger(zl) + } + + // currently, we configure the jitter to be the 5% of the poll interval + pollJitter := time.Duration(float64(*pollInterval) * 0.05) + logr.Debug("Starting", "sync-interval", syncInterval.String(), + "poll-interval", pollInterval.String(), "poll-jitter", pollJitter, "max-reconcile-rate", *maxReconcileRate) + + cfg, err := ctrl.GetConfig() + kingpin.FatalIfError(err, "Cannot get API server rest config") + + // Get the TLS certs directory from the environment variables set by + // Crossplane if they're available. + // In older XP versions we used WEBHOOK_TLS_CERT_DIR, in newer versions + // we use TLS_SERVER_CERTS_DIR. If an explicit certs dir is not supplied + // via the command-line options, then these environment variables are used + // instead. + if !certsDirSet { + // backwards-compatibility concerns + xpCertsDir := os.Getenv(certsDirEnvVar) + if xpCertsDir == "" { + xpCertsDir = os.Getenv(tlsServerCertDirEnvVar) + } + if xpCertsDir == "" { + xpCertsDir = os.Getenv(webhookTLSCertDirEnvVar) + } + // we probably don't need this condition but just to be on the + // safe side, if we are missing any kingpin machinery details... + if xpCertsDir != "" { + *certsDir = xpCertsDir + } + } + + mgr, err := ctrl.NewManager(cfg, ctrl.Options{ + LeaderElection: *leaderElection, + LeaderElectionID: "crossplane-leader-election-provider-azure-kubernetesconfiguration", + Cache: cache.Options{ + SyncPeriod: syncInterval, + }, + WebhookServer: webhook.NewServer( + webhook.Options{ + CertDir: *certsDir, + }), + LeaderElectionResourceLock: resourcelock.LeasesResourceLock, + LeaseDuration: func() *time.Duration { d := 60 * time.Second; return &d }(), + RenewDeadline: func() *time.Duration { d := 50 * time.Second; return &d }(), + }) + kingpin.FatalIfError(err, "Cannot create controller manager") + kingpin.FatalIfError(apis.AddToScheme(mgr.GetScheme()), "Cannot add Azure APIs to scheme") + kingpin.FatalIfError(resolverapis.BuildScheme(apis.AddToSchemes), "Cannot register the Azure APIs with the API resolver's runtime scheme") + + metricRecorder := managed.NewMRMetricRecorder() + stateMetrics := statemetrics.NewMRStateMetrics() + + metrics.Registry.MustRegister(metricRecorder) + metrics.Registry.MustRegister(stateMetrics) + + ctx := context.Background() + provider, err := config.GetProvider(ctx, false) + kingpin.FatalIfError(err, "Cannot initialize the provider configuration") + o := tjcontroller.Options{ + Options: xpcontroller.Options{ + Logger: logr, + GlobalRateLimiter: ratelimiter.NewGlobal(*maxReconcileRate), + PollInterval: *pollInterval, + MaxConcurrentReconciles: *maxReconcileRate, + Features: &feature.Flags{}, + MetricOptions: &xpcontroller.MetricOptions{ + PollStateMetricInterval: *pollStateMetricInterval, + MRMetrics: metricRecorder, + MRStateMetrics: stateMetrics, + }, + }, + Provider: provider, + SetupFn: clients.TerraformSetupBuilder(provider.TerraformProvider), + PollJitter: pollJitter, + OperationTrackerStore: tjcontroller.NewOperationStore(logr), + StartWebhooks: *certsDir != "", + } + + if *enableManagementPolicies { + o.Features.Enable(features.EnableBetaManagementPolicies) + logr.Info("Beta feature enabled", "flag", features.EnableBetaManagementPolicies) + } + + if *enableExternalSecretStores { + o.SecretStoreConfigGVK = &v1alpha1.StoreConfigGroupVersionKind + logr.Info("Alpha feature enabled", "flag", features.EnableAlphaExternalSecretStores) + + o.ESSOptions = &tjcontroller.ESSOptions{} + if *essTLSCertsPath != "" { + logr.Info("ESS TLS certificates path is set. Loading mTLS configuration.") + tCfg, err := certificates.LoadMTLSConfig(filepath.Join(*essTLSCertsPath, "ca.crt"), filepath.Join(*essTLSCertsPath, "tls.crt"), filepath.Join(*essTLSCertsPath, "tls.key"), false) + kingpin.FatalIfError(err, "Cannot load ESS TLS config.") + + o.ESSOptions.TLSConfig = tCfg + } + + // Ensure default store config exists. + kingpin.FatalIfError(resource.Ignore(kerrors.IsAlreadyExists, mgr.GetClient().Create(ctx, &v1alpha1.StoreConfig{ + ObjectMeta: metav1.ObjectMeta{ + Name: "default", + }, + Spec: v1alpha1.StoreConfigSpec{ + // NOTE(turkenh): We only set required spec and expect optional + // ones to properly be initialized with CRD level default values. + SecretStoreConfig: xpv1.SecretStoreConfig{ + DefaultScope: *namespace, + }, + }, + })), "cannot create default store config") + } + + kingpin.FatalIfError(conversion.RegisterConversions(o.Provider), "Cannot initialize the webhook conversion registry") + kingpin.FatalIfError(controller.Setup_kubernetesconfiguration(mgr, o), "Cannot setup Azure controllers") + kingpin.FatalIfError(mgr.Start(ctrl.SetupSignalHandler()), "Cannot start controller manager") +} diff --git a/config/externalname.go b/config/externalname.go index 1739337cf..a5e9af455 100644 --- a/config/externalname.go +++ b/config/externalname.go @@ -397,6 +397,7 @@ var TerraformPluginSDKExternalNameConfigs = map[string]config.ExternalName{ // containerservice "azurerm_kubernetes_cluster": config.TemplatedStringAsIdentifier("name", "/subscriptions/{{ .setup.configuration.subscription_id }}/resourceGroups/{{ .parameters.resource_group_name }}/providers/Microsoft.ContainerService/managedClusters/{{ .external_name }}"), + "azurerm_kubernetes_cluster_extension": config.TemplatedStringAsIdentifier("name", "/subscriptions/{{ .setup.configuration.subscription_id }}/resourceGroups/{{ .parameters.resource_group_name }}/providers/Microsoft.ContainerService/managedClusters/{{ .parameters.kubernetes_cluster_id }}/providers/Microsoft.KubernetesConfiguration/extensions/{{ .external_name }}"), "azurerm_kubernetes_cluster_node_pool": config.TemplatedStringAsIdentifier("name", "{{ .parameters.kubernetes_cluster_id }}/agentPools/{{ .external_name }}"), // containerregistry diff --git a/config/generated.lst b/config/generated.lst index 249d60079..a345fd0c8 100644 --- a/config/generated.lst +++ b/config/generated.lst @@ -1 +1 @@ -["azurerm_advanced_threat_protection","azurerm_analysis_services_server","azurerm_api_management","azurerm_api_management_api","azurerm_api_management_api_diagnostic","azurerm_api_management_api_operation","azurerm_api_management_api_operation_policy","azurerm_api_management_api_operation_tag","azurerm_api_management_api_policy","azurerm_api_management_api_release","azurerm_api_management_api_schema","azurerm_api_management_api_tag","azurerm_api_management_api_version_set","azurerm_api_management_authorization_server","azurerm_api_management_backend","azurerm_api_management_certificate","azurerm_api_management_custom_domain","azurerm_api_management_diagnostic","azurerm_api_management_email_template","azurerm_api_management_gateway","azurerm_api_management_gateway_api","azurerm_api_management_global_schema","azurerm_api_management_identity_provider_aad","azurerm_api_management_identity_provider_facebook","azurerm_api_management_identity_provider_google","azurerm_api_management_identity_provider_microsoft","azurerm_api_management_identity_provider_twitter","azurerm_api_management_logger","azurerm_api_management_named_value","azurerm_api_management_notification_recipient_email","azurerm_api_management_notification_recipient_user","azurerm_api_management_openid_connect_provider","azurerm_api_management_policy","azurerm_api_management_product","azurerm_api_management_product_api","azurerm_api_management_product_policy","azurerm_api_management_product_tag","azurerm_api_management_redis_cache","azurerm_api_management_subscription","azurerm_api_management_tag","azurerm_api_management_user","azurerm_app_configuration","azurerm_app_service_certificate_order","azurerm_app_service_plan","azurerm_application_gateway","azurerm_application_insights","azurerm_application_insights_analytics_item","azurerm_application_insights_api_key","azurerm_application_insights_smart_detection_rule","azurerm_application_insights_standard_web_test","azurerm_application_insights_web_test","azurerm_application_insights_workbook","azurerm_application_insights_workbook_template","azurerm_application_security_group","azurerm_attestation_provider","azurerm_automation_account","azurerm_automation_connection","azurerm_automation_connection_classic_certificate","azurerm_automation_connection_type","azurerm_automation_credential","azurerm_automation_hybrid_runbook_worker_group","azurerm_automation_module","azurerm_automation_runbook","azurerm_automation_schedule","azurerm_automation_variable_bool","azurerm_automation_variable_datetime","azurerm_automation_variable_int","azurerm_automation_variable_string","azurerm_automation_webhook","azurerm_availability_set","azurerm_backup_container_storage_account","azurerm_backup_policy_file_share","azurerm_backup_policy_vm","azurerm_backup_policy_vm_workload","azurerm_backup_protected_file_share","azurerm_backup_protected_vm","azurerm_bastion_host","azurerm_bot_channel_alexa","azurerm_bot_channel_directline","azurerm_bot_channel_line","azurerm_bot_channel_ms_teams","azurerm_bot_channel_slack","azurerm_bot_channel_sms","azurerm_bot_channel_web_chat","azurerm_bot_channels_registration","azurerm_bot_connection","azurerm_bot_web_app","azurerm_capacity_reservation","azurerm_capacity_reservation_group","azurerm_cdn_endpoint","azurerm_cdn_frontdoor_custom_domain","azurerm_cdn_frontdoor_custom_domain_association","azurerm_cdn_frontdoor_endpoint","azurerm_cdn_frontdoor_firewall_policy","azurerm_cdn_frontdoor_origin","azurerm_cdn_frontdoor_origin_group","azurerm_cdn_frontdoor_profile","azurerm_cdn_frontdoor_route","azurerm_cdn_frontdoor_rule","azurerm_cdn_frontdoor_rule_set","azurerm_cdn_frontdoor_security_policy","azurerm_cdn_profile","azurerm_cognitive_account","azurerm_cognitive_deployment","azurerm_communication_service","azurerm_confidential_ledger","azurerm_consumption_budget_management_group","azurerm_consumption_budget_resource_group","azurerm_consumption_budget_subscription","azurerm_container_app","azurerm_container_app_environment","azurerm_container_connected_registry","azurerm_container_registry","azurerm_container_registry_agent_pool","azurerm_container_registry_scope_map","azurerm_container_registry_token","azurerm_container_registry_token_password","azurerm_container_registry_webhook","azurerm_cosmosdb_account","azurerm_cosmosdb_cassandra_cluster","azurerm_cosmosdb_cassandra_datacenter","azurerm_cosmosdb_cassandra_keyspace","azurerm_cosmosdb_cassandra_table","azurerm_cosmosdb_gremlin_database","azurerm_cosmosdb_gremlin_graph","azurerm_cosmosdb_mongo_collection","azurerm_cosmosdb_mongo_database","azurerm_cosmosdb_sql_container","azurerm_cosmosdb_sql_database","azurerm_cosmosdb_sql_dedicated_gateway","azurerm_cosmosdb_sql_function","azurerm_cosmosdb_sql_role_assignment","azurerm_cosmosdb_sql_role_definition","azurerm_cosmosdb_sql_stored_procedure","azurerm_cosmosdb_sql_trigger","azurerm_cosmosdb_table","azurerm_cost_anomaly_alert","azurerm_custom_provider","azurerm_data_factory","azurerm_data_factory_custom_dataset","azurerm_data_factory_data_flow","azurerm_data_factory_dataset_azure_blob","azurerm_data_factory_dataset_binary","azurerm_data_factory_dataset_cosmosdb_sqlapi","azurerm_data_factory_dataset_delimited_text","azurerm_data_factory_dataset_http","azurerm_data_factory_dataset_json","azurerm_data_factory_dataset_mysql","azurerm_data_factory_dataset_parquet","azurerm_data_factory_dataset_postgresql","azurerm_data_factory_dataset_snowflake","azurerm_data_factory_dataset_sql_server_table","azurerm_data_factory_integration_runtime_azure","azurerm_data_factory_integration_runtime_azure_ssis","azurerm_data_factory_integration_runtime_managed","azurerm_data_factory_integration_runtime_self_hosted","azurerm_data_factory_linked_custom_service","azurerm_data_factory_linked_service_azure_blob_storage","azurerm_data_factory_linked_service_azure_databricks","azurerm_data_factory_linked_service_azure_file_storage","azurerm_data_factory_linked_service_azure_function","azurerm_data_factory_linked_service_azure_search","azurerm_data_factory_linked_service_azure_sql_database","azurerm_data_factory_linked_service_azure_table_storage","azurerm_data_factory_linked_service_cosmosdb","azurerm_data_factory_linked_service_cosmosdb_mongoapi","azurerm_data_factory_linked_service_data_lake_storage_gen2","azurerm_data_factory_linked_service_key_vault","azurerm_data_factory_linked_service_kusto","azurerm_data_factory_linked_service_mysql","azurerm_data_factory_linked_service_odata","azurerm_data_factory_linked_service_odbc","azurerm_data_factory_linked_service_postgresql","azurerm_data_factory_linked_service_sftp","azurerm_data_factory_linked_service_snowflake","azurerm_data_factory_linked_service_sql_server","azurerm_data_factory_linked_service_synapse","azurerm_data_factory_linked_service_web","azurerm_data_factory_managed_private_endpoint","azurerm_data_factory_pipeline","azurerm_data_factory_trigger_blob_event","azurerm_data_factory_trigger_custom_event","azurerm_data_factory_trigger_schedule","azurerm_data_protection_backup_instance_blob_storage","azurerm_data_protection_backup_instance_disk","azurerm_data_protection_backup_instance_postgresql","azurerm_data_protection_backup_policy_blob_storage","azurerm_data_protection_backup_policy_disk","azurerm_data_protection_backup_policy_kubernetes_cluster","azurerm_data_protection_backup_policy_postgresql","azurerm_data_protection_backup_vault","azurerm_data_protection_resource_guard","azurerm_data_share","azurerm_data_share_account","azurerm_data_share_dataset_blob_storage","azurerm_data_share_dataset_data_lake_gen2","azurerm_data_share_dataset_kusto_cluster","azurerm_data_share_dataset_kusto_database","azurerm_database_migration_project","azurerm_database_migration_service","azurerm_databox_edge_device","azurerm_databricks_access_connector","azurerm_databricks_workspace","azurerm_databricks_workspace_customer_managed_key","azurerm_databricks_workspace_root_dbfs_customer_managed_key","azurerm_dedicated_host","azurerm_dev_test_global_vm_shutdown_schedule","azurerm_dev_test_lab","azurerm_dev_test_linux_virtual_machine","azurerm_dev_test_policy","azurerm_dev_test_schedule","azurerm_dev_test_virtual_network","azurerm_dev_test_windows_virtual_machine","azurerm_digital_twins_instance","azurerm_disk_access","azurerm_disk_encryption_set","azurerm_disk_pool","azurerm_dns_a_record","azurerm_dns_aaaa_record","azurerm_dns_caa_record","azurerm_dns_cname_record","azurerm_dns_mx_record","azurerm_dns_ns_record","azurerm_dns_ptr_record","azurerm_dns_srv_record","azurerm_dns_txt_record","azurerm_dns_zone","azurerm_elastic_cloud_elasticsearch","azurerm_eventgrid_domain","azurerm_eventgrid_domain_topic","azurerm_eventgrid_event_subscription","azurerm_eventgrid_system_topic","azurerm_eventgrid_topic","azurerm_eventhub","azurerm_eventhub_authorization_rule","azurerm_eventhub_consumer_group","azurerm_eventhub_namespace","azurerm_eventhub_namespace_authorization_rule","azurerm_eventhub_namespace_disaster_recovery_config","azurerm_eventhub_namespace_schema_group","azurerm_express_route_circuit","azurerm_express_route_circuit_authorization","azurerm_express_route_circuit_connection","azurerm_express_route_circuit_peering","azurerm_express_route_connection","azurerm_express_route_gateway","azurerm_express_route_port","azurerm_federated_identity_credential","azurerm_firewall","azurerm_firewall_application_rule_collection","azurerm_firewall_nat_rule_collection","azurerm_firewall_network_rule_collection","azurerm_firewall_policy","azurerm_firewall_policy_rule_collection_group","azurerm_fluid_relay_server","azurerm_frontdoor","azurerm_frontdoor_custom_https_configuration","azurerm_frontdoor_firewall_policy","azurerm_frontdoor_rules_engine","azurerm_function_app","azurerm_function_app_active_slot","azurerm_function_app_function","azurerm_function_app_hybrid_connection","azurerm_function_app_slot","azurerm_gallery_application","azurerm_gallery_application_version","azurerm_hdinsight_hadoop_cluster","azurerm_hdinsight_hbase_cluster","azurerm_hdinsight_interactive_query_cluster","azurerm_hdinsight_kafka_cluster","azurerm_hdinsight_spark_cluster","azurerm_healthbot","azurerm_healthcare_dicom_service","azurerm_healthcare_fhir_service","azurerm_healthcare_medtech_service","azurerm_healthcare_medtech_service_fhir_destination","azurerm_healthcare_service","azurerm_healthcare_workspace","azurerm_hpc_cache","azurerm_hpc_cache_access_policy","azurerm_hpc_cache_blob_nfs_target","azurerm_hpc_cache_blob_target","azurerm_hpc_cache_nfs_target","azurerm_image","azurerm_integration_service_environment","azurerm_iot_security_device_group","azurerm_iot_security_solution","azurerm_iot_time_series_insights_event_source_eventhub","azurerm_iot_time_series_insights_event_source_iothub","azurerm_iot_time_series_insights_gen2_environment","azurerm_iot_time_series_insights_reference_data_set","azurerm_iot_time_series_insights_standard_environment","azurerm_iotcentral_application","azurerm_iotcentral_application_network_rule_set","azurerm_iothub","azurerm_iothub_certificate","azurerm_iothub_consumer_group","azurerm_iothub_device_update_account","azurerm_iothub_device_update_instance","azurerm_iothub_dps","azurerm_iothub_dps_certificate","azurerm_iothub_dps_shared_access_policy","azurerm_iothub_endpoint_eventhub","azurerm_iothub_endpoint_servicebus_queue","azurerm_iothub_endpoint_servicebus_topic","azurerm_iothub_endpoint_storage_container","azurerm_iothub_enrichment","azurerm_iothub_fallback_route","azurerm_iothub_route","azurerm_iothub_shared_access_policy","azurerm_ip_group","azurerm_key_vault","azurerm_key_vault_access_policy","azurerm_key_vault_certificate","azurerm_key_vault_certificate_contacts","azurerm_key_vault_certificate_issuer","azurerm_key_vault_key","azurerm_key_vault_managed_hardware_security_module","azurerm_key_vault_managed_storage_account","azurerm_key_vault_managed_storage_account_sas_token_definition","azurerm_key_vault_secret","azurerm_kubernetes_cluster","azurerm_kubernetes_cluster_node_pool","azurerm_kubernetes_fleet_manager","azurerm_kusto_attached_database_configuration","azurerm_kusto_cluster","azurerm_kusto_cluster_managed_private_endpoint","azurerm_kusto_cluster_principal_assignment","azurerm_kusto_database","azurerm_kusto_database_principal_assignment","azurerm_kusto_eventgrid_data_connection","azurerm_kusto_eventhub_data_connection","azurerm_kusto_iothub_data_connection","azurerm_lab_service_lab","azurerm_lab_service_plan","azurerm_lb","azurerm_lb_backend_address_pool","azurerm_lb_backend_address_pool_address","azurerm_lb_nat_pool","azurerm_lb_nat_rule","azurerm_lb_outbound_rule","azurerm_lb_probe","azurerm_lb_rule","azurerm_linux_function_app","azurerm_linux_function_app_slot","azurerm_linux_virtual_machine","azurerm_linux_virtual_machine_scale_set","azurerm_linux_web_app","azurerm_linux_web_app_slot","azurerm_load_test","azurerm_local_network_gateway","azurerm_log_analytics_data_export_rule","azurerm_log_analytics_datasource_windows_event","azurerm_log_analytics_datasource_windows_performance_counter","azurerm_log_analytics_linked_service","azurerm_log_analytics_linked_storage_account","azurerm_log_analytics_query_pack","azurerm_log_analytics_query_pack_query","azurerm_log_analytics_saved_search","azurerm_log_analytics_solution","azurerm_log_analytics_workspace","azurerm_logic_app_action_custom","azurerm_logic_app_action_http","azurerm_logic_app_integration_account","azurerm_logic_app_integration_account_batch_configuration","azurerm_logic_app_integration_account_partner","azurerm_logic_app_integration_account_schema","azurerm_logic_app_integration_account_session","azurerm_logic_app_trigger_custom","azurerm_logic_app_trigger_http_request","azurerm_logic_app_trigger_recurrence","azurerm_logic_app_workflow","azurerm_logz_monitor","azurerm_logz_sub_account","azurerm_logz_sub_account_tag_rule","azurerm_logz_tag_rule","azurerm_machine_learning_compute_cluster","azurerm_machine_learning_compute_instance","azurerm_machine_learning_synapse_spark","azurerm_machine_learning_workspace","azurerm_maintenance_assignment_dedicated_host","azurerm_maintenance_assignment_virtual_machine","azurerm_maintenance_configuration","azurerm_managed_application_definition","azurerm_managed_disk","azurerm_managed_disk_sas_token","azurerm_management_group","azurerm_management_group_subscription_association","azurerm_management_lock","azurerm_maps_account","azurerm_maps_creator","azurerm_mariadb_configuration","azurerm_mariadb_database","azurerm_mariadb_firewall_rule","azurerm_mariadb_server","azurerm_mariadb_virtual_network_rule","azurerm_marketplace_agreement","azurerm_media_asset","azurerm_media_asset_filter","azurerm_media_content_key_policy","azurerm_media_job","azurerm_media_live_event","azurerm_media_live_event_output","azurerm_media_services_account","azurerm_media_services_account_filter","azurerm_media_streaming_endpoint","azurerm_media_streaming_locator","azurerm_media_streaming_policy","azurerm_media_transform","azurerm_monitor_action_group","azurerm_monitor_action_rule_action_group","azurerm_monitor_action_rule_suppression","azurerm_monitor_activity_log_alert","azurerm_monitor_alert_processing_rule_action_group","azurerm_monitor_alert_processing_rule_suppression","azurerm_monitor_autoscale_setting","azurerm_monitor_data_collection_endpoint","azurerm_monitor_data_collection_rule","azurerm_monitor_data_collection_rule_association","azurerm_monitor_diagnostic_setting","azurerm_monitor_metric_alert","azurerm_monitor_private_link_scope","azurerm_monitor_private_link_scoped_service","azurerm_monitor_scheduled_query_rules_alert","azurerm_monitor_scheduled_query_rules_alert_v2","azurerm_monitor_scheduled_query_rules_log","azurerm_monitor_smart_detector_alert_rule","azurerm_mssql_database","azurerm_mssql_database_extended_auditing_policy","azurerm_mssql_database_vulnerability_assessment_rule_baseline","azurerm_mssql_elasticpool","azurerm_mssql_failover_group","azurerm_mssql_firewall_rule","azurerm_mssql_job_agent","azurerm_mssql_job_credential","azurerm_mssql_managed_database","azurerm_mssql_managed_instance","azurerm_mssql_managed_instance_active_directory_administrator","azurerm_mssql_managed_instance_failover_group","azurerm_mssql_managed_instance_vulnerability_assessment","azurerm_mssql_outbound_firewall_rule","azurerm_mssql_server","azurerm_mssql_server_dns_alias","azurerm_mssql_server_microsoft_support_auditing_policy","azurerm_mssql_server_security_alert_policy","azurerm_mssql_server_transparent_data_encryption","azurerm_mssql_server_vulnerability_assessment","azurerm_mssql_virtual_network_rule","azurerm_mysql_active_directory_administrator","azurerm_mysql_configuration","azurerm_mysql_database","azurerm_mysql_firewall_rule","azurerm_mysql_flexible_database","azurerm_mysql_flexible_server","azurerm_mysql_flexible_server_configuration","azurerm_mysql_flexible_server_firewall_rule","azurerm_mysql_server","azurerm_mysql_virtual_network_rule","azurerm_nat_gateway","azurerm_nat_gateway_public_ip_association","azurerm_nat_gateway_public_ip_prefix_association","azurerm_netapp_account","azurerm_netapp_pool","azurerm_netapp_snapshot","azurerm_netapp_snapshot_policy","azurerm_netapp_volume","azurerm_network_connection_monitor","azurerm_network_ddos_protection_plan","azurerm_network_interface","azurerm_network_interface_application_security_group_association","azurerm_network_interface_backend_address_pool_association","azurerm_network_interface_nat_rule_association","azurerm_network_interface_security_group_association","azurerm_network_manager","azurerm_network_manager_management_group_connection","azurerm_network_manager_network_group","azurerm_network_manager_static_member","azurerm_network_manager_subscription_connection","azurerm_network_packet_capture","azurerm_network_profile","azurerm_network_security_group","azurerm_network_security_rule","azurerm_network_watcher","azurerm_network_watcher_flow_log","azurerm_notification_hub","azurerm_notification_hub_authorization_rule","azurerm_notification_hub_namespace","azurerm_orbital_contact_profile","azurerm_orbital_spacecraft","azurerm_orchestrated_virtual_machine_scale_set","azurerm_pim_active_role_assignment","azurerm_pim_eligible_role_assignment","azurerm_point_to_site_vpn_gateway","azurerm_policy_definition","azurerm_policy_virtual_machine_configuration_assignment","azurerm_portal_dashboard","azurerm_postgresql_active_directory_administrator","azurerm_postgresql_configuration","azurerm_postgresql_database","azurerm_postgresql_firewall_rule","azurerm_postgresql_flexible_server","azurerm_postgresql_flexible_server_active_directory_administrator","azurerm_postgresql_flexible_server_configuration","azurerm_postgresql_flexible_server_database","azurerm_postgresql_flexible_server_firewall_rule","azurerm_postgresql_server","azurerm_postgresql_server_key","azurerm_postgresql_virtual_network_rule","azurerm_powerbi_embedded","azurerm_private_dns_a_record","azurerm_private_dns_aaaa_record","azurerm_private_dns_cname_record","azurerm_private_dns_mx_record","azurerm_private_dns_ptr_record","azurerm_private_dns_resolver","azurerm_private_dns_srv_record","azurerm_private_dns_txt_record","azurerm_private_dns_zone","azurerm_private_dns_zone_virtual_network_link","azurerm_private_endpoint","azurerm_private_endpoint_application_security_group_association","azurerm_private_link_service","azurerm_proximity_placement_group","azurerm_public_ip","azurerm_public_ip_prefix","azurerm_purview_account","azurerm_recovery_services_vault","azurerm_redis_cache","azurerm_redis_enterprise_cluster","azurerm_redis_enterprise_database","azurerm_redis_firewall_rule","azurerm_redis_linked_server","azurerm_relay_hybrid_connection","azurerm_relay_hybrid_connection_authorization_rule","azurerm_relay_namespace","azurerm_relay_namespace_authorization_rule","azurerm_resource_deployment_script_azure_cli","azurerm_resource_deployment_script_azure_power_shell","azurerm_resource_group","azurerm_resource_group_cost_management_export","azurerm_resource_group_policy_assignment","azurerm_resource_group_template_deployment","azurerm_resource_policy_assignment","azurerm_resource_policy_exemption","azurerm_resource_policy_remediation","azurerm_resource_provider_registration","azurerm_role_assignment","azurerm_role_definition","azurerm_route","azurerm_route_filter","azurerm_route_map","azurerm_route_server","azurerm_route_server_bgp_connection","azurerm_route_table","azurerm_search_service","azurerm_search_shared_private_link_service","azurerm_security_center_assessment","azurerm_security_center_assessment_policy","azurerm_security_center_auto_provisioning","azurerm_security_center_contact","azurerm_security_center_server_vulnerability_assessment","azurerm_security_center_server_vulnerability_assessment_virtual_machine","azurerm_security_center_setting","azurerm_security_center_storage_defender","azurerm_security_center_subscription_pricing","azurerm_security_center_workspace","azurerm_sentinel_alert_rule_fusion","azurerm_sentinel_alert_rule_machine_learning_behavior_analytics","azurerm_sentinel_alert_rule_ms_security_incident","azurerm_sentinel_automation_rule","azurerm_sentinel_data_connector_iot","azurerm_sentinel_log_analytics_workspace_onboarding","azurerm_sentinel_watchlist","azurerm_service_fabric_cluster","azurerm_service_fabric_managed_cluster","azurerm_service_plan","azurerm_servicebus_namespace","azurerm_servicebus_namespace_authorization_rule","azurerm_servicebus_namespace_disaster_recovery_config","azurerm_servicebus_namespace_network_rule_set","azurerm_servicebus_queue","azurerm_servicebus_queue_authorization_rule","azurerm_servicebus_subscription","azurerm_servicebus_subscription_rule","azurerm_servicebus_topic","azurerm_servicebus_topic_authorization_rule","azurerm_shared_image","azurerm_shared_image_gallery","azurerm_signalr_service","azurerm_signalr_service_network_acl","azurerm_signalr_shared_private_link_resource","azurerm_site_recovery_fabric","azurerm_site_recovery_network_mapping","azurerm_site_recovery_protection_container","azurerm_site_recovery_protection_container_mapping","azurerm_site_recovery_replication_policy","azurerm_snapshot","azurerm_source_control_token","azurerm_spatial_anchors_account","azurerm_spring_cloud_accelerator","azurerm_spring_cloud_active_deployment","azurerm_spring_cloud_api_portal","azurerm_spring_cloud_api_portal_custom_domain","azurerm_spring_cloud_app","azurerm_spring_cloud_app_cosmosdb_association","azurerm_spring_cloud_app_mysql_association","azurerm_spring_cloud_app_redis_association","azurerm_spring_cloud_application_live_view","azurerm_spring_cloud_build_deployment","azurerm_spring_cloud_build_pack_binding","azurerm_spring_cloud_builder","azurerm_spring_cloud_certificate","azurerm_spring_cloud_configuration_service","azurerm_spring_cloud_connection","azurerm_spring_cloud_container_deployment","azurerm_spring_cloud_custom_domain","azurerm_spring_cloud_customized_accelerator","azurerm_spring_cloud_dev_tool_portal","azurerm_spring_cloud_gateway","azurerm_spring_cloud_gateway_custom_domain","azurerm_spring_cloud_java_deployment","azurerm_spring_cloud_service","azurerm_spring_cloud_storage","azurerm_ssh_public_key","azurerm_stack_hci_cluster","azurerm_static_site","azurerm_storage_account","azurerm_storage_account_local_user","azurerm_storage_account_network_rules","azurerm_storage_blob","azurerm_storage_blob_inventory_policy","azurerm_storage_container","azurerm_storage_data_lake_gen2_filesystem","azurerm_storage_data_lake_gen2_path","azurerm_storage_encryption_scope","azurerm_storage_management_policy","azurerm_storage_object_replication","azurerm_storage_queue","azurerm_storage_share","azurerm_storage_share_directory","azurerm_storage_sync","azurerm_storage_table","azurerm_storage_table_entity","azurerm_stream_analytics_cluster","azurerm_stream_analytics_function_javascript_uda","azurerm_stream_analytics_job","azurerm_stream_analytics_managed_private_endpoint","azurerm_stream_analytics_output_blob","azurerm_stream_analytics_output_eventhub","azurerm_stream_analytics_output_function","azurerm_stream_analytics_output_mssql","azurerm_stream_analytics_output_powerbi","azurerm_stream_analytics_output_servicebus_queue","azurerm_stream_analytics_output_servicebus_topic","azurerm_stream_analytics_output_synapse","azurerm_stream_analytics_output_table","azurerm_stream_analytics_reference_input_blob","azurerm_stream_analytics_reference_input_mssql","azurerm_stream_analytics_stream_input_blob","azurerm_stream_analytics_stream_input_eventhub","azurerm_stream_analytics_stream_input_iothub","azurerm_subnet","azurerm_subnet_nat_gateway_association","azurerm_subnet_network_security_group_association","azurerm_subnet_route_table_association","azurerm_subnet_service_endpoint_storage_policy","azurerm_subscription","azurerm_subscription_cost_management_export","azurerm_subscription_policy_assignment","azurerm_subscription_policy_exemption","azurerm_subscription_policy_remediation","azurerm_subscription_template_deployment","azurerm_synapse_firewall_rule","azurerm_synapse_integration_runtime_azure","azurerm_synapse_integration_runtime_self_hosted","azurerm_synapse_linked_service","azurerm_synapse_managed_private_endpoint","azurerm_synapse_private_link_hub","azurerm_synapse_role_assignment","azurerm_synapse_spark_pool","azurerm_synapse_sql_pool","azurerm_synapse_sql_pool_extended_auditing_policy","azurerm_synapse_sql_pool_security_alert_policy","azurerm_synapse_sql_pool_workload_classifier","azurerm_synapse_sql_pool_workload_group","azurerm_synapse_workspace","azurerm_synapse_workspace_aad_admin","azurerm_synapse_workspace_extended_auditing_policy","azurerm_synapse_workspace_security_alert_policy","azurerm_synapse_workspace_sql_aad_admin","azurerm_synapse_workspace_vulnerability_assessment","azurerm_traffic_manager_azure_endpoint","azurerm_traffic_manager_external_endpoint","azurerm_traffic_manager_nested_endpoint","azurerm_traffic_manager_profile","azurerm_user_assigned_identity","azurerm_virtual_hub","azurerm_virtual_hub_connection","azurerm_virtual_hub_ip","azurerm_virtual_hub_route_table","azurerm_virtual_hub_route_table_route","azurerm_virtual_hub_security_partner_provider","azurerm_virtual_machine_data_disk_attachment","azurerm_virtual_machine_extension","azurerm_virtual_machine_run_command","azurerm_virtual_network","azurerm_virtual_network_gateway","azurerm_virtual_network_gateway_connection","azurerm_virtual_network_peering","azurerm_virtual_wan","azurerm_vpn_gateway","azurerm_vpn_gateway_connection","azurerm_vpn_server_configuration","azurerm_vpn_server_configuration_policy_group","azurerm_vpn_site","azurerm_web_app_active_slot","azurerm_web_app_hybrid_connection","azurerm_web_application_firewall_policy","azurerm_web_pubsub","azurerm_web_pubsub_hub","azurerm_web_pubsub_network_acl","azurerm_windows_function_app","azurerm_windows_function_app_slot","azurerm_windows_virtual_machine","azurerm_windows_virtual_machine_scale_set","azurerm_windows_web_app","azurerm_windows_web_app_slot"] \ No newline at end of file +["azurerm_advanced_threat_protection","azurerm_analysis_services_server","azurerm_api_management","azurerm_api_management_api","azurerm_api_management_api_diagnostic","azurerm_api_management_api_operation","azurerm_api_management_api_operation_policy","azurerm_api_management_api_operation_tag","azurerm_api_management_api_policy","azurerm_api_management_api_release","azurerm_api_management_api_schema","azurerm_api_management_api_tag","azurerm_api_management_api_version_set","azurerm_api_management_authorization_server","azurerm_api_management_backend","azurerm_api_management_certificate","azurerm_api_management_custom_domain","azurerm_api_management_diagnostic","azurerm_api_management_email_template","azurerm_api_management_gateway","azurerm_api_management_gateway_api","azurerm_api_management_global_schema","azurerm_api_management_identity_provider_aad","azurerm_api_management_identity_provider_facebook","azurerm_api_management_identity_provider_google","azurerm_api_management_identity_provider_microsoft","azurerm_api_management_identity_provider_twitter","azurerm_api_management_logger","azurerm_api_management_named_value","azurerm_api_management_notification_recipient_email","azurerm_api_management_notification_recipient_user","azurerm_api_management_openid_connect_provider","azurerm_api_management_policy","azurerm_api_management_product","azurerm_api_management_product_api","azurerm_api_management_product_policy","azurerm_api_management_product_tag","azurerm_api_management_redis_cache","azurerm_api_management_subscription","azurerm_api_management_tag","azurerm_api_management_user","azurerm_app_configuration","azurerm_app_service_certificate_order","azurerm_app_service_plan","azurerm_application_gateway","azurerm_application_insights","azurerm_application_insights_analytics_item","azurerm_application_insights_api_key","azurerm_application_insights_smart_detection_rule","azurerm_application_insights_standard_web_test","azurerm_application_insights_web_test","azurerm_application_insights_workbook","azurerm_application_insights_workbook_template","azurerm_application_security_group","azurerm_attestation_provider","azurerm_automation_account","azurerm_automation_connection","azurerm_automation_connection_classic_certificate","azurerm_automation_connection_type","azurerm_automation_credential","azurerm_automation_hybrid_runbook_worker_group","azurerm_automation_module","azurerm_automation_runbook","azurerm_automation_schedule","azurerm_automation_variable_bool","azurerm_automation_variable_datetime","azurerm_automation_variable_int","azurerm_automation_variable_string","azurerm_automation_webhook","azurerm_availability_set","azurerm_backup_container_storage_account","azurerm_backup_policy_file_share","azurerm_backup_policy_vm","azurerm_backup_policy_vm_workload","azurerm_backup_protected_file_share","azurerm_backup_protected_vm","azurerm_bastion_host","azurerm_bot_channel_alexa","azurerm_bot_channel_directline","azurerm_bot_channel_line","azurerm_bot_channel_ms_teams","azurerm_bot_channel_slack","azurerm_bot_channel_sms","azurerm_bot_channel_web_chat","azurerm_bot_channels_registration","azurerm_bot_connection","azurerm_bot_web_app","azurerm_capacity_reservation","azurerm_capacity_reservation_group","azurerm_cdn_endpoint","azurerm_cdn_frontdoor_custom_domain","azurerm_cdn_frontdoor_custom_domain_association","azurerm_cdn_frontdoor_endpoint","azurerm_cdn_frontdoor_firewall_policy","azurerm_cdn_frontdoor_origin","azurerm_cdn_frontdoor_origin_group","azurerm_cdn_frontdoor_profile","azurerm_cdn_frontdoor_route","azurerm_cdn_frontdoor_rule","azurerm_cdn_frontdoor_rule_set","azurerm_cdn_frontdoor_security_policy","azurerm_cdn_profile","azurerm_cognitive_account","azurerm_cognitive_deployment","azurerm_communication_service","azurerm_confidential_ledger","azurerm_consumption_budget_management_group","azurerm_consumption_budget_resource_group","azurerm_consumption_budget_subscription","azurerm_container_app","azurerm_container_app_environment","azurerm_container_connected_registry","azurerm_container_registry","azurerm_container_registry_agent_pool","azurerm_container_registry_scope_map","azurerm_container_registry_token","azurerm_container_registry_token_password","azurerm_container_registry_webhook","azurerm_cosmosdb_account","azurerm_cosmosdb_cassandra_cluster","azurerm_cosmosdb_cassandra_datacenter","azurerm_cosmosdb_cassandra_keyspace","azurerm_cosmosdb_cassandra_table","azurerm_cosmosdb_gremlin_database","azurerm_cosmosdb_gremlin_graph","azurerm_cosmosdb_mongo_collection","azurerm_cosmosdb_mongo_database","azurerm_cosmosdb_sql_container","azurerm_cosmosdb_sql_database","azurerm_cosmosdb_sql_dedicated_gateway","azurerm_cosmosdb_sql_function","azurerm_cosmosdb_sql_role_assignment","azurerm_cosmosdb_sql_role_definition","azurerm_cosmosdb_sql_stored_procedure","azurerm_cosmosdb_sql_trigger","azurerm_cosmosdb_table","azurerm_cost_anomaly_alert","azurerm_custom_provider","azurerm_data_factory","azurerm_data_factory_custom_dataset","azurerm_data_factory_data_flow","azurerm_data_factory_dataset_azure_blob","azurerm_data_factory_dataset_binary","azurerm_data_factory_dataset_cosmosdb_sqlapi","azurerm_data_factory_dataset_delimited_text","azurerm_data_factory_dataset_http","azurerm_data_factory_dataset_json","azurerm_data_factory_dataset_mysql","azurerm_data_factory_dataset_parquet","azurerm_data_factory_dataset_postgresql","azurerm_data_factory_dataset_snowflake","azurerm_data_factory_dataset_sql_server_table","azurerm_data_factory_integration_runtime_azure","azurerm_data_factory_integration_runtime_azure_ssis","azurerm_data_factory_integration_runtime_managed","azurerm_data_factory_integration_runtime_self_hosted","azurerm_data_factory_linked_custom_service","azurerm_data_factory_linked_service_azure_blob_storage","azurerm_data_factory_linked_service_azure_databricks","azurerm_data_factory_linked_service_azure_file_storage","azurerm_data_factory_linked_service_azure_function","azurerm_data_factory_linked_service_azure_search","azurerm_data_factory_linked_service_azure_sql_database","azurerm_data_factory_linked_service_azure_table_storage","azurerm_data_factory_linked_service_cosmosdb","azurerm_data_factory_linked_service_cosmosdb_mongoapi","azurerm_data_factory_linked_service_data_lake_storage_gen2","azurerm_data_factory_linked_service_key_vault","azurerm_data_factory_linked_service_kusto","azurerm_data_factory_linked_service_mysql","azurerm_data_factory_linked_service_odata","azurerm_data_factory_linked_service_odbc","azurerm_data_factory_linked_service_postgresql","azurerm_data_factory_linked_service_sftp","azurerm_data_factory_linked_service_snowflake","azurerm_data_factory_linked_service_sql_server","azurerm_data_factory_linked_service_synapse","azurerm_data_factory_linked_service_web","azurerm_data_factory_managed_private_endpoint","azurerm_data_factory_pipeline","azurerm_data_factory_trigger_blob_event","azurerm_data_factory_trigger_custom_event","azurerm_data_factory_trigger_schedule","azurerm_data_protection_backup_instance_blob_storage","azurerm_data_protection_backup_instance_disk","azurerm_data_protection_backup_instance_postgresql","azurerm_data_protection_backup_policy_blob_storage","azurerm_data_protection_backup_policy_disk","azurerm_data_protection_backup_policy_kubernetes_cluster","azurerm_data_protection_backup_policy_postgresql","azurerm_data_protection_backup_vault","azurerm_data_protection_resource_guard","azurerm_data_share","azurerm_data_share_account","azurerm_data_share_dataset_blob_storage","azurerm_data_share_dataset_data_lake_gen2","azurerm_data_share_dataset_kusto_cluster","azurerm_data_share_dataset_kusto_database","azurerm_database_migration_project","azurerm_database_migration_service","azurerm_databox_edge_device","azurerm_databricks_access_connector","azurerm_databricks_workspace","azurerm_databricks_workspace_customer_managed_key","azurerm_databricks_workspace_root_dbfs_customer_managed_key","azurerm_dedicated_host","azurerm_dev_test_global_vm_shutdown_schedule","azurerm_dev_test_lab","azurerm_dev_test_linux_virtual_machine","azurerm_dev_test_policy","azurerm_dev_test_schedule","azurerm_dev_test_virtual_network","azurerm_dev_test_windows_virtual_machine","azurerm_digital_twins_instance","azurerm_disk_access","azurerm_disk_encryption_set","azurerm_disk_pool","azurerm_dns_a_record","azurerm_dns_aaaa_record","azurerm_dns_caa_record","azurerm_dns_cname_record","azurerm_dns_mx_record","azurerm_dns_ns_record","azurerm_dns_ptr_record","azurerm_dns_srv_record","azurerm_dns_txt_record","azurerm_dns_zone","azurerm_elastic_cloud_elasticsearch","azurerm_eventgrid_domain","azurerm_eventgrid_domain_topic","azurerm_eventgrid_event_subscription","azurerm_eventgrid_system_topic","azurerm_eventgrid_topic","azurerm_eventhub","azurerm_eventhub_authorization_rule","azurerm_eventhub_consumer_group","azurerm_eventhub_namespace","azurerm_eventhub_namespace_authorization_rule","azurerm_eventhub_namespace_disaster_recovery_config","azurerm_eventhub_namespace_schema_group","azurerm_express_route_circuit","azurerm_express_route_circuit_authorization","azurerm_express_route_circuit_connection","azurerm_express_route_circuit_peering","azurerm_express_route_connection","azurerm_express_route_gateway","azurerm_express_route_port","azurerm_federated_identity_credential","azurerm_firewall","azurerm_firewall_application_rule_collection","azurerm_firewall_nat_rule_collection","azurerm_firewall_network_rule_collection","azurerm_firewall_policy","azurerm_firewall_policy_rule_collection_group","azurerm_fluid_relay_server","azurerm_frontdoor","azurerm_frontdoor_custom_https_configuration","azurerm_frontdoor_firewall_policy","azurerm_frontdoor_rules_engine","azurerm_function_app","azurerm_function_app_active_slot","azurerm_function_app_function","azurerm_function_app_hybrid_connection","azurerm_function_app_slot","azurerm_gallery_application","azurerm_gallery_application_version","azurerm_hdinsight_hadoop_cluster","azurerm_hdinsight_hbase_cluster","azurerm_hdinsight_interactive_query_cluster","azurerm_hdinsight_kafka_cluster","azurerm_hdinsight_spark_cluster","azurerm_healthbot","azurerm_healthcare_dicom_service","azurerm_healthcare_fhir_service","azurerm_healthcare_medtech_service","azurerm_healthcare_medtech_service_fhir_destination","azurerm_healthcare_service","azurerm_healthcare_workspace","azurerm_hpc_cache","azurerm_hpc_cache_access_policy","azurerm_hpc_cache_blob_nfs_target","azurerm_hpc_cache_blob_target","azurerm_hpc_cache_nfs_target","azurerm_image","azurerm_integration_service_environment","azurerm_iot_security_device_group","azurerm_iot_security_solution","azurerm_iot_time_series_insights_event_source_eventhub","azurerm_iot_time_series_insights_event_source_iothub","azurerm_iot_time_series_insights_gen2_environment","azurerm_iot_time_series_insights_reference_data_set","azurerm_iot_time_series_insights_standard_environment","azurerm_iotcentral_application","azurerm_iotcentral_application_network_rule_set","azurerm_iothub","azurerm_iothub_certificate","azurerm_iothub_consumer_group","azurerm_iothub_device_update_account","azurerm_iothub_device_update_instance","azurerm_iothub_dps","azurerm_iothub_dps_certificate","azurerm_iothub_dps_shared_access_policy","azurerm_iothub_endpoint_eventhub","azurerm_iothub_endpoint_servicebus_queue","azurerm_iothub_endpoint_servicebus_topic","azurerm_iothub_endpoint_storage_container","azurerm_iothub_enrichment","azurerm_iothub_fallback_route","azurerm_iothub_route","azurerm_iothub_shared_access_policy","azurerm_ip_group","azurerm_key_vault","azurerm_key_vault_access_policy","azurerm_key_vault_certificate","azurerm_key_vault_certificate_contacts","azurerm_key_vault_certificate_issuer","azurerm_key_vault_key","azurerm_key_vault_managed_hardware_security_module","azurerm_key_vault_managed_storage_account","azurerm_key_vault_managed_storage_account_sas_token_definition","azurerm_key_vault_secret","azurerm_kubernetes_cluster","azurerm_kubernetes_cluster_extension","azurerm_kubernetes_cluster_node_pool","azurerm_kubernetes_fleet_manager","azurerm_kusto_attached_database_configuration","azurerm_kusto_cluster","azurerm_kusto_cluster_managed_private_endpoint","azurerm_kusto_cluster_principal_assignment","azurerm_kusto_database","azurerm_kusto_database_principal_assignment","azurerm_kusto_eventgrid_data_connection","azurerm_kusto_eventhub_data_connection","azurerm_kusto_iothub_data_connection","azurerm_lab_service_lab","azurerm_lab_service_plan","azurerm_lb","azurerm_lb_backend_address_pool","azurerm_lb_backend_address_pool_address","azurerm_lb_nat_pool","azurerm_lb_nat_rule","azurerm_lb_outbound_rule","azurerm_lb_probe","azurerm_lb_rule","azurerm_linux_function_app","azurerm_linux_function_app_slot","azurerm_linux_virtual_machine","azurerm_linux_virtual_machine_scale_set","azurerm_linux_web_app","azurerm_linux_web_app_slot","azurerm_load_test","azurerm_local_network_gateway","azurerm_log_analytics_data_export_rule","azurerm_log_analytics_datasource_windows_event","azurerm_log_analytics_datasource_windows_performance_counter","azurerm_log_analytics_linked_service","azurerm_log_analytics_linked_storage_account","azurerm_log_analytics_query_pack","azurerm_log_analytics_query_pack_query","azurerm_log_analytics_saved_search","azurerm_log_analytics_solution","azurerm_log_analytics_workspace","azurerm_logic_app_action_custom","azurerm_logic_app_action_http","azurerm_logic_app_integration_account","azurerm_logic_app_integration_account_batch_configuration","azurerm_logic_app_integration_account_partner","azurerm_logic_app_integration_account_schema","azurerm_logic_app_integration_account_session","azurerm_logic_app_trigger_custom","azurerm_logic_app_trigger_http_request","azurerm_logic_app_trigger_recurrence","azurerm_logic_app_workflow","azurerm_logz_monitor","azurerm_logz_sub_account","azurerm_logz_sub_account_tag_rule","azurerm_logz_tag_rule","azurerm_machine_learning_compute_cluster","azurerm_machine_learning_compute_instance","azurerm_machine_learning_synapse_spark","azurerm_machine_learning_workspace","azurerm_maintenance_assignment_dedicated_host","azurerm_maintenance_assignment_virtual_machine","azurerm_maintenance_configuration","azurerm_managed_application_definition","azurerm_managed_disk","azurerm_managed_disk_sas_token","azurerm_management_group","azurerm_management_group_subscription_association","azurerm_management_lock","azurerm_maps_account","azurerm_maps_creator","azurerm_mariadb_configuration","azurerm_mariadb_database","azurerm_mariadb_firewall_rule","azurerm_mariadb_server","azurerm_mariadb_virtual_network_rule","azurerm_marketplace_agreement","azurerm_media_asset","azurerm_media_asset_filter","azurerm_media_content_key_policy","azurerm_media_job","azurerm_media_live_event","azurerm_media_live_event_output","azurerm_media_services_account","azurerm_media_services_account_filter","azurerm_media_streaming_endpoint","azurerm_media_streaming_locator","azurerm_media_streaming_policy","azurerm_media_transform","azurerm_monitor_action_group","azurerm_monitor_action_rule_action_group","azurerm_monitor_action_rule_suppression","azurerm_monitor_activity_log_alert","azurerm_monitor_alert_processing_rule_action_group","azurerm_monitor_alert_processing_rule_suppression","azurerm_monitor_autoscale_setting","azurerm_monitor_data_collection_endpoint","azurerm_monitor_data_collection_rule","azurerm_monitor_data_collection_rule_association","azurerm_monitor_diagnostic_setting","azurerm_monitor_metric_alert","azurerm_monitor_private_link_scope","azurerm_monitor_private_link_scoped_service","azurerm_monitor_scheduled_query_rules_alert","azurerm_monitor_scheduled_query_rules_alert_v2","azurerm_monitor_scheduled_query_rules_log","azurerm_monitor_smart_detector_alert_rule","azurerm_mssql_database","azurerm_mssql_database_extended_auditing_policy","azurerm_mssql_database_vulnerability_assessment_rule_baseline","azurerm_mssql_elasticpool","azurerm_mssql_failover_group","azurerm_mssql_firewall_rule","azurerm_mssql_job_agent","azurerm_mssql_job_credential","azurerm_mssql_managed_database","azurerm_mssql_managed_instance","azurerm_mssql_managed_instance_active_directory_administrator","azurerm_mssql_managed_instance_failover_group","azurerm_mssql_managed_instance_vulnerability_assessment","azurerm_mssql_outbound_firewall_rule","azurerm_mssql_server","azurerm_mssql_server_dns_alias","azurerm_mssql_server_microsoft_support_auditing_policy","azurerm_mssql_server_security_alert_policy","azurerm_mssql_server_transparent_data_encryption","azurerm_mssql_server_vulnerability_assessment","azurerm_mssql_virtual_network_rule","azurerm_mysql_active_directory_administrator","azurerm_mysql_configuration","azurerm_mysql_database","azurerm_mysql_firewall_rule","azurerm_mysql_flexible_database","azurerm_mysql_flexible_server","azurerm_mysql_flexible_server_configuration","azurerm_mysql_flexible_server_firewall_rule","azurerm_mysql_server","azurerm_mysql_virtual_network_rule","azurerm_nat_gateway","azurerm_nat_gateway_public_ip_association","azurerm_nat_gateway_public_ip_prefix_association","azurerm_netapp_account","azurerm_netapp_pool","azurerm_netapp_snapshot","azurerm_netapp_snapshot_policy","azurerm_netapp_volume","azurerm_network_connection_monitor","azurerm_network_ddos_protection_plan","azurerm_network_interface","azurerm_network_interface_application_security_group_association","azurerm_network_interface_backend_address_pool_association","azurerm_network_interface_nat_rule_association","azurerm_network_interface_security_group_association","azurerm_network_manager","azurerm_network_manager_management_group_connection","azurerm_network_manager_network_group","azurerm_network_manager_static_member","azurerm_network_manager_subscription_connection","azurerm_network_packet_capture","azurerm_network_profile","azurerm_network_security_group","azurerm_network_security_rule","azurerm_network_watcher","azurerm_network_watcher_flow_log","azurerm_notification_hub","azurerm_notification_hub_authorization_rule","azurerm_notification_hub_namespace","azurerm_orbital_contact_profile","azurerm_orbital_spacecraft","azurerm_orchestrated_virtual_machine_scale_set","azurerm_pim_active_role_assignment","azurerm_pim_eligible_role_assignment","azurerm_point_to_site_vpn_gateway","azurerm_policy_definition","azurerm_policy_virtual_machine_configuration_assignment","azurerm_portal_dashboard","azurerm_postgresql_active_directory_administrator","azurerm_postgresql_configuration","azurerm_postgresql_database","azurerm_postgresql_firewall_rule","azurerm_postgresql_flexible_server","azurerm_postgresql_flexible_server_active_directory_administrator","azurerm_postgresql_flexible_server_configuration","azurerm_postgresql_flexible_server_database","azurerm_postgresql_flexible_server_firewall_rule","azurerm_postgresql_server","azurerm_postgresql_server_key","azurerm_postgresql_virtual_network_rule","azurerm_powerbi_embedded","azurerm_private_dns_a_record","azurerm_private_dns_aaaa_record","azurerm_private_dns_cname_record","azurerm_private_dns_mx_record","azurerm_private_dns_ptr_record","azurerm_private_dns_resolver","azurerm_private_dns_srv_record","azurerm_private_dns_txt_record","azurerm_private_dns_zone","azurerm_private_dns_zone_virtual_network_link","azurerm_private_endpoint","azurerm_private_endpoint_application_security_group_association","azurerm_private_link_service","azurerm_proximity_placement_group","azurerm_public_ip","azurerm_public_ip_prefix","azurerm_purview_account","azurerm_recovery_services_vault","azurerm_redis_cache","azurerm_redis_enterprise_cluster","azurerm_redis_enterprise_database","azurerm_redis_firewall_rule","azurerm_redis_linked_server","azurerm_relay_hybrid_connection","azurerm_relay_hybrid_connection_authorization_rule","azurerm_relay_namespace","azurerm_relay_namespace_authorization_rule","azurerm_resource_deployment_script_azure_cli","azurerm_resource_deployment_script_azure_power_shell","azurerm_resource_group","azurerm_resource_group_cost_management_export","azurerm_resource_group_policy_assignment","azurerm_resource_group_template_deployment","azurerm_resource_policy_assignment","azurerm_resource_policy_exemption","azurerm_resource_policy_remediation","azurerm_resource_provider_registration","azurerm_role_assignment","azurerm_role_definition","azurerm_route","azurerm_route_filter","azurerm_route_map","azurerm_route_server","azurerm_route_server_bgp_connection","azurerm_route_table","azurerm_search_service","azurerm_search_shared_private_link_service","azurerm_security_center_assessment","azurerm_security_center_assessment_policy","azurerm_security_center_auto_provisioning","azurerm_security_center_contact","azurerm_security_center_server_vulnerability_assessment","azurerm_security_center_server_vulnerability_assessment_virtual_machine","azurerm_security_center_setting","azurerm_security_center_storage_defender","azurerm_security_center_subscription_pricing","azurerm_security_center_workspace","azurerm_sentinel_alert_rule_fusion","azurerm_sentinel_alert_rule_machine_learning_behavior_analytics","azurerm_sentinel_alert_rule_ms_security_incident","azurerm_sentinel_automation_rule","azurerm_sentinel_data_connector_iot","azurerm_sentinel_log_analytics_workspace_onboarding","azurerm_sentinel_watchlist","azurerm_service_fabric_cluster","azurerm_service_fabric_managed_cluster","azurerm_service_plan","azurerm_servicebus_namespace","azurerm_servicebus_namespace_authorization_rule","azurerm_servicebus_namespace_disaster_recovery_config","azurerm_servicebus_namespace_network_rule_set","azurerm_servicebus_queue","azurerm_servicebus_queue_authorization_rule","azurerm_servicebus_subscription","azurerm_servicebus_subscription_rule","azurerm_servicebus_topic","azurerm_servicebus_topic_authorization_rule","azurerm_shared_image","azurerm_shared_image_gallery","azurerm_signalr_service","azurerm_signalr_service_network_acl","azurerm_signalr_shared_private_link_resource","azurerm_site_recovery_fabric","azurerm_site_recovery_network_mapping","azurerm_site_recovery_protection_container","azurerm_site_recovery_protection_container_mapping","azurerm_site_recovery_replication_policy","azurerm_snapshot","azurerm_source_control_token","azurerm_spatial_anchors_account","azurerm_spring_cloud_accelerator","azurerm_spring_cloud_active_deployment","azurerm_spring_cloud_api_portal","azurerm_spring_cloud_api_portal_custom_domain","azurerm_spring_cloud_app","azurerm_spring_cloud_app_cosmosdb_association","azurerm_spring_cloud_app_mysql_association","azurerm_spring_cloud_app_redis_association","azurerm_spring_cloud_application_live_view","azurerm_spring_cloud_build_deployment","azurerm_spring_cloud_build_pack_binding","azurerm_spring_cloud_builder","azurerm_spring_cloud_certificate","azurerm_spring_cloud_configuration_service","azurerm_spring_cloud_connection","azurerm_spring_cloud_container_deployment","azurerm_spring_cloud_custom_domain","azurerm_spring_cloud_customized_accelerator","azurerm_spring_cloud_dev_tool_portal","azurerm_spring_cloud_gateway","azurerm_spring_cloud_gateway_custom_domain","azurerm_spring_cloud_java_deployment","azurerm_spring_cloud_service","azurerm_spring_cloud_storage","azurerm_ssh_public_key","azurerm_stack_hci_cluster","azurerm_static_site","azurerm_storage_account","azurerm_storage_account_local_user","azurerm_storage_account_network_rules","azurerm_storage_blob","azurerm_storage_blob_inventory_policy","azurerm_storage_container","azurerm_storage_data_lake_gen2_filesystem","azurerm_storage_data_lake_gen2_path","azurerm_storage_encryption_scope","azurerm_storage_management_policy","azurerm_storage_object_replication","azurerm_storage_queue","azurerm_storage_share","azurerm_storage_share_directory","azurerm_storage_sync","azurerm_storage_table","azurerm_storage_table_entity","azurerm_stream_analytics_cluster","azurerm_stream_analytics_function_javascript_uda","azurerm_stream_analytics_job","azurerm_stream_analytics_managed_private_endpoint","azurerm_stream_analytics_output_blob","azurerm_stream_analytics_output_eventhub","azurerm_stream_analytics_output_function","azurerm_stream_analytics_output_mssql","azurerm_stream_analytics_output_powerbi","azurerm_stream_analytics_output_servicebus_queue","azurerm_stream_analytics_output_servicebus_topic","azurerm_stream_analytics_output_synapse","azurerm_stream_analytics_output_table","azurerm_stream_analytics_reference_input_blob","azurerm_stream_analytics_reference_input_mssql","azurerm_stream_analytics_stream_input_blob","azurerm_stream_analytics_stream_input_eventhub","azurerm_stream_analytics_stream_input_iothub","azurerm_subnet","azurerm_subnet_nat_gateway_association","azurerm_subnet_network_security_group_association","azurerm_subnet_route_table_association","azurerm_subnet_service_endpoint_storage_policy","azurerm_subscription","azurerm_subscription_cost_management_export","azurerm_subscription_policy_assignment","azurerm_subscription_policy_exemption","azurerm_subscription_policy_remediation","azurerm_subscription_template_deployment","azurerm_synapse_firewall_rule","azurerm_synapse_integration_runtime_azure","azurerm_synapse_integration_runtime_self_hosted","azurerm_synapse_linked_service","azurerm_synapse_managed_private_endpoint","azurerm_synapse_private_link_hub","azurerm_synapse_role_assignment","azurerm_synapse_spark_pool","azurerm_synapse_sql_pool","azurerm_synapse_sql_pool_extended_auditing_policy","azurerm_synapse_sql_pool_security_alert_policy","azurerm_synapse_sql_pool_workload_classifier","azurerm_synapse_sql_pool_workload_group","azurerm_synapse_workspace","azurerm_synapse_workspace_aad_admin","azurerm_synapse_workspace_extended_auditing_policy","azurerm_synapse_workspace_security_alert_policy","azurerm_synapse_workspace_sql_aad_admin","azurerm_synapse_workspace_vulnerability_assessment","azurerm_traffic_manager_azure_endpoint","azurerm_traffic_manager_external_endpoint","azurerm_traffic_manager_nested_endpoint","azurerm_traffic_manager_profile","azurerm_user_assigned_identity","azurerm_virtual_hub","azurerm_virtual_hub_connection","azurerm_virtual_hub_ip","azurerm_virtual_hub_route_table","azurerm_virtual_hub_route_table_route","azurerm_virtual_hub_security_partner_provider","azurerm_virtual_machine_data_disk_attachment","azurerm_virtual_machine_extension","azurerm_virtual_machine_run_command","azurerm_virtual_network","azurerm_virtual_network_gateway","azurerm_virtual_network_gateway_connection","azurerm_virtual_network_peering","azurerm_virtual_wan","azurerm_vpn_gateway","azurerm_vpn_gateway_connection","azurerm_vpn_server_configuration","azurerm_vpn_server_configuration_policy_group","azurerm_vpn_site","azurerm_web_app_active_slot","azurerm_web_app_hybrid_connection","azurerm_web_application_firewall_policy","azurerm_web_pubsub","azurerm_web_pubsub_hub","azurerm_web_pubsub_network_acl","azurerm_windows_function_app","azurerm_windows_function_app_slot","azurerm_windows_virtual_machine","azurerm_windows_virtual_machine_scale_set","azurerm_windows_web_app","azurerm_windows_web_app_slot"] \ No newline at end of file diff --git a/examples-generated/kubernetesconfiguration/v1beta1/kubernetesclusterextension.yaml b/examples-generated/kubernetesconfiguration/v1beta1/kubernetesclusterextension.yaml new file mode 100644 index 000000000..5883017f5 --- /dev/null +++ b/examples-generated/kubernetesconfiguration/v1beta1/kubernetesclusterextension.yaml @@ -0,0 +1,52 @@ +apiVersion: kubernetesconfiguration.azure.upbound.io/v1beta1 +kind: KubernetesClusterExtension +metadata: + annotations: + meta.upbound.io/example-id: kubernetesconfiguration/v1beta1/kubernetesclusterextension + labels: + testing.upbound.io/example-name: example + name: example +spec: + forProvider: + clusterIdSelector: + matchLabels: + testing.upbound.io/example-name: example + extensionType: microsoft.flux + +--- + +apiVersion: containerservice.azure.upbound.io/v1beta2 +kind: KubernetesCluster +metadata: + annotations: + meta.upbound.io/example-id: kubernetesconfiguration/v1beta1/kubernetesclusterextension + labels: + testing.upbound.io/example-name: example + name: example +spec: + forProvider: + defaultNodePool: + - name: default + nodeCount: 1 + vmSize: Standard_DS2_v2 + dnsPrefix: example-aks + identity: + - type: SystemAssigned + location: West Europe + resourceGroupNameSelector: + matchLabels: + testing.upbound.io/example-name: example + +--- + +apiVersion: azure.upbound.io/v1beta1 +kind: ResourceGroup +metadata: + annotations: + meta.upbound.io/example-id: kubernetesconfiguration/v1beta1/kubernetesclusterextension + labels: + testing.upbound.io/example-name: example + name: example +spec: + forProvider: + location: West Europe diff --git a/examples/kubernetesconfiguration/v1beta1/kubernetesclusterextension.yaml b/examples/kubernetesconfiguration/v1beta1/kubernetesclusterextension.yaml new file mode 100644 index 000000000..07663180f --- /dev/null +++ b/examples/kubernetesconfiguration/v1beta1/kubernetesclusterextension.yaml @@ -0,0 +1,52 @@ +apiVersion: kubernetesconfiguration.azure.upbound.io/v1beta1 +kind: KubernetesClusterExtension +metadata: + annotations: + meta.upbound.io/example-id: kubernetesconfiguration/v1beta1/kubernetesclusterextension + labels: + testing.upbound.io/example-name: example + name: example-kce +spec: + forProvider: + clusterIdSelector: + matchLabels: + testing.upbound.io/example-name: example + extensionType: microsoft.flux + +--- + +apiVersion: containerservice.azure.upbound.io/v1beta1 +kind: KubernetesCluster +metadata: + annotations: + meta.upbound.io/example-id: kubernetesconfiguration/v1beta1/kubernetesclusterextension + labels: + testing.upbound.io/example-name: example + name: example-kc-kce +spec: + forProvider: + defaultNodePool: + - name: default + nodeCount: 1 + vmSize: Standard_DS2_v2 + dnsPrefix: example-aks + identity: + - type: SystemAssigned + location: West Europe + resourceGroupNameSelector: + matchLabels: + testing.upbound.io/example-name: example + +--- + +apiVersion: azure.upbound.io/v1beta1 +kind: ResourceGroup +metadata: + annotations: + meta.upbound.io/example-id: kubernetesconfiguration/v1beta1/kubernetesclusterextension + labels: + testing.upbound.io/example-name: example + name: example-rg-kce +spec: + forProvider: + location: West Europe diff --git a/internal/controller/kubernetesconfiguration/kubernetesclusterextension/zz_controller.go b/internal/controller/kubernetesconfiguration/kubernetesclusterextension/zz_controller.go new file mode 100755 index 000000000..79dc0cec2 --- /dev/null +++ b/internal/controller/kubernetesconfiguration/kubernetesclusterextension/zz_controller.go @@ -0,0 +1,92 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package kubernetesclusterextension + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/metrics" + "github.com/pkg/errors" + ctrl "sigs.k8s.io/controller-runtime" + + v1beta1 "github.com/upbound/provider-azure/apis/kubernetesconfiguration/v1beta1" + features "github.com/upbound/provider-azure/internal/features" +) + +// Setup adds a controller that reconciles KubernetesClusterExtension managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1beta1.KubernetesClusterExtension_GroupVersionKind.String()) + var initializers managed.InitializerChain + initializers = append(initializers, managed.NewNameAsExternalName(mgr.GetClient())) + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1beta1.KubernetesClusterExtension_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1beta1.KubernetesClusterExtension_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler), tjcontroller.WithStatusUpdates(false)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter( + tjcontroller.NewTerraformPluginSDKAsyncConnector(mgr.GetClient(), o.OperationTrackerStore, o.SetupFn, o.Provider.Resources["azurerm_kubernetes_cluster_extension"], + tjcontroller.WithTerraformPluginSDKAsyncLogger(o.Logger), + tjcontroller.WithTerraformPluginSDKAsyncConnectorEventHandler(eventHandler), + tjcontroller.WithTerraformPluginSDKAsyncCallbackProvider(ac), + tjcontroller.WithTerraformPluginSDKAsyncMetricRecorder(metrics.NewMetricRecorder(v1beta1.KubernetesClusterExtension_GroupVersionKind, mgr, o.PollInterval)), + tjcontroller.WithTerraformPluginSDKAsyncManagementPolicies(o.Features.Enabled(features.EnableBetaManagementPolicies)))), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(tjcontroller.NewOperationTrackerFinalizer(o.OperationTrackerStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1beta1.KubernetesClusterExtension + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1beta1.KubernetesClusterExtension{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1beta1.KubernetesClusterExtension") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1beta1.KubernetesClusterExtensionList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1beta1.KubernetesClusterExtensionList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1beta1.KubernetesClusterExtension_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1beta1.KubernetesClusterExtension{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/zz_kubernetesconfiguration_setup.go b/internal/controller/zz_kubernetesconfiguration_setup.go new file mode 100755 index 000000000..ef280f248 --- /dev/null +++ b/internal/controller/zz_kubernetesconfiguration_setup.go @@ -0,0 +1,26 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +package controller + +import ( + ctrl "sigs.k8s.io/controller-runtime" + + "github.com/crossplane/upjet/pkg/controller" + + kubernetesclusterextension "github.com/upbound/provider-azure/internal/controller/kubernetesconfiguration/kubernetesclusterextension" +) + +// Setup_kubernetesconfiguration creates all controllers with the supplied logger and adds them to +// the supplied manager. +func Setup_kubernetesconfiguration(mgr ctrl.Manager, o controller.Options) error { + for _, setup := range []func(ctrl.Manager, controller.Options) error{ + kubernetesclusterextension.Setup, + } { + if err := setup(mgr, o); err != nil { + return err + } + } + return nil +} diff --git a/internal/controller/zz_monolith_setup.go b/internal/controller/zz_monolith_setup.go index 53d7b5a45..8e1b73d5c 100755 --- a/internal/controller/zz_monolith_setup.go +++ b/internal/controller/zz_monolith_setup.go @@ -379,6 +379,7 @@ import ( managedstorageaccountsastokendefinition "github.com/upbound/provider-azure/internal/controller/keyvault/managedstorageaccountsastokendefinition" secret "github.com/upbound/provider-azure/internal/controller/keyvault/secret" vault "github.com/upbound/provider-azure/internal/controller/keyvault/vault" + kubernetesclusterextension "github.com/upbound/provider-azure/internal/controller/kubernetesconfiguration/kubernetesclusterextension" attacheddatabaseconfiguration "github.com/upbound/provider-azure/internal/controller/kusto/attacheddatabaseconfiguration" clusterkusto "github.com/upbound/provider-azure/internal/controller/kusto/cluster" clustermanagedprivateendpoint "github.com/upbound/provider-azure/internal/controller/kusto/clustermanagedprivateendpoint" @@ -1116,6 +1117,7 @@ func Setup_monolith(mgr ctrl.Manager, o controller.Options) error { managedstorageaccountsastokendefinition.Setup, secret.Setup, vault.Setup, + kubernetesclusterextension.Setup, attacheddatabaseconfiguration.Setup, clusterkusto.Setup, clustermanagedprivateendpoint.Setup, diff --git a/package/crds/kubernetesconfiguration.azure.upbound.io_kubernetesclusterextensions.yaml b/package/crds/kubernetesconfiguration.azure.upbound.io_kubernetesclusterextensions.yaml new file mode 100644 index 000000000..050eaf796 --- /dev/null +++ b/package/crds/kubernetesconfiguration.azure.upbound.io_kubernetesclusterextensions.yaml @@ -0,0 +1,735 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + name: kubernetesclusterextensions.kubernetesconfiguration.azure.upbound.io +spec: + group: kubernetesconfiguration.azure.upbound.io + names: + categories: + - crossplane + - managed + - azure + kind: KubernetesClusterExtension + listKind: KubernetesClusterExtensionList + plural: kubernetesclusterextensions + singular: kubernetesclusterextension + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: KubernetesClusterExtension is the Schema for the KubernetesClusterExtensions + API. Manages a Kubernetes Cluster Extension. + 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: KubernetesClusterExtensionSpec defines the desired state + of KubernetesClusterExtension + properties: + deletionPolicy: + default: Delete + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + clusterId: + description: Specifies the Cluster ID. Changing this forces a + new Kubernetes Cluster Extension to be created. + type: string + clusterIdRef: + description: Reference to a KubernetesCluster in containerservice + to populate clusterId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + clusterIdSelector: + description: Selector for a KubernetesCluster in containerservice + to populate clusterId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + configurationProtectedSettings: + additionalProperties: + type: string + description: Configuration settings that are sensitive, as name-value + pairs for configuring this extension. + type: object + x-kubernetes-map-type: granular + configurationSettings: + additionalProperties: + type: string + description: Configuration settings, as name-value pairs for configuring + this extension. + type: object + x-kubernetes-map-type: granular + extensionType: + description: Specifies the type of extension. It must be one of + the extension types registered with Microsoft.KubernetesConfiguration + by the Extension publisher. For more information, please refer + to Available Extensions for AKS. Changing this forces a new + Kubernetes Cluster Extension to be created. + type: string + plan: + description: A plan block as defined below. Changing this forces + a new resource to be created. + properties: + name: + description: Specifies the name of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + product: + description: Specifies the product of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + promotionCode: + description: Specifies the promotion code to use with the + plan. Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + publisher: + description: Specifies the publisher of the plan. Changing + this forces a new Kubernetes Cluster Extension to be created. + type: string + version: + description: Specifies the version of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + type: object + releaseNamespace: + description: Namespace where the extension release must be placed + for a cluster scoped extension. If this namespace does not exist, + it will be created. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + releaseTrain: + description: The release train used by this extension. Possible + values include but are not limited to Stable, Preview. Changing + this forces a new Kubernetes Cluster Extension to be created. + type: string + targetNamespace: + description: Namespace where the extension will be created for + a namespace scoped extension. If this namespace does not exist, + it will be created. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + version: + description: User-specified version that the extension should + pin to. If it is not set, Azure will use the latest version + and auto upgrade it. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + clusterId: + description: Specifies the Cluster ID. Changing this forces a + new Kubernetes Cluster Extension to be created. + type: string + clusterIdRef: + description: Reference to a KubernetesCluster in containerservice + to populate clusterId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + clusterIdSelector: + description: Selector for a KubernetesCluster in containerservice + to populate clusterId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + configurationProtectedSettings: + additionalProperties: + type: string + description: Configuration settings that are sensitive, as name-value + pairs for configuring this extension. + type: object + x-kubernetes-map-type: granular + configurationSettings: + additionalProperties: + type: string + description: Configuration settings, as name-value pairs for configuring + this extension. + type: object + x-kubernetes-map-type: granular + extensionType: + description: Specifies the type of extension. It must be one of + the extension types registered with Microsoft.KubernetesConfiguration + by the Extension publisher. For more information, please refer + to Available Extensions for AKS. Changing this forces a new + Kubernetes Cluster Extension to be created. + type: string + plan: + description: A plan block as defined below. Changing this forces + a new resource to be created. + properties: + name: + description: Specifies the name of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + product: + description: Specifies the product of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + promotionCode: + description: Specifies the promotion code to use with the + plan. Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + publisher: + description: Specifies the publisher of the plan. Changing + this forces a new Kubernetes Cluster Extension to be created. + type: string + version: + description: Specifies the version of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + type: object + releaseNamespace: + description: Namespace where the extension release must be placed + for a cluster scoped extension. If this namespace does not exist, + it will be created. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + releaseTrain: + description: The release train used by this extension. Possible + values include but are not limited to Stable, Preview. Changing + this forces a new Kubernetes Cluster Extension to be created. + type: string + targetNamespace: + description: Namespace where the extension will be created for + a namespace scoped extension. If this namespace does not exist, + it will be created. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + version: + description: User-specified version that the extension should + pin to. If it is not set, Azure will use the latest version + and auto upgrade it. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: |- + PublishConnectionDetailsTo specifies the connection secret config which + contains a name, metadata and a reference to secret store config to + which any connection details for this managed resource should be written. + Connection details frequently include the endpoint, username, + and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations are the annotations to be added to connection secret. + - For Kubernetes secrets, this will be used as "metadata.annotations". + - It is up to Secret Store implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: |- + Labels are the labels/tags to be added to connection secret. + - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store types. + type: object + type: + description: |- + Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: |- + WriteConnectionSecretToReference specifies the namespace and name of a + Secret to which any connection details for this managed resource should + be written. Connection details frequently include the endpoint, username, + and password required to connect to the managed resource. + This field is planned to be replaced in a future release in favor of + PublishConnectionDetailsTo. Currently, both could be set independently + and connection details would be published to both without affecting + each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.extensionType is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.extensionType) + || (has(self.initProvider) && has(self.initProvider.extensionType))' + status: + description: KubernetesClusterExtensionStatus defines the observed state + of KubernetesClusterExtension. + properties: + atProvider: + properties: + aksAssignedIdentity: + description: An aks_assigned_identity block as defined below. + items: + properties: + principalId: + description: The principal ID of resource identity. + type: string + tenantId: + description: The tenant ID of resource. + type: string + type: + description: The identity type. + type: string + type: object + type: array + clusterId: + description: Specifies the Cluster ID. Changing this forces a + new Kubernetes Cluster Extension to be created. + type: string + configurationProtectedSettings: + additionalProperties: + type: string + description: Configuration settings that are sensitive, as name-value + pairs for configuring this extension. + type: object + x-kubernetes-map-type: granular + configurationSettings: + additionalProperties: + type: string + description: Configuration settings, as name-value pairs for configuring + this extension. + type: object + x-kubernetes-map-type: granular + currentVersion: + description: The current version of the extension. + type: string + extensionType: + description: Specifies the type of extension. It must be one of + the extension types registered with Microsoft.KubernetesConfiguration + by the Extension publisher. For more information, please refer + to Available Extensions for AKS. Changing this forces a new + Kubernetes Cluster Extension to be created. + type: string + id: + description: The ID of the Kubernetes Cluster Extension. + type: string + plan: + description: A plan block as defined below. Changing this forces + a new resource to be created. + properties: + name: + description: Specifies the name of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + product: + description: Specifies the product of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + promotionCode: + description: Specifies the promotion code to use with the + plan. Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + publisher: + description: Specifies the publisher of the plan. Changing + this forces a new Kubernetes Cluster Extension to be created. + type: string + version: + description: Specifies the version of the plan from the marketplace. + Changing this forces a new Kubernetes Cluster Extension + to be created. + type: string + type: object + releaseNamespace: + description: Namespace where the extension release must be placed + for a cluster scoped extension. If this namespace does not exist, + it will be created. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + releaseTrain: + description: The release train used by this extension. Possible + values include but are not limited to Stable, Preview. Changing + this forces a new Kubernetes Cluster Extension to be created. + type: string + targetNamespace: + description: Namespace where the extension will be created for + a namespace scoped extension. If this namespace does not exist, + it will be created. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + version: + description: User-specified version that the extension should + pin to. If it is not set, Azure will use the latest version + and auto upgrade it. Changing this forces a new Kubernetes Cluster + Extension to be created. + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: |- + LastTransitionTime is the last time this condition transitioned from one + status to another. + format: date-time + type: string + message: + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. + type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: |- + Type of this condition. At most one of each condition type may apply to + a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {}