mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-07 03:01:06 +00:00
Add import support to project metadata. (#2423)
This commit is contained in:
parent
75dc4df056
commit
b90091e926
@ -14,6 +14,9 @@ func resourceComputeProjectMetadata() *schema.Resource {
|
|||||||
Read: resourceComputeProjectMetadataRead,
|
Read: resourceComputeProjectMetadataRead,
|
||||||
Update: resourceComputeProjectMetadataUpdate,
|
Update: resourceComputeProjectMetadataUpdate,
|
||||||
Delete: resourceComputeProjectMetadataDelete,
|
Delete: resourceComputeProjectMetadataDelete,
|
||||||
|
Importer: &schema.ResourceImporter{
|
||||||
|
State: schema.ImportStatePassthrough,
|
||||||
|
},
|
||||||
|
|
||||||
SchemaVersion: 0,
|
SchemaVersion: 0,
|
||||||
|
|
||||||
@ -91,16 +94,19 @@ func resourceComputeProjectMetadataCreate(d *schema.ResourceData, meta interface
|
|||||||
func resourceComputeProjectMetadataRead(d *schema.ResourceData, meta interface{}) error {
|
func resourceComputeProjectMetadataRead(d *schema.ResourceData, meta interface{}) error {
|
||||||
config := meta.(*Config)
|
config := meta.(*Config)
|
||||||
|
|
||||||
|
if d.Id() == "" {
|
||||||
projectID, err := getProject(d, config)
|
projectID, err := getProject(d, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
d.SetId(projectID)
|
||||||
|
}
|
||||||
|
|
||||||
// Load project service
|
// Load project service
|
||||||
log.Printf("[DEBUG] Loading project service: %s", projectID)
|
log.Printf("[DEBUG] Loading project service: %s", d.Id())
|
||||||
project, err := config.clientCompute.Projects.Get(projectID).Do()
|
project, err := config.clientCompute.Projects.Get(d.Id()).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return handleNotFoundError(err, d, fmt.Sprintf("Project metadata for project %q", projectID))
|
return handleNotFoundError(err, d, fmt.Sprintf("Project metadata for project %q", d.Id()))
|
||||||
}
|
}
|
||||||
|
|
||||||
md := flattenMetadata(project.CommonInstanceMetadata)
|
md := flattenMetadata(project.CommonInstanceMetadata)
|
||||||
@ -116,9 +122,8 @@ func resourceComputeProjectMetadataRead(d *schema.ResourceData, meta interface{}
|
|||||||
return fmt.Errorf("Error setting metadata: %s", err)
|
return fmt.Errorf("Error setting metadata: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
d.Set("project", projectID)
|
d.Set("project", d.Id())
|
||||||
d.SetId("common_metadata")
|
d.SetId(d.Id())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"github.com/hashicorp/terraform/helper/acctest"
|
"github.com/hashicorp/terraform/helper/acctest"
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/terraform"
|
"github.com/hashicorp/terraform/terraform"
|
||||||
"google.golang.org/api/compute/v1"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Add two key value pairs
|
// Add two key value pairs
|
||||||
@ -16,7 +15,6 @@ func TestAccComputeProjectMetadata_basic(t *testing.T) {
|
|||||||
|
|
||||||
org := getTestOrgFromEnv(t)
|
org := getTestOrgFromEnv(t)
|
||||||
billingId := getTestBillingAccountFromEnv(t)
|
billingId := getTestBillingAccountFromEnv(t)
|
||||||
var project compute.Project
|
|
||||||
projectID := "terrafom-test-" + acctest.RandString(10)
|
projectID := "terrafom-test-" + acctest.RandString(10)
|
||||||
|
|
||||||
resource.Test(t, resource.TestCase{
|
resource.Test(t, resource.TestCase{
|
||||||
@ -26,13 +24,11 @@ func TestAccComputeProjectMetadata_basic(t *testing.T) {
|
|||||||
Steps: []resource.TestStep{
|
Steps: []resource.TestStep{
|
||||||
resource.TestStep{
|
resource.TestStep{
|
||||||
Config: testAccComputeProject_basic0_metadata(projectID, pname, org, billingId),
|
Config: testAccComputeProject_basic0_metadata(projectID, pname, org, billingId),
|
||||||
Check: resource.ComposeTestCheckFunc(
|
},
|
||||||
testAccCheckComputeProjectExists(
|
resource.TestStep{
|
||||||
"google_compute_project_metadata.fizzbuzz", projectID, &project),
|
ResourceName: "google_compute_project_metadata.fizzbuzz",
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "banana", "orange"),
|
ImportState: true,
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "sofa", "darwinism"),
|
ImportStateVerify: true,
|
||||||
testAccCheckComputeProjectMetadataSize(projectID, 2),
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -44,7 +40,6 @@ func TestAccComputeProjectMetadata_modify_1(t *testing.T) {
|
|||||||
|
|
||||||
org := getTestOrgFromEnv(t)
|
org := getTestOrgFromEnv(t)
|
||||||
billingId := getTestBillingAccountFromEnv(t)
|
billingId := getTestBillingAccountFromEnv(t)
|
||||||
var project compute.Project
|
|
||||||
projectID := "terrafom-test-" + acctest.RandString(10)
|
projectID := "terrafom-test-" + acctest.RandString(10)
|
||||||
|
|
||||||
resource.Test(t, resource.TestCase{
|
resource.Test(t, resource.TestCase{
|
||||||
@ -54,26 +49,20 @@ func TestAccComputeProjectMetadata_modify_1(t *testing.T) {
|
|||||||
Steps: []resource.TestStep{
|
Steps: []resource.TestStep{
|
||||||
resource.TestStep{
|
resource.TestStep{
|
||||||
Config: testAccComputeProject_modify0_metadata(projectID, pname, org, billingId),
|
Config: testAccComputeProject_modify0_metadata(projectID, pname, org, billingId),
|
||||||
Check: resource.ComposeTestCheckFunc(
|
},
|
||||||
testAccCheckComputeProjectExists(
|
resource.TestStep{
|
||||||
"google_compute_project_metadata.fizzbuzz", projectID, &project),
|
ResourceName: "google_compute_project_metadata.fizzbuzz",
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "paper", "pen"),
|
ImportState: true,
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "genghis_khan", "french bread"),
|
ImportStateVerify: true,
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "happy", "smiling"),
|
|
||||||
testAccCheckComputeProjectMetadataSize(projectID, 3),
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
|
|
||||||
resource.TestStep{
|
resource.TestStep{
|
||||||
Config: testAccComputeProject_modify1_metadata(projectID, pname, org, billingId),
|
Config: testAccComputeProject_modify1_metadata(projectID, pname, org, billingId),
|
||||||
Check: resource.ComposeTestCheckFunc(
|
},
|
||||||
testAccCheckComputeProjectExists(
|
resource.TestStep{
|
||||||
"google_compute_project_metadata.fizzbuzz", projectID, &project),
|
ResourceName: "google_compute_project_metadata.fizzbuzz",
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "paper", "pen"),
|
ImportState: true,
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "paris", "french bread"),
|
ImportStateVerify: true,
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "happy", "laughing"),
|
|
||||||
testAccCheckComputeProjectMetadataSize(projectID, 3),
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -85,7 +74,6 @@ func TestAccComputeProjectMetadata_modify_2(t *testing.T) {
|
|||||||
|
|
||||||
org := getTestOrgFromEnv(t)
|
org := getTestOrgFromEnv(t)
|
||||||
billingId := getTestBillingAccountFromEnv(t)
|
billingId := getTestBillingAccountFromEnv(t)
|
||||||
var project compute.Project
|
|
||||||
projectID := "terraform-test-" + acctest.RandString(10)
|
projectID := "terraform-test-" + acctest.RandString(10)
|
||||||
|
|
||||||
resource.Test(t, resource.TestCase{
|
resource.Test(t, resource.TestCase{
|
||||||
@ -95,24 +83,20 @@ func TestAccComputeProjectMetadata_modify_2(t *testing.T) {
|
|||||||
Steps: []resource.TestStep{
|
Steps: []resource.TestStep{
|
||||||
resource.TestStep{
|
resource.TestStep{
|
||||||
Config: testAccComputeProject_basic0_metadata(projectID, pname, org, billingId),
|
Config: testAccComputeProject_basic0_metadata(projectID, pname, org, billingId),
|
||||||
Check: resource.ComposeTestCheckFunc(
|
},
|
||||||
testAccCheckComputeProjectExists(
|
resource.TestStep{
|
||||||
"google_compute_project_metadata.fizzbuzz", projectID, &project),
|
ResourceName: "google_compute_project_metadata.fizzbuzz",
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "banana", "orange"),
|
ImportState: true,
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "sofa", "darwinism"),
|
ImportStateVerify: true,
|
||||||
testAccCheckComputeProjectMetadataSize(projectID, 2),
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
|
|
||||||
resource.TestStep{
|
resource.TestStep{
|
||||||
Config: testAccComputeProject_basic1_metadata(projectID, pname, org, billingId),
|
Config: testAccComputeProject_basic1_metadata(projectID, pname, org, billingId),
|
||||||
Check: resource.ComposeTestCheckFunc(
|
},
|
||||||
testAccCheckComputeProjectExists(
|
resource.TestStep{
|
||||||
"google_compute_project_metadata.fizzbuzz", projectID, &project),
|
ResourceName: "google_compute_project_metadata.fizzbuzz",
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "kiwi", "papaya"),
|
ImportState: true,
|
||||||
testAccCheckComputeProjectMetadataContains(projectID, "finches", "darwinism"),
|
ImportStateVerify: true,
|
||||||
testAccCheckComputeProjectMetadataSize(projectID, 2),
|
|
||||||
),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -135,74 +119,6 @@ func testAccCheckComputeProjectMetadataDestroy(s *terraform.State) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func testAccCheckComputeProjectExists(n, projectID string, project *compute.Project) resource.TestCheckFunc {
|
|
||||||
return func(s *terraform.State) error {
|
|
||||||
rs, ok := s.RootModule().Resources[n]
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("Not found: %s", n)
|
|
||||||
}
|
|
||||||
|
|
||||||
if rs.Primary.ID == "" {
|
|
||||||
return fmt.Errorf("No ID is set")
|
|
||||||
}
|
|
||||||
|
|
||||||
config := testAccProvider.Meta().(*Config)
|
|
||||||
|
|
||||||
found, err := config.clientCompute.Projects.Get(projectID).Do()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if "common_metadata" != rs.Primary.ID {
|
|
||||||
return fmt.Errorf("Common metadata not found, found %s", rs.Primary.ID)
|
|
||||||
}
|
|
||||||
|
|
||||||
*project = *found
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func testAccCheckComputeProjectMetadataContains(projectID, key, value string) resource.TestCheckFunc {
|
|
||||||
return func(s *terraform.State) error {
|
|
||||||
config := testAccProvider.Meta().(*Config)
|
|
||||||
project, err := config.clientCompute.Projects.Get(projectID).Do()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Error, failed to load project service for %s: %s", config.Project, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, kv := range project.CommonInstanceMetadata.Items {
|
|
||||||
if kv.Key == key {
|
|
||||||
if kv.Value != nil && *kv.Value == value {
|
|
||||||
return nil
|
|
||||||
} else {
|
|
||||||
return fmt.Errorf("Error, key value mismatch, wanted (%s, %s), got (%s, %s)",
|
|
||||||
key, value, kv.Key, *kv.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Errorf("Error, key %s not present in %s", key, project.SelfLink)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func testAccCheckComputeProjectMetadataSize(projectID string, size int) resource.TestCheckFunc {
|
|
||||||
return func(s *terraform.State) error {
|
|
||||||
config := testAccProvider.Meta().(*Config)
|
|
||||||
project, err := config.clientCompute.Projects.Get(projectID).Do()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Error, failed to load project service for %s: %s", config.Project, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if size > len(project.CommonInstanceMetadata.Items) {
|
|
||||||
return fmt.Errorf("Error, expected at least %d metadata items, got %d", size,
|
|
||||||
len(project.CommonInstanceMetadata.Items))
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func testAccComputeProject_basic0_metadata(projectID, name, org, billing string) string {
|
func testAccComputeProject_basic0_metadata(projectID, name, org, billing string) string {
|
||||||
return fmt.Sprintf(`
|
return fmt.Sprintf(`
|
||||||
resource "google_project" "project" {
|
resource "google_project" "project" {
|
||||||
|
@ -44,3 +44,9 @@ The following arguments are supported:
|
|||||||
## Attributes Reference
|
## Attributes Reference
|
||||||
|
|
||||||
Only the arguments listed above are exposed as attributes.
|
Only the arguments listed above are exposed as attributes.
|
||||||
|
|
||||||
|
## Import
|
||||||
|
|
||||||
|
This resource can be imported using the project ID:
|
||||||
|
|
||||||
|
`terraform import google_compute_project_metadata.foo my-project-id`
|
||||||
|
Loading…
Reference in New Issue
Block a user