Skip to content

Commit

Permalink
Add endpoints service IAM (#2318) (#5668)
Browse files Browse the repository at this point in the history
* Add endpoints service IAM resources

Signed-off-by: Modular Magician <magic-modules@google.com>
  • Loading branch information
modular-magician authored Feb 13, 2020
1 parent 31e24e5 commit 4fdcb01
Show file tree
Hide file tree
Showing 24 changed files with 641 additions and 82 deletions.
9 changes: 9 additions & 0 deletions .changelog/2318.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
```release-note:new-resource
google_endpoints_service_iam_binding
```
```release-note:new-resource
google_endpoints_service_iam_policy
```
```release-note:new-resource
google_endpoints_service_iam_member
```
7 changes: 4 additions & 3 deletions google/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ type Config struct {
ResourceManagerBasePath string
RuntimeConfigBasePath string
SecurityCenterBasePath string
ServiceManagementBasePath string
SourceRepoBasePath string
SpannerBasePath string
SQLBasePath string
Expand Down Expand Up @@ -170,8 +171,7 @@ type Config struct {
IAMBasePath string
clientIAM *iam.Service

ServiceManagementBasePath string
clientServiceMan *servicemanagement.APIService
clientServiceMan *servicemanagement.APIService

ServiceUsageBasePath string
clientServiceUsage *serviceusage.Service
Expand Down Expand Up @@ -236,6 +236,7 @@ var RedisDefaultBasePath = "https://redis.googleapis.com/v1/"
var ResourceManagerDefaultBasePath = "https://cloudresourcemanager.googleapis.com/v1/"
var RuntimeConfigDefaultBasePath = "https://runtimeconfig.googleapis.com/v1beta1/"
var SecurityCenterDefaultBasePath = "https://securitycenter.googleapis.com/v1/"
var ServiceManagementDefaultBasePath = "https://servicemanagement.googleapis.com/v1/"
var SourceRepoDefaultBasePath = "https://sourcerepo.googleapis.com/v1/"
var SpannerDefaultBasePath = "https://spanner.googleapis.com/v1/"
var SQLDefaultBasePath = "https://sqladmin.googleapis.com/sql/v1beta4/"
Expand Down Expand Up @@ -713,6 +714,7 @@ func ConfigureBasePaths(c *Config) {
c.ResourceManagerBasePath = ResourceManagerDefaultBasePath
c.RuntimeConfigBasePath = RuntimeConfigDefaultBasePath
c.SecurityCenterBasePath = SecurityCenterDefaultBasePath
c.ServiceManagementBasePath = ServiceManagementDefaultBasePath
c.SourceRepoBasePath = SourceRepoDefaultBasePath
c.SpannerBasePath = SpannerDefaultBasePath
c.SQLBasePath = SQLDefaultBasePath
Expand All @@ -731,7 +733,6 @@ func ConfigureBasePaths(c *Config) {
c.IamCredentialsBasePath = IamCredentialsDefaultBasePath
c.ResourceManagerV2Beta1BasePath = ResourceManagerV2Beta1DefaultBasePath
c.IAMBasePath = IAMDefaultBasePath
c.ServiceManagementBasePath = ServiceManagementDefaultBasePath
c.ServiceNetworkingBasePath = ServiceNetworkingDefaultBasePath
c.ServiceUsageBasePath = ServiceUsageDefaultBasePath
c.BigQueryBasePath = BigQueryDefaultBasePath
Expand Down
152 changes: 152 additions & 0 deletions google/iam_service_management_service.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
// ----------------------------------------------------------------------------
//
// *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
//
// ----------------------------------------------------------------------------
//
// This file is automatically generated by Magic Modules and manual
// changes will be clobbered when the file is regenerated.
//
// Please read more about how to change this file in
// .github/CONTRIBUTING.md.
//
// ----------------------------------------------------------------------------
package google

import (
"fmt"

"github.com/hashicorp/errwrap"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"google.golang.org/api/cloudresourcemanager/v1"
)

var ServiceManagementServiceIamSchema = map[string]*schema.Schema{
"service_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
DiffSuppressFunc: compareSelfLinkOrResourceName,
},
}

type ServiceManagementServiceIamUpdater struct {
serviceName string
d *schema.ResourceData
Config *Config
}

func ServiceManagementServiceIamUpdaterProducer(d *schema.ResourceData, config *Config) (ResourceIamUpdater, error) {
values := make(map[string]string)

if v, ok := d.GetOk("service_name"); ok {
values["serviceName"] = v.(string)
}

// We may have gotten either a long or short name, so attempt to parse long name if possible
m, err := getImportIdQualifiers([]string{"services/(?P<serviceName>[^/]+)", "(?P<serviceName>[^/]+)"}, d, config, d.Get("service_name").(string))
if err != nil {
return nil, err
}

for k, v := range m {
values[k] = v
}

u := &ServiceManagementServiceIamUpdater{
serviceName: values["serviceName"],
d: d,
Config: config,
}

d.Set("service_name", u.GetResourceId())

return u, nil
}

func ServiceManagementServiceIdParseFunc(d *schema.ResourceData, config *Config) error {
values := make(map[string]string)

m, err := getImportIdQualifiers([]string{"services/(?P<serviceName>[^/]+)", "(?P<serviceName>[^/]+)"}, d, config, d.Id())
if err != nil {
return err
}

for k, v := range m {
values[k] = v
}

u := &ServiceManagementServiceIamUpdater{
serviceName: values["serviceName"],
d: d,
Config: config,
}
d.Set("service_name", u.GetResourceId())
d.SetId(u.GetResourceId())
return nil
}

func (u *ServiceManagementServiceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
url, err := u.qualifyServiceUrl("getIamPolicy")
if err != nil {
return nil, err
}

var obj map[string]interface{}

policy, err := sendRequest(u.Config, "POST", "", url, obj)
if err != nil {
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
}

out := &cloudresourcemanager.Policy{}
err = Convert(policy, out)
if err != nil {
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
}

return out, nil
}

func (u *ServiceManagementServiceIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
json, err := ConvertToMap(policy)
if err != nil {
return err
}

obj := make(map[string]interface{})
obj["policy"] = json

url, err := u.qualifyServiceUrl("setIamPolicy")
if err != nil {
return err
}

_, err = sendRequestWithTimeout(u.Config, "POST", "", url, obj, u.d.Timeout(schema.TimeoutCreate))
if err != nil {
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
}

return nil
}

func (u *ServiceManagementServiceIamUpdater) qualifyServiceUrl(methodIdentifier string) (string, error) {
urlTemplate := fmt.Sprintf("{{ServiceManagementBasePath}}%s:%s", fmt.Sprintf("services/%s", u.serviceName), methodIdentifier)
url, err := replaceVars(u.d, u.Config, urlTemplate)
if err != nil {
return "", err
}
return url, nil
}

func (u *ServiceManagementServiceIamUpdater) GetResourceId() string {
return fmt.Sprintf("services/%s", u.serviceName)
}

func (u *ServiceManagementServiceIamUpdater) GetMutexKey() string {
return fmt.Sprintf("iam-servicemanagement-service-%s", u.GetResourceId())
}

func (u *ServiceManagementServiceIamUpdater) DescribeResource() string {
return fmt.Sprintf("servicemanagement service %q", u.GetResourceId())
}
Loading

0 comments on commit 4fdcb01

Please sign in to comment.