Skip to content

Commit 5b6e7f2

Browse files
lawrenaedanawillow
authored andcommitted
google_project_organization_policy (#1226)
* support google_project_organization_policy * add documentation for google_project_organization_policy * remove "folder" references and cleanup docs * fix tests * un-parallelize tests * add comment about non-parralel tests * moving canonicalProjectId() to test
1 parent 6a76b84 commit 5b6e7f2

5 files changed

+519
-0
lines changed

google/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ func Provider() terraform.ResourceProvider {
180180
"google_project_iam_member": ResourceIamMemberWithImport(IamProjectSchema, NewProjectIamUpdater, ProjectIdParseFunc),
181181
"google_project_service": resourceGoogleProjectService(),
182182
"google_project_iam_custom_role": resourceGoogleProjectIamCustomRole(),
183+
"google_project_organization_policy": resourceGoogleProjectOrganizationPolicy(),
183184
"google_project_usage_export_bucket": resourceProjectUsageBucket(),
184185
"google_project_services": resourceGoogleProjectServices(),
185186
"google_pubsub_topic": resourcePubsubTopic(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package google
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/hashicorp/terraform/helper/schema"
7+
"google.golang.org/api/cloudresourcemanager/v1"
8+
)
9+
10+
func resourceGoogleProjectOrganizationPolicy() *schema.Resource {
11+
return &schema.Resource{
12+
Create: resourceGoogleProjectOrganizationPolicyCreate,
13+
Read: resourceGoogleProjectOrganizationPolicyRead,
14+
Update: resourceGoogleProjectOrganizationPolicyUpdate,
15+
Delete: resourceGoogleProjectOrganizationPolicyDelete,
16+
17+
Schema: mergeSchemas(
18+
schemaOrganizationPolicy,
19+
map[string]*schema.Schema{
20+
"project": {
21+
Type: schema.TypeString,
22+
Required: true,
23+
ForceNew: true,
24+
},
25+
},
26+
),
27+
}
28+
}
29+
30+
func resourceGoogleProjectOrganizationPolicyCreate(d *schema.ResourceData, meta interface{}) error {
31+
if err := setProjectOrganizationPolicy(d, meta); err != nil {
32+
return err
33+
}
34+
35+
d.SetId(fmt.Sprintf("%s:%s", d.Get("project"), d.Get("constraint")))
36+
37+
return resourceGoogleProjectOrganizationPolicyRead(d, meta)
38+
}
39+
40+
func resourceGoogleProjectOrganizationPolicyRead(d *schema.ResourceData, meta interface{}) error {
41+
config := meta.(*Config)
42+
project := prefixedProject(d.Get("project").(string))
43+
44+
policy, err := config.clientResourceManager.Projects.GetOrgPolicy(project, &cloudresourcemanager.GetOrgPolicyRequest{
45+
Constraint: canonicalOrgPolicyConstraint(d.Get("constraint").(string)),
46+
}).Do()
47+
48+
if err != nil {
49+
return handleNotFoundError(err, d, fmt.Sprintf("Organization policy for %s", project))
50+
}
51+
52+
d.Set("constraint", policy.Constraint)
53+
d.Set("boolean_policy", flattenBooleanOrganizationPolicy(policy.BooleanPolicy))
54+
d.Set("list_policy", flattenListOrganizationPolicy(policy.ListPolicy))
55+
d.Set("version", policy.Version)
56+
d.Set("etag", policy.Etag)
57+
d.Set("update_time", policy.UpdateTime)
58+
59+
return nil
60+
}
61+
62+
func resourceGoogleProjectOrganizationPolicyUpdate(d *schema.ResourceData, meta interface{}) error {
63+
if err := setProjectOrganizationPolicy(d, meta); err != nil {
64+
return err
65+
}
66+
67+
return resourceGoogleProjectOrganizationPolicyRead(d, meta)
68+
}
69+
70+
func resourceGoogleProjectOrganizationPolicyDelete(d *schema.ResourceData, meta interface{}) error {
71+
config := meta.(*Config)
72+
project := prefixedProject(d.Get("project").(string))
73+
74+
_, err := config.clientResourceManager.Projects.ClearOrgPolicy(project, &cloudresourcemanager.ClearOrgPolicyRequest{
75+
Constraint: canonicalOrgPolicyConstraint(d.Get("constraint").(string)),
76+
}).Do()
77+
78+
if err != nil {
79+
return err
80+
}
81+
82+
return nil
83+
}
84+
85+
func setProjectOrganizationPolicy(d *schema.ResourceData, meta interface{}) error {
86+
config := meta.(*Config)
87+
project := prefixedProject(d.Get("project").(string))
88+
listPolicy, err := expandListOrganizationPolicy(d.Get("list_policy").([]interface{}))
89+
if err != nil {
90+
return err
91+
}
92+
93+
_, err = config.clientResourceManager.Projects.SetOrgPolicy(project, &cloudresourcemanager.SetOrgPolicyRequest{
94+
Policy: &cloudresourcemanager.OrgPolicy{
95+
Constraint: canonicalOrgPolicyConstraint(d.Get("constraint").(string)),
96+
BooleanPolicy: expandBooleanOrganizationPolicy(d.Get("boolean_policy").([]interface{})),
97+
ListPolicy: listPolicy,
98+
Version: int64(d.Get("version").(int)),
99+
Etag: d.Get("etag").(string),
100+
},
101+
}).Do()
102+
103+
return err
104+
}

0 commit comments

Comments
 (0)