Skip to content
This repository has been archived by the owner on Jun 8, 2022. It is now read-only.

get CRD by discovery mechanism instead of get plural #261

Merged
merged 4 commits into from
Oct 25, 2020
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ jobs:
with:
go-version: ${{ env.GO_VERSION }}

- name: install Kubebuilder
uses: RyanSiu1995/kubebuilder-action@v1

- name: Cache Go Dependencies
uses: actions/cache@v2
with:
Expand Down
6 changes: 5 additions & 1 deletion cmd/oam-kubernetes-runtime/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,11 @@ func main() {

if useWebhook {
oamLog.Info("OAM webhook enabled, will serving at :" + strconv.Itoa(webhookPort))
webhook.Add(mgr)
if err = webhook.Add(mgr); err != nil {
oamLog.Error(err, "unable to setup the webhook for core controller")
os.Exit(1)
}

}

if err = appController.Setup(mgr, controllerArgs, logging.NewLogrLogger(oamLog)); err != nil {
Expand Down
1 change: 0 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ go 1.13
require (
github.com/crossplane/crossplane-runtime v0.8.0
github.com/davecgh/go-spew v1.1.1
github.com/gertd/go-pluralize v0.1.7
github.com/ghodss/yaml v1.0.0
github.com/go-logr/logr v0.1.0
github.com/google/go-cmp v0.4.0
Expand Down
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,6 @@ github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gertd/go-pluralize v0.1.7 h1:RgvJTJ5W7olOoAks97BOwOlekBFsLEyh00W48Z6ZEZY=
github.com/gertd/go-pluralize v0.1.7/go.mod h1:O4eNeeIf91MHh1GJ2I47DNtaesm66NYvjYgAahcqSDQ=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,11 @@ package applicationconfiguration

import (
"context"
"fmt"
"strconv"
"strings"
"time"

"github.com/crossplane/oam-kubernetes-runtime/pkg/oam"

"github.com/pkg/errors"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
Expand All @@ -41,6 +40,8 @@ import (

"github.com/crossplane/oam-kubernetes-runtime/apis/core/v1alpha2"
"github.com/crossplane/oam-kubernetes-runtime/pkg/controller"
"github.com/crossplane/oam-kubernetes-runtime/pkg/oam"
"github.com/crossplane/oam-kubernetes-runtime/pkg/oam/discoverymapper"
)

const (
Expand Down Expand Up @@ -79,6 +80,10 @@ const (

// Setup adds a controller that reconciles ApplicationConfigurations.
func Setup(mgr ctrl.Manager, args controller.Args, l logging.Logger) error {
dm, err := discoverymapper.New(mgr.GetConfig())
if err != nil {
return fmt.Errorf("create discovery dm fail %v", err)
}
name := "oam/" + strings.ToLower(v1alpha2.ApplicationConfigurationGroupKind)

return ctrl.NewControllerManagedBy(mgr).
Expand All @@ -89,7 +94,7 @@ func Setup(mgr ctrl.Manager, args controller.Args, l logging.Logger) error {
Logger: l,
RevisionLimit: args.RevisionLimit,
}).
Complete(NewReconciler(mgr,
Complete(NewReconciler(mgr, dm,
WithLogger(l.WithValues("controller", name)),
WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name)))))
}
Expand Down Expand Up @@ -164,19 +169,21 @@ func WithPosthook(name string, hook ControllerHooks) ReconcilerOption {

// NewReconciler returns an OAMApplicationReconciler that reconciles ApplicationConfigurations
// by rendering and instantiating their Components and Traits.
func NewReconciler(m ctrl.Manager, o ...ReconcilerOption) *OAMApplicationReconciler {
func NewReconciler(m ctrl.Manager, dm discoverymapper.DiscoveryMapper, o ...ReconcilerOption) *OAMApplicationReconciler {
r := &OAMApplicationReconciler{
client: m.GetClient(),
scheme: m.GetScheme(),
components: &components{
client: m.GetClient(),
dm: dm,
params: ParameterResolveFn(resolve),
workload: ResourceRenderFn(renderWorkload),
trait: ResourceRenderFn(renderTrait),
},
workloads: &workloads{
client: resource.NewAPIPatchingApplicator(m.GetClient()),
rawClient: m.GetClient(),
dm: dm,
},
gc: GarbageCollectorFn(eligible),
log: logging.NewNopLogger(),
Expand Down Expand Up @@ -261,7 +268,7 @@ func (r *OAMApplicationReconciler) Reconcile(req reconcile.Request) (result reco

workloads, depStatus, err := r.components.Render(ctx, ac)
if err != nil {
log.Debug("Cannot render components", "error", err, "requeue-after", time.Now().Add(shortWait))
log.Info("Cannot render components", "error", err, "requeue-after", time.Now().Add(shortWait))
r.record.Event(ac, event.Warning(reasonCannotRenderComponents, err))
ac.SetConditions(v1alpha1.ReconcileError(errors.Wrap(err, errRenderComponents)))
return reconcile.Result{RequeueAfter: shortWait}, errors.Wrap(r.client.Status().Update(ctx, ac), errUpdateAppConfigStatus)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,7 @@ func TestReconciler(t *testing.T) {

for name, tc := range cases {
t.Run(name, func(t *testing.T) {
r := NewReconciler(tc.args.m, tc.args.o...)
r := NewReconciler(tc.args.m, nil, tc.args.o...)
got, err := r.Reconcile(reconcile.Request{})

if diff := cmp.Diff(tc.want.err, err, test.EquateErrors()); diff != "" {
Expand Down Expand Up @@ -887,6 +887,8 @@ func TestDependency(t *testing.T) {
t.Fatal(err)
}

mapper := mock.NewMockDiscoveryMapper()

type args struct {
components []v1alpha2.ApplicationConfigurationComponent
wl *unstructured.Unstructured
Expand Down Expand Up @@ -1297,6 +1299,7 @@ func TestDependency(t *testing.T) {
for name, tc := range cases {
t.Run(name, func(t *testing.T) {
c := components{
dm: mapper,
client: &test.MockClient{
MockGet: test.MockGetFn(func(ctx context.Context, key client.ObjectKey, obj runtime.Object) error {
if obj.GetObjectKind().GroupVersionKind().Kind == "Workload" {
Expand Down Expand Up @@ -1623,7 +1626,7 @@ func TestUpdateStatus(t *testing.T) {
},
}

r := NewReconciler(m)
r := NewReconciler(m, nil)

ac := &v1alpha2.ApplicationConfiguration{}
err := r.client.Get(context.Background(), types.NamespacedName{Name: "example-appconfig"}, ac)
Expand Down
6 changes: 4 additions & 2 deletions pkg/controller/v1alpha2/applicationconfiguration/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/crossplane/oam-kubernetes-runtime/apis/core/v1alpha2"
"github.com/crossplane/oam-kubernetes-runtime/pkg/oam/discoverymapper"
"github.com/crossplane/oam-kubernetes-runtime/pkg/oam/util"
)

Expand Down Expand Up @@ -76,6 +77,7 @@ func (fn WorkloadApplyFns) Finalize(ctx context.Context, ac *v1alpha2.Applicatio
type workloads struct {
client resource.Applicator
rawClient client.Client
dm discoverymapper.DiscoveryMapper
}

func (a *workloads) Apply(ctx context.Context, status []v1alpha2.WorkloadStatus, w []Workload, ao ...resource.ApplyOption) error {
Expand Down Expand Up @@ -183,7 +185,7 @@ func findDereferencedScopes(statusScopes []v1alpha2.WorkloadScope, scopes []unst

func (a *workloads) applyScope(ctx context.Context, wl Workload, s unstructured.Unstructured, workloadRef runtimev1alpha1.TypedReference) error {
// get ScopeDefinition
scopeDefinition, err := util.FetchScopeDefinition(ctx, a.rawClient, &s)
scopeDefinition, err := util.FetchScopeDefinition(ctx, a.rawClient, a.dm, &s)
if err != nil {
return errors.Wrapf(err, errFmtGetScopeDefinition, s.GetAPIVersion(), s.GetKind(), s.GetName())
}
Expand Down Expand Up @@ -237,7 +239,7 @@ func (a *workloads) applyScopeRemoval(ctx context.Context, namespace string, wr
return errors.Wrapf(err, errFmtApplyScope, s.Reference.APIVersion, s.Reference.Kind, s.Reference.Name)
}

scopeDefinition, err := util.FetchScopeDefinition(ctx, a.rawClient, &scopeObject)
scopeDefinition, err := util.FetchScopeDefinition(ctx, a.rawClient, a.dm, &scopeObject)
if err != nil {
return errors.Wrapf(err, errFmtGetScopeDefinition, scopeObject.GetAPIVersion(), scopeObject.GetKind(), scopeObject.GetName())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/crossplane/oam-kubernetes-runtime/apis/core/v1alpha2"
"github.com/crossplane/oam-kubernetes-runtime/pkg/oam/mock"
"github.com/crossplane/oam-kubernetes-runtime/pkg/oam/util"
)

Expand Down Expand Up @@ -318,7 +319,9 @@ func TestApplyWorkloads(t *testing.T) {

for name, tc := range cases {
t.Run(name, func(t *testing.T) {
w := workloads{client: tc.client, rawClient: tc.rawClient}
mapper := mock.NewMockDiscoveryMapper()

w := workloads{client: tc.client, rawClient: tc.rawClient, dm: mapper}
err := w.Apply(tc.args.ctx, tc.args.ws, tc.args.w)

if diff := cmp.Diff(tc.want, err, test.EquateErrors()); diff != "" {
Expand Down Expand Up @@ -463,7 +466,8 @@ func TestFinalizeWorkloadScopes(t *testing.T) {
for _, tc := range cases {
t.Run(tc.caseName, func(t *testing.T) {
acTest := ac
w := workloads{client: tc.client, rawClient: tc.rawClient}
mapper := mock.NewMockDiscoveryMapper()
w := workloads{client: tc.client, rawClient: tc.rawClient, dm: mapper}
err := w.Finalize(ctx, &acTest)

if diff := cmp.Diff(tc.wantErr, err, test.EquateErrors()); diff != "" {
Expand Down
Loading