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

add region_override field to opslevel_aws_integration resource #500

Merged
merged 5 commits into from
Oct 10, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changes/unreleased/Feature-20241007-131137.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
kind: Feature
body: can override aws regions with "region_override" field on opslevel_aws_integration resource
time: 2024-10-07T13:11:37.315799-05:00
1 change: 1 addition & 0 deletions examples/resources/opslevel_integration_aws/resource.tf
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,5 @@ resource "opslevel_integration_aws" "dev" {
external_id = random_string.external_id.result
ownership_tag_overrides = true
ownership_tag_keys = ["owner", "team", "group"]
region_override = ["eu-west-1", "us-east-1"]
}
19 changes: 19 additions & 0 deletions opslevel/resource_opslevel_integration_aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ type IntegrationAwsResourceModel struct {
Name types.String `tfsdk:"name"`
OwnershipTagOverrides types.Bool `tfsdk:"ownership_tag_overrides"`
OwnershipTagKeys types.List `tfsdk:"ownership_tag_keys"`
RegionOverride types.List `tfsdk:"region_override"`
}

func NewIntegrationAwsResourceModel(awsIntegration opslevel.Integration) IntegrationAwsResourceModel {
Expand All @@ -50,6 +51,7 @@ func NewIntegrationAwsResourceModel(awsIntegration opslevel.Integration) Integra
Name: RequiredStringValue(awsIntegration.Name),
OwnershipTagKeys: OptionalStringListValue(awsIntegration.AWSIntegrationFragment.OwnershipTagKeys),
OwnershipTagOverrides: types.BoolValue(awsIntegration.OwnershipTagOverride),
RegionOverride: OptionalStringListValue(awsIntegration.AWSIntegrationFragment.RegionOverride),
}
}

Expand Down Expand Up @@ -101,6 +103,11 @@ func (r *IntegrationAwsResource) Schema(ctx context.Context, req resource.Schema
Description: "The name of the integration.",
Required: true,
},
"region_override": schema.ListAttribute{
ElementType: types.StringType,
Description: "Overrides the AWS region(s) that will be synchronized by this integration.",
Optional: true,
},
},
}
}
Expand All @@ -119,12 +126,18 @@ func (r *IntegrationAwsResource) Create(ctx context.Context, req resource.Create
resp.Diagnostics.Append(diags...)
return
}
regionOverride, diags := ListValueToStringSlice(ctx, planModel.RegionOverride)
if diags != nil && diags.HasError() {
resp.Diagnostics.Append(diags...)
return
}
input := opslevel.AWSIntegrationInput{
Name: planModel.Name.ValueStringPointer(),
IAMRole: planModel.IamRole.ValueStringPointer(),
ExternalID: planModel.ExternalID.ValueStringPointer(),
OwnershipTagOverride: planModel.OwnershipTagOverrides.ValueBoolPointer(),
OwnershipTagKeys: ownershipTagKeys,
RegionOverride: &regionOverride,
}

awsIntegration, err := r.client.CreateIntegrationAWS(input)
Expand Down Expand Up @@ -175,12 +188,18 @@ func (r *IntegrationAwsResource) Update(ctx context.Context, req resource.Update
resp.Diagnostics.Append(diags...)
return
}
regionOverride, diags := ListValueToStringSlice(ctx, planModel.RegionOverride)
if diags != nil && diags.HasError() {
resp.Diagnostics.Append(diags...)
return
}
input := opslevel.AWSIntegrationInput{
Name: opslevel.RefOf(planModel.Name.ValueString()),
IAMRole: opslevel.RefOf(planModel.IamRole.ValueString()),
ExternalID: opslevel.RefOf(planModel.ExternalID.ValueString()),
OwnershipTagOverride: opslevel.RefOf(planModel.OwnershipTagOverrides.ValueBool()),
OwnershipTagKeys: ownershipTagKeys,
RegionOverride: &regionOverride,
davidbloss marked this conversation as resolved.
Show resolved Hide resolved
}

awsIntegration, err := r.client.UpdateIntegrationAWS(planModel.Id.ValueString(), input)
Expand Down
1 change: 1 addition & 0 deletions tests/remote/integration_aws/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ resource "opslevel_integration_aws" "this" {
external_id = var.external_id
ownership_tag_overrides = var.ownership_tag_overrides
ownership_tag_keys = var.ownership_tag_keys
region_override = var.region_override
}
6 changes: 6 additions & 0 deletions tests/remote/integration_aws/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,9 @@ variable "name" {
type = string
description = "The name of the integration."
}

variable "region_override" {
type = list(string)
description = "Overrides the AWS region(s) that will be synchronized by this integration."
default = null
}
28 changes: 28 additions & 0 deletions tests/remote/integration_aws_all.tftest.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ variables {
# optional fields
ownership_tag_overrides = false
ownership_tag_keys = ["one", "two", "three", "four", "five"]
region_override = ["eu-west-1", "us-east-1"]

# default values - computed from API
default_ownership_tag_keys = tolist(["owner"])
Expand All @@ -29,6 +30,7 @@ run "resource_integration_aws_create_with_all_fields" {
can(opslevel_integration_aws.this.ownership_tag_keys),
can(opslevel_integration_aws.this.ownership_tag_overrides),
can(opslevel_integration_aws.this.name),
can(opslevel_integration_aws.this.region_override),
])
error_message = replace(var.error_unexpected_resource_fields, "TYPE", var.resource_name)
}
Expand Down Expand Up @@ -83,6 +85,15 @@ run "resource_integration_aws_create_with_all_fields" {
)
}

assert {
condition = opslevel_integration_aws.this.region_override == var.region_override
error_message = format(
"expected '%v' but got '%v'",
var.region_override,
opslevel_integration_aws.this.region_override,
)
}

}

run "resource_integration_aws_unset_ownership_tag_keys" {
Expand Down Expand Up @@ -126,3 +137,20 @@ run "resource_integration_aws_unset_ownership_tag_overrides" {
}

}

run "resource_integration_aws_unset_region_override" {

variables {
region_override = null
}

module {
source = "./integration_aws"
}

assert {
condition = opslevel_integration_aws.this.region_override == null
error_message = var.error_expected_null_field
}

}
27 changes: 27 additions & 0 deletions tests/remote/integration_aws_min.tftest.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ variables {
# optional fields
ownership_tag_overrides = null
ownership_tag_keys = null
region_override = null

# default values - computed from API
default_ownership_tag_keys = tolist(["owner"])
Expand Down Expand Up @@ -71,6 +72,11 @@ run "resource_integration_aws_create_with_required_fields" {
)
}

assert {
condition = opslevel_integration_aws.this.region_override == null
error_message = var.error_expected_null_field
}

}

run "resource_integration_aws_set_ownership_tag_keys" {
Expand Down Expand Up @@ -115,3 +121,24 @@ run "resource_integration_aws_set_ownership_tag_overrides" {

}


run "resource_integration_aws_set_region_override" {

variables {
region_override = ["eu-west-1", "us-east-1"]
}

module {
source = "./integration_aws"
}

assert {
condition = opslevel_integration_aws.this.region_override == var.region_override
error_message = format(
"expected '%v' but got '%v'",
var.region_override,
opslevel_integration_aws.this.region_override,
)
}

}
Loading