Skip to content

Commit

Permalink
Add db var in spec
Browse files Browse the repository at this point in the history
  • Loading branch information
MathieuCesbron committed Feb 13, 2024
1 parent 929cdb9 commit 168b7b1
Show file tree
Hide file tree
Showing 7 changed files with 191 additions and 23 deletions.
51 changes: 45 additions & 6 deletions api/v1/metabase_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,57 @@ limitations under the License.
package v1

import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.

// MetabaseSpec defines the desired state of Metabase
type MetabaseSpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file

// Foo is an example field of Metabase. Edit metabase_types.go to remove/update
Foo string `json:"foo,omitempty"`
// +kubebuilder:default="postgres:latest"
// +kubebuilder:validation:Optional
Test string `json:"test"`

// +kubebuilder:validation:Required
DB DBSpec `json:"db"`
}

type DBSpec struct {
// The image name to use for PostgreSQL containers.
// +kubebuilder:default="postgres:latest"
// +kubebuilder:validation:Optional
Image string `json:"image,omitempty"`

// ImagePullPolicy is used to determine when Kubernetes will attempt to
// pull (download) container images.
// +kubebuilder:validation:Enum={Always,Never,IfNotPresent}
// +kubebuilder:default="IfNotPresent"
// +kubebuilder:validation:Optional
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`

// Number of desired PostgreSQL pods.
// +kubebuilder:validation:Minimum=1
// +kubebuilder:default=1
// +kubebuilder:validation:Optional
Replicas *int32 `json:"replicas,omitempty"`

// +kubebuilder:validation:Required
Volume VolumeSpec `json:"volume"`
}

type VolumeSpec struct {
// StorageClassName defined for the volume.
// +kubebuilder:validation:Optional
StorageClassName *string `json:"storageClassName,omitempty"`

// Size of the volume.
// +kubebuilder:validation:default=10Gi
// +kubebuilder:validation:Pattern=`^\d+(Gi|Gb|Ki|)$`
// +kubebuilder:validation:Pattern=`^\d+(Ki|Mi|Gi|Ti|Pi|Ei|m|k|M|G|T|P|E)$`
// +kubebuilder:validation:Required
Size string `json:"size"`
}

// MetabaseStatus defines the observed state of Metabase
Expand All @@ -46,7 +84,8 @@ type Metabase struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec MetabaseSpec `json:"spec,omitempty"`
// +kubebuilder:validation:Required
Spec MetabaseSpec `json:"spec"`
Status MetabaseStatus `json:"status,omitempty"`
}

Expand Down
44 changes: 43 additions & 1 deletion api/v1/zz_generated.deepcopy.go

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

4 changes: 2 additions & 2 deletions charts/operator/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ apiVersion: v2
name: metabase-operator
description: Helm chart to deploy [unagex-metabase-operator](https://github.com/unagex/metabase-operator)
type: application
version: 0.0.2
appVersion: 0.0.2
version: 0.0.3
appVersion: 0.0.3
home: https://github.com/unagex/metabase-operator
45 changes: 42 additions & 3 deletions charts/operator/templates/crds/unagex.com_metabases.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,53 @@ spec:
spec:
description: MetabaseSpec defines the desired state of Metabase
properties:
foo:
description: Foo is an example field of Metabase. Edit metabase_types.go
to remove/update
db:
properties:
image:
default: postgres:latest
description: The image name to use for PostgreSQL containers.
type: string
imagePullPolicy:
default: IfNotPresent
description: ImagePullPolicy is used to determine when Kubernetes
will attempt to pull (download) container images.
enum:
- Always
- Never
- IfNotPresent
type: string
replicas:
default: 1
description: Number of desired PostgreSQL pods.
format: int32
minimum: 1
type: integer
volume:
properties:
size:
description: Size of the volume.
pattern: ^\d+(Ki|Mi|Gi|Ti|Pi|Ei|m|k|M|G|T|P|E)$
type: string
storageClassName:
description: StorageClassName defined for the volume.
type: string
required:
- size
type: object
required:
- volume
type: object
test:
default: postgres:latest
type: string
required:
- db
type: object
status:
description: MetabaseStatus defines the observed state of Metabase
type: object
required:
- spec
type: object
served: true
storage: true
Expand Down
45 changes: 42 additions & 3 deletions config/crd/bases/unagex.com_metabases.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,53 @@ spec:
spec:
description: MetabaseSpec defines the desired state of Metabase
properties:
foo:
description: Foo is an example field of Metabase. Edit metabase_types.go
to remove/update
db:
properties:
image:
default: postgres:latest
description: The image name to use for PostgreSQL containers.
type: string
imagePullPolicy:
default: IfNotPresent
description: ImagePullPolicy is used to determine when Kubernetes
will attempt to pull (download) container images.
enum:
- Always
- Never
- IfNotPresent
type: string
replicas:
default: 1
description: Number of desired PostgreSQL pods.
format: int32
minimum: 1
type: integer
volume:
properties:
size:
description: Size of the volume.
pattern: ^\d+(Ki|Mi|Gi|Ti|Pi|Ei|m|k|M|G|T|P|E)$
type: string
storageClassName:
description: StorageClassName defined for the volume.
type: string
required:
- size
type: object
required:
- volume
type: object
test:
default: postgres:latest
type: string
required:
- db
type: object
status:
description: MetabaseStatus defines the observed state of Metabase
type: object
required:
- spec
type: object
served: true
storage: true
Expand Down
7 changes: 7 additions & 0 deletions config/samples/v1_metabase.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,10 @@ kind: Metabase
metadata:
name: metabase-sample
spec:
db:
# image: "postgres:latest"
# imagePullPolicy: "IfNotPresent"
# replicas: 1
volume:
# storageClassName: standard
size: 10Gi
18 changes: 10 additions & 8 deletions internal/controller/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/utils/ptr"
controllerruntime "sigs.k8s.io/controller-runtime"
)

Expand Down Expand Up @@ -52,7 +51,8 @@ func (r *MetabaseReconciler) GetStatefulSet(metabase *unagexcomv1.Metabase) *app
Labels: ls,
},
Spec: appsv1.StatefulSetSpec{
Replicas: ptr.To[int32](1),
// Only one replicas of metabase is allowed at the moment.
Replicas: metabase.Spec.DB.Replicas,
Selector: &metav1.LabelSelector{
MatchLabels: ls,
},
Expand All @@ -74,8 +74,9 @@ func (r *MetabaseReconciler) GetStatefulSet(metabase *unagexcomv1.Metabase) *app
},
Containers: []corev1.Container{
{
Image: "postgres:latest",
Name: metabase.Name,
Image: metabase.Spec.DB.Image,
ImagePullPolicy: metabase.Spec.DB.ImagePullPolicy,
Name: metabase.Name,
Ports: []corev1.ContainerPort{
{
Name: "psql",
Expand Down Expand Up @@ -134,18 +135,19 @@ func (r *MetabaseReconciler) GetStatefulSet(metabase *unagexcomv1.Metabase) *app
}

func (r *MetabaseReconciler) getVCTs(metabase *unagexcomv1.Metabase) []corev1.PersistentVolumeClaim {
r.Log.Info("the value is")
r.Log.Info(fmt.Sprintf("%+v", metabase.Spec))
vct := &corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: metabase.Name + "-storage",
Namespace: metabase.Namespace,
},
Spec: corev1.PersistentVolumeClaimSpec{
// TODO: fill this spec
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
StorageClassName: metabase.Spec.DB.Volume.StorageClassName,
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
// TODO: Resize would be possible depending on the cloud provider.
corev1.ResourceStorage: resource.MustParse("1Gi"),
corev1.ResourceStorage: resource.MustParse(metabase.Spec.DB.Volume.Size),
},
},
},
Expand Down

0 comments on commit 168b7b1

Please # to comment.