Skip to content
This repository was archived by the owner on Nov 18, 2020. It is now read-only.

memcached-operator: resync to master sdk #35

Merged
merged 1 commit into from
Oct 8, 2018
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
173 changes: 106 additions & 67 deletions memcached-operator/Gopkg.lock

Large diffs are not rendered by default.

24 changes: 12 additions & 12 deletions memcached-operator/Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,32 +14,32 @@ required = [

[[override]]
name = "k8s.io/code-generator"
# revision for tag "kubernetes-1.10.1"
revision = "7ead8f38b01cf8653249f5af80ce7b2c8aba12e2"
# revision for tag "kubernetes-1.11.2"
revision = "6702109cc68eb6fe6350b83e14407c8d7309fd1a"

[[override]]
name = "k8s.io/api"
# revision for tag "kubernetes-1.10.1"
revision = "73d903622b7391f3312dcbac6483fed484e185f8"
# revision for tag "kubernetes-1.11.2"
revision = "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"

[[override]]
name = "k8s.io/apiextensions-apiserver"
# revision for tag "kubernetes-1.10.1"
revision = "4347b330d0ff094db860f2f75fa725b4f4b53618"
# revision for tag "kubernetes-1.11.2"
revision = "408db4a50408e2149acbd657bceb2480c13cb0a4"

[[override]]
name = "k8s.io/apimachinery"
# revision for tag "kubernetes-1.10.1"
revision = "302974c03f7e50f16561ba237db776ab93594ef6"
# revision for tag "kubernetes-1.11.2"
revision = "103fd098999dc9c0c88536f5c9ad2e5da39373ae"

[[override]]
name = "k8s.io/client-go"
# revision for tag "kubernetes-1.10.1"
revision = "989be4278f353e42f26c416c53757d16fcff77db"
# revision for tag "kubernetes-1.11.2"
revision = "1f13a808da65775f22cbf47862c4e5898d8f4ca1"

[[override]]
name = "sigs.k8s.io/controller-runtime"
revision = "60bb251ad86f9b313653618aad0c2c53f41a6625"
version = "v0.1.3"

[prune]
go-tests = true
Expand All @@ -55,4 +55,4 @@ required = [
name = "github.com/operator-framework/operator-sdk"
# The version rule is used for a specific release and the master branch for in between releases.
branch = "master"
# version = "=v0.0.5"
# version = "=v0.0.6"
52 changes: 47 additions & 5 deletions memcached-operator/README.md
Original file line number Diff line number Diff line change
@@ -1,56 +1,98 @@
# Memcached Operator

## Overview

This Memcached operator is a simple example operator for the [Operator SDK][operator_sdk] and includes some basic end-to-end tests.

## Quick Start

This quick start guide walks through the process of building the memcached-operator and running its end-to-end tests.

### Prerequisites

- [dep][dep_tool] version v0.5.0+.
- [go][go_tool] version v1.10+
- [docker][docker_tool] version 17.03+
- Access to a kubernetes v1.9.0+ cluster

### Install the Operator SDK CLI

First, checkout and install the operator-sdk CLI:

```
$ cd $GOPATH/src/github.com/operator-framework/operator-sdk
$ git checkout master // currently, there are no releases that include the test framework, so use the master for now
$ dep ensure
$ go install github.com/operator-framework/operator-sdk/commands/operator-sdk
$ make install github.com/operator-framework/operator-sdk/commands/operator-sdk
```

### Initial Setup

Checkout this Memcached Operator repository

```
$ mkdir $GOPATH/src/github.com/operator-framework
$ cd $GOPATH/src/github.com/operator-framework
$ git clone https://github.com/operator-framework/operator-sdk-samples.git
$ cd operator-sdk-samples/memcached-operator
```

Vendor the dependencies

```
$ dep ensure
```

### Build the operator
Build the Memcached operator image and push it to a public registry, such as quay.io

Build the Memcached operator image and push it to a public registry, such as quay.io:

```
$ export IMAGE=quay.io/example-inc/memcached-operator:v0.0.1
$ operator-sdk build $IMAGE
$ docker push $IMAGE
```

### Run the tests
Run the tests that reside in test/e2e:

To run the tests in `test/e2e`, first make sure to update the image name from `REPLACE_IMAGE`
to your desired image name in `deploy/operator.yaml`:

```
$ sed "s@REPLACE_IMAGE@$IMAGE@g" -i deploy/operator.yaml
```

Run the tests that reside in `test/e2e`:

```
$ operator-sdk test --test-location ./test/e2e --kubeconfig $HOME/.kube/config
$ operator-sdk test local ./test/e2e
```

To run go-test with verbose and limit to 2 parallel tests:

```
$ operator-sdk test local ./test/e2e --go-test-flags "-v -parallel=2"
```

To run the tests from an image in the cluster, first build the tests into your image:

```
$ operator-sdk build $IMAGE --enable-tests
$ docker push $IMAGE
```

Then, configure the testing environment:

```
$ export NAMESPACE="my-test"
$ kubectl create deploy/crd.yaml -n $NAMESPACE
$ kubectl create deploy/sa.yaml -n $NAMESPACE
$ kubectl create deploy/rbac.yaml -n $NAMESPACE
```

Finally, run the tests:
```
$ operator-sdk test --test-location ./test/e2e --kubeconfig $HOME/.kube/config --go-test-flags "-v -parallel=2"
$ operator-sdk test cluster $IMAGE --namespace $NAMESPACE --service-account memcached-operator
```

[dep_tool]:https://golang.github.io/dep/docs/installation.html
Expand Down
31 changes: 31 additions & 0 deletions memcached-operator/deploy/operator.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: memcached-operator
spec:
replicas: 1
selector:
matchLabels:
name: memcached-operator
template:
metadata:
labels:
name: memcached-operator
spec:
serviceAccountName: memcached-operator
containers:
- name: memcached-operator
image: REPLACE_IMAGE
ports:
- containerPort: 60000
name: metrics
command:
- memcached-operator
imagePullPolicy: Always
env:
- name: WATCH_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: OPERATOR_NAME
value: "memcached-operator"
4 changes: 2 additions & 2 deletions memcached-operator/deploy/rbac.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ rules:
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: default-account-memcached-operator
name: memcached-operator
subjects:
- kind: ServiceAccount
name: default
name: memcached-operator
roleRef:
kind: Role
name: memcached-operator
Expand Down
4 changes: 4 additions & 0 deletions memcached-operator/deploy/sa.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: memcached-operator

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

2 changes: 1 addition & 1 deletion memcached-operator/pkg/stub/handler.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package stub

import (
"context"
"fmt"
"reflect"
"context"

v1alpha1 "github.com/operator-framework/operator-sdk-samples/memcached-operator/pkg/apis/cache/v1alpha1"

Expand Down
20 changes: 10 additions & 10 deletions memcached-operator/test/e2e/memcached_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ import (
)

var (
retryInterval = time.Second * 5
timeout = time.Second * 30
retryInterval = time.Second * 5
timeout = time.Second * 30
cleanupRetryInterval = time.Second * 1
cleanupTimeout = time.Second * 5
)

func TestMemcached(t *testing.T) {
Expand Down Expand Up @@ -70,25 +72,23 @@ func memcachedScaleTest(t *testing.T, f *framework.Framework, ctx *framework.Tes
Size: 3,
},
}
err = f.DynamicClient.Create(goctx.TODO(), exampleMemcached)
// use TestCtx's create helper to create the object and add a cleanup function for the new object
err = f.Client.Create(goctx.TODO(), exampleMemcached, &framework.CleanupOptions{TestContext: ctx, Timeout: cleanupTimeout, RetryInterval: cleanupRetryInterval})
if err != nil {
return err
}
ctx.AddFinalizerFn(func() error {
return f.DynamicClient.Delete(goctx.TODO(), exampleMemcached)
})
// wait for example-memcached to reach 3 replicas
err = e2eutil.WaitForDeployment(t, f.KubeClient, namespace, "example-memcached", 3, retryInterval, timeout)
if err != nil {
return err
}

err = f.DynamicClient.Get(goctx.TODO(), types.NamespacedName{Name: "example-memcached", Namespace: namespace}, exampleMemcached)
err = f.Client.Get(goctx.TODO(), types.NamespacedName{Name: "example-memcached", Namespace: namespace}, exampleMemcached)
if err != nil {
return err
}
exampleMemcached.Spec.Size = 4
err = f.DynamicClient.Update(goctx.TODO(), exampleMemcached)
err = f.Client.Update(goctx.TODO(), exampleMemcached)
if err != nil {
return err
}
Expand All @@ -100,8 +100,8 @@ func memcachedScaleTest(t *testing.T, f *framework.Framework, ctx *framework.Tes
func MemcachedCluster(t *testing.T) {
t.Parallel()
ctx := framework.NewTestCtx(t)
defer ctx.Cleanup(t)
err := ctx.InitializeClusterResources()
defer ctx.Cleanup()
err := ctx.InitializeClusterResources(&framework.CleanupOptions{TestContext: ctx, Timeout: cleanupTimeout, RetryInterval: cleanupRetryInterval})
if err != nil {
t.Fatalf("failed to initialize cluster resources: %v", err)
}
Expand Down
18 changes: 0 additions & 18 deletions memcached-operator/tmp/build/build.sh

This file was deleted.

11 changes: 0 additions & 11 deletions memcached-operator/tmp/build/docker_build.sh

This file was deleted.

3 changes: 3 additions & 0 deletions memcached-operator/tmp/build/go-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh

memcached-operator-test -test.parallel=1 -test.failfast -root=/ -kubeconfig=incluster -namespacedMan=namespaced.yaml -test.v
8 changes: 8 additions & 0 deletions memcached-operator/tmp/build/test-framework/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
ARG BASEIMAGE

FROM ${BASEIMAGE}

ADD tmp/_output/bin/memcached-operator-test /usr/local/bin/memcached-operator-test
ARG NAMESPACEDMAN
ADD $NAMESPACEDMAN /namespaced.yaml
ADD tmp/build/go-test.sh /go-test.sh

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

Loading