Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions api/v1alpha1/userconfig_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ type Identity struct {
Groups []string `json:"groups,omitempty"`

// Contact is the user's email address for communication.
// +kubebuilder:validation:Pattern="^[a-zA-Z._%+-]+@[a-zA-Z.-]+\\.[a-zA-Z]{2,}$"
// +kubebuilder:validation:Pattern=^(?!.*\.\.)(?!\.)([\w\.]+)(?<!\.)@gmail\.com$

Contact string `json:"contact"`

// Labels are optional additional tags for user classification.
Expand Down Expand Up @@ -228,11 +229,11 @@ type LimitRangeLimit struct {
// +kubebuilder:validation:Enum=Container;Pod
Type string `json:"type"`

// Maximum allowed resource a container can request or limit. Cannot be assigned below this.
// Maximum allowed resource a container can request or limit. Cannot be assigned above this.
// +optional
Max *Resources `json:"max,omitempty"`

// Smallest allowed resource a container can request or limit. Cannot be assigned above this
// Smallest allowed resource a container can request or limit. Cannot be assigned below this
// +optional
Min *Resources `json:"min,omitempty"`

Expand Down Expand Up @@ -349,6 +350,7 @@ type UserConfigStatus struct {
// +kubebuilder:printcolumn:name="Username",type="string",JSONPath=".spec.identity.username"
// +kubebuilder:resource:shortName=ucfg
// +kubebuilder:resource:scope=Cluster
// UserConfig is the CRD for managing user configurations in a Kubernetes cluster, defining identity, permissions, secrets, and resource quotas.
type UserConfig struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Expand Down
9 changes: 5 additions & 4 deletions config/crd/bases/myoperator.01cloud.io_userconfigs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ spec:
name: v1alpha1
schema:
openAPIV3Schema:
description: UserConfig is the CRD for managing user configurations in a Kubernetes
cluster, defining identity, permissions, secrets, and resource quotas.
properties:
apiVersion:
description: |-
Expand All @@ -53,8 +55,7 @@ spec:
details
properties:
contact:
description: Contact is the user's email address for communication.
pattern: ^[a-zA-Z._%+-]+@[a-zA-Z.-]+\.[a-zA-Z]{2,}$
pattern: ^(?!.*\.\.)(?!\.)([\w\.]+)(?<!\.)@gmail\.com$
type: string
groups:
description: Groups represent user's group membership with predefined
Expand Down Expand Up @@ -123,7 +124,7 @@ spec:
type: object
max:
description: Maximum allowed resource a container can request
or limit. Cannot be assigned below this.
or limit. Cannot be assigned above this.
properties:
cpu:
description: |-
Expand All @@ -140,7 +141,7 @@ spec:
type: object
min:
description: Smallest allowed resource a container can request
or limit. Cannot be assigned above this
or limit. Cannot be assigned below this
properties:
cpu:
description: |-
Expand Down
1 change: 1 addition & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ rules:
resources:
- limitranges
- namespaces
- persistentvolume
- persistentvolumeclaim
- persistentvolumeclaims
- persistentvolumes
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ require (
k8s.io/api v0.31.0
k8s.io/apimachinery v0.31.3
k8s.io/client-go v0.31.0
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
sigs.k8s.io/controller-runtime v0.19.1
)

Expand Down Expand Up @@ -104,6 +103,7 @@ require (
k8s.io/component-base v0.31.0 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20240709000822-3c01b740850f // indirect
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
Expand Down
3 changes: 2 additions & 1 deletion internal/controller/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (

"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"

ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/envtest"
logf "sigs.k8s.io/controller-runtime/pkg/log"
Expand All @@ -19,7 +21,6 @@ import (
myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

sealedsecretsv1alpha1 "github.com/bitnami-labs/sealed-secrets/pkg/apis/sealedsecrets/v1alpha1"
ctrl "sigs.k8s.io/controller-runtime"
// +kubebuilder:scaffold:imports
)

Expand Down
14 changes: 8 additions & 6 deletions internal/controller/userconfig_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,18 @@ import (
"fmt"

corev1 "k8s.io/api/core/v1"

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

"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/predicate"

sealedsecretsv1alpha1 "github.com/bitnami-labs/sealed-secrets/pkg/apis/sealedsecrets/v1alpha1"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"
usecase "01cloud/zoperator/internal/usecase"

sealedsecretsv1alpha1 "github.com/bitnami-labs/sealed-secrets/pkg/apis/sealedsecrets/v1alpha1"
"sigs.k8s.io/controller-runtime/pkg/log"
)

// UserConfigReconciler reconciles a UserConfig object
Expand Down Expand Up @@ -72,11 +70,15 @@ const (
// +kubebuilder:rbac:groups=apps,resources=daemonsets/scale,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=apps,resources=statefulsets,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=apps,resources=statefulsets/scale,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=core,resources=persistentvolumeclaims,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=core,resources=persistentvolumeclaim,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaim,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=core,resources=persistentvolumeclaims,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,verbs=get;list;watch;create;update;patch;delete

// +kubebuilder:rbac:groups=core,resources=persistentvolumeclaims/status,verbs=get;update;patch
// +kubebuilder:rbac:groups=core,resources=persistentvolume,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=core,resources=persistentvolumes,verbs=get;list;watch;create;update;patch;delete

// +kubebuilder:rbac:groups=core,resources=persistentvolumes/status,verbs=get;update;patch

// Reconcile handles the reconciliation loop for UserConfig resources
Expand Down
2 changes: 1 addition & 1 deletion internal/usecase/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (

apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
ctrl "sigs.k8s.io/controller-runtime"

ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"
Expand Down
2 changes: 1 addition & 1 deletion internal/usecase/kubeconfig_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import (
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
ctrl "sigs.k8s.io/controller-runtime"

ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

Expand Down
2 changes: 2 additions & 0 deletions internal/usecase/namespace.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
"context"
"fmt"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

Check failure on line 7 in internal/usecase/namespace.go

View workflow job for this annotation

GitHub Actions / e2e-tests

other declaration of myoperatorv1alpha1

corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

Check failure on line 14 in internal/usecase/namespace.go

View workflow job for this annotation

GitHub Actions / e2e-tests

"01cloud/zoperator/api/v1alpha1" imported as myoperatorv1alpha1 and not used

Check failure on line 14 in internal/usecase/namespace.go

View workflow job for this annotation

GitHub Actions / e2e-tests

myoperatorv1alpha1 redeclared in this block
)

func (u *UserConfigUseCase) ReconcileNamespace(ctx context.Context, uc *myoperatorv1alpha1.UserConfig) error {
Expand Down
2 changes: 1 addition & 1 deletion internal/usecase/network_policies.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
"fmt"

corev1 "k8s.io/api/core/v1"

networkingv1 "k8s.io/api/networking/v1"

apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
Expand Down
16 changes: 16 additions & 0 deletions internal/usecase/rbac.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,22 @@ func mapActualResource(resource string) string {
return "networkpolicies"
case "sealedsecret", "sealedsecrets":
return "sealedsecrets"
case "persistentvolumeclaim", "persistentvolumeclaims":
return "persistentvolumeclaims"
case "persistentvolume", "persistentvolumes":
return "persistentvolumes"
case "configmap", "configmaps":
return "configmaps"
case "persistentvolumeclaim/status", "persistentvolumeclaims/status":
return "persistentvolumeclaims/status"
case "persistentvolume/status", "persistentvolumes/status":
return "persistentvolumes/status"
case "resourcequota/status", "resourcequotas/status":
return "resourcequotas/status"
case "limitrange/status", "limitranges/status":
return "limitranges/status"
case "serviceaccount/token", "serviceaccounts/token":
return "serviceaccounts/token"
case "logs":
return "pods/log"
case "scaledeployment":
Expand Down
4 changes: 4 additions & 0 deletions internal/usecase/resource_quota.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@
"fmt"
"reflect"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

Check failure on line 8 in internal/usecase/resource_quota.go

View workflow job for this annotation

GitHub Actions / e2e-tests

other declaration of myoperatorv1alpha1

corev1 "k8s.io/api/core/v1"

apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"sigs.k8s.io/controller-runtime/pkg/client"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

Check failure on line 18 in internal/usecase/resource_quota.go

View workflow job for this annotation

GitHub Actions / e2e-tests

"01cloud/zoperator/api/v1alpha1" imported as myoperatorv1alpha1 and not used

Check failure on line 18 in internal/usecase/resource_quota.go

View workflow job for this annotation

GitHub Actions / e2e-tests

myoperatorv1alpha1 redeclared in this block
)

func (u *UserConfigUseCase) ReconcileResourceQuota(ctx context.Context, userConfig *myoperatorv1alpha1.UserConfig) error {
Expand Down
5 changes: 5 additions & 0 deletions internal/usecase/sealed_secrets.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,20 @@
"context"
"fmt"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

Check failure on line 7 in internal/usecase/sealed_secrets.go

View workflow job for this annotation

GitHub Actions / e2e-tests

other declaration of myoperatorv1alpha1

sealedsecretsv1alpha1 "github.com/bitnami-labs/sealed-secrets/pkg/apis/sealedsecrets/v1alpha1"

corev1 "k8s.io/api/core/v1"

apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/log"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

Check failure on line 20 in internal/usecase/sealed_secrets.go

View workflow job for this annotation

GitHub Actions / e2e-tests

"01cloud/zoperator/api/v1alpha1" imported as myoperatorv1alpha1 and not used

Check failure on line 20 in internal/usecase/sealed_secrets.go

View workflow job for this annotation

GitHub Actions / e2e-tests

myoperatorv1alpha1 redeclared in this block
)

func (u *UserConfigUseCase) ReconcileSealedSecrets(ctx context.Context, uc *myoperatorv1alpha1.UserConfig) error {
Expand Down
3 changes: 3 additions & 0 deletions internal/usecase/usecase.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@
myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

"k8s.io/apimachinery/pkg/runtime"

ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"

Check failure on line 13 in internal/usecase/usecase.go

View workflow job for this annotation

GitHub Actions / e2e-tests

myoperatorv1alpha1 redeclared in this block
)

type UseCase interface {
Expand Down
9 changes: 4 additions & 5 deletions test/e2e/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,14 @@ import (
. "github.com/onsi/gomega/gstruct"
"github.com/onsi/gomega/types"

"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"sigs.k8s.io/controller-runtime/pkg/client"

corev1 "k8s.io/api/core/v1"
networkingv1 "k8s.io/api/networking/v1"
rbacv1 "k8s.io/api/rbac/v1"
"k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"sigs.k8s.io/controller-runtime/pkg/client"

myoperatorv1alpha1 "01cloud/zoperator/api/v1alpha1"
"01cloud/zoperator/test/utils"
Expand Down