Skip to content

Commit 168b7b1

Browse files
Add db var in spec
1 parent 929cdb9 commit 168b7b1

File tree

7 files changed

+191
-23
lines changed

7 files changed

+191
-23
lines changed

api/v1/metabase_types.go

+45-6
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,57 @@ limitations under the License.
1717
package v1
1818

1919
import (
20+
corev1 "k8s.io/api/core/v1"
2021
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2122
)
2223

23-
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
24-
// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.
25-
2624
// MetabaseSpec defines the desired state of Metabase
2725
type MetabaseSpec struct {
2826
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
2927
// Important: Run "make" to regenerate code after modifying this file
3028

31-
// Foo is an example field of Metabase. Edit metabase_types.go to remove/update
32-
Foo string `json:"foo,omitempty"`
29+
// +kubebuilder:default="postgres:latest"
30+
// +kubebuilder:validation:Optional
31+
Test string `json:"test"`
32+
33+
// +kubebuilder:validation:Required
34+
DB DBSpec `json:"db"`
35+
}
36+
37+
type DBSpec struct {
38+
// The image name to use for PostgreSQL containers.
39+
// +kubebuilder:default="postgres:latest"
40+
// +kubebuilder:validation:Optional
41+
Image string `json:"image,omitempty"`
42+
43+
// ImagePullPolicy is used to determine when Kubernetes will attempt to
44+
// pull (download) container images.
45+
// +kubebuilder:validation:Enum={Always,Never,IfNotPresent}
46+
// +kubebuilder:default="IfNotPresent"
47+
// +kubebuilder:validation:Optional
48+
ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"`
49+
50+
// Number of desired PostgreSQL pods.
51+
// +kubebuilder:validation:Minimum=1
52+
// +kubebuilder:default=1
53+
// +kubebuilder:validation:Optional
54+
Replicas *int32 `json:"replicas,omitempty"`
55+
56+
// +kubebuilder:validation:Required
57+
Volume VolumeSpec `json:"volume"`
58+
}
59+
60+
type VolumeSpec struct {
61+
// StorageClassName defined for the volume.
62+
// +kubebuilder:validation:Optional
63+
StorageClassName *string `json:"storageClassName,omitempty"`
64+
65+
// Size of the volume.
66+
// +kubebuilder:validation:default=10Gi
67+
// +kubebuilder:validation:Pattern=`^\d+(Gi|Gb|Ki|)$`
68+
// +kubebuilder:validation:Pattern=`^\d+(Ki|Mi|Gi|Ti|Pi|Ei|m|k|M|G|T|P|E)$`
69+
// +kubebuilder:validation:Required
70+
Size string `json:"size"`
3371
}
3472

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

49-
Spec MetabaseSpec `json:"spec,omitempty"`
87+
// +kubebuilder:validation:Required
88+
Spec MetabaseSpec `json:"spec"`
5089
Status MetabaseStatus `json:"status,omitempty"`
5190
}
5291

api/v1/zz_generated.deepcopy.go

+43-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

