Skip to content

Commit 7cad81a

Browse files
authored
Various updates from operator-sdk (#70)
* Bump controller-runtime to v0.7.0 * Bump kubebuilder to 0a807f4e9428 * Add healthz and readyz endpoints and flag * Bump to go 1.15
1 parent 15a24ee commit 7cad81a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+886
-736
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
- name: Set up Go 1.x
1717
uses: actions/setup-go@v2
1818
with:
19-
go-version: ^1.13
19+
go-version: ^1.15
2020
id: go
2121

2222
- name: Check out code into the Go module directory

go.mod

Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,30 @@
11
module github.com/joelanford/helm-operator
22

3-
go 1.13
3+
go 1.15
44

55
require (
6-
github.com/Microsoft/hcsshim v0.8.9 // indirect
7-
github.com/bugsnag/bugsnag-go v1.5.3 // indirect
8-
github.com/bugsnag/panicwrap v1.2.0 // indirect
9-
github.com/containerd/continuity v0.0.0-20200413184840-d3ef23f19fbb // indirect
10-
github.com/docker/go-metrics v0.0.1 // indirect
11-
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect
12-
github.com/garyburd/redigo v1.6.0 // indirect
13-
github.com/go-logr/logr v0.1.0
14-
github.com/gofrs/uuid v3.3.0+incompatible // indirect
15-
github.com/gorilla/handlers v1.4.2 // indirect
6+
github.com/go-logr/logr v0.3.0
167
github.com/iancoleman/strcase v0.1.2
17-
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
188
github.com/kr/text v0.1.0
19-
github.com/mattn/go-colorable v0.1.2 // indirect
20-
github.com/onsi/ginkgo v1.12.1
21-
github.com/onsi/gomega v1.10.1
22-
github.com/opencontainers/image-spec v1.0.2-0.20190823105129-775207bd45b6 // indirect
23-
github.com/operator-framework/operator-lib v0.1.0
24-
github.com/prometheus/client_golang v1.5.1 // indirect
25-
github.com/sirupsen/logrus v1.6.0
9+
github.com/onsi/ginkgo v1.14.1
10+
github.com/onsi/gomega v1.10.2
11+
github.com/operator-framework/operator-lib v0.3.0
12+
github.com/sirupsen/logrus v1.7.0
2613
github.com/spf13/afero v1.2.2
27-
github.com/spf13/cobra v1.0.0
14+
github.com/spf13/cobra v1.1.1
2815
github.com/spf13/pflag v1.0.5
2916
github.com/stretchr/testify v1.6.1
30-
github.com/yvasiyarov/go-metrics v0.0.0-20150112132944-c25f46c4b940 // indirect
31-
github.com/yvasiyarov/gorelic v0.0.7 // indirect
32-
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9 // indirect
33-
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f // indirect
34-
golang.org/x/net v0.0.0-20200625001655-4c5254603344 // indirect
35-
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae // indirect
36-
golang.org/x/tools v0.0.0-20200403190813-44a64ad78b9b
37-
gomodules.xyz/jsonpatch/v2 v2.0.1
38-
google.golang.org/genproto v0.0.0-20200701001935-0939c5918c31 // indirect
39-
google.golang.org/grpc v1.30.0 // indirect
40-
google.golang.org/protobuf v1.25.0 // indirect
41-
helm.sh/helm/v3 v3.3.4
42-
k8s.io/api v0.18.8
43-
k8s.io/apiextensions-apiserver v0.18.8
44-
k8s.io/apimachinery v0.18.8
45-
k8s.io/cli-runtime v0.18.8
46-
k8s.io/client-go v0.18.8
47-
k8s.io/kubectl v0.18.8
17+
golang.org/x/tools v0.0.0-20200616195046-dc31b401abb5
18+
gomodules.xyz/jsonpatch/v2 v2.1.0
19+
helm.sh/helm/v3 v3.4.1
20+
k8s.io/api v0.20.2
21+
k8s.io/apiextensions-apiserver v0.20.2
22+
k8s.io/apimachinery v0.20.2
23+
k8s.io/cli-runtime v0.20.2
24+
k8s.io/client-go v0.20.2
25+
k8s.io/kubectl v0.20.2
4826
rsc.io/letsencrypt v0.0.3 // indirect
49-
sigs.k8s.io/controller-runtime v0.6.2
50-
sigs.k8s.io/kubebuilder v1.0.9-0.20201021204649-36124ae2e027
27+
sigs.k8s.io/controller-runtime v0.8.0
28+
sigs.k8s.io/kubebuilder/v2 v2.3.2-0.20201214213149-0a807f4e9428
5129
sigs.k8s.io/yaml v1.2.0
5230
)

go.sum

Lines changed: 369 additions & 218 deletions
Large diffs are not rendered by default.

internal/cmd/run/cmd.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ import (
2424

2525
"github.com/spf13/cobra"
2626
"github.com/spf13/pflag"
27+
"k8s.io/client-go/tools/leaderelection/resourcelock"
2728
ctrl "sigs.k8s.io/controller-runtime"
29+
"sigs.k8s.io/controller-runtime/pkg/healthz"
2830
logf "sigs.k8s.io/controller-runtime/pkg/log"
2931
zapl "sigs.k8s.io/controller-runtime/pkg/log/zap"
3032

@@ -56,6 +58,7 @@ func NewCmd() *cobra.Command {
5658

5759
type run struct {
5860
metricsAddr string
61+
probeAddr string
5962
enableLeaderElection bool
6063
leaderElectionID string
6164
leaderElectionNamespace string
@@ -67,6 +70,7 @@ type run struct {
6770

6871
func (r *run) bindFlags(fs *pflag.FlagSet) {
6972
fs.StringVar(&r.metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.")
73+
fs.StringVar(&r.probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
7074
fs.BoolVar(&r.enableLeaderElection, "enable-leader-election", false,
7175
"Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager.")
7276
fs.StringVar(&r.leaderElectionID, "leader-election-id", "",
@@ -104,11 +108,13 @@ func (r *run) run(cmd *cobra.Command) {
104108
}
105109

106110
options := ctrl.Options{
107-
MetricsBindAddress: r.metricsAddr,
108-
LeaderElection: r.enableLeaderElection,
109-
LeaderElectionID: r.leaderElectionID,
110-
LeaderElectionNamespace: r.leaderElectionNamespace,
111-
NewClient: manager.NewDelegatingClientFunc(),
111+
MetricsBindAddress: r.metricsAddr,
112+
HealthProbeBindAddress: r.probeAddr,
113+
LeaderElection: r.enableLeaderElection,
114+
LeaderElectionID: r.leaderElectionID,
115+
LeaderElectionNamespace: r.leaderElectionNamespace,
116+
LeaderElectionResourceLock: resourcelock.ConfigMapsResourceLock,
117+
ClientBuilder: manager.NewCachingClientBuilder(),
112118
}
113119
manager.ConfigureWatchNamespaces(&options, log)
114120
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), options)
@@ -117,6 +123,15 @@ func (r *run) run(cmd *cobra.Command) {
117123
os.Exit(1)
118124
}
119125

126+
if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
127+
log.Error(err, "unable to setup health check")
128+
os.Exit(1)
129+
}
130+
if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
131+
log.Error(err, "unable to setup readiness check")
132+
os.Exit(1)
133+
}
134+
120135
ws, err := watches.Load(r.watchesFile)
121136
if err != nil {
122137
log.Error(err, "unable to load watches.yaml", "path", r.watchesFile)

main.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,31 @@ limitations under the License.
1717
package main
1818

1919
import (
20+
"fmt"
2021
"log"
22+
"runtime"
2123

2224
"github.com/spf13/cobra"
23-
"sigs.k8s.io/kubebuilder/pkg/cli"
25+
"sigs.k8s.io/kubebuilder/v2/pkg/cli"
26+
"sigs.k8s.io/kubebuilder/v2/pkg/model/config"
2427

2528
"github.com/joelanford/helm-operator/internal/cmd/run"
26-
"github.com/joelanford/helm-operator/internal/cmd/version"
29+
"github.com/joelanford/helm-operator/internal/version"
2730
pluginv1 "github.com/joelanford/helm-operator/pkg/plugins/v1"
2831
)
2932

3033
func main() {
3134
commands := []*cobra.Command{
3235
run.NewCmd(),
33-
version.NewCmd(),
3436
}
3537
c, err := cli.New(
3638
cli.WithCommandName("helm-operator"),
39+
cli.WithVersion(getVersion()),
3740
cli.WithPlugins(
3841
&pluginv1.Plugin{},
3942
),
40-
cli.WithDefaultPlugins(
41-
&pluginv1.Plugin{},
42-
),
43+
cli.WithDefaultProjectVersion(config.Version3Alpha),
44+
cli.WithDefaultPlugins(config.Version3Alpha, &pluginv1.Plugin{}),
4345
cli.WithExtraCommands(commands...),
4446
)
4547
if err != nil {
@@ -50,3 +52,9 @@ func main() {
5052
log.Fatal(err)
5153
}
5254
}
55+
56+
func getVersion() string {
57+
return fmt.Sprintf("helm-operator version: %q, commit: %q, go version: %q, GOOS: %q, GOARCH: %q\n",
58+
version.Version, version.GitCommit, runtime.Version(), runtime.GOOS, runtime.GOARCH)
59+
60+
}

pkg/client/actionclient.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,19 @@ import (
4141
apitypes "k8s.io/apimachinery/pkg/types"
4242
"k8s.io/apimachinery/pkg/util/strategicpatch"
4343
"k8s.io/cli-runtime/pkg/resource"
44+
"sigs.k8s.io/controller-runtime/pkg/client"
4445
"sigs.k8s.io/yaml"
4546

4647
"github.com/joelanford/helm-operator/pkg/internal/sdk/controllerutil"
4748
)
4849

4950
type ActionClientGetter interface {
50-
ActionClientFor(obj Object) (ActionInterface, error)
51+
ActionClientFor(obj client.Object) (ActionInterface, error)
5152
}
5253

53-
type ActionClientGetterFunc func(obj Object) (ActionInterface, error)
54+
type ActionClientGetterFunc func(obj client.Object) (ActionInterface, error)
5455

55-
func (acgf ActionClientGetterFunc) ActionClientFor(obj Object) (ActionInterface, error) {
56+
func (acgf ActionClientGetterFunc) ActionClientFor(obj client.Object) (ActionInterface, error) {
5657
return acgf(obj)
5758
}
5859

@@ -79,7 +80,7 @@ type actionClientGetter struct {
7980

8081
var _ ActionClientGetter = &actionClientGetter{}
8182

82-
func (hcg *actionClientGetter) ActionClientFor(obj Object) (ActionInterface, error) {
83+
func (hcg *actionClientGetter) ActionClientFor(obj client.Object) (ActionInterface, error) {
8384
actionConfig, err := hcg.acg.ActionConfigFor(obj)
8485
if err != nil {
8586
return nil, err
@@ -199,7 +200,7 @@ func (c *actionClient) Reconcile(rel *release.Release) error {
199200

200201
helper := resource.NewHelper(expected.Client, expected.Mapping)
201202

202-
existing, err := helper.Get(expected.Namespace, expected.Name, expected.Export)
203+
existing, err := helper.Get(expected.Namespace, expected.Name)
203204
if apierrors.IsNotFound(err) {
204205
if _, err := helper.Create(expected.Namespace, true, expected.Object); err != nil {
205206
return fmt.Errorf("create error: %w", err)
@@ -294,14 +295,14 @@ func createJSONMergePatch(existingJSON, expectedJSON []byte) ([]byte, error) {
294295
return json.Marshal(patchOps)
295296
}
296297

297-
func createPostRenderer(rm meta.RESTMapper, kubeClient kube.Interface, owner Object) postrender.PostRenderer {
298+
func createPostRenderer(rm meta.RESTMapper, kubeClient kube.Interface, owner client.Object) postrender.PostRenderer {
298299
return &ownerPostRenderer{rm, kubeClient, owner}
299300
}
300301

301302
type ownerPostRenderer struct {
302303
rm meta.RESTMapper
303304
kubeClient kube.Interface
304-
owner Object
305+
owner client.Object
305306
}
306307

307308
func (pr *ownerPostRenderer) Run(in *bytes.Buffer) (*bytes.Buffer, error) {

pkg/client/actionclient_test.go

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import (
3636
"k8s.io/apimachinery/pkg/api/meta"
3737
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3838
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
39-
"k8s.io/apimachinery/pkg/runtime"
4039
"k8s.io/apimachinery/pkg/runtime/schema"
4140
apitypes "k8s.io/apimachinery/pkg/types"
4241
"k8s.io/cli-runtime/pkg/resource"
@@ -70,8 +69,8 @@ var _ = Describe("ActionClient", func() {
7069
gvk := schema.GroupVersionKind{Group: "test", Version: "v1alpha1", Kind: "Test"}
7170
expectedObj := &unstructured.Unstructured{}
7271
expectedObj.SetGroupVersionKind(gvk)
73-
var actualObj Object
74-
f := ActionClientGetterFunc(func(obj Object) (ActionInterface, error) {
72+
var actualObj client.Object
73+
f := ActionClientGetterFunc(func(obj client.Object) (ActionInterface, error) {
7574
actualObj = obj
7675
return nil, nil
7776
})
@@ -81,7 +80,7 @@ var _ = Describe("ActionClient", func() {
8180
})
8281

8382
var _ = Describe("ActionClientFor", func() {
84-
var obj Object
83+
var obj client.Object
8584
BeforeEach(func() {
8685
obj = testutil.BuildTestCR(gvk)
8786
})
@@ -95,7 +94,7 @@ var _ = Describe("ActionClient", func() {
9594

9695
var _ = Describe("ActionClient methods", func() {
9796
var (
98-
obj Object
97+
obj client.Object
9998
cl client.Client
10099
ac ActionInterface
101100
vals = chartutil.Values{"service": map[string]interface{}{"type": "NodePort"}}
@@ -325,12 +324,11 @@ var _ = Describe("ActionClient", func() {
325324
By("changing manifest resources", func() {
326325
objs := manifestToObjects(installedRelease.Manifest)
327326
for _, obj := range objs {
328-
key, err := client.ObjectKeyFromObject(obj)
329-
Expect(err).To(BeNil())
327+
key := client.ObjectKeyFromObject(obj)
330328

331329
u := &unstructured.Unstructured{}
332330
u.SetGroupVersionKind(obj.GetObjectKind().GroupVersionKind())
333-
err = cl.Get(context.TODO(), key, u)
331+
err := cl.Get(context.TODO(), key, u)
334332
Expect(err).To(BeNil())
335333

336334
labels := u.GetLabels()
@@ -521,7 +519,7 @@ var _ = Describe("ActionClient", func() {
521519
var _ = Describe("ownerPostRenderer", func() {
522520
var (
523521
pr ownerPostRenderer
524-
owner Object
522+
owner client.Object
525523
)
526524

527525
BeforeEach(func() {
@@ -547,8 +545,8 @@ var _ = Describe("ActionClient", func() {
547545
})
548546
})
549547

550-
func manifestToObjects(manifest string) []runtime.Object {
551-
objs := []runtime.Object{}
548+
func manifestToObjects(manifest string) []client.Object {
549+
objs := []client.Object{}
552550
for _, m := range releaseutil.SplitManifests(manifest) {
553551
u := &unstructured.Unstructured{}
554552
err := yaml.Unmarshal([]byte(m), u)
@@ -576,10 +574,8 @@ func verifyRelease(cl client.Client, ns string, rel *release.Release) {
576574
By("verifying the release resources exist", func() {
577575
objs := manifestToObjects(rel.Manifest)
578576
for _, obj := range objs {
579-
key, err := client.ObjectKeyFromObject(obj)
580-
Expect(err).To(BeNil())
581-
582-
err = cl.Get(context.TODO(), key, obj)
577+
key := client.ObjectKeyFromObject(obj)
578+
err := cl.Get(context.TODO(), key, obj)
583579
Expect(err).To(BeNil())
584580
}
585581
})
@@ -604,9 +600,7 @@ func verifyNoRelease(cl client.Client, ns string, name string, rel *release.Rele
604600
err := yaml.Unmarshal([]byte(r), u)
605601
Expect(err).To(BeNil())
606602

607-
key, err := client.ObjectKeyFromObject(u)
608-
Expect(err).To(BeNil())
609-
603+
key := client.ObjectKeyFromObject(u)
610604
err = cl.Get(context.TODO(), key, u)
611605
Expect(apierrors.IsNotFound(err)).To(BeTrue())
612606
}

pkg/client/actionconfig.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,14 @@ import (
2828
corev1 "k8s.io/api/core/v1"
2929
"k8s.io/apimachinery/pkg/api/meta"
3030
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
31-
"k8s.io/apimachinery/pkg/runtime"
3231
v1 "k8s.io/client-go/kubernetes/typed/core/v1"
3332
"k8s.io/client-go/rest"
3433
cmdutil "k8s.io/kubectl/pkg/cmd/util"
34+
"sigs.k8s.io/controller-runtime/pkg/client"
3535
)
3636

37-
type Object interface {
38-
runtime.Object
39-
metav1.Object
40-
}
41-
4237
type ActionConfigGetter interface {
43-
ActionConfigFor(obj Object) (*action.Configuration, error)
38+
ActionConfigFor(obj client.Object) (*action.Configuration, error)
4439
}
4540

4641
func NewActionConfigGetter(cfg *rest.Config, rm meta.RESTMapper, log logr.Logger) ActionConfigGetter {
@@ -59,7 +54,7 @@ type actionConfigGetter struct {
5954
log logr.Logger
6055
}
6156

62-
func (acg *actionConfigGetter) ActionConfigFor(obj Object) (*action.Configuration, error) {
57+
func (acg *actionConfigGetter) ActionConfigFor(obj client.Object) (*action.Configuration, error) {
6358
// Create a RESTClientGetter
6459
rcg := newRESTClientGetter(acg.cfg, acg.restMapper, obj.GetNamespace())
6560

pkg/client/actionconfig_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package client
1919
import (
2020
. "github.com/onsi/ginkgo"
2121
. "github.com/onsi/gomega"
22+
"sigs.k8s.io/controller-runtime/pkg/client"
2223
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
2324

2425
"github.com/joelanford/helm-operator/pkg/internal/testutil"
@@ -32,7 +33,7 @@ var _ = Describe("ActionConfig", func() {
3233
})
3334

3435
var _ = Describe("GetActionConfig", func() {
35-
var obj Object
36+
var obj client.Object
3637
BeforeEach(func() {
3738
obj = testutil.BuildTestCR(gvk)
3839
})

0 commit comments

Comments
 (0)