-
Notifications
You must be signed in to change notification settings - Fork 4
/
restapi_controller.go
85 lines (68 loc) · 2.66 KB
/
restapi_controller.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
Copyright © 2019 AWS Controller authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package apigateway
import (
"context"
"time"
"github.com/go-logr/logr"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/dynamic"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
v1alpha1 "go.awsctrl.io/manager/apis/apigateway/v1alpha1"
cloudformationv1alpha1 "go.awsctrl.io/manager/apis/cloudformation/v1alpha1"
"go.awsctrl.io/manager/controllers/generic"
)
// RestApiReconciler reconciles a RestApi object
type RestApiReconciler struct {
client.Client
dynamic.Interface
Log logr.Logger
Scheme *runtime.Scheme
}
// Load the Cloudformation Stack resource
// +kubebuilder:rbac:groups=cloudformation.awsctrl.io,resources=stacks,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=cloudformation.awsctrl.io,resources=stacks/status,verbs=get;update;patch
// Load the apigateway RestApi resource
// +kubebuilder:rbac:groups=apigateway.awsctrl.io,resources=restapis,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=apigateway.awsctrl.io,resources=restapis/status,verbs=get;update;patch
// Reconcile will make the desired state a reality
func (r *RestApiReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
ctx := context.Background()
log := r.Log.WithValues("RestApi", req.NamespacedName)
var err error
var instance v1alpha1.RestApi
if err = r.Get(ctx, req.NamespacedName, &instance); err != nil {
if errors.IsNotFound(err) {
return ctrl.Result{}, nil
}
return ctrl.Result{}, err
}
var cfncontroller generic.Generic
if cfncontroller, err = generic.New(r.Client, r.Interface, r.Scheme); err != nil {
return ctrl.Result{}, err
}
var requeue time.Duration
if requeue, err = cfncontroller.Reconcile(ctx, log, &instance); err != nil {
return ctrl.Result{RequeueAfter: requeue}, err
}
return ctrl.Result{}, nil
}
// SetupWithManager will setup the controller
func (r *RestApiReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&v1alpha1.RestApi{}).
Owns(&cloudformationv1alpha1.Stack{}).
Complete(r)
}