@@ -22,6 +22,8 @@ import (
22
22
"fmt"
23
23
"strings"
24
24
25
+ "github.com/go-logr/logr"
26
+
25
27
"github.com/IBM-Cloud/power-go-client/ibmpisession"
26
28
"github.com/IBM-Cloud/power-go-client/power/models"
27
29
"github.com/IBM/go-sdk-core/v5/core"
@@ -31,12 +33,10 @@ import (
31
33
"github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
32
34
"github.com/IBM/platform-services-go-sdk/resourcemanagerv2"
33
35
"github.com/IBM/vpc-go-sdk/vpcv1"
34
- "github.com/go-logr/logr"
35
- "k8s.io/klog/v2/klogr"
36
- "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/cos"
37
- "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/globalcatalog"
38
36
37
+ "k8s.io/klog/v2/klogr"
39
38
"k8s.io/utils/pointer"
39
+
40
40
"sigs.k8s.io/controller-runtime/pkg/client"
41
41
42
42
capiv1beta1 "sigs.k8s.io/cluster-api/api/v1beta1"
@@ -45,6 +45,8 @@ import (
45
45
46
46
infrav1beta2 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
47
47
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
48
+ "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/cos"
49
+ "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/globalcatalog"
48
50
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
49
51
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
50
52
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/transitgateway"
@@ -57,28 +59,21 @@ import (
57
59
const (
58
60
// DEBUGLEVEL indicates the debug level of the logs.
59
61
DEBUGLEVEL = 5
60
- // PowerVS service and plan name
61
- powerVSService = "power-iaas"
62
- powerVSServicePlan = "power-virtual-server-group"
63
62
)
64
63
65
64
const (
66
65
// TODO(karthik-k-n)(Doubt): should this be fetched using global catalogs or hardcode like this?
67
66
68
- //powerVSResourceID is Power VS power-iaas service id, can be retrieved using ibmcloud cli
69
- // ibmcloud catalog service power-iaas
70
- powerVSResourceID = "abd259f0-9990-11e8-acc8-b9f54a8f1661"
71
-
72
- //powerVSResourcePlanID is Power VS power-iaas plan id, can be retrieved using ibmcloud cli
73
- // ibmcloud catalog service power-iaas
67
+ // powerVSResourcePlanID is Power VS power-iaas plan id, can be retrieved using ibmcloud cli
68
+ // ibmcloud catalog service power-iaas.
74
69
powerVSResourcePlanID = "f165dd34-3a40-423b-9d95-e90a23f724dd"
75
70
76
- //cosResourceID is IBM COS service id, can be retrieved using ibmcloud cli
77
- // ibmcloud catalog service cloud-object-storage
71
+ // cosResourceID is IBM COS service id, can be retrieved using ibmcloud cli
72
+ // ibmcloud catalog service cloud-object-storage.
78
73
cosResourceID = "dff97f5c-bc5e-4455-b470-411c3edbe49c"
79
74
80
- //powerVSResourcePlanID is IBM COS plan id, can be retrieved using ibmcloud cli
81
- // ibmcloud catalog service cloud-object-storage
75
+ // powerVSResourcePlanID is IBM COS plan id, can be retrieved using ibmcloud cli
76
+ // ibmcloud catalog service cloud-object-storage.
82
77
cosResourcePlanID = "1e4e33e4-cfa6-4f12-9016-be594a6d5f87"
83
78
)
84
79
@@ -138,7 +133,7 @@ type ClusterObject interface {
138
133
}
139
134
140
135
// NewPowerVSClusterScope creates a new PowerVSClusterScope from the supplied parameters.
141
- func NewPowerVSClusterScope (params PowerVSClusterScopeParams ) (* PowerVSClusterScope , error ) {
136
+ func NewPowerVSClusterScope (params PowerVSClusterScopeParams ) (* PowerVSClusterScope , error ) { //nolint:gocyclo
142
137
if params .Client == nil {
143
138
err := errors .New ("error failed to generate new scope from nil Client" )
144
139
return nil , err
@@ -337,7 +332,7 @@ func (s *PowerVSClusterScope) GetServiceInstanceID() string {
337
332
return ""
338
333
}
339
334
340
- // TODO: Can we use generic here
335
+ // TODO: Can we use generic here.
341
336
342
337
// SetStatus set the IBMPowerVSCluster status.
343
338
func (s * PowerVSClusterScope ) SetStatus (resourceType ResourceType , resource infrav1beta2.ResourceReference ) {
@@ -437,7 +432,7 @@ func (s *PowerVSClusterScope) GetVPCSubnetIDs() []*string {
437
432
if s .IBMPowerVSCluster .Status .VPCSubnet == nil {
438
433
return nil
439
434
}
440
- var subnets []* string
435
+ subnets := []* string {}
441
436
for _ , subnet := range s .IBMPowerVSCluster .Status .VPCSubnet {
442
437
subnets = append (subnets , subnet .ID )
443
438
}
@@ -608,7 +603,7 @@ func (s *PowerVSClusterScope) checkServiceInstance() (string, error) {
608
603
return * serviceInstance .GUID , nil
609
604
}
610
605
611
- // getServiceInstance return resource instance
606
+ // getServiceInstance return resource instance.
612
607
func (s * PowerVSClusterScope ) getServiceInstance () (* resourcecontrollerv2.ResourceInstance , error ) {
613
608
//TODO: Support regular expression
614
609
return s .ResourceClient .GetServiceInstance ("" , * s .GetServiceName (ServiceInstance ))
@@ -623,8 +618,8 @@ func (s *PowerVSClusterScope) createServiceInstance() (*resourcecontrollerv2.Res
623
618
}
624
619
625
620
// TODO: Do we need to fetch or hardcode
626
- //_, servicePlanID, err := s.CatalogClient.GetServiceInfo(powerVSService, powerVSServicePlan)
627
- //if err != nil {
621
+ // _, servicePlanID, err := s.CatalogClient.GetServiceInfo(powerVSService, powerVSServicePlan)
622
+ // if err != nil {
628
623
// return nil, fmt.Errorf("error retrieving id info for powervs service %w", err)
629
624
//}
630
625
@@ -750,11 +745,10 @@ func (s *PowerVSClusterScope) createDHCPServer() (*string, error) {
750
745
}
751
746
if dhcpServer .Network == nil {
752
747
return nil , fmt .Errorf ("created dhcp server network is nil" )
753
- } else {
754
- s .Info ("DHCP Server network details" , "details" , * dhcpServer .Network )
755
- s .SetStatus (Network , infrav1beta2.ResourceReference {ID : dhcpServer .Network .ID , ControllerCreated : pointer .Bool (true )})
756
748
}
757
749
750
+ s .Info ("DHCP Server network details" , "details" , * dhcpServer .Network )
751
+ s .SetStatus (Network , infrav1beta2.ResourceReference {ID : dhcpServer .Network .ID , ControllerCreated : pointer .Bool (true )})
758
752
return dhcpServer .ID , nil
759
753
}
760
754
@@ -774,17 +768,17 @@ func (s *PowerVSClusterScope) ReconcileVPC() error {
774
768
return fmt .Errorf ("error failed to get vpc with id %s" , * vpcID )
775
769
}
776
770
s .Info ("Found VPC with provided id" )
777
- //TODO(karthik-k-n): Set status here as well
771
+ // TODO(karthik-k-n): Set status here as well
778
772
return nil
779
773
}
780
774
781
775
// check vpc exist in cloud
782
- vpcId , err := s .checkVPC ()
776
+ id , err := s .checkVPC ()
783
777
if err != nil {
784
778
return err
785
779
}
786
- if vpcId != "" {
787
- s .SetStatus (VPC , infrav1beta2.ResourceReference {ID : & vpcId , ControllerCreated : pointer .Bool (false )})
780
+ if id != "" {
781
+ s .SetStatus (VPC , infrav1beta2.ResourceReference {ID : & id , ControllerCreated : pointer .Bool (false )})
788
782
return nil
789
783
}
790
784
@@ -941,7 +935,7 @@ func (s *PowerVSClusterScope) createVPCSubnet(subnet infrav1beta2.Subnet) (*stri
941
935
return nil , err
942
936
}
943
937
// TODO(karthik-k-n): Decide on using all zones or using one zone
944
- if vpcZones == nil || len (vpcZones ) == 0 {
938
+ if len (vpcZones ) == 0 {
945
939
return nil , fmt .Errorf ("error getting vpc zones error: %v" , err )
946
940
}
947
941
zone = vpcZones [0 ]
@@ -1214,9 +1208,9 @@ func (s *PowerVSClusterScope) createLoadBalancer(lb infrav1beta2.VPCLoadBalancer
1214
1208
if subnetIds == nil {
1215
1209
return nil , fmt .Errorf ("error subnet required for load balancer creation" )
1216
1210
}
1217
- for _ , subnetId := range subnetIds {
1211
+ for _ , subnetID := range subnetIds {
1218
1212
subnet := & vpcv1.SubnetIdentity {
1219
- ID : subnetId ,
1213
+ ID : subnetID ,
1220
1214
}
1221
1215
options .Subnets = append (options .Subnets , subnet )
1222
1216
}
@@ -1273,6 +1267,7 @@ func (s *PowerVSClusterScope) createLoadBalancer(lb infrav1beta2.VPCLoadBalancer
1273
1267
}, nil
1274
1268
}
1275
1269
1270
+ // COSInstance returns the COS instance reference.
1276
1271
func (s * PowerVSClusterScope ) COSInstance () * infrav1beta2.CosInstance {
1277
1272
return s .IBMPowerVSCluster .Spec .CosInstance
1278
1273
}
@@ -1308,7 +1303,7 @@ func (s *PowerVSClusterScope) ReconcileCOSInstance() error {
1308
1303
}
1309
1304
1310
1305
apiKey := props ["APIKEY" ]
1311
- if len ( apiKey ) == 0 {
1306
+ if apiKey == "" {
1312
1307
fmt .Printf ("ibmcloud api key is not provided, set %s environmental variable" , "IBMCLOUD_API_KEY" )
1313
1308
}
1314
1309
@@ -1400,9 +1395,9 @@ func (s *PowerVSClusterScope) createCOSServiceInstance() (*resourcecontrollerv2.
1400
1395
return nil , fmt .Errorf ("error getting id for resource group %s, %w" , * s .ResourceGroup (), err )
1401
1396
}
1402
1397
1403
- //TODO(karthik-k-n)(Doubt): should this be fetched or hardcoded
1404
- //_, servicePlanID, err := s.CatalogClient.GetServiceInfo(powerVSService, powerVSServicePlan)
1405
- //if err != nil {
1398
+ // TODO(karthik-k-n)(Doubt): should this be fetched or hardcoded
1399
+ // _, servicePlanID, err := s.CatalogClient.GetServiceInfo(powerVSService, powerVSServicePlan)
1400
+ // if err != nil {
1406
1401
// return nil, fmt.Errorf("error retrieving id info for powervs service %w", err)
1407
1402
//}
1408
1403
@@ -1466,7 +1461,7 @@ func (s *PowerVSClusterScope) getVPCRegion() *string {
1466
1461
return & vpcRegion
1467
1462
}
1468
1463
1469
- // fetchVPCCRN returns VPC CRN
1464
+ // fetchVPCCRN returns VPC CRN.
1470
1465
func (s * PowerVSClusterScope ) fetchVPCCRN () (* string , error ) {
1471
1466
vpcDetails , _ , err := s .IBMVPCClient .GetVPC (& vpcv1.GetVPCOptions {
1472
1467
ID : s .GetVPCID (),
@@ -1489,7 +1484,7 @@ func (s *PowerVSClusterScope) fetchPowerVSServiceInstanceCRN() (*string, error)
1489
1484
return pvsDetails .CRN , nil
1490
1485
}
1491
1486
1492
- // TODO(karthik-k-n): Decide on proper naming format for services
1487
+ // TODO(karthik-k-n): Decide on proper naming format for services.
1493
1488
1494
1489
// GetServiceName returns name of given service type from spec or generate a name for it.
1495
1490
func (s * PowerVSClusterScope ) GetServiceName (resourceType ResourceType ) * string {
@@ -1556,7 +1551,6 @@ func (s *PowerVSClusterScope) DeleteLoadBalancer() error {
1556
1551
}
1557
1552
}
1558
1553
}
1559
-
1560
1554
return nil
1561
1555
}
1562
1556
@@ -1567,28 +1561,29 @@ func (s *PowerVSClusterScope) DeleteVPCSubnet() error {
1567
1561
}
1568
1562
1569
1563
for _ , subnet := range s .IBMPowerVSCluster .Status .VPCSubnet {
1570
- if subnet .ID != nil {
1571
- net , _ , err := s .IBMVPCClient .GetSubnet (& vpcv1.GetSubnetOptions {
1572
- ID : subnet .ID ,
1573
- })
1564
+ if subnet .ID == nil {
1565
+ continue
1566
+ }
1574
1567
1575
- if err != nil {
1576
- if strings .Contains (err .Error (), "Subnet not found" ) {
1577
- return nil
1578
- }
1579
- return fmt .Errorf ("error fetching the subnet: %w" , err )
1580
- }
1568
+ net , _ , err := s .IBMVPCClient .GetSubnet (& vpcv1.GetSubnetOptions {
1569
+ ID : subnet .ID ,
1570
+ })
1581
1571
1582
- _ , err = s .IBMVPCClient .DeleteSubnet (& vpcv1.DeleteSubnetOptions {
1583
- ID : net .ID ,
1584
- })
1585
- if err != nil {
1586
- return fmt .Errorf ("error deleting VPC subnet: %w" , err )
1572
+ if err != nil {
1573
+ if strings .Contains (err .Error (), "Subnet not found" ) {
1574
+ return nil
1587
1575
}
1588
- s . Info ( "VPC subnet successfully deleted" )
1576
+ return fmt . Errorf ( "error fetching the subnet: %w" , err )
1589
1577
}
1590
- }
1591
1578
1579
+ _ , err = s .IBMVPCClient .DeleteSubnet (& vpcv1.DeleteSubnetOptions {
1580
+ ID : net .ID ,
1581
+ })
1582
+ if err != nil {
1583
+ return fmt .Errorf ("error deleting VPC subnet: %w" , err )
1584
+ }
1585
+ s .Info ("VPC subnet successfully deleted" )
1586
+ }
1592
1587
return nil
1593
1588
}
1594
1589
@@ -1618,7 +1613,6 @@ func (s *PowerVSClusterScope) DeleteVPC() error {
1618
1613
}
1619
1614
s .Info ("VPC successfully deleted" )
1620
1615
}
1621
-
1622
1616
return nil
1623
1617
}
1624
1618
@@ -1670,7 +1664,6 @@ func (s *PowerVSClusterScope) DeleteTransitGateway() error {
1670
1664
}
1671
1665
s .Info ("Transit gateway successfully deleted" )
1672
1666
}
1673
-
1674
1667
return nil
1675
1668
}
1676
1669
@@ -1695,7 +1688,6 @@ func (s *PowerVSClusterScope) DeleteDHCPServer() error {
1695
1688
}
1696
1689
s .Info ("DHCP server successfully deleted" )
1697
1690
}
1698
-
1699
1691
return nil
1700
1692
}
1701
1693
@@ -1722,9 +1714,8 @@ func (s *PowerVSClusterScope) DeleteServiceInstance() error {
1722
1714
return fmt .Errorf ("error fetching networks in the service instance: %w" , err )
1723
1715
}
1724
1716
1725
- if servers != nil && len (servers ) > 0 {
1717
+ if len (servers ) > 0 {
1726
1718
return fmt .Errorf ("cannot delete service instance as network is not yet deleted" )
1727
-
1728
1719
}
1729
1720
1730
1721
_ , err = s .ResourceClient .DeleteResourceInstance (& resourcecontrollerv2.DeleteResourceInstanceOptions {
@@ -1739,10 +1730,9 @@ func (s *PowerVSClusterScope) DeleteServiceInstance() error {
1739
1730
s .Info ("Service instance successfully deleted" )
1740
1731
}
1741
1732
return nil
1742
-
1743
1733
}
1744
1734
1745
- // DeleteServiceInstance deletes COS instance.
1735
+ // DeleteCosInstance deletes COS instance.
1746
1736
func (s * PowerVSClusterScope ) DeleteCosInstance () error {
1747
1737
if ! s .deleteResource (COSInstance ) {
1748
1738
return nil
@@ -1773,12 +1763,11 @@ func (s *PowerVSClusterScope) DeleteCosInstance() error {
1773
1763
}
1774
1764
s .Info ("COS instance successfully deleted" )
1775
1765
}
1776
-
1777
1766
return nil
1778
1767
}
1779
1768
1780
1769
// deleteResource returns true or false to decide on deleting provided resource.
1781
- func (s * PowerVSClusterScope ) deleteResource (resourceType ResourceType ) bool {
1770
+ func (s * PowerVSClusterScope ) deleteResource (resourceType ResourceType ) bool { //nolint:gocyclo
1782
1771
switch resourceType {
1783
1772
case LoadBalancer :
1784
1773
lbs := s .IBMPowerVSCluster .Status .LoadBalancers
0 commit comments