2017-11-27 22:53:01 +00:00
|
|
|
package google
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2018-01-17 18:26:16 +00:00
|
|
|
|
2017-11-27 22:53:01 +00:00
|
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
|
|
"google.golang.org/api/cloudresourcemanager/v1"
|
|
|
|
)
|
|
|
|
|
|
|
|
func resourceGoogleFolderOrganizationPolicy() *schema.Resource {
|
|
|
|
return &schema.Resource{
|
|
|
|
Create: resourceGoogleFolderOrganizationPolicyCreate,
|
|
|
|
Read: resourceGoogleFolderOrganizationPolicyRead,
|
|
|
|
Update: resourceGoogleFolderOrganizationPolicyUpdate,
|
|
|
|
Delete: resourceGoogleFolderOrganizationPolicyDelete,
|
|
|
|
|
|
|
|
Schema: mergeSchemas(
|
|
|
|
schemaOrganizationPolicy,
|
|
|
|
map[string]*schema.Schema{
|
|
|
|
"folder": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Required: true,
|
|
|
|
ForceNew: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func resourceGoogleFolderOrganizationPolicyCreate(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
if err := setFolderOrganizationPolicy(d, meta); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
d.SetId(fmt.Sprintf("%s:%s", d.Get("folder"), d.Get("constraint")))
|
|
|
|
|
|
|
|
return resourceGoogleFolderOrganizationPolicyRead(d, meta)
|
|
|
|
}
|
|
|
|
|
|
|
|
func resourceGoogleFolderOrganizationPolicyRead(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
config := meta.(*Config)
|
2018-01-17 18:26:16 +00:00
|
|
|
folder := canonicalFolderId(d.Get("folder").(string))
|
2017-11-27 22:53:01 +00:00
|
|
|
|
|
|
|
policy, err := config.clientResourceManager.Folders.GetOrgPolicy(folder, &cloudresourcemanager.GetOrgPolicyRequest{
|
|
|
|
Constraint: canonicalOrgPolicyConstraint(d.Get("constraint").(string)),
|
|
|
|
}).Do()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return handleNotFoundError(err, d, fmt.Sprintf("Organization policy for %s", folder))
|
|
|
|
}
|
|
|
|
|
|
|
|
d.Set("constraint", policy.Constraint)
|
|
|
|
d.Set("boolean_policy", flattenBooleanOrganizationPolicy(policy.BooleanPolicy))
|
|
|
|
d.Set("list_policy", flattenListOrganizationPolicy(policy.ListPolicy))
|
2018-05-30 22:48:08 +00:00
|
|
|
d.Set("restore_policy", flattenRestoreOrganizationPolicy(policy.RestoreDefault))
|
2017-11-27 22:53:01 +00:00
|
|
|
d.Set("version", policy.Version)
|
|
|
|
d.Set("etag", policy.Etag)
|
|
|
|
d.Set("update_time", policy.UpdateTime)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func resourceGoogleFolderOrganizationPolicyUpdate(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
if err := setFolderOrganizationPolicy(d, meta); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return resourceGoogleFolderOrganizationPolicyRead(d, meta)
|
|
|
|
}
|
|
|
|
|
|
|
|
func resourceGoogleFolderOrganizationPolicyDelete(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
config := meta.(*Config)
|
2018-01-17 18:26:16 +00:00
|
|
|
folder := canonicalFolderId(d.Get("folder").(string))
|
2017-11-27 22:53:01 +00:00
|
|
|
|
2018-01-17 18:26:16 +00:00
|
|
|
_, err := config.clientResourceManager.Folders.ClearOrgPolicy(folder, &cloudresourcemanager.ClearOrgPolicyRequest{
|
2017-11-27 22:53:01 +00:00
|
|
|
Constraint: canonicalOrgPolicyConstraint(d.Get("constraint").(string)),
|
|
|
|
}).Do()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func setFolderOrganizationPolicy(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
config := meta.(*Config)
|
2018-01-17 18:26:16 +00:00
|
|
|
folder := canonicalFolderId(d.Get("folder").(string))
|
2018-05-30 22:48:08 +00:00
|
|
|
|
2017-11-27 22:53:01 +00:00
|
|
|
listPolicy, err := expandListOrganizationPolicy(d.Get("list_policy").([]interface{}))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2018-05-30 22:48:08 +00:00
|
|
|
restoreDefault, err := expandRestoreOrganizationPolicy(d.Get("restore_policy").([]interface{}))
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2018-01-17 18:26:16 +00:00
|
|
|
_, err = config.clientResourceManager.Folders.SetOrgPolicy(folder, &cloudresourcemanager.SetOrgPolicyRequest{
|
2017-11-27 22:53:01 +00:00
|
|
|
Policy: &cloudresourcemanager.OrgPolicy{
|
2018-05-30 22:48:08 +00:00
|
|
|
Constraint: canonicalOrgPolicyConstraint(d.Get("constraint").(string)),
|
|
|
|
BooleanPolicy: expandBooleanOrganizationPolicy(d.Get("boolean_policy").([]interface{})),
|
|
|
|
ListPolicy: listPolicy,
|
|
|
|
RestoreDefault: restoreDefault,
|
|
|
|
Version: int64(d.Get("version").(int)),
|
|
|
|
Etag: d.Get("etag").(string),
|
2017-11-27 22:53:01 +00:00
|
|
|
},
|
|
|
|
}).Do()
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|