Skip to content

Commit 9aa26dc

Browse files
author
Joshua Reed
committed
Switch users by default now.
1 parent 5bb23ef commit 9aa26dc

6 files changed

+41
-20
lines changed

controllers/cloudstackaffinitygroup_controller.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import (
3737
type CloudStackAGReconciliationRunner struct {
3838
csCtrlrUtils.ReconciliationRunner
3939
ReconciliationSubject *infrav1.CloudStackAffinityGroup
40-
CSUser cloud.Client
4140
}
4241

4342
// CloudStackAGReconciler is the base reconciler to adapt to k8s.
@@ -65,7 +64,7 @@ func (reconciler *CloudStackAffinityGroupReconciler) Reconcile(ctx context.Conte
6564
func (r *CloudStackAGReconciliationRunner) Reconcile() (ctrl.Result, error) {
6665
controllerutil.AddFinalizer(r.ReconciliationSubject, infrav1.AffinityGroupFinalizer)
6766
affinityGroup := &cloud.AffinityGroup{Name: r.ReconciliationSubject.Spec.Name, Type: "host affinity"}
68-
if err := r.CSClient.GetOrCreateAffinityGroup(affinityGroup); err != nil {
67+
if err := r.CSUser.GetOrCreateAffinityGroup(affinityGroup); err != nil {
6968
return ctrl.Result{}, err
7069
}
7170
r.ReconciliationSubject.Spec.ID = affinityGroup.ID
@@ -75,11 +74,11 @@ func (r *CloudStackAGReconciliationRunner) Reconcile() (ctrl.Result, error) {
7574

7675
func (r *CloudStackAGReconciliationRunner) ReconcileDelete() (ctrl.Result, error) {
7776
group := &cloud.AffinityGroup{Name: r.ReconciliationSubject.Name}
78-
_ = r.CSClient.FetchAffinityGroup(group)
77+
_ = r.CSUser.FetchAffinityGroup(group)
7978
if group.ID == "" { // Affinity group not found, must have been deleted.
8079
return ctrl.Result{}, nil
8180
}
82-
if err := r.CSClient.DeleteAffinityGroup(group); err != nil {
81+
if err := r.CSUser.DeleteAffinityGroup(group); err != nil {
8382
return ctrl.Result{}, err
8483
}
8584
controllerutil.RemoveFinalizer(r.ReconciliationSubject, infrav1.AffinityGroupFinalizer)

controllers/cloudstackcluster_controller.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030

3131
infrav1 "github.com/aws/cluster-api-provider-cloudstack/api/v1beta1"
3232
csCtrlrUtils "github.com/aws/cluster-api-provider-cloudstack/controllers/utils"
33-
"github.com/aws/cluster-api-provider-cloudstack/pkg/cloud"
3433
"github.com/pkg/errors"
3534
capiv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3635
"sigs.k8s.io/cluster-api/util"
@@ -53,7 +52,6 @@ type CloudStackClusterReconciliationRunner struct {
5352
csCtrlrUtils.ReconciliationRunner
5453
Zones *infrav1.CloudStackZoneList
5554
ReconciliationSubject *infrav1.CloudStackCluster
56-
CSUser cloud.Client
5755
}
5856

5957
// CloudStackClusterReconciler is the k8s controller manager's interface to reconcile a CloudStackCluster.
@@ -103,7 +101,7 @@ func (r *CloudStackClusterReconciliationRunner) ResolveClusterDetails() (ctrl.Re
103101
controllerutil.AddFinalizer(r.ReconciliationSubject, infrav1.ClusterFinalizer)
104102

105103
// Create and or fetch cluster components.
106-
err := r.CSClient.GetOrCreateCluster(r.ReconciliationSubject)
104+
err := r.CSUser.GetOrCreateCluster(r.ReconciliationSubject)
107105
if err == nil {
108106
r.Log.Info("Fetched cluster info successfully.")
109107
r.Log.V(1).Info("Post fetch cluster status.", "clusterStatus", r.ReconciliationSubject.Status)
@@ -152,7 +150,7 @@ func (r *CloudStackClusterReconciliationRunner) ReconcileDelete() (ctrl.Result,
152150
}
153151
return r.RequeueWithMessage("Child Zones still present, requeueing.")
154152
}
155-
if err := r.CSClient.DisposeClusterResources(r.ReconciliationSubject); err != nil {
153+
if err := r.CSUser.DisposeClusterResources(r.ReconciliationSubject); err != nil {
156154
return ctrl.Result{}, err
157155
}
158156
controllerutil.RemoveFinalizer(r.ReconciliationSubject, infrav1.ClusterFinalizer)

controllers/cloudstackisolatednetwork_controller.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ type CloudStackIsoNetReconciliationRunner struct {
4444
csCtrlrUtils.ReconciliationRunner
4545
Zone *infrav1.CloudStackZone
4646
ReconciliationSubject *infrav1.CloudStackIsolatedNetwork
47-
CSUser cloud.Client
4847
}
4948

5049
// Initialize a new CloudStackIsoNet reconciliation runner with concrete types and initialized member fields.
@@ -80,11 +79,11 @@ func (r *CloudStackIsoNetReconciliationRunner) Reconcile() (retRes ctrl.Result,
8079
if err != nil {
8180
return r.ReturnWrappedError(retErr, "setting up CloudStackCluster patcher:")
8281
}
83-
if err := r.CSClient.GetOrCreateIsolatedNetwork(r.Zone, r.ReconciliationSubject, r.CSCluster); err != nil {
82+
if err := r.CSUser.GetOrCreateIsolatedNetwork(r.Zone, r.ReconciliationSubject, r.CSCluster); err != nil {
8483
return ctrl.Result{}, err
8584
}
8685
// Tag the created network.
87-
if err := r.CSClient.AddClusterTag(cloud.ResourceTypeNetwork, r.ReconciliationSubject.Spec.ID, r.CSCluster); err != nil {
86+
if err := r.CSUser.AddClusterTag(cloud.ResourceTypeNetwork, r.ReconciliationSubject.Spec.ID, r.CSCluster); err != nil {
8887
return ctrl.Result{}, errors.Wrapf(err, "tagging network with id %s:", r.ReconciliationSubject.Spec.ID)
8988
}
9089
if err := csClusterPatcher.Patch(r.RequestCtx, r.CSCluster); err != nil {
@@ -97,7 +96,7 @@ func (r *CloudStackIsoNetReconciliationRunner) Reconcile() (retRes ctrl.Result,
9796

9897
func (r *CloudStackIsoNetReconciliationRunner) ReconcileDelete() (retRes ctrl.Result, retErr error) {
9998
r.Log.Info("Deleting IsolatedNetwork.")
100-
if err := r.CSClient.DisposeIsoNetResources(r.Zone, r.ReconciliationSubject, r.CSCluster); err != nil {
99+
if err := r.CSUser.DisposeIsoNetResources(r.Zone, r.ReconciliationSubject, r.CSCluster); err != nil {
101100
if !strings.Contains(strings.ToLower(err.Error()), "no match found") {
102101
return ctrl.Result{}, err
103102
}

controllers/cloudstackmachine_controller.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ type CloudStackMachineReconciliationRunner struct {
5252
csCtrlrUtils.ReconciliationRunner
5353
ReconciliationSubject *infrav1.CloudStackMachine
5454
CAPIMachine *capiv1.Machine
55-
CSUser cloud.Client
5655
Zones *infrav1.CloudStackZoneList
5756
FailureDomain *infrav1.CloudStackZone
5857
IsoNet *infrav1.CloudStackIsolatedNetwork
@@ -187,7 +186,7 @@ func (r *CloudStackMachineReconciliationRunner) GetOrCreateVMInstance() (retRes
187186
return ctrl.Result{}, errors.New("bootstrap secret data not yet set")
188187
}
189188

190-
err := r.CSClient.GetOrCreateVMInstance(r.ReconciliationSubject, r.CAPIMachine, r.CSCluster, &machineZone, r.AffinityGroup, string(data))
189+
err := r.CSUser.GetOrCreateVMInstance(r.ReconciliationSubject, r.CAPIMachine, r.CSCluster, &machineZone, r.AffinityGroup, string(data))
191190

192191
if err == nil && !controllerutil.ContainsFinalizer(r.ReconciliationSubject, infrav1.MachineFinalizer) { // Fetched or Created?
193192
r.Log.Info("CloudStack instance Created", "instanceStatus", r.ReconciliationSubject.Status)
@@ -221,7 +220,7 @@ func (r *CloudStackMachineReconciliationRunner) AddToLBIfNeeded() (retRes ctrl.R
221220
if r.IsoNet.Spec.Name == "" {
222221
return r.RequeueWithMessage("Could not get required Isolated Network for VM, requeueing.")
223222
}
224-
err := r.CSClient.AssignVMToLoadBalancerRule(r.IsoNet, *r.ReconciliationSubject.Spec.InstanceID)
223+
err := r.CSUser.AssignVMToLoadBalancerRule(r.IsoNet, *r.ReconciliationSubject.Spec.InstanceID)
225224
if err != nil {
226225
return ctrl.Result{}, err
227226
}
@@ -231,7 +230,7 @@ func (r *CloudStackMachineReconciliationRunner) AddToLBIfNeeded() (retRes ctrl.R
231230

232231
func (r *CloudStackMachineReconciliationRunner) ReconcileDelete() (retRes ctrl.Result, reterr error) {
233232
r.Log.Info("Deleting instance", "instance-id", r.ReconciliationSubject.Spec.InstanceID)
234-
if err := r.CSClient.DestroyVMInstance(r.ReconciliationSubject); err != nil {
233+
if err := r.CSUser.DestroyVMInstance(r.ReconciliationSubject); err != nil {
235234
if err.Error() == "VM deletion in progress" {
236235
r.Log.Info(err.Error())
237236
return ctrl.Result{RequeueAfter: utils.DestoryVMRequeueInterval}, nil

controllers/cloudstackzone_controller.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424

2525
infrav1 "github.com/aws/cluster-api-provider-cloudstack/api/v1beta1"
2626
csCtrlrUtils "github.com/aws/cluster-api-provider-cloudstack/controllers/utils"
27-
"github.com/aws/cluster-api-provider-cloudstack/pkg/cloud"
2827
"github.com/pkg/errors"
2928
)
3029

@@ -37,7 +36,6 @@ type CloudStackZoneReconciliationRunner struct {
3736
csCtrlrUtils.ReconciliationRunner
3837
Zones *infrav1.CloudStackZoneList
3938
ReconciliationSubject *infrav1.CloudStackZone
40-
CSUser cloud.Client
4139
IsoNet *infrav1.CloudStackIsolatedNetwork
4240
}
4341

@@ -83,10 +81,10 @@ func (r *CloudStackZoneReconciliationRunner) Reconcile() (retRes ctrl.Result, re
8381

8482
r.Log.V(1).Info("Reconciling CloudStackZone.", "zoneSpec", r.ReconciliationSubject.Spec)
8583
// Start by purely data fetching information about the zone and specified network.
86-
if err := r.CSClient.ResolveZone(r.ReconciliationSubject); err != nil {
84+
if err := r.CSUser.ResolveZone(r.ReconciliationSubject); err != nil {
8785
return ctrl.Result{}, errors.Wrap(err, "resolving CloudStack zone information:")
8886
}
89-
if err := r.CSClient.ResolveNetworkForZone(r.ReconciliationSubject); err != nil &&
87+
if err := r.CSUser.ResolveNetworkForZone(r.ReconciliationSubject); err != nil &&
9088
!csCtrlrUtils.ContainsNoMatchSubstring(err) {
9189
return ctrl.Result{}, errors.Wrap(err, "resolving Cloudstack network information:")
9290
}

controllers/utils/base_reconciler.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ type ReconciliationRunner struct {
6868
returnEarly bool // A signal that the reconcile should return early.
6969
ReconcileDelete CloudStackReconcilerMethod
7070
Reconcile CloudStackReconcilerMethod
71+
CSUser cloud.Client
7172
}
7273

7374
type ConcreteRunner interface {
@@ -219,6 +220,31 @@ func (r *ReconciliationRunner) CheckOwnedCRDsForReadiness(gvks ...schema.GroupVe
219220
}
220221
}
221222

223+
// SetCSUser sets the CSUser client to any user that can operate in specified domain and account if specified.
224+
func (r *ReconciliationRunner) SetCSUser() (ctrl.Result, error) {
225+
r.CSUser = r.CSClient
226+
if r.CSCluster.Spec.Account != "" {
227+
user := &cloud.User{}
228+
user.Account.Domain.Name = r.CSCluster.Spec.Domain
229+
user.Account.Domain.ID = r.CSCluster.Spec.Domain
230+
user.Account.Name = r.CSCluster.Spec.Account
231+
user.Account.ID = r.CSCluster.Spec.Account
232+
if found, err := r.CSClient.GetUserWithKeys(user); err != nil {
233+
return ctrl.Result{}, err
234+
} else if !found {
235+
return ctrl.Result{}, errors.Errorf("could not find sufficient user (with API keys) in domain/account %s/%s",
236+
r.CSCluster.Spec.Account, r.CSCluster.Spec.Domain)
237+
}
238+
cfg := cloud.Config{APIKey: user.APIKey, SecretKey: user.SecretKey}
239+
if client, err := r.CSClient.NewClientFromSpec(cfg); err != nil {
240+
return ctrl.Result{}, err
241+
} else {
242+
r.CSUser = client
243+
}
244+
}
245+
return ctrl.Result{}, nil
246+
}
247+
222248
// RequeueIfCloudStackClusterNotReady requeues the reconciliation request if the CloudStackCluster is not ready.
223249
func (r *ReconciliationRunner) RequeueIfCloudStackClusterNotReady() (ctrl.Result, error) {
224250
if !r.CSCluster.Status.Ready {
@@ -303,6 +329,8 @@ func (r *ReconciliationRunner) RunBaseReconciliationStages() (res ctrl.Result, r
303329
r.GetReconciliationSubject,
304330
r.GetCAPICluster,
305331
r.GetCSCluster,
332+
r.RequeueIfMissingBaseCRs,
333+
r.SetCSUser,
306334
r.IfDeletionTimestampIsZero(r.Reconcile),
307335
r.Else(r.ReconcileDelete),
308336
)

0 commit comments

Comments
 (0)