Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release-4.12] OCPBUGS-10603: machineset_controller: Stop caching clouds credentials #65

Merged
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
83 changes: 0 additions & 83 deletions pkg/machineset/cache.go

This file was deleted.

167 changes: 0 additions & 167 deletions pkg/machineset/cache_test.go

This file was deleted.

49 changes: 26 additions & 23 deletions pkg/machineset/controller.go
Expand Up @@ -7,6 +7,7 @@ import (
"time"

"github.com/openshift/machine-api-provider-openstack/pkg/clients"
"github.com/openshift/machine-api-provider-openstack/pkg/machineset/flavorcache"

"github.com/go-logr/logr"
"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
Expand Down Expand Up @@ -35,13 +36,12 @@ type OpenStackInstanceService interface {
}

type Reconciler struct {
Client client.Client
Log logr.Logger
eventRecorder record.EventRecorder
scheme *runtime.Scheme
kubeClient *kubernetes.Clientset
instanceService OpenStackInstanceService
flavorCache *machineFlavorsCache
Client client.Client
Log logr.Logger
eventRecorder record.EventRecorder
scheme *runtime.Scheme
kubeClient *kubernetes.Clientset
flavorCache *flavorcache.Cache
}

// Reconcile implements controller runtime Reconciler interface.
Expand All @@ -66,17 +66,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrlRuntime.Request) (ct

originalMachineSetPatch := client.MergeFrom(machineSet.DeepCopy())

if r.instanceService == nil {
//Create the OpenStack InstanceService if we don't have one already.
m := &machinev1.Machine{Spec: machineSet.Spec.Template.Spec}
is, err := clients.NewInstanceServiceFromMachine(r.kubeClient, m)
if err != nil {
return ctrlRuntime.Result{}, fmt.Errorf("failed to get InstanceService: %v", err)
}
r.instanceService = is
}
//reconcile the machine set and patch even if reconcile failed.
result, err := r.reconcile(machineSet)
result, err := r.reconcile(ctx, machineSet)
if err != nil {
logger.Error(err, "Failed to reconcile MachineSet %q", machineSet.Name)
r.eventRecorder.Eventf(machineSet, corev1.EventTypeWarning, "ReconcileError", "%v", err)
Expand All @@ -91,9 +82,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrlRuntime.Request) (ct
func requeueTime() time.Duration {
// Currently depends on caches refresh failure time, which is how long the cache will wait before
// retrying to refresh the information of a failed look up.
return RefreshFailureTime / 2
return flavorcache.RefreshFailureTime / 2
}
func (r *Reconciler) reconcile(machineSet *machinev1.MachineSet) (ctrlRuntime.Result, error) {
func (r *Reconciler) reconcile(ctx context.Context, machineSet *machinev1.MachineSet) (ctrlRuntime.Result, error) {
pSpec, err := clients.MachineSpecFromProviderSpec(machineSet.Spec.Template.Spec.ProviderSpec)
if err != nil {
return ctrlRuntime.Result{}, fmt.Errorf("failed to get OpenStackProviderSpec from machineset: %v", err)
Expand All @@ -106,14 +97,26 @@ func (r *Reconciler) reconcile(machineSet *machinev1.MachineSet) (ctrlRuntime.Re
machineSet.Annotations = make(map[string]string)
}

flavorInfo := r.flavorCache.getFlavorInfo(r.instanceService, pSpec.Flavor)
if flavorInfo == nil {
var instanceService OpenStackInstanceService
if injected, ok := ctx.Value("injected instanceService").(OpenStackInstanceService); ok {
instanceService = injected
} else {
m := &machinev1.Machine{Spec: machineSet.Spec.Template.Spec}
is, err := clients.NewInstanceServiceFromMachine(r.kubeClient, m)
if err != nil {
return ctrlRuntime.Result{}, fmt.Errorf("failed to get InstanceService: %v", err)
}
instanceService = is
}

flavorInfo, err := r.flavorCache.Get(instanceService, pSpec.Flavor)
if err != nil {
// At this time we don't have enough information to set correct annotations
// so we inform the controller it needs to requeue the request.
return ctrlRuntime.Result{
Requeue: true,
RequeueAfter: requeueTime(),
}, fmt.Errorf("could not find information for %q", pSpec.Flavor)
}, fmt.Errorf("failed to find information for %q: %w", pSpec.Flavor, err)
}

machineSet.Annotations[cpuKey] = strconv.Itoa(flavorInfo.VCPUs)
Expand Down Expand Up @@ -145,7 +148,7 @@ func (r *Reconciler) SetupWithManager(mgr ctrlRuntime.Manager, options controlle
if err != nil {
return fmt.Errorf("could not create kubernetes client to talk to the API server: %w", err)
}
r.flavorCache = newMachineFlavorCache()
r.flavorCache = flavorcache.New()

return nil
}
4 changes: 2 additions & 2 deletions pkg/machineset/controller_suite_test.go
Expand Up @@ -59,10 +59,10 @@ var _ = AfterSuite(func() {
})

// StartTestManager adds recFn
func StartTestManager(mgr manager.Manager) {
func StartTestManager(ctx context.Context, mgr manager.Manager) {
go func() {
defer GinkgoRecover()

Expect(mgr.Start(context.Background())).To(Succeed())
Expect(mgr.Start(ctx)).To(Succeed())
}()
}