mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-03 01:01:06 +00:00
Fix spanner database iam binding import (#2603)
This commit is contained in:
parent
9e566cc0be
commit
73d127a387
@ -6,7 +6,7 @@ import (
|
|||||||
"github.com/hashicorp/errwrap"
|
"github.com/hashicorp/errwrap"
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"google.golang.org/api/cloudresourcemanager/v1"
|
"google.golang.org/api/cloudresourcemanager/v1"
|
||||||
spanner "google.golang.org/api/spanner/v1"
|
"google.golang.org/api/spanner/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var IamSpannerDatabaseSchema = map[string]*schema.Schema{
|
var IamSpannerDatabaseSchema = map[string]*schema.Schema{
|
||||||
@ -51,17 +51,8 @@ func NewSpannerDatabaseIamUpdater(d *schema.ResourceData, config *Config) (Resou
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SpannerDatabaseIdParseFunc(d *schema.ResourceData, config *Config) error {
|
func SpannerDatabaseIdParseFunc(d *schema.ResourceData, config *Config) error {
|
||||||
id, err := extractSpannerDatabaseId(d.Id())
|
_, err := resourceSpannerDatabaseImport("database")(d, config)
|
||||||
if err != nil {
|
return err
|
||||||
return err
|
|
||||||
}
|
|
||||||
d.Set("instance", id.Instance)
|
|
||||||
d.Set("project", id.Project)
|
|
||||||
d.Set("database", id.Database)
|
|
||||||
|
|
||||||
// Explicitly set the id so imported resources have the same ID format as non-imported ones.
|
|
||||||
d.SetId(id.terraformId())
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *SpannerDatabaseIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
|
func (u *SpannerDatabaseIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
|
||||||
|
@ -2,12 +2,10 @@ package google
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
|
||||||
|
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
"google.golang.org/api/spanner/v1"
|
"google.golang.org/api/spanner/v1"
|
||||||
@ -23,7 +21,7 @@ func resourceSpannerDatabase() *schema.Resource {
|
|||||||
Read: resourceSpannerDatabaseRead,
|
Read: resourceSpannerDatabaseRead,
|
||||||
Delete: resourceSpannerDatabaseDelete,
|
Delete: resourceSpannerDatabaseDelete,
|
||||||
Importer: &schema.ResourceImporter{
|
Importer: &schema.ResourceImporter{
|
||||||
State: resourceSpannerDatabaseImport,
|
State: resourceSpannerDatabaseImport("name"),
|
||||||
},
|
},
|
||||||
|
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
@ -137,26 +135,28 @@ func resourceSpannerDatabaseDelete(d *schema.ResourceData, meta interface{}) err
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceSpannerDatabaseImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
|
func resourceSpannerDatabaseImport(databaseField string) schema.StateFunc {
|
||||||
config := meta.(*Config)
|
return func(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
|
||||||
err := parseImportId([]string{
|
config := meta.(*Config)
|
||||||
"projects/(?P<project>[^/]+)/instances/(?P<instance>[^/]+)/databases/(?P<name>[^/]+)",
|
err := parseImportId([]string{
|
||||||
"instances/(?P<instance>[^/]+)/databases/(?P<name>[^/]+)",
|
fmt.Sprintf("projects/(?P<project>[^/]+)/instances/(?P<instance>[^/]+)/databases/(?P<%s>[^/]+)", databaseField),
|
||||||
"(?P<project>[^/]+)/(?P<instance>[^/]+)/(?P<name>[^/]+)",
|
fmt.Sprintf("instances/(?P<instance>[^/]+)/databases/(?P<%s>[^/]+)", databaseField),
|
||||||
"(?P<instance>[^/]+)/(?P<name>[^/]+)",
|
fmt.Sprintf("(?P<project>[^/]+)/(?P<instance>[^/]+)/(?P<%s>[^/]+)", databaseField),
|
||||||
}, d, config)
|
fmt.Sprintf("(?P<instance>[^/]+)/(?P<%s>[^/]+)", databaseField),
|
||||||
if err != nil {
|
}, d, config)
|
||||||
return nil, fmt.Errorf("Error constructing id: %s", err)
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Error constructing id: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id, err := buildSpannerDatabaseId(d, config)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Error constructing id: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
d.SetId(id.terraformId())
|
||||||
|
|
||||||
|
return []*schema.ResourceData{d}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
id, err := buildSpannerDatabaseId(d, config)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Error constructing id: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.SetId(id.terraformId())
|
|
||||||
|
|
||||||
return []*schema.ResourceData{d}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildSpannerDatabaseId(d *schema.ResourceData, config *Config) (*spannerDatabaseId, error) {
|
func buildSpannerDatabaseId(d *schema.ResourceData, config *Config) (*spannerDatabaseId, error) {
|
||||||
@ -164,7 +164,12 @@ func buildSpannerDatabaseId(d *schema.ResourceData, config *Config) (*spannerDat
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
dbName := d.Get("name").(string)
|
database, ok := d.GetOk("name")
|
||||||
|
if !ok {
|
||||||
|
database = d.Get("database")
|
||||||
|
}
|
||||||
|
|
||||||
|
dbName := database.(string)
|
||||||
instanceName := d.Get("instance").(string)
|
instanceName := d.Get("instance").(string)
|
||||||
|
|
||||||
return &spannerDatabaseId{
|
return &spannerDatabaseId{
|
||||||
@ -196,18 +201,6 @@ func (s spannerDatabaseId) databaseUri() string {
|
|||||||
return fmt.Sprintf("%s/databases/%s", s.parentInstanceUri(), s.Database)
|
return fmt.Sprintf("%s/databases/%s", s.parentInstanceUri(), s.Database)
|
||||||
}
|
}
|
||||||
|
|
||||||
func extractSpannerDatabaseId(id string) (*spannerDatabaseId, error) {
|
|
||||||
if !regexp.MustCompile(fmt.Sprintf("^%s/[a-z0-9-]+/%s$", ProjectRegex, spannerDatabaseNameFormat)).Match([]byte(id)) {
|
|
||||||
return nil, fmt.Errorf("Invalid spanner id format, expecting {projectId}/{instanceId}/{databaseId}")
|
|
||||||
}
|
|
||||||
parts := strings.Split(id, "/")
|
|
||||||
return &spannerDatabaseId{
|
|
||||||
Project: parts[0],
|
|
||||||
Instance: parts[1],
|
|
||||||
Database: parts[2],
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func validateResourceSpannerDatabaseName(v interface{}, k string) (ws []string, errors []error) {
|
func validateResourceSpannerDatabaseName(v interface{}, k string) (ws []string, errors []error) {
|
||||||
value := v.(string)
|
value := v.(string)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user