github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/datadog/role.go (about) 1 // Copyright 2018 The Terraformer Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package datadog 16 17 import ( 18 "context" 19 "fmt" 20 21 datadogV2 "github.com/DataDog/datadog-api-client-go/api/v2/datadog" 22 23 "github.com/GoogleCloudPlatform/terraformer/terraformutils" 24 ) 25 26 var ( 27 // RoleAllowEmptyValues ... 28 RoleAllowEmptyValues = []string{} 29 ) 30 31 // RoleGenerator ... 32 type RoleGenerator struct { 33 DatadogService 34 } 35 36 func (g *RoleGenerator) createResources(roles []datadogV2.Role) []terraformutils.Resource { 37 resources := []terraformutils.Resource{} 38 for _, role := range roles { 39 resourceName := role.GetId() 40 resource := g.createResource(resourceName) 41 resource.IgnoreKeys = append(resource.IgnoreKeys, "permission.([0-9]+).name") 42 resources = append(resources, resource) 43 } 44 45 return resources 46 } 47 48 func (g *RoleGenerator) createResource(roleID string) terraformutils.Resource { 49 return terraformutils.NewSimpleResource( 50 roleID, 51 fmt.Sprintf("role_%s", roleID), 52 "datadog_role", 53 "datadog", 54 RoleAllowEmptyValues, 55 ) 56 } 57 58 // InitResources Generate TerraformResources from Datadog API, 59 // from each role create 1 TerraformResource. 60 // Need Role ID as ID for terraform resource 61 func (g *RoleGenerator) InitResources() error { 62 datadogClientV2 := g.Args["datadogClientV2"].(*datadogV2.APIClient) 63 authV2 := g.Args["authV2"].(context.Context) 64 65 pageSize := int64(100) 66 pageNumber := int64(0) 67 remaining := int64(1) 68 69 var roles []datadogV2.Role 70 for remaining > int64(0) { 71 resp, _, err := datadogClientV2.RolesApi.ListRoles(authV2, *datadogV2.NewListRolesOptionalParameters(). 72 WithPageSize(pageSize). 73 WithPageNumber(pageNumber)) 74 if err != nil { 75 return err 76 } 77 roles = append(roles, resp.GetData()...) 78 79 remaining = resp.Meta.Page.GetTotalCount() - pageSize*(pageNumber+1) 80 pageNumber++ 81 } 82 83 g.Resources = g.createResources(roles) 84 return nil 85 }