Skip to content

Commit b6d69ca

Browse files
committed
fix condition.state pointer bug
1 parent e314c02 commit b6d69ca

7 files changed

Lines changed: 26 additions & 21 deletions

File tree

internal/controller/awsvalidator_controller.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
"github.com/spectrocloud-labs/valid8or-plugin-aws/api/v1alpha1"
3939
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/constants"
4040
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/types"
41+
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/utils/ptr"
4142
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/validators/iam"
4243
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/validators/servicequota"
4344
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/validators/tag"
@@ -252,16 +253,16 @@ func (r *AwsValidatorReconciler) handleNewValidationResult(nn k8stypes.Namespace
252253
// safeUpdateValidationResult updates the overall validation result, ensuring that the overall validation status remains failed if a single rule fails
253254
func (r *AwsValidatorReconciler) safeUpdateValidationResult(nn k8stypes.NamespacedName, validationResult *types.ValidationResult, failed *monotonicBool, err error) {
254255
if err != nil {
255-
validationResult.State = valid8orv1alpha1.ValidationFailed
256+
validationResult.State = ptr.Ptr(valid8orv1alpha1.ValidationFailed)
256257
validationResult.Condition.Status = corev1.ConditionFalse
257258
validationResult.Condition.Message = "Validation failed with an unexpected error"
258259
validationResult.Condition.Failures = append(validationResult.Condition.Failures, err.Error())
259260
}
260261

261-
didFail := validationResult.State == valid8orv1alpha1.ValidationFailed
262+
didFail := *validationResult.State == valid8orv1alpha1.ValidationFailed
262263
failed.Update(didFail)
263264
if failed.ok && !didFail {
264-
validationResult.State = valid8orv1alpha1.ValidationFailed
265+
validationResult.State = ptr.Ptr(valid8orv1alpha1.ValidationFailed)
265266
}
266267

267268
if err := r.updateValidationResult(nn, *validationResult); err != nil {
@@ -275,7 +276,7 @@ func (r *AwsValidatorReconciler) updateValidationResult(nn k8stypes.NamespacedNa
275276
if err := r.Get(context.Background(), nn, vr); err != nil {
276277
return fmt.Errorf("failed to get ValidationResult %s in namespace %s: %v", nn.Name, nn.Namespace, err)
277278
}
278-
vr.Status.State = res.State
279+
vr.Status.State = *res.State
279280

280281
idx := getConditionIndexByValidationRule(vr.Status.Conditions, res.Condition.ValidationRule)
281282
if idx == -1 {

internal/types/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ func (u UsageMap) Max() *UsageResult {
2727
// ValidationResult is the result of the execution of a validation rule by a validator
2828
type ValidationResult struct {
2929
Condition *valid8orv1alpha1.ValidationCondition
30-
State valid8orv1alpha1.ValidationState
30+
State *valid8orv1alpha1.ValidationState
3131
}

internal/utils/aws/aws.go

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"github.com/aws/aws-sdk-go/service/elbv2"
1010
"github.com/aws/aws-sdk-go/service/iam"
1111
"github.com/aws/aws-sdk-go/service/servicequotas"
12+
13+
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/utils/ptr"
1214
)
1315

1416
// IAMService creates an AWS IAM service object for a specific session
@@ -20,7 +22,7 @@ func IAMService(session *session.Session) *iam.IAM {
2022
func EC2Service(session *session.Session, region string) *ec2.EC2 {
2123
config := &aws.Config{}
2224
if region != "" {
23-
config.Region = aws.String(region)
25+
config.Region = ptr.Ptr(region)
2426
}
2527
return ec2.New(session, config)
2628
}
@@ -29,7 +31,7 @@ func EC2Service(session *session.Session, region string) *ec2.EC2 {
2931
func EFSService(session *session.Session, region string) *efs.EFS {
3032
config := &aws.Config{}
3133
if region != "" {
32-
config.Region = aws.String(region)
34+
config.Region = ptr.Ptr(region)
3335
}
3436
return efs.New(session, config)
3537
}
@@ -38,7 +40,7 @@ func EFSService(session *session.Session, region string) *efs.EFS {
3840
func ELBService(session *session.Session, region string) *elb.ELB {
3941
config := &aws.Config{}
4042
if region != "" {
41-
config.Region = aws.String(region)
43+
config.Region = ptr.Ptr(region)
4244
}
4345
return elb.New(session, config)
4446
}
@@ -47,7 +49,7 @@ func ELBService(session *session.Session, region string) *elb.ELB {
4749
func ELBv2Service(session *session.Session, region string) *elbv2.ELBV2 {
4850
config := &aws.Config{}
4951
if region != "" {
50-
config.Region = aws.String(region)
52+
config.Region = ptr.Ptr(region)
5153
}
5254
return elbv2.New(session, config)
5355
}
@@ -56,12 +58,7 @@ func ELBv2Service(session *session.Session, region string) *elbv2.ELBV2 {
5658
func ServiceQuotasService(session *session.Session, region string) *servicequotas.ServiceQuotas {
5759
config := &aws.Config{}
5860
if region != "" {
59-
config.Region = aws.String(region)
61+
config.Region = ptr.Ptr(region)
6062
}
6163
return servicequotas.New(session, config)
6264
}
63-
64-
// String wraps aws.String
65-
func String(s string) *string {
66-
return aws.String(s)
67-
}

internal/utils/ptr/ptr.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package ptr
2+
3+
func Ptr[T any](x T) *T {
4+
return &x
5+
}

internal/validators/iam/iam_validator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func ReconcileIAMRule(nn k8stypes.NamespacedName, rule v1alpha1.IamRule, s *sess
4242
latestCondition.Message = "All required IAM permissions were found"
4343
latestCondition.ValidationRule = fmt.Sprintf("%s-%s", constants.ValidationRulePrefix, rule.IamRole)
4444
latestCondition.ValidationType = constants.ValidationTypeIAMRolePolicy
45-
validationResult := &types.ValidationResult{Condition: &latestCondition, State: state}
45+
validationResult := &types.ValidationResult{Condition: &latestCondition, State: &state}
4646

4747
// Build map of required permissions
4848
permissions := make(map[string]*permission)

internal/validators/servicequota/servicequota_validator.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/constants"
1818
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/types"
1919
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/utils/aws"
20+
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/utils/ptr"
2021
valid8orv1alpha1 "github.com/spectrocloud-labs/valid8or/api/v1alpha1"
2122
)
2223

@@ -49,7 +50,7 @@ func ReconcileServiceQuotaRule(nn k8stypes.NamespacedName, rule v1alpha1.Service
4950
latestCondition.Message = "Usage for all service quotas is below specified buffer"
5051
latestCondition.ValidationRule = fmt.Sprintf("%s-%s", constants.ValidationRulePrefix, rule.ServiceCode)
5152
latestCondition.ValidationType = constants.ValidationTypeServiceQuota
52-
validationResult := &types.ValidationResult{Condition: &latestCondition, State: state}
53+
validationResult := &types.ValidationResult{Condition: &latestCondition, State: &state}
5354

5455
// Fetch the quota by service code & name & compare against usage
5556
failures := make([]string, 0)
@@ -128,7 +129,7 @@ func elasticIPsPerRegion(rule v1alpha1.ServiceQuotaRule, s *session.Session, log
128129
func publicAMIsPerRegion(rule v1alpha1.ServiceQuotaRule, s *session.Session, log logr.Logger) (*types.UsageResult, error) {
129130
ec2Svc := aws.EC2Service(s, rule.Region)
130131
output, err := ec2Svc.DescribeImages(&ec2.DescribeImagesInput{
131-
ExecutableUsers: []*string{aws.String("self")},
132+
ExecutableUsers: []*string{ptr.Ptr("self")},
132133
})
133134
if err != nil {
134135
log.V(0).Error(err, "failed to get public AMIs", "region", rule.Region)

internal/validators/tag/tag_validator.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/constants"
1414
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/types"
1515
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/utils/aws"
16+
"github.com/spectrocloud-labs/valid8or-plugin-aws/internal/utils/ptr"
1617
valid8orv1alpha1 "github.com/spectrocloud-labs/valid8or/api/v1alpha1"
1718
)
1819

@@ -26,7 +27,7 @@ func ReconcileTagRule(nn k8stypes.NamespacedName, rule v1alpha1.TagRule, s *sess
2627
latestCondition.Message = "All required subnet tags were found"
2728
latestCondition.ValidationRule = fmt.Sprintf("%s-%s-%s", constants.ValidationRulePrefix, rule.ResourceType, rule.Key)
2829
latestCondition.ValidationType = constants.ValidationTypeTag
29-
validationResult := &types.ValidationResult{Condition: &latestCondition, State: state}
30+
validationResult := &types.ValidationResult{Condition: &latestCondition, State: &state}
3031

3132
switch rule.ResourceType {
3233
case "subnet":
@@ -36,8 +37,8 @@ func ReconcileTagRule(nn k8stypes.NamespacedName, rule v1alpha1.TagRule, s *sess
3637
subnets, err := ec2Svc.DescribeSubnets(&ec2.DescribeSubnetsInput{
3738
Filters: []*ec2.Filter{
3839
{
39-
Name: aws.String(fmt.Sprintf("tag:%s", rule.Key)),
40-
Values: []*string{aws.String(rule.ExpectedValue)},
40+
Name: ptr.Ptr(fmt.Sprintf("tag:%s", rule.Key)),
41+
Values: []*string{ptr.Ptr(rule.ExpectedValue)},
4142
},
4243
},
4344
})

0 commit comments

Comments
 (0)