Skip to content

Commit d42e191

Browse files
authored
Handle scope creation properly (#522)
1 parent 5be03f2 commit d42e191

File tree

2 files changed

+77
-49
lines changed

2 files changed

+77
-49
lines changed

cloud/scope/powervs_cluster.go

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -64,46 +64,71 @@ type PowerVSClusterScope struct {
6464
}
6565

6666
// NewPowerVSClusterScope creates a new PowerVSClusterScope from the supplied parameters.
67-
func NewPowerVSClusterScope(params PowerVSClusterScopeParams) (*PowerVSClusterScope, error) {
67+
func NewPowerVSClusterScope(params PowerVSClusterScopeParams) (scope *PowerVSClusterScope, err error) {
68+
scope = &PowerVSClusterScope{}
69+
70+
if params.Client == nil {
71+
err = errors.New("failed to generate new scope from nil Client")
72+
return
73+
}
74+
scope.client = params.Client
75+
6876
if params.Cluster == nil {
69-
return nil, errors.New("failed to generate new scope from nil Cluster")
77+
err = errors.New("failed to generate new scope from nil Cluster")
78+
return
7079
}
80+
scope.Cluster = params.Cluster
81+
7182
if params.IBMPowerVSCluster == nil {
72-
return nil, errors.New("failed to generate new scope from nil IBMVPCCluster")
83+
err = errors.New("failed to generate new scope from nil IBMPowerVSCluster")
84+
return
7385
}
86+
scope.IBMPowerVSCluster = params.IBMPowerVSCluster
7487

7588
if params.Logger == (logr.Logger{}) {
7689
params.Logger = klogr.New()
7790
}
91+
scope.Logger = params.Logger
92+
93+
helper, err := patch.NewHelper(params.IBMPowerVSCluster, params.Client)
94+
if err != nil {
95+
err = errors.Wrap(err, "failed to init patch helper")
96+
return
97+
}
98+
scope.patchHelper = helper
7899

79100
spec := params.IBMPowerVSCluster.Spec
80101

81102
auth, err := authenticator.GetAuthenticator()
82103
if err != nil {
83-
return nil, errors.Wrap(err, "failed to get authenticator")
104+
err = errors.Wrap(err, "failed to get authenticator")
105+
return
84106
}
85107

86108
account, err := servicesutils.GetAccount(auth)
87109
if err != nil {
88-
return nil, errors.Wrap(err, "failed to get account")
110+
err = errors.Wrap(err, "failed to get account")
111+
return
89112
}
90113

91114
rc, err := resourcecontroller.NewService(resourcecontroller.ServiceOptions{})
92115
if err != nil {
93-
return nil, err
116+
return
94117
}
95118

96119
res, _, err := rc.GetResourceInstance(
97120
&resourcecontrollerv2.GetResourceInstanceOptions{
98121
ID: core.StringPtr(spec.ServiceInstanceID),
99122
})
100123
if err != nil {
101-
return nil, errors.Wrap(err, "failed to get resource instance")
124+
err = errors.Wrap(err, "failed to get resource instance")
125+
return
102126
}
103127

104128
region, err := utils.GetRegion(*res.RegionID)
105129
if err != nil {
106-
return nil, errors.Wrap(err, "failed to get region")
130+
err = errors.Wrap(err, "failed to get region")
131+
return
107132
}
108133

109134
options := powervs.ServiceOptions{
@@ -116,24 +141,13 @@ func NewPowerVSClusterScope(params PowerVSClusterScopeParams) (*PowerVSClusterSc
116141
CloudInstanceID: spec.ServiceInstanceID,
117142
}
118143
c, err := powervs.NewService(options)
119-
120-
if err != nil {
121-
return nil, fmt.Errorf("failed to create NewIBMPowerVSClient")
122-
}
123-
124-
helper, err := patch.NewHelper(params.IBMPowerVSCluster, params.Client)
125144
if err != nil {
126-
return nil, errors.Wrap(err, "failed to init patch helper")
145+
err = fmt.Errorf("failed to create NewIBMPowerVSClient")
146+
return
127147
}
148+
scope.IBMPowerVSClient = c
128149

129-
return &PowerVSClusterScope{
130-
Logger: params.Logger,
131-
client: params.Client,
132-
IBMPowerVSClient: c,
133-
Cluster: params.Cluster,
134-
IBMPowerVSCluster: params.IBMPowerVSCluster,
135-
patchHelper: helper,
136-
}, nil
150+
return
137151
}
138152

139153
// PatchObject persists the cluster configuration and status.

cloud/scope/powervs_machine.go

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -72,52 +72,78 @@ type PowerVSMachineScope struct {
7272
}
7373

7474
// NewPowerVSMachineScope creates a new PowerVSMachineScope from the supplied parameters.
75-
func NewPowerVSMachineScope(params PowerVSMachineScopeParams) (*PowerVSMachineScope, error) {
75+
func NewPowerVSMachineScope(params PowerVSMachineScopeParams) (scope *PowerVSMachineScope, err error) {
76+
scope = &PowerVSMachineScope{}
77+
7678
if params.Client == nil {
77-
return nil, errors.New("client is required when creating a MachineScope")
79+
err = errors.New("client is required when creating a MachineScope")
80+
return
7881
}
82+
scope.client = params.Client
83+
7984
if params.Machine == nil {
80-
return nil, errors.New("machine is required when creating a MachineScope")
85+
err = errors.New("machine is required when creating a MachineScope")
86+
return
8187
}
88+
scope.Machine = params.Machine
89+
8290
if params.Cluster == nil {
83-
return nil, errors.New("cluster is required when creating a MachineScope")
91+
err = errors.New("cluster is required when creating a MachineScope")
92+
return
8493
}
94+
scope.Cluster = params.Cluster
95+
8596
if params.IBMPowerVSMachine == nil {
86-
return nil, errors.New("aws machine is required when creating a MachineScope")
97+
err = errors.New("aws machine is required when creating a MachineScope")
98+
return
8799
}
100+
scope.IBMPowerVSMachine = params.IBMPowerVSMachine
101+
scope.IBMPowerVSCluster = params.IBMPowerVSCluster
88102

89103
if params.Logger == (logr.Logger{}) {
90104
params.Logger = klogr.New()
91105
}
106+
scope.Logger = params.Logger
107+
108+
helper, err := patch.NewHelper(params.IBMPowerVSMachine, params.Client)
109+
if err != nil {
110+
err = errors.Wrap(err, "failed to init patch helper")
111+
return
112+
}
113+
scope.patchHelper = helper
92114

93115
m := params.IBMPowerVSMachine
94116

95117
auth, err := authenticator.GetAuthenticator()
96118
if err != nil {
97-
return nil, errors.Wrap(err, "failed to get authenticator")
119+
err = errors.Wrap(err, "failed to get authenticator")
120+
return
98121
}
99122

100123
account, err := servicesutils.GetAccount(auth)
101124
if err != nil {
102-
return nil, errors.Wrap(err, "failed to get account")
125+
err = errors.Wrap(err, "failed to get account")
126+
return
103127
}
104128

105129
rc, err := resourcecontroller.NewService(resourcecontroller.ServiceOptions{})
106130
if err != nil {
107-
return nil, err
131+
return
108132
}
109133

110134
res, _, err := rc.GetResourceInstance(
111135
&resourcecontrollerv2.GetResourceInstanceOptions{
112136
ID: core.StringPtr(m.Spec.ServiceInstanceID),
113137
})
114138
if err != nil {
115-
return nil, errors.Wrap(err, "failed to get resource instance")
139+
err = errors.Wrap(err, "failed to get resource instance")
140+
return
116141
}
117142

118143
region, err := utils.GetRegion(*res.RegionID)
119144
if err != nil {
120-
return nil, errors.Wrap(err, "failed to get region")
145+
err = errors.Wrap(err, "failed to get region")
146+
return
121147
}
122148

123149
options := powervs.ServiceOptions{
@@ -131,24 +157,12 @@ func NewPowerVSMachineScope(params PowerVSMachineScopeParams) (*PowerVSMachineSc
131157
}
132158
c, err := powervs.NewService(options)
133159
if err != nil {
134-
return nil, fmt.Errorf("failed to create PowerVS service")
160+
err = fmt.Errorf("failed to create PowerVS service")
161+
return
135162
}
163+
scope.IBMPowerVSClient = c
136164

137-
helper, err := patch.NewHelper(params.IBMPowerVSMachine, params.Client)
138-
if err != nil {
139-
return nil, errors.Wrap(err, "failed to init patch helper")
140-
}
141-
return &PowerVSMachineScope{
142-
Logger: params.Logger,
143-
client: params.Client,
144-
patchHelper: helper,
145-
146-
IBMPowerVSClient: c,
147-
Cluster: params.Cluster,
148-
Machine: params.Machine,
149-
IBMPowerVSMachine: params.IBMPowerVSMachine,
150-
IBMPowerVSCluster: params.IBMPowerVSCluster,
151-
}, nil
165+
return
152166
}
153167

154168
func (m *PowerVSMachineScope) ensureInstanceUnique(instanceName string) (*models.PVMInstanceReference, error) {

0 commit comments

Comments
 (0)