Skip to content

Commit

Permalink
add subscriptions meta
Browse files Browse the repository at this point in the history
add user identity resolver config
  • Loading branch information
ludaciti committed Nov 9, 2021
1 parent 65f8770 commit 49b26ba
Show file tree
Hide file tree
Showing 14 changed files with 559 additions and 53 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
TEST?=$$(go list ./... | grep -v 'vendor')
NAME=costradar
BINARY=terraform-provider-${NAME}_${VERSION}
VERSION=0.2.1
VERSION=0.1.3
HOSTNAME=localhost
NAMESPACE=local
GOARCH = amd64
Expand Down
124 changes: 116 additions & 8 deletions costradar/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,25 @@ type CostAndUsageReportSubscription struct {
}

type CloudTrailSubscription struct {
ID string `json:"id"`
TrailName string `json:"trailName"`
BucketName string `json:"bucketName"`
BucketRegion string `json:"bucketRegion"`
BucketPathPrefix string `json:"bucketPathPrefix"`
SourceTopicArn string `json:"sourceTopicArn"`
AccessConfig AccessConfig `json:"accessConfig"`
ID string `json:"id"`
TrailName string `json:"trailName"`
BucketName string `json:"bucketName"`
BucketRegion string `json:"bucketRegion"`
BucketPathPrefix string `json:"bucketPathPrefix"`
SourceTopicArn string `json:"sourceTopicArn"`
AccessConfig AccessConfig `json:"accessConfig"`
}

type UserIdentityResolverConfig struct {
ID string `json:"id"`
LambdaArn string `json:"lambdaArn"`
AccessConfig AccessConfig `json:"accessConfig"`
}

type UserIdentityResolverConfigPayload struct {
Status bool `json:"status"`
Error bool `json:"error"`
Payload UserIdentityResolverConfig `json:"payload"`
}

