mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-09-28 22:16:04 +00:00
Allow setting folder_id to empty string on google_project (#1425)
* Allow setting folder_id to empty string on google_project * Simplify logic * Update Changelog
This commit is contained in:
parent
662d38d6a9
commit
135f5c4144
@ -5,6 +5,7 @@ FEATURES:
|
|||||||
IMPROVEMENTS:
|
IMPROVEMENTS:
|
||||||
* compute: Autogenerate `google_vpn_gateway` [GH-1409]
|
* compute: Autogenerate `google_vpn_gateway` [GH-1409]
|
||||||
* compute: add `enable_flow_logs` field to subnetwork [GH-1385]
|
* compute: add `enable_flow_logs` field to subnetwork [GH-1385]
|
||||||
|
* project: Don't fail if `folder_id` and `org_id` are set but one is empty for `google_project` [GH-1425]
|
||||||
|
|
||||||
## 1.11.0 (May 01, 2018)
|
## 1.11.0 (May 01, 2018)
|
||||||
|
|
||||||
|
@ -51,17 +51,15 @@ func resourceGoogleProject() *schema.Resource {
|
|||||||
Required: true,
|
Required: true,
|
||||||
},
|
},
|
||||||
"org_id": &schema.Schema{
|
"org_id": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
ConflictsWith: []string{"folder_id"},
|
|
||||||
},
|
},
|
||||||
"folder_id": &schema.Schema{
|
"folder_id": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
ConflictsWith: []string{"org_id"},
|
StateFunc: parseFolderId,
|
||||||
StateFunc: parseFolderId,
|
|
||||||
},
|
},
|
||||||
"policy_data": &schema.Schema{
|
"policy_data": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
@ -105,7 +103,9 @@ func resourceGoogleProjectCreate(d *schema.ResourceData, meta interface{}) error
|
|||||||
Name: d.Get("name").(string),
|
Name: d.Get("name").(string),
|
||||||
}
|
}
|
||||||
|
|
||||||
getParentResourceId(d, project)
|
if err := getParentResourceId(d, project); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if _, ok := d.GetOk("labels"); ok {
|
if _, ok := d.GetOk("labels"); ok {
|
||||||
project.Labels = expandLabels(d)
|
project.Labels = expandLabels(d)
|
||||||
@ -215,20 +215,27 @@ func prefixedProject(pid string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getParentResourceId(d *schema.ResourceData, p *cloudresourcemanager.Project) error {
|
func getParentResourceId(d *schema.ResourceData, p *cloudresourcemanager.Project) error {
|
||||||
if v, ok := d.GetOk("org_id"); ok {
|
orgId := d.Get("org_id").(string)
|
||||||
org_id := v.(string)
|
folderId := d.Get("folder_id").(string)
|
||||||
|
|
||||||
|
if orgId != "" && folderId != "" {
|
||||||
|
return fmt.Errorf("'org_id' and 'folder_id' cannot be both set.")
|
||||||
|
}
|
||||||
|
|
||||||
|
if orgId != "" {
|
||||||
p.Parent = &cloudresourcemanager.ResourceId{
|
p.Parent = &cloudresourcemanager.ResourceId{
|
||||||
Id: org_id,
|
Id: orgId,
|
||||||
Type: "organization",
|
Type: "organization",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if v, ok := d.GetOk("folder_id"); ok {
|
if folderId != "" {
|
||||||
p.Parent = &cloudresourcemanager.ResourceId{
|
p.Parent = &cloudresourcemanager.ResourceId{
|
||||||
Id: parseFolderId(v),
|
Id: parseFolderId(folderId),
|
||||||
Type: "folder",
|
Type: "folder",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,7 +278,9 @@ func resourceGoogleProjectUpdate(d *schema.ResourceData, meta interface{}) error
|
|||||||
|
|
||||||
// Project parent has changed
|
// Project parent has changed
|
||||||
if d.HasChange("org_id") || d.HasChange("folder_id") {
|
if d.HasChange("org_id") || d.HasChange("folder_id") {
|
||||||
getParentResourceId(d, p)
|
if err := getParentResourceId(d, p); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Do update on project
|
// Do update on project
|
||||||
p, err = config.clientResourceManager.Projects.Update(p.ProjectId, p).Do()
|
p, err = config.clientResourceManager.Projects.Update(p.ProjectId, p).Do()
|
||||||
|
@ -170,6 +170,23 @@ func TestAccProject_deleteDefaultNetwork(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccProject_parentFolder(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
org := getTestOrgFromEnv(t)
|
||||||
|
pid := "terraform-" + acctest.RandString(10)
|
||||||
|
folderDisplayName := "tf-test-" + acctest.RandString(10)
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
{
|
||||||
|
Config: testAccProject_parentFolder(pid, pname, folderDisplayName, org),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func testAccCheckGoogleProjectExists(r, pid string) resource.TestCheckFunc {
|
func testAccCheckGoogleProjectExists(r, pid string) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
rs, ok := s.RootModule().Resources[r]
|
rs, ok := s.RootModule().Resources[r]
|
||||||
@ -314,6 +331,24 @@ resource "google_project" "acceptance" {
|
|||||||
}`, pid, name, org, billing)
|
}`, pid, name, org, billing)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testAccProject_parentFolder(pid, projectName, folderName, org string) string {
|
||||||
|
return fmt.Sprintf(`
|
||||||
|
resource "google_project" "acceptance" {
|
||||||
|
project_id = "%s"
|
||||||
|
name = "%s"
|
||||||
|
# ensures we can set both org_id and folder_id as long as only one is not empty.
|
||||||
|
org_id = ""
|
||||||
|
folder_id = "${google_folder.folder1.id}"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_folder" "folder1" {
|
||||||
|
display_name = "%s"
|
||||||
|
parent = "organizations/%s"
|
||||||
|
}
|
||||||
|
|
||||||
|
`, pid, projectName, folderName, org)
|
||||||
|
}
|
||||||
|
|
||||||
func skipIfEnvNotSet(t *testing.T, envs ...string) {
|
func skipIfEnvNotSet(t *testing.T, envs ...string) {
|
||||||
for _, k := range envs {
|
for _, k := range envs {
|
||||||
if os.Getenv(k) == "" {
|
if os.Getenv(k) == "" {
|
||||||
|
Loading…
Reference in New Issue
Block a user