charts/operator/Chart.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ apiVersion: v2
22
name: metabase-operator
33
description: Helm chart to deploy [unagex-metabase-operator](https://github.com/unagex/metabase-operator)
44
type: application
5-
version: 0.0.2
6-
appVersion: 0.0.2
5+
version: 0.0.3
6+
appVersion: 0.0.3
77
home: https://github.com/unagex/metabase-operator

charts/operator/templates/crds/unagex.com_metabases.yaml

+42-3
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,53 @@ spec:
3434
spec:
3535
description: MetabaseSpec defines the desired state of Metabase
3636
properties:
37-
foo:
38-
description: Foo is an example field of Metabase. Edit metabase_types.go
39-
to remove/update
37+
db:
38+
properties:
39+
image:
40+
default: postgres:latest
41+
description: The image name to use for PostgreSQL containers.
42+
type: string
43+
imagePullPolicy:
44+
default: IfNotPresent
45+
description: ImagePullPolicy is used to determine when Kubernetes
46+
will attempt to pull (download) container images.
47+
enum:
48+
- Always
49+
- Never
50+
- IfNotPresent
51+
type: string
52+
replicas:
53+
default: 1
54+
description: Number of desired PostgreSQL pods.
55+
format: int32
56+
minimum: 1
57+
type: integer
58+
volume:
59+
properties:
60+
size:
61+
description: Size of the volume.
62+
pattern: ^\d+(Ki|Mi|Gi|Ti|Pi|Ei|m|k|M|G|T|P|E)$
63+
type: string
64+
storageClassName:
65+
description: StorageClassName defined for the volume.
66+
type: string
67+
required:
68+
- size
69+
type: object
70+
required:
71+
- volume
72+
type: object
73+
test:
74+
default: postgres:latest
4075
type: string
76+
required:
77+
- db
4178
type: object
4279
status:
4380
description: MetabaseStatus defines the observed state of Metabase
4481
type: object
82+
required:
83+
- spec
4584
type: object
4685
served: true
4786
storage: true

config/crd/bases/unagex.com_metabases.yaml

+42-3
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,53 @@ spec:
3434
spec:
3535
description: MetabaseSpec defines the desired state of Metabase
3636
properties:
37-
foo:
38-
description: Foo is an example field of Metabase. Edit metabase_types.go
39-
to remove/update
37+
db:
38+
properties:
39+
image:
40+
default: postgres:latest
41+
description: The image name to use for PostgreSQL containers.
42+
type: string
43+
imagePullPolicy:
44+
default: IfNotPresent
45+
description: ImagePullPolicy is used to determine when Kubernetes
46+
will attempt to pull (download) container images.
47+
enum:
48+
- Always
49+
- Never
50+
- IfNotPresent
51+
type: string
52+
replicas:
53+
default: 1
54+
description: Number of desired PostgreSQL pods.
55+
format: int32
56+
minimum: 1
57+
type: integer
58+
volume:
59+
properties:
60+
size:
61+
description: Size of the volume.
62+
pattern: ^\d+(Ki|Mi|Gi|Ti|Pi|Ei|m|k|M|G|T|P|E)$
63+
type: string
64+
storageClassName:
65+
description: StorageClassName defined for the volume.
66+
type: string
67+
required:
68+
- size
69+
type: object
70+
required:
71+
- volume
72+
type: object
73+
test:
74+
default: postgres:latest
4075
type: string
76+
required:
77+
- db
4178
type: object
4279
status:
4380
description: MetabaseStatus defines the observed state of Metabase
4481
type: object
82+
required:
83+
- spec
4584
type: object
4685
served: true
4786
storage: true

config/samples/v1_metabase.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,10 @@ kind: Metabase
33
metadata:
44
name: metabase-sample
55
spec:
6+
db:
7+
# image: "postgres:latest"
8+
# imagePullPolicy: "IfNotPresent"
9+
# replicas: 1
10+
volume:
11+
# storageClassName: standard
12+
size: 10Gi

internal/controller/database.go

+10-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"k8s.io/apimachinery/pkg/api/resource"
1313
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1414
"k8s.io/apimachinery/pkg/types"
15-
"k8s.io/utils/ptr"
1615
controllerruntime "sigs.k8s.io/controller-runtime"
1716
)
1817

@@ -52,7 +51,8 @@ func (r *MetabaseReconciler) GetStatefulSet(metabase *unagexcomv1.Metabase) *app
5251
Labels: ls,
5352
},
5453
Spec: appsv1.StatefulSetSpec{
55-
Replicas: ptr.To[int32](1),
54+
// Only one replicas of metabase is allowed at the moment.
55+
Replicas: metabase.Spec.DB.Replicas,
5656
Selector: &metav1.LabelSelector{
5757
MatchLabels: ls,
5858
},
@@ -74,8 +74,9 @@ func (r *MetabaseReconciler) GetStatefulSet(metabase *unagexcomv1.Metabase) *app
7474
},
7575
Containers: []corev1.Container{
7676
{
77-
Image: "postgres:latest",
78-
Name: metabase.Name,
77+
Image: metabase.Spec.DB.Image,
78+
ImagePullPolicy: metabase.Spec.DB.ImagePullPolicy,
79+
Name: metabase.Name,
7980
Ports: []corev1.ContainerPort{
8081
{
8182
Name: "psql",
@@ -134,18 +135,19 @@ func (r *MetabaseReconciler) GetStatefulSet(metabase *unagexcomv1.Metabase) *app
134135
}
135136

136137
func (r *MetabaseReconciler) getVCTs(metabase *unagexcomv1.Metabase) []corev1.PersistentVolumeClaim {
138+
r.Log.Info("the value is")
139+
r.Log.Info(fmt.Sprintf("%+v", metabase.Spec))
137140
vct := &corev1.PersistentVolumeClaim{
138141
ObjectMeta: metav1.ObjectMeta{
139142
Name: metabase.Name + "-storage",
140143
Namespace: metabase.Namespace,
141144
},
142145
Spec: corev1.PersistentVolumeClaimSpec{
143-
// TODO: fill this spec
144-
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
146+
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
147+
StorageClassName: metabase.Spec.DB.Volume.StorageClassName,
145148
Resources: corev1.ResourceRequirements{
146149
Requests: corev1.ResourceList{
147-
// TODO: Resize would be possible depending on the cloud provider.
148-
corev1.ResourceStorage: resource.MustParse("1Gi"),
150+
corev1.ResourceStorage: resource.MustParse(metabase.Spec.DB.Volume.Size),
149151
},
150152
},
151153
},

0 commit comments

Comments
 (0)