type CloudTrailSubscriptionPayload struct {
Expand All @@ -52,6 +64,13 @@ type CostAndUsageReportSubscriptionPayload struct {
Payload CostAndUsageReportSubscription `json:"payload"`
}

type IntegrationMeta struct {
CostAndUsageReportSqsArn string `json:"CostAndUsageReportSqsArn"`
CostAndUsageReportSqsUrl string `json:"CostAndUsageReportSqsUrl"`
CloudTrailSqsArn string `json:"CloudTrailSqsArn"`
CloudTrailSqsUrn string `json:"CloudTrailSqsUrl"`
}

type Client interface {
GetCostAndUsageReportSubscription(id string) (*CostAndUsageReportSubscriptionPayload, error)
CreateCostAndUsageReportSubscription(subscription CostAndUsageReportSubscription) (*CostAndUsageReportSubscriptionPayload, error)
Expand All @@ -62,6 +81,12 @@ type Client interface {
CreateCloudTrailSubscription(subscription CloudTrailSubscription) (*CloudTrailSubscriptionPayload, error)
UpdateCloudTrailSubscription(subscription CloudTrailSubscription) (*CloudTrailSubscriptionPayload, error)
DeleteCloudTrailSubscription(id string) error

GetUserIdentityResolverConfig(id string) (*UserIdentityResolverConfigPayload, error)
CreateUserIdentityResolverConfig(resolverConfig UserIdentityResolverConfig) (*UserIdentityResolverConfigPayload, error)
UpdateUserIdentityResolverConfig(resolverConfig UserIdentityResolverConfig) (*UserIdentityResolverConfigPayload, error)
DeleteUserIdentityResolverConfig(id string) error
GetIntegrationMeta() (*IntegrationMeta, error)
}

type ClientGraphql struct {
Expand Down Expand Up @@ -187,7 +212,7 @@ func (c *ClientGraphql) UpdateCostAndUsageReportSubscription(subscription CostAn
}

func (c *ClientGraphql) DeleteCostAndUsageReportSubscription(id string) error {
var query = DestroyCostAndUsageReportSubscriptionQuery
var query = DeleteCostAndUsageReportSubscriptionQuery
variables := map[string]interface{}{
"id": id,
}
Expand Down Expand Up @@ -278,3 +303,86 @@ func (c *ClientGraphql) DeleteCloudTrailSubscription(id string) error {
_, err := c.graphql(query, variables, "data.awsDeleteCloudTrailSubscription")
return err
}

func (c *ClientGraphql) GetUserIdentityResolverConfig(id string) (*UserIdentityResolverConfigPayload, error) {
query := GetUserIdentityResolverConfig

variables := map[string]interface{}{
"id": id,
}
resolverConfig := UserIdentityResolverConfig{}

data, err := c.graphql(query, variables, "data.awsUserIdentityResolverConfig")
if err != nil {
return nil, err
}

mapstructure.Decode(data, &resolverConfig)
payload := UserIdentityResolverConfigPayload{
Payload: resolverConfig,
}
return &payload, err
}

func (c *ClientGraphql) CreateUserIdentityResolverConfig(resolverConfig UserIdentityResolverConfig) (*UserIdentityResolverConfigPayload, error) {
query := CreateUserIdentityResolverConfig
variables := map[string]interface{}{
"id": resolverConfig.ID,
"lambdaArn": resolverConfig.LambdaArn,
"readerMode": resolverConfig.AccessConfig.ReaderMode,
"assumeRoleArn": resolverConfig.AccessConfig.AssumeRoleArn,
"assumeRoleExternalId": resolverConfig.AccessConfig.AssumeRoleExternalId,
"assumeRoleSessionName": resolverConfig.AccessConfig.AssumeRoleSessionName,
}

var payload UserIdentityResolverConfigPayload

data, err := c.graphql(query, variables, "data.awsCreateUserIdentityResolverConfig")
if err != nil {
return nil, err
}
mapstructure.Decode(data, &payload)
return &payload, err
}

func (c *ClientGraphql) UpdateUserIdentityResolverConfig(resolverConfig UserIdentityResolverConfig) (*UserIdentityResolverConfigPayload, error) {
query := UpdateUserIdentityResolverConfig
variables := map[string]interface{}{
"id": resolverConfig.ID,
"lambdaArn": resolverConfig.LambdaArn,
"readerMode": resolverConfig.AccessConfig.ReaderMode,
"assumeRoleArn": resolverConfig.AccessConfig.AssumeRoleArn,
"assumeRoleExternalId": resolverConfig.AccessConfig.AssumeRoleExternalId,
"assumeRoleSessionName": resolverConfig.AccessConfig.AssumeRoleSessionName,
}

var payload UserIdentityResolverConfigPayload

data, err := c.graphql(query, variables, "data.awsUpdateUserIdentityResolverConfig")
if err != nil {
return nil, err
}
mapstructure.Decode(data, &payload)
return &payload, err
}

func (c *ClientGraphql) DeleteUserIdentityResolverConfig(id string) error {
var query = DeleteUserIdentityResolverConfig
variables := map[string]interface{}{
"id": id,
}

_, err := c.graphql(query, variables, "data.awsDeleteUserIdentityResolverConfig")
return err
}

func (c *ClientGraphql) GetIntegrationMeta() (*IntegrationMeta, error) {
var query = AwsIntegrationMeta
var meta IntegrationMeta
data, err := c.graphql(query, nil, "data.awsIntegrationMeta")
if err != nil {
return nil, err
}
mapstructure.Decode(data, &meta)
return &meta, err
}
2 changes: 1 addition & 1 deletion costradar/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ var _ = Describe("Costradar http client", func() {

BeforeEach(func() {
server = ghttp.NewServer()
costradarClient = NewCostRadarClient(server.URL() + "/graphql", "api_Uu94jTpg7UOw5vDFcHUsqFo0pkYoZiL8")
costradarClient = NewCostRadarClient(server.URL()+"/graphql", "api_Uu94jTpg7UOw5vDFcHUsqFo0pkYoZiL8")
})

AfterEach(func() {
Expand Down
52 changes: 52 additions & 0 deletions costradar/data_source_subscription_meta.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package costradar

import (
"context"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"strconv"
"time"
)

var subscriptionMetaSchema = map[string]*schema.Schema{
"cost_and_usage_report_sqs_arn": {
Type: schema.TypeString,
Computed: true,
},
"cost_and_usage_report_sqs_url": {
Type: schema.TypeString,
Computed: true,
},
"cloud_trail_sqs_arn": {
Type: schema.TypeString,
Computed: true,
},
"cloud_trail_sqs_url": {
Type: schema.TypeString,
Computed: true,
},
}

func dataSourceSubscriptionMeta() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceSubscriptionMetaRead,
Schema: subscriptionMetaSchema,
}
}

func dataSourceSubscriptionMetaRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
c := m.(Client)

var diags diag.Diagnostics

subscriptionMeta, err := c.GetIntegrationMeta()
if err != nil {
return diag.FromErr(err)
}
d.Set("cost_and_usage_report_sqs_arn", subscriptionMeta.CostAndUsageReportSqsArn)
d.Set("cost_and_usage_report_sqs_url", subscriptionMeta.CostAndUsageReportSqsUrl)
d.Set("cloud_trail_sqs_arn", subscriptionMeta.CostAndUsageReportSqsArn)
d.Set("cloud_trail_sqs_url", subscriptionMeta.CostAndUsageReportSqsUrl)
d.SetId(strconv.FormatInt(time.Now().Unix(), 10))
return diags
}
35 changes: 35 additions & 0 deletions costradar/data_source_subscription_meta_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package costradar

import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"os"
"testing"
)

func TestAccSubscriptionMeta(t *testing.T) {
os.Setenv("COSTRADAR_TOKEN", "api_Uu94jTpg7UOw5vDFcHUsqFo0pkYoZiL8")
os.Setenv("COSTRADAR_ENDPOINT", "http://localhost:8000/graphql")
resourceName := "data.costradar_subscription_meta.test"
resource.Test(t, resource.TestCase{
ProviderFactories: map[string]func() (*schema.Provider, error){
"costradar": func() (*schema.Provider, error) {
return Provider(), nil
},
},
Steps: []resource.TestStep{
{
Config: testAccDataSubscriptionMetaTF(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(resourceName, "cost_and_usage_report_sqs_arn", "arn:aws:sqs:eu-central-1:123456789012:cur_queue"),
),
},
},
})
}

func testAccDataSubscriptionMetaTF() string {
return `
data "costradar_subscription_meta" "test" {}
`
}
9 changes: 6 additions & 3 deletions costradar/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,13 @@ func Provider() *schema.Provider {
},
},
ResourcesMap: map[string]*schema.Resource{
"costradar_cur_subscription": resourceCurSubscription(),
"costradar_cloudtrail_subscription": resourceCloudTrailSubscription(),
"costradar_cur_subscription": resourceCurSubscription(),
"costradar_cloudtrail_subscription": resourceCloudTrailSubscription(),
"costradar_user_identity_resolver_config": resourceUserIdentityResolverConfig(),
},
DataSourcesMap: map[string]*schema.Resource{
"costradar_subscription_meta": dataSourceSubscriptionMeta(),
},
DataSourcesMap: map[string]*schema.Resource{},
ConfigureContextFunc: providerConfigure,
}
}
Expand Down
Loading

0 comments on commit 49b26ba

Please sign in to comment.