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

Commit a7f0409

Browse files
committed
Add RBAC for infrastructureproviders, update machine-api to v1.0.1
1 parent 0aa0b1d commit a7f0409

File tree

4 files changed

+79
-60
lines changed

4 files changed

+79
-60
lines changed

config/rbac/role.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,15 @@ rules:
6666
- get
6767
- list
6868
- watch
69+
- apiGroups:
70+
- machine.crit.sh
71+
resources:
72+
- infrastructureproviders
73+
- infrastructureproviders/status
74+
verbs:
75+
- get
76+
- list
77+
- watch
6978
- apiGroups:
7079
- machine.crit.sh
7180
resources:

controllers/dockerinfrastructureprovider_controller.go

Lines changed: 67 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
"context"
2121
"encoding/json"
2222

23+
cinderapi "github.com/criticalstack/crit/cmd/cinder/api"
24+
"github.com/criticalstack/machine-api/util"
2325
"github.com/go-logr/logr"
2426
"github.com/go-openapi/spec"
2527
corev1 "k8s.io/api/core/v1"
@@ -36,8 +38,6 @@ import (
3638
"github.com/criticalstack/machine-api-provider-docker/api/v1alpha1"
3739
)
3840

39-
const OpenAPISchemaSecretName = "config-schema"
40-
4141
// DockerMachineReconciler reconciles a DockerMachine object
4242
type DockerInfrastructureProviderReconciler struct {
4343
client.Client
@@ -56,6 +56,70 @@ func (r *DockerInfrastructureProviderReconciler) SetupWithManager(mgr ctrl.Manag
5656
Complete(r)
5757
}
5858

59+
// +kubebuilder:rbac:groups=infrastructure.crit.sh,resources=dockerinfrastructureproviders,verbs=get;list;watch
60+
// +kubebuilder:rbac:groups=infrastructure.crit.sh,resources=dockerinfrastructureproviders/status,verbs=create;update
61+
// +kubebuilder:rbac:groups=machine.crit.sh,resources=infrastructureproviders;infrastructureproviders/status,verbs=get;list;watch
62+
// +kubebuilder:rbac:groups=,resources=secrets,verbs=*
63+
64+
func (r *DockerInfrastructureProviderReconciler) Reconcile(req ctrl.Request) (_ ctrl.Result, reterr error) {
65+
ctx := context.Background()
66+
log := r.Log.WithValues("dockerinfrastructureprovider", req.NamespacedName)
67+
68+
ip := &v1alpha1.DockerInfrastructureProvider{}
69+
if err := r.Get(ctx, req.NamespacedName, ip); err != nil {
70+
if apierrors.IsNotFound(err) {
71+
return ctrl.Result{}, nil
72+
}
73+
return ctrl.Result{}, err
74+
}
75+
76+
ipOwner, err := util.GetOwnerInfrastructureProvider(ctx, r.Client, ip.ObjectMeta)
77+
if err != nil {
78+
return ctrl.Result{}, err
79+
}
80+
if ipOwner == nil {
81+
log.Info("InfrastructureProvider Controller has not yet set OwnerRef")
82+
return ctrl.Result{}, nil
83+
}
84+
85+
log = log.WithValues("infrastructureprovider", ipOwner.Name)
86+
87+
s := &corev1.Secret{
88+
ObjectMeta: metav1.ObjectMeta{
89+
Name: OpenAPISchemaSecretName,
90+
Namespace: ip.Namespace,
91+
},
92+
}
93+
if err := r.Get(ctx, client.ObjectKey{Name: s.Name, Namespace: s.Namespace}, s); client.IgnoreNotFound(err) != nil {
94+
return ctrl.Result{}, err
95+
}
96+
97+
ip.Status.Ready = !s.GetCreationTimestamp().Time.IsZero() // ready if secret already exists
98+
ip.Status.LastUpdated = metav1.Now()
99+
defer func() {
100+
if err := r.Status().Update(ctx, ip); err != nil {
101+
log.Error(err, "failed to update provider status")
102+
}
103+
}()
104+
105+
b, err := json.Marshal(schema)
106+
if err != nil {
107+
return ctrl.Result{}, err
108+
}
109+
110+
if _, err := controllerutil.CreateOrUpdate(ctx, r.Client, s, func() error {
111+
s.Data = map[string][]byte{"schema": b}
112+
return controllerutil.SetControllerReference(ip, s, r.Scheme)
113+
}); err != nil {
114+
return ctrl.Result{}, err
115+
}
116+
117+
ip.Status.Ready = true
118+
return ctrl.Result{}, nil
119+
}
120+
121+
const OpenAPISchemaSecretName = "config-schema"
122+
59123
var schema = spec.Schema{
60124
SchemaProps: spec.SchemaProps{
61125
Type: spec.StringOrArray{"object"},
@@ -96,7 +160,7 @@ var schema = spec.Schema{
96160
SchemaProps: spec.SchemaProps{
97161
Type: spec.StringOrArray{"string"},
98162
Description: "container image to use",
99-
Default: "criticalstack/cinder:v1.0.0-beta.10",
163+
Default: cinderapi.DefaultNodeImage,
100164
},
101165
},
102166
"containerName": {
@@ -121,49 +185,3 @@ var schema = spec.Schema{
121185
Required: []string{"apiVersion", "kind"},
122186
},
123187
}
124-
125-
// +kubebuilder:rbac:groups=infrastructure.crit.sh,resources=dockerinfrastructureproviders,verbs=get;list;watch
126-
// +kubebuilder:rbac:groups=infrastructure.crit.sh,resources=dockerinfrastructureproviders/status,verbs=create;update
127-
// +kubebuilder:rbac:groups=,resources=secrets,verbs=*
128-
129-
func (r *DockerInfrastructureProviderReconciler) Reconcile(req ctrl.Request) (_ ctrl.Result, reterr error) {
130-
ctx := context.Background()
131-
log := r.Log.WithValues("dockerinfrastructureprovider", req.NamespacedName)
132-
133-
ip := &v1alpha1.DockerInfrastructureProvider{}
134-
if err := r.Get(ctx, req.NamespacedName, ip); err != nil {
135-
if apierrors.IsNotFound(err) {
136-
return ctrl.Result{}, nil
137-
}
138-
return ctrl.Result{}, err
139-
}
140-
141-
var s corev1.Secret
142-
s.SetName(OpenAPISchemaSecretName)
143-
s.SetNamespace(ip.Namespace)
144-
if err := r.Get(ctx, client.ObjectKey{Name: s.Name, Namespace: s.Namespace}, &s); client.IgnoreNotFound(err) != nil {
145-
return ctrl.Result{}, err
146-
}
147-
148-
ip.Status.Ready = !s.GetCreationTimestamp().Time.IsZero() // ready if secret already exists
149-
ip.Status.LastUpdated = metav1.Now()
150-
defer func() {
151-
if err := r.Status().Update(ctx, ip); err != nil {
152-
log.Error(err, "failed to update provider status")
153-
}
154-
}()
155-
b, err := json.Marshal(schema)
156-
if err != nil {
157-
return ctrl.Result{}, err
158-
}
159-
160-
if _, err := controllerutil.CreateOrUpdate(ctx, r.Client, &s, func() error {
161-
s.Data = map[string][]byte{"schema": b}
162-
return controllerutil.SetControllerReference(ip, &s, r.Scheme)
163-
}); err != nil {
164-
return ctrl.Result{}, err
165-
}
166-
167-
ip.Status.Ready = true
168-
return ctrl.Result{}, nil
169-
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.14
44

55
require (
66
github.com/criticalstack/crit v1.0.3
7-
github.com/criticalstack/machine-api v1.0.0
7+
github.com/criticalstack/machine-api v1.0.1
88
github.com/go-logr/logr v0.1.0
99
github.com/go-openapi/spec v0.19.3
1010
github.com/onsi/ginkgo v1.12.1

go.sum

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,11 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc
8484
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
8585
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
8686
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
87-
github.com/criticalstack/crit v1.0.0-beta.4/go.mod h1:ULOKHjqXNtCGg4sH46kYxTBje0P9mgkpV8forMVxhGk=
88-
github.com/criticalstack/crit v1.0.0-beta.8 h1:Eg3Rm42LVwXo77J1blDwSuhQVsjCGTfzC5sWUWfJy/8=
89-
github.com/criticalstack/crit v1.0.0-beta.8/go.mod h1:ULOKHjqXNtCGg4sH46kYxTBje0P9mgkpV8forMVxhGk=
9087
github.com/criticalstack/crit v1.0.3 h1:1I/xyXzazV3d9u2Bg/NguqYiArNLwAQWSkWSnBM0Sgw=
9188
github.com/criticalstack/crit v1.0.3/go.mod h1:ULOKHjqXNtCGg4sH46kYxTBje0P9mgkpV8forMVxhGk=
9289
github.com/criticalstack/e2d v0.4.14/go.mod h1:Bxbt5zWKhtA81n/YibGi8dlOdTVjNuBzy2zkbjJBf98=
93-
github.com/criticalstack/machine-api v0.1.2 h1:jEwvqoFzKPwBLxqbxLh2eUJB0gTQGVaxHVdbzRW9YZc=
94-
github.com/criticalstack/machine-api v0.1.2/go.mod h1:kZG0Nn4bvefSvXR5c59i8uZhsrFN8QCqlrTbWK1enGg=
95-
github.com/criticalstack/machine-api v0.1.3 h1:KB/ZDSaADG7+BTrADJMpYrAHsJ8fuuhdbK25XWgUA18=
96-
github.com/criticalstack/machine-api v0.1.3/go.mod h1:9q7YROKFl0NwEeO9wMY5IG7zWqBTYJ7331+JhAjxF6U=
97-
github.com/criticalstack/machine-api v1.0.0 h1:tE7SlfmJT6tSOX0NVu/G5PIhWEjp9Sqte1zQwtbXkWQ=
98-
github.com/criticalstack/machine-api v1.0.0/go.mod h1:yrAmVXEoPnjNKtB+zz3/Hslqk5ewOm9HOM52xbfeMtg=
90+
github.com/criticalstack/machine-api v1.0.1 h1:6dXUYX+ZXNsDGI1xfWyvUXJ8rAMbliOVg0t5G3tbbkQ=
91+
github.com/criticalstack/machine-api v1.0.1/go.mod h1:yrAmVXEoPnjNKtB+zz3/Hslqk5ewOm9HOM52xbfeMtg=
9992
github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E=
10093
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
10194
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -747,7 +740,6 @@ k8s.io/metrics v0.18.2/go.mod h1:qga8E7QfYNR9Q89cSCAjinC9pTZ7yv1XSVGUB0vJypg=
747740
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
748741
k8s.io/utils v0.0.0-20200229041039-0a110f9eb7ab/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
749742
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
750-
k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
751743
k8s.io/utils v0.0.0-20200619165400-6e3d28b6ed19 h1:7Nu2dTj82c6IaWvL7hImJzcXoTPz1MsSCH7r+0m6rfo=
752744
k8s.io/utils v0.0.0-20200619165400-6e3d28b6ed19/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
753745
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=

0 commit comments

Comments
 (0)