Skip to content

Commit

Permalink
dependency updated to latest versions (#91)
Browse files Browse the repository at this point in the history
Co-authored-by: Søren Mathiasen <sorenm@mymessages.dk>
  • Loading branch information
wgarunap and sorenmat committed Apr 23, 2021
1 parent 05ee27c commit 8e7ca96
Show file tree
Hide file tree
Showing 11 changed files with 992 additions and 472 deletions.
21 changes: 11 additions & 10 deletions client/client.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package client

import (
"context"
"log"

"github.com/sorenmat/k8s-rds/crd"
Expand All @@ -26,45 +27,45 @@ type Crdclient struct {
codec runtime.ParameterCodec
}

func (f *Crdclient) Create(obj *crd.Database) (*crd.Database, error) {
func (f *Crdclient) Create(ctx context.Context, obj *crd.Database) (*crd.Database, error) {
var result crd.Database
err := f.cl.Post().
Namespace(f.ns).Resource(f.plural).
Body(obj).Do().Into(&result)
Body(obj).Do(ctx).Into(&result)
return &result, err
}

func (f *Crdclient) Update(obj *crd.Database) (*crd.Database, error) {
func (f *Crdclient) Update(ctx context.Context, obj *crd.Database) (*crd.Database, error) {
var result crd.Database
err := f.cl.Put().
Namespace(f.ns).Resource(f.plural).Name(obj.Name).
Body(obj).Do().Into(&result)
Body(obj).Do(ctx).Into(&result)
log.Printf("New resource version of the DB %s is %s\n", result.Name,
result.ResourceVersion)
return &result, err
}

func (f *Crdclient) Delete(name string, options *meta_v1.DeleteOptions) error {
func (f *Crdclient) Delete(ctx context.Context, name string, options *meta_v1.DeleteOptions) error {
return f.cl.Delete().
Namespace(f.ns).Resource(f.plural).
Name(name).Body(options).Do().
Name(name).Body(options).Do(ctx).
Error()
}

func (f *Crdclient) Get(name string) (*crd.Database, error) {
func (f *Crdclient) Get(ctx context.Context, name string) (*crd.Database, error) {
var result crd.Database
err := f.cl.Get().
Namespace(f.ns).Resource(f.plural).
Name(name).Do().Into(&result)
Name(name).Do(ctx).Into(&result)
return &result, err
}

func (f *Crdclient) List(opts meta_v1.ListOptions) (*crd.DatabaseList, error) {
func (f *Crdclient) List(ctx context.Context, opts meta_v1.ListOptions) (*crd.DatabaseList, error) {
var result crd.DatabaseList
err := f.cl.Get().
Namespace(f.ns).Resource(f.plural).
VersionedParams(&opts, f.codec).
Do().Into(&result)
Do(ctx).Into(&result)
return &result, err
}

Expand Down
4 changes: 3 additions & 1 deletion crd/crd.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package crd

import (
"context"
v1 "k8s.io/api/core/v1"
apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
apiextcs "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
Expand Down Expand Up @@ -134,8 +135,9 @@ func NewDatabaseCRD() *apiextv1beta1.CustomResourceDefinition {

// CreateCRD creates the CRD resource, ignore error if it already exists
func CreateCRD(clientset apiextcs.Interface) error {
ctx := context.Background()
crd := NewDatabaseCRD()
_, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Create(crd)
_, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Create(ctx, crd, meta_v1.CreateOptions{})
if err != nil && apierrors.IsAlreadyExists(err) {
return nil
}
Expand Down
16 changes: 8 additions & 8 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ require (
github.com/aws/aws-sdk-go-v2/service/ec2 v1.2.0
github.com/aws/aws-sdk-go-v2/service/rds v1.2.0
github.com/ghodss/yaml v1.0.0
github.com/golangci/golangci-lint v1.17.2-0.20190910081425-f312a0fc4e31
github.com/golangci/golangci-lint v1.39.0
github.com/mitchellh/go-homedir v1.1.0
github.com/pkg/errors v0.8.1
github.com/spf13/cobra v0.0.5
github.com/stretchr/testify v1.4.0
github.com/pkg/errors v0.9.1
github.com/spf13/cobra v1.1.3
github.com/stretchr/testify v1.7.0
github.com/xeipuuv/gojsonschema v1.2.0
k8s.io/api v0.0.0-20190905160310-fb749d2f1064
k8s.io/apiextensions-apiserver v0.0.0-20190906235842-a644246473f1
k8s.io/apimachinery v0.0.0-20190831074630-461753078381
k8s.io/client-go v0.0.0-20190906195228-67a413f31aea
k8s.io/api v0.21.0
k8s.io/apiextensions-apiserver v0.21.0
k8s.io/apimachinery v0.21.0
k8s.io/client-go v0.21.0
)
1,298 changes: 909 additions & 389 deletions go.sum

Large diffs are not rendered by default.

18 changes: 9 additions & 9 deletions kube/service.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package kube

import (
"context"
"fmt"
"log"

Expand Down Expand Up @@ -35,12 +36,11 @@ func (k *Kube) createServiceObj(s *v1.Service, namespace string, hostname string
}

// CreateService Creates or updates a service in Kubernetes with the new information
func (k *Kube) CreateService(namespace string, hostname string, internalname string) error {

func (k *Kube) CreateService(ctx context.Context, namespace string, hostname string, internalname string) error {
// create a service in kubernetes that points to the AWS RDS instance
serviceInterface := k.Client.CoreV1().Services(namespace)

s, sErr := serviceInterface.Get(hostname, metav1.GetOptions{})
s, sErr := serviceInterface.Get(ctx, hostname, metav1.GetOptions{})

create := false
if sErr != nil {
Expand All @@ -50,26 +50,26 @@ func (k *Kube) CreateService(namespace string, hostname string, internalname str
s = k.createServiceObj(s, namespace, hostname, internalname)
var err error
if create {
_, err = serviceInterface.Create(s)
_, err = serviceInterface.Create(ctx, s, metav1.CreateOptions{})
} else {
_, err = serviceInterface.Update(s)
_, err = serviceInterface.Update(ctx, s, metav1.UpdateOptions{})
}

return err
}

func (k *Kube) DeleteService(namespace string, dbname string) error {
func (k *Kube) DeleteService(ctx context.Context, namespace string, dbname string) error {
serviceInterface := k.Client.CoreV1().Services(namespace)
err := serviceInterface.Delete(dbname, &metav1.DeleteOptions{})
err := serviceInterface.Delete(ctx, dbname, metav1.DeleteOptions{})
if err != nil {
log.Println(err)
return errors.Wrap(err, fmt.Sprintf("delete of service %v failed in namespace %v", dbname, namespace))
}
return nil
}

func (k *Kube) GetSecret(namespace string, name string, key string) (string, error) {
secret, err := k.Client.CoreV1().Secrets(namespace).Get(name, metav1.GetOptions{})
func (k *Kube) GetSecret(ctx context.Context, namespace string, name string, key string) (string, error) {
secret, err := k.Client.CoreV1().Secrets(namespace).Get(ctx, name, metav1.GetOptions{})
if err != nil {
return "", errors.Wrap(err, fmt.Sprintf("unable to fetch secret %v", name))
}
Expand Down
39 changes: 16 additions & 23 deletions local/local_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ func New(db *crd.Database, kc kubernetes.Interface, repository string) (*Local,

// CreateDatabase creates a database from the CRD database object, is also ensures that the correct
// subnets are created for the database so we can access it
func (l *Local) CreateDatabase(_ context.Context, db *crd.Database) (string, error) {
func (l *Local) CreateDatabase(ctx context.Context, db *crd.Database) (string, error) {

if err := l.createPVC(db.Name, db.Namespace, db.Spec.Size); err != nil {
if err := l.createPVC(ctx, db.Name, db.Namespace, db.Spec.Size); err != nil {
return "", err
}

_new := false
d, err := l.kc.AppsV1().Deployments(db.Namespace).Get(db.Name, metav1.GetOptions{})
d, err := l.kc.AppsV1().Deployments(db.Namespace).Get(ctx, db.Name, metav1.GetOptions{})
if err != nil && !errors.IsNotFound(err) {
// we got an error and it's not the NotFound, let's crash
return "", err
Expand All @@ -59,13 +59,13 @@ func (l *Local) CreateDatabase(_ context.Context, db *crd.Database) (string, err

if _new {
log.Printf("creating database %v", db.Name)
_, err = l.kc.AppsV1().Deployments(db.Namespace).Create(d)
_, err = l.kc.AppsV1().Deployments(db.Namespace).Create(ctx, d, metav1.CreateOptions{})
if err != nil {
return "", err
}
} else {
log.Printf("updating database %v", db.Name)
_, err = l.kc.AppsV1().Deployments(db.Namespace).Update(d)
_, err = l.kc.AppsV1().Deployments(db.Namespace).Update(ctx, d, metav1.UpdateOptions{})
if err != nil {
return "", err
}
Expand All @@ -80,11 +80,10 @@ const (
iterationWaitPeriodSec = 5 * time.Second
)

func (l *Local) createPVC(name, namespace string, size int64) error {
func (l *Local) createPVC(ctx context.Context, name, namespace string, size int64) error {
newPVC := false

pvc, err := l.kc.CoreV1().PersistentVolumeClaims(namespace).Get(name,
metav1.GetOptions{})
pvc, err := l.kc.CoreV1().PersistentVolumeClaims(namespace).Get(ctx, name, metav1.GetOptions{})
if err != nil && !errors.IsNotFound(err) {
// we got an error and it's not the NotFound, let's crash
return err
Expand Down Expand Up @@ -127,14 +126,13 @@ func (l *Local) createPVC(name, namespace string, size int64) error {

if newPVC {
log.Printf("creating pvc %v", name)
_, err = l.kc.CoreV1().PersistentVolumeClaims(namespace).Create(pvc)
_, err = l.kc.CoreV1().PersistentVolumeClaims(namespace).Create(ctx, pvc, metav1.CreateOptions{})
if err != nil {
return err
}
} else {
log.Printf("updating pvc %v", name)
oldPvc, err := l.kc.CoreV1().PersistentVolumeClaims(namespace).Get(pvc.Name,
metav1.GetOptions{})
oldPvc, err := l.kc.CoreV1().PersistentVolumeClaims(namespace).Get(ctx, pvc.Name, metav1.GetOptions{})
if err != nil {
return err
}
Expand All @@ -144,7 +142,7 @@ func (l *Local) createPVC(name, namespace string, size int64) error {
name)
return nil
}
_, err = l.kc.CoreV1().PersistentVolumeClaims(namespace).Update(pvc)
_, err = l.kc.CoreV1().PersistentVolumeClaims(namespace).Update(ctx, pvc, metav1.UpdateOptions{})
if err != nil {
return e.Wrap(err,
fmt.Sprintf("Error: PVC %s has problems while updating %v", name, err))
Expand All @@ -155,15 +153,13 @@ func (l *Local) createPVC(name, namespace string, size int64) error {
pvcIsReady := false
for i := 0; i < maxAmountOfWaitIterations; i++ {

pvc, err := l.kc.CoreV1().PersistentVolumeClaims(namespace).Get(name,
metav1.GetOptions{})
pvc, err := l.kc.CoreV1().PersistentVolumeClaims(namespace).Get(ctx, name, metav1.GetOptions{})

if err != nil {
return e.Wrap(err, "problem of getting pvcs")
}
if pvc.Status.Phase == "Bound" {
pv, err := l.kc.CoreV1().PersistentVolumes().Get(pvc.Spec.VolumeName,
metav1.GetOptions{})
pv, err := l.kc.CoreV1().PersistentVolumes().Get(ctx, pvc.Spec.VolumeName, metav1.GetOptions{})
if err != nil {
return e.Wrap(err, "problem of getting pv")
}
Expand Down Expand Up @@ -192,21 +188,19 @@ const (
)

// DeleteDatabase deletes the db pod and pvc
func (l *Local) DeleteDatabase(_ context.Context, db *crd.Database) error {
func (l *Local) DeleteDatabase(ctx context.Context, db *crd.Database) error {
// delete the database instance

for i := 0; i < nDeleteAttempts; i++ {
if err := l.kc.AppsV1().Deployments(db.Namespace).Delete(db.Name,
&metav1.DeleteOptions{}); err != nil {
if err := l.kc.AppsV1().Deployments(db.Namespace).Delete(ctx, db.Name, metav1.DeleteOptions{}); err != nil {
fmt.Printf("ERROR: error while deleting the deployment: %v\n", err)
continue
}

if db.Spec.DeleteProtection {
log.Printf("Trying to delete a %v in %v which is a deleted protected database", db.Name, db.Namespace)
} else {
if err := l.kc.CoreV1().PersistentVolumeClaims(db.Namespace).Delete(db.Name,
&metav1.DeleteOptions{}); err != nil {
if err := l.kc.CoreV1().PersistentVolumeClaims(db.Namespace).Delete(ctx, db.Name, metav1.DeleteOptions{}); err != nil {
fmt.Printf("ERROR: error while deleting the pvc: %v\n", err)
continue
}
Expand All @@ -215,8 +209,7 @@ func (l *Local) DeleteDatabase(_ context.Context, db *crd.Database) error {
return nil
}

return fmt.Errorf("The number of attempts to delete db %s has exceeded",
db.ObjectMeta.Name)
return fmt.Errorf("the number of attempts to delete db %s has exceeded", db.ObjectMeta.Name)
}

func int32Ptr(i int32) *int32 { return &i }
Expand Down
17 changes: 9 additions & 8 deletions local/local_service.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package local

import (
"context"
"fmt"
"log"

Expand Down Expand Up @@ -31,15 +32,15 @@ func (l *Local) createServiceObj(s *v1.Service, namespace string, hostname strin
}

// CreateService Creates or updates a service in Kubernetes with the new information
func (l *Local) CreateService(namespace string, hostname string, internalname string) error {
func (l *Local) CreateService(ctx context.Context, namespace string, hostname string, internalname string) error {
client, err := kube.Client()
if err != nil {
return err
}
// create a service in kubernetes that points to the AWS RDS instance
serviceInterface := client.CoreV1().Services(namespace)

s, sErr := serviceInterface.Get(hostname, metav1.GetOptions{})
s, sErr := serviceInterface.Get(ctx, hostname, metav1.GetOptions{})

create := false
if sErr != nil {
Expand All @@ -49,34 +50,34 @@ func (l *Local) CreateService(namespace string, hostname string, internalname st
s = l.createServiceObj(s, namespace, hostname, internalname)

if create {
_, err = serviceInterface.Create(s)
_, err = serviceInterface.Create(ctx, s, metav1.CreateOptions{})
} else {
_, err = serviceInterface.Update(s)
_, err = serviceInterface.Update(ctx, s, metav1.UpdateOptions{})
}

return err
}

func (l *Local) DeleteService(namespace string, dbname string) error {
func (l *Local) DeleteService(ctx context.Context, namespace string, dbname string) error {
client, err := kube.Client()
if err != nil {
return err
}
serviceInterface := client.CoreV1().Services(namespace)
err = serviceInterface.Delete(dbname, &metav1.DeleteOptions{})
err = serviceInterface.Delete(ctx, dbname, metav1.DeleteOptions{})
if err != nil {
log.Println(err)
return errors.Wrap(err, fmt.Sprintf("delete of service %v failed in namespace %v", dbname, namespace))
}
return nil
}

func (l *Local) GetSecret(namespace string, name string, key string) (string, error) {
func (l *Local) GetSecret(ctx context.Context, namespace string, name string, key string) (string, error) {
client, err := kube.Client()
if err != nil {
return "", err
}
secret, err := client.CoreV1().Secrets(namespace).Get(name, metav1.GetOptions{})
secret, err := client.CoreV1().Secrets(namespace).Get(ctx, name, metav1.GetOptions{})
if err != nil {
return "", errors.Wrap(err, fmt.Sprintf("unable to fetch secret %v", name))
}
Expand Down
Loading

0 comments on commit 8e7ca96

Please sign in to comment.