Skip to content

Commit ef452d7

Browse files
authored
Merge pull request #242 from rithujohn191/sdk-pkg
pkg/sdk: combining all pkgs under `pkg/sdk` into a single pkg
2 parents 8aeaff3 + 34c317e commit ef452d7

File tree

15 files changed

+74
-139
lines changed

15 files changed

+74
-139
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
### Changed
88

9+
- All the modules in [`pkg/sdk`](https://github.com/operator-framework/operator-sdk/tree/master/pkg/sdk) have been combined into a single package. `action`, `handler`, `informer` `types` and `query` pkgs have been consolidated into `pkg/sdk`. [#242](https://github.com/operator-framework/operator-sdk/pull/242)
10+
911
### Removed
1012

1113
### Fixed

example/memcached-operator/handler.go.tmpl

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,22 @@ import (
66

77
v1alpha1 "github.com/example-inc/memcached-operator/pkg/apis/cache/v1alpha1"
88

9-
"github.com/operator-framework/operator-sdk/pkg/sdk/action"
10-
"github.com/operator-framework/operator-sdk/pkg/sdk/handler"
11-
"github.com/operator-framework/operator-sdk/pkg/sdk/query"
12-
"github.com/operator-framework/operator-sdk/pkg/sdk/types"
9+
"github.com/operator-framework/operator-sdk/pkg/sdk"
1310
appsv1 "k8s.io/api/apps/v1"
1411
"k8s.io/api/core/v1"
1512
apierrors "k8s.io/apimachinery/pkg/api/errors"
1613
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1714
"k8s.io/apimachinery/pkg/labels"
1815
)
1916

20-
func NewHandler() handler.Handler {
17+
func NewHandler() sdk.Handler {
2118
return &Handler{}
2219
}
2320

2421
type Handler struct {
2522
}
2623

27-
func (h *Handler) Handle(ctx types.Context, event types.Event) error {
24+
func (h *Handler) Handle(ctx sdk.Context, event sdk.Event) error {
2825
switch o := event.Object.(type) {
2926
case *v1alpha1.Memcached:
3027
memcached := o
@@ -37,20 +34,20 @@ func (h *Handler) Handle(ctx types.Context, event types.Event) error {
3734

3835
// Create the deployment if it doesn't exist
3936
dep := deploymentForMemcached(memcached)
40-
err := action.Create(dep)
37+
err := sdk.Create(dep)
4138
if err != nil && !apierrors.IsAlreadyExists(err) {
4239
return fmt.Errorf("failed to create deployment: %v", err)
4340
}
4441

4542
// Ensure the deployment size is the same as the spec
46-
err = query.Get(dep)
43+
err = sdk.Get(dep)
4744
if err != nil {
4845
return fmt.Errorf("failed to get deployment: %v", err)
4946
}
5047
size := memcached.Spec.Size
5148
if *dep.Spec.Replicas != size {
5249
dep.Spec.Replicas = &size
53-
err = action.Update(dep)
50+
err = sdk.Update(dep)
5451
if err != nil {
5552
return fmt.Errorf("failed to update deployment: %v", err)
5653
}
@@ -60,14 +57,14 @@ func (h *Handler) Handle(ctx types.Context, event types.Event) error {
6057
podList := podList()
6158
labelSelector := labels.SelectorFromSet(labelsForMemcached(memcached.Name)).String()
6259
listOps := &metav1.ListOptions{LabelSelector: labelSelector}
63-
err = query.List(memcached.Namespace, podList, query.WithListOptions(listOps))
60+
err = sdk.List(memcached.Namespace, podList, sdk.WithListOptions(listOps))
6461
if err != nil {
6562
return fmt.Errorf("failed to list pods: %v", err)
6663
}
6764
podNames := getPodNames(podList.Items)
6865
if !reflect.DeepEqual(podNames, memcached.Status.Nodes) {
6966
memcached.Status.Nodes = podNames
70-
err := action.Update(memcached)
67+
err := sdk.Update(memcached)
7168
if err != nil {
7269
return fmt.Errorf("failed to update memcached status: %v", err)
7370
}

pkg/generator/generator_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,28 +73,26 @@ const handlerExp = `package stub
7373
import (
7474
"github.com/example-inc/app-operator/pkg/apis/app/v1alpha1"
7575
76-
"github.com/operator-framework/operator-sdk/pkg/sdk/action"
77-
"github.com/operator-framework/operator-sdk/pkg/sdk/handler"
78-
"github.com/operator-framework/operator-sdk/pkg/sdk/types"
76+
"github.com/operator-framework/operator-sdk/pkg/sdk"
7977
"github.com/sirupsen/logrus"
8078
"k8s.io/api/core/v1"
8179
"k8s.io/apimachinery/pkg/api/errors"
8280
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8381
"k8s.io/apimachinery/pkg/runtime/schema"
8482
)
8583
86-
func NewHandler() handler.Handler {
84+
func NewHandler() sdk.Handler {
8785
return &Handler{}
8886
}
8987
9088
type Handler struct {
9189
// Fill me
9290
}
9391
94-
func (h *Handler) Handle(ctx types.Context, event types.Event) error {
92+
func (h *Handler) Handle(ctx sdk.Context, event sdk.Event) error {
9593
switch o := event.Object.(type) {
9694
case *v1alpha1.AppService:
97-
err := action.Create(newbusyBoxPod(o))
95+
err := sdk.Create(newbusyBoxPod(o))
9896
if err != nil && !errors.IsAlreadyExists(err) {
9997
logrus.Errorf("Failed to create busybox pod : %v", err)
10098
return err

pkg/generator/handler_tmpl.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,26 @@ const handlerTmpl = `package stub
2020
import (
2121
"{{.RepoPath}}/pkg/apis/{{.APIDirName}}/{{.Version}}"
2222
23-
"{{.OperatorSDKImport}}/action"
24-
"{{.OperatorSDKImport}}/handler"
25-
"{{.OperatorSDKImport}}/types"
23+
"{{.OperatorSDKImport}}"
2624
"github.com/sirupsen/logrus"
2725
"k8s.io/api/core/v1"
2826
"k8s.io/apimachinery/pkg/api/errors"
2927
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3028
"k8s.io/apimachinery/pkg/runtime/schema"
3129
)
3230
33-
func NewHandler() handler.Handler {
31+
func NewHandler() sdk.Handler {
3432
return &Handler{}
3533
}
3634
3735
type Handler struct {
3836
// Fill me
3937
}
4038
41-
func (h *Handler) Handle(ctx types.Context, event types.Event) error {
39+
func (h *Handler) Handle(ctx sdk.Context, event sdk.Event) error {
4240
switch o := event.Object.(type) {
4341
case *{{.Version}}.{{.Kind}}:
44-
err := action.Create(newbusyBoxPod(o))
42+
err := sdk.Create(newbusyBoxPod(o))
4543
if err != nil && !errors.IsAlreadyExists(err) {
4644
logrus.Errorf("Failed to create busybox pod : %v", err)
4745
return err

pkg/sdk/action/action.go renamed to pkg/sdk/action.go

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,22 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package action
15+
package sdk
1616

1717
import (
1818
"fmt"
1919

2020
"github.com/operator-framework/operator-sdk/pkg/k8sclient"
21-
sdkTypes "github.com/operator-framework/operator-sdk/pkg/sdk/types"
2221
"github.com/operator-framework/operator-sdk/pkg/util/k8sutil"
22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2323
)
2424

2525
// Create creates the provided object on the server and updates the arg
2626
// "object" with the result from the server(UID, resourceVersion, etc).
2727
// Returns an error if the object’s TypeMeta(Kind, APIVersion) or ObjectMeta(Name/GenerateName, Namespace) is missing or incorrect.
2828
// Can also return an api error from the server
2929
// e.g AlreadyExists https://github.com/kubernetes/apimachinery/blob/master/pkg/api/errors/errors.go#L423
30-
func Create(object sdkTypes.Object) (err error) {
30+
func Create(object Object) (err error) {
3131
_, namespace, err := k8sutil.GetNameAndNamespace(object)
3232
if err != nil {
3333
return err
@@ -59,7 +59,7 @@ func Create(object sdkTypes.Object) (err error) {
5959
// Returns an error if the object’s TypeMeta(Kind, APIVersion) or ObjectMeta(Name, Namespace) is missing or incorrect.
6060
// Can also return an api error from the server
6161
// e.g Conflict https://github.com/kubernetes/apimachinery/blob/master/pkg/api/errors/errors.go#L428
62-
func Update(object sdkTypes.Object) (err error) {
62+
func Update(object Object) (err error) {
6363
_, namespace, err := k8sutil.GetNameAndNamespace(object)
6464
if err != nil {
6565
return err
@@ -86,12 +86,45 @@ func Update(object sdkTypes.Object) (err error) {
8686
return nil
8787
}
8888

89+
// DeleteOp wraps all the options for Delete().
90+
type DeleteOp struct {
91+
metaDeleteOptions *metav1.DeleteOptions
92+
}
93+
94+
// DeleteOption configures DeleteOp.
95+
type DeleteOption func(*DeleteOp)
96+
97+
func NewDeleteOp() *DeleteOp {
98+
op := &DeleteOp{}
99+
op.setDefaults()
100+
return op
101+
}
102+
103+
func (op *DeleteOp) applyOpts(opts []DeleteOption) {
104+
for _, opt := range opts {
105+
opt(op)
106+
}
107+
}
108+
109+
func (op *DeleteOp) setDefaults() {
110+
if op.metaDeleteOptions == nil {
111+
op.metaDeleteOptions = &metav1.DeleteOptions{}
112+
}
113+
}
114+
115+
// WithDeleteOptions sets the metav1.DeleteOptions for the Delete() operation.
116+
func WithDeleteOptions(metaDeleteOptions *metav1.DeleteOptions) DeleteOption {
117+
return func(op *DeleteOp) {
118+
op.metaDeleteOptions = metaDeleteOptions
119+
}
120+
}
121+
89122
// Delete deletes the specified object
90123
// Returns an error if the object’s TypeMeta(Kind, APIVersion) or ObjectMeta(Name, Namespace) is missing or incorrect.
91124
// e.g NotFound https://github.com/kubernetes/apimachinery/blob/master/pkg/api/errors/errors.go#L418
92125
// “opts” configures the DeleteOptions
93126
// When passed WithDeleteOptions(o), the specified metav1.DeleteOptions are set.
94-
func Delete(object sdkTypes.Object, opts ...DeleteOption) (err error) {
127+
func Delete(object Object, opts ...DeleteOption) (err error) {
95128
name, namespace, err := k8sutil.GetNameAndNamespace(object)
96129
if err != nil {
97130
return err

pkg/sdk/action/doc.go

Lines changed: 0 additions & 16 deletions
This file was deleted.

pkg/sdk/action/op.go

Lines changed: 0 additions & 52 deletions
This file was deleted.

pkg/sdk/api.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@ import (
1818
"context"
1919

2020
"github.com/operator-framework/operator-sdk/pkg/k8sclient"
21-
sdkHandler "github.com/operator-framework/operator-sdk/pkg/sdk/handler"
22-
sdkInformer "github.com/operator-framework/operator-sdk/pkg/sdk/informer"
2321

2422
"github.com/sirupsen/logrus"
2523
)
2624

2725
var (
2826
// informers is the set of all informers for the resources watched by the user
29-
informers []sdkInformer.Informer
27+
informers []Informer
3028
)
3129

3230
// Watch watches for changes on the given resource.
@@ -47,14 +45,14 @@ func Watch(apiVersion, kind, namespace string, resyncPeriod int) {
4745
logrus.Errorf("failed to get resource client for (apiVersion:%s, kind:%s, ns:%s): %v", apiVersion, kind, namespace, err)
4846
panic(err)
4947
}
50-
informer := sdkInformer.New(resourcePluralName, namespace, resourceClient, resyncPeriod)
48+
informer := NewInformer(resourcePluralName, namespace, resourceClient, resyncPeriod)
5149
informers = append(informers, informer)
5250
}
5351

5452
// Handle registers the handler for all events.
5553
// In the future, we would have a mux-pattern to dispatch events to matched handlers.
56-
func Handle(handler sdkHandler.Handler) {
57-
sdkHandler.RegisteredHandler = handler
54+
func Handle(handler Handler) {
55+
RegisteredHandler = handler
5856
}
5957

6058
// Run starts the process of Watching resources, handling Events, and processing Actions

pkg/sdk/handler/handler.go renamed to pkg/sdk/handler.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,13 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package handler
16-
17-
import (
18-
sdkTypes "github.com/operator-framework/operator-sdk/pkg/sdk/types"
19-
)
15+
package sdk
2016

2117
// Handler reacts to events and outputs actions.
2218
// If any intended action failed, the event would be re-triggered.
2319
// For actions done before the failed action, there is no rollback.
2420
type Handler interface {
25-
Handle(sdkTypes.Context, sdkTypes.Event) error
21+
Handle(Context, Event) error
2622
}
2723

2824
var (

pkg/sdk/informer/sync.go renamed to pkg/sdk/informer-sync.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,9 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package informer
15+
package sdk
1616

1717
import (
18-
sdkHandler "github.com/operator-framework/operator-sdk/pkg/sdk/handler"
19-
sdkTypes "github.com/operator-framework/operator-sdk/pkg/sdk/types"
2018
"github.com/operator-framework/operator-sdk/pkg/util/k8sutil"
2119

2220
"github.com/sirupsen/logrus"
@@ -77,14 +75,14 @@ func (i *informer) sync(key string) error {
7775
unstructObj := obj.(*unstructured.Unstructured).DeepCopy()
7876
object := k8sutil.RuntimeObjectFromUnstructured(unstructObj)
7977

80-
event := sdkTypes.Event{
78+
event := Event{
8179
Object: object,
8280
Deleted: !exists,
8381
}
8482

85-
sdkCtx := sdkTypes.Context{Context: i.context}
83+
sdkCtx := Context{Context: i.context}
8684
// TODO: Add option to prevent multiple informers from invoking Handle() concurrently?
87-
err = sdkHandler.RegisteredHandler.Handle(sdkCtx, event)
85+
err = RegisteredHandler.Handle(sdkCtx, event)
8886
if !exists && err == nil {
8987
delete(i.deletedObjects, key)
9088
}

0 commit comments

Comments
 (0)