Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
First deployment created and tested
  • Loading branch information
an3l committed Dec 22, 2021
1 parent 337b5f9 commit 512d8e8
Show file tree
Hide file tree
Showing 7 changed files with 121 additions and 25 deletions.
9 changes: 7 additions & 2 deletions api/v1alpha1/mariadb_types.go
Expand Up @@ -29,7 +29,7 @@ type MariaDBSpec struct {
// +optional
// +kubebuilder:default=1
// +kubebuilder:validation:Maximum=4
Replicas *int32 `json:"size"`
Replicas *int32 `json:"replicas"`

// Database additional user details (base64 encoded)
// +kubebuilder:validation:Required
Expand All @@ -48,9 +48,14 @@ type MariaDBSpec struct {
Rootpwd string `json:"rootpwd"`

// Image name with version
// +kubebuilder:validation:Required
// +optional
Image string `json:"image"`

// Image version (latest is 10.6, so let's have it as latest)
// +optional
// +kubebuilder:default="10.6"
ImageVersion string `json:"imageVersion"`

// Database storage Path
// +kubebuilder:validation:Required
DataStoragePath string `json:"dataStoragePath"`
Expand Down
7 changes: 6 additions & 1 deletion api/v1alpha1/zz_generated.deepcopy.go

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

13 changes: 8 additions & 5 deletions config/crd/bases/mariak8g.mariadb.org_mariadbs.yaml
Expand Up @@ -57,28 +57,31 @@ spec:
image:
description: Image name with version
type: string
imageVersion:
default: "10.6"
description: Image version (latest is 10.6, so let's have it as latest)
type: string
password:
description: Database additional user password (base64 encoded)
type: string
port:
default: 3306
format: int32
type: integer
rootpwd:
description: Root user password
type: string
size:
replicas:
default: 1
format: int32
maximum: 4
type: integer
rootpwd:
description: Root user password
type: string
username:
description: Database additional user details (base64 encoded)
type: string
required:
- dataStoragePath
- database
- image
- password
- rootpwd
- username
Expand Down
13 changes: 8 additions & 5 deletions config/samples/mariak8g_v1alpha1_mariadb.yaml
Expand Up @@ -6,8 +6,11 @@ spec:
# Add required fields:
dataStoragePath: "/tmp/datadir"
database: "testDB-operator"
image: "docker-image"
password: "test!123"
rootpwd: "root!123"
username: "anel"

password: "my_cool_secret"
rootpwd: "my-secret-pw"
username: "example-user"

# Optional fields
replicas: 2
imageVersion: "10.6"
image: "quay.io/mariadb-foundation/mariadb-devel:10.5"
75 changes: 75 additions & 0 deletions controllers/common.go
@@ -0,0 +1,75 @@
package controllers

import (
//"context"

//"github.com/go-logr/logr"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
//"k8s.io/apimachinery/pkg/api/errors"
//"k8s.io/apimachinery/pkg/api/resource"
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"

mariak8gv1alpha1 "github.com/mariadb/mariadb.org-tools/mariadb-operator/api/v1alpha1"
)

func (r *MariaDBReconciler) desiredDeployment(database mariak8gv1alpha1.MariaDB) (appsv1.Deployment, error) {
mariaImage := database.Spec.Image // image can be assigned
if mariaImage == "" {
mariaImage = "quay.io/mariadb-foundation/mariadb-devel:" + database.Spec.ImageVersion // get the latest image version
}

mariaPort := database.Spec.Port
if mariaPort == 0 {
mariaPort = 3306
}

// Create the deployment
depl := appsv1.Deployment{
TypeMeta: metav1.TypeMeta{APIVersion: appsv1.SchemeGroupVersion.String(), Kind: "Deployment"},
ObjectMeta: metav1.ObjectMeta{
Name: database.Name + "-server",
Namespace: database.Namespace,
},
Spec: appsv1.DeploymentSpec{
Replicas: database.Spec.Replicas, // won't be nil because defaulting
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{"mariadb": database.Name},
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{"mariadb": database.Name},
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{
Name: "mariadb",
Image: mariaImage,
Env: []corev1.EnvVar{
{Name: "MARIADB_ALLOW_EMPTY_ROOT_PASSWORD", Value: "1"},
// root password should be set from secret - test
{Name: "MARIADB_ROOT_PASSWORD", Value: database.Spec.Rootpwd},
{Name: "MARIADB_USER", Value: database.Spec.Username},
{Name: "MARIADB_PASSWORD", Value: database.Spec.Password},
},
Ports: []corev1.ContainerPort{
{ContainerPort: mariaPort, Name: "mariadb-port", Protocol: "TCP"},
},
//Resources:
},
},
},
},
},
}

if err := ctrl.SetControllerReference(&database, &depl, r.Scheme); err != nil {
return depl, err
}

return depl, nil
}
26 changes: 15 additions & 11 deletions controllers/mariadb_controller.go
Expand Up @@ -20,9 +20,9 @@ import (
"context"

"github.com/go-logr/logr"
appsv1 "k8s.io/api/apps/v1"
"k8s.io/apimachinery/pkg/api/errors"
// apps "k8s.io/api/apps/v1" // go get
apps "k8s.io/api/core/v1"
// apps "k8s.io/api/core/v1"

"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
Expand Down Expand Up @@ -70,16 +70,19 @@ func (r *MariaDBReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
log.Error(err, "unable to update the variable status")
return ctrl.Result{}, err
}

// create or update the deployment
depl := &apps.Deployment{
ObjectMeta: metav1.ObjectMeta{
// we'll make things simple by matching name to the name of our mariadb-sample
Name: req.Name,
Namespace: req.Namespace,
},

deployment, err := r.desiredDeployment(app)
// return if there is an error
if err != nil {
return ctrl.Result{}, err
}

applyOpts := []client.PatchOption{client.ForceOwnership, client.FieldOwner("mariadb-controller")}

err = r.Patch(ctx, &deployment, client.Apply, applyOpts...)
if err != nil {
return ctrl.Result{}, err
}


log.Info("Reconciled MariaDB kind", "mariadb", app.Name, "status", app.Status)

Expand All @@ -90,5 +93,6 @@ func (r *MariaDBReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
func (r *MariaDBReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&mariak8gv1alpha1.MariaDB{}).
Owns(&appsv1.Deployment{}).
Complete(r)
}
3 changes: 2 additions & 1 deletion go.mod
Expand Up @@ -3,9 +3,10 @@ module github.com/mariadb/mariadb.org-tools/mariadb-operator
go 1.16

require (
github.com/go-logr/logr v0.4.0 // indirect
github.com/go-logr/logr v0.4.0
github.com/onsi/ginkgo v1.16.4
github.com/onsi/gomega v1.15.0
k8s.io/api v0.22.1
k8s.io/apimachinery v0.22.1
k8s.io/client-go v0.22.1
sigs.k8s.io/controller-runtime v0.10.0
Expand Down

0 comments on commit 512d8e8

Please sign in to comment.