Skip to content

Commit 181dafe

Browse files
modular-magicianrileykarson
authored andcommitted
Autogenerate google_sourcerepo_repository (#2797)
1 parent 6b29503 commit 181dafe

6 files changed

+284
-125
lines changed

google/provider.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ func ResourceMapWithErrors() (map[string]*schema.Resource, error) {
120120
GeneratedDnsResourcesMap,
121121
GeneratedRedisResourcesMap,
122122
GeneratedResourceManagerResourcesMap,
123+
GeneratedSourcerepoResourcesMap,
123124
GeneratedStorageResourcesMap,
124125
GeneratedMonitoringResourcesMap,
125126
map[string]*schema.Resource{
@@ -183,7 +184,6 @@ func ResourceMapWithErrors() (map[string]*schema.Resource, error) {
183184
"google_kms_crypto_key": resourceKmsCryptoKey(),
184185
"google_kms_crypto_key_iam_binding": ResourceIamBindingWithImport(IamKmsCryptoKeySchema, NewKmsCryptoKeyIamUpdater, CryptoIdParseFunc),
185186
"google_kms_crypto_key_iam_member": ResourceIamMemberWithImport(IamKmsCryptoKeySchema, NewKmsCryptoKeyIamUpdater, CryptoIdParseFunc),
186-
"google_sourcerepo_repository": resourceSourceRepoRepository(),
187187
"google_spanner_instance": resourceSpannerInstance(),
188188
"google_spanner_instance_iam_binding": ResourceIamBindingWithImport(IamSpannerInstanceSchema, NewSpannerInstanceIamUpdater, SpannerInstanceIdParseFunc),
189189
"google_spanner_instance_iam_member": ResourceIamMemberWithImport(IamSpannerInstanceSchema, NewSpannerInstanceIamUpdater, SpannerInstanceIdParseFunc),

google/provider_sourcerepo_gen.go

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// ----------------------------------------------------------------------------
2+
//
3+
// *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
4+
//
5+
// ----------------------------------------------------------------------------
6+
//
7+
// This file is automatically generated by Magic Modules and manual
8+
// changes will be clobbered when the file is regenerated.
9+
//
10+
// Please read more about how to change this file in
11+
// .github/CONTRIBUTING.md.
12+
//
13+
// ----------------------------------------------------------------------------
14+
15+
package google
16+
17+
import "github.com/hashicorp/terraform/helper/schema"
18+
19+
var GeneratedSourcerepoResourcesMap = map[string]*schema.Resource{
20+
"google_sourcerepo_repository": resourceSourcerepoRepository(),
21+
}
+115-53
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,43 @@
1+
// ----------------------------------------------------------------------------
2+
//
3+
// *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
4+
//
5+
// ----------------------------------------------------------------------------
6+
//
7+
// This file is automatically generated by Magic Modules and manual
8+
// changes will be clobbered when the file is regenerated.
9+
//
10+
// Please read more about how to change this file in
11+
// .github/CONTRIBUTING.md.
12+
//
13+
// ----------------------------------------------------------------------------
14+
115
package google
216

317
import (
418
"fmt"
19+
"log"
20+
"reflect"
21+
"strconv"
22+
"strings"
23+
"time"
524

625
"github.com/hashicorp/terraform/helper/schema"
7-
"google.golang.org/api/sourcerepo/v1"
826
)
927

10-
func resourceSourceRepoRepository() *schema.Resource {
28+
func resourceSourcerepoRepository() *schema.Resource {
1129
return &schema.Resource{
12-
Create: resourceSourceRepoRepositoryCreate,
13-
Read: resourceSourceRepoRepositoryRead,
14-
Delete: resourceSourceRepoRepositoryDelete,
15-
//Update: not supported,
30+
Create: resourceSourcerepoRepositoryCreate,
31+
Read: resourceSourcerepoRepositoryRead,
32+
Delete: resourceSourcerepoRepositoryDelete,
1633

1734
Importer: &schema.ResourceImporter{
18-
State: resourceSourceRepoRepositoryImport,
35+
State: resourceSourcerepoRepositoryImport,
36+
},
37+
38+
Timeouts: &schema.ResourceTimeout{
39+
Create: schema.DefaultTimeout(240 * time.Second),
40+
Delete: schema.DefaultTimeout(240 * time.Second),
1941
},
2042

2143
Schema: map[string]*schema.Schema{
@@ -24,111 +46,151 @@ func resourceSourceRepoRepository() *schema.Resource {
2446
Required: true,
2547
ForceNew: true,
2648
},
27-
28-
"project": {
29-
Type: schema.TypeString,
30-
Optional: true,
31-
Computed: true,
32-
ForceNew: true,
33-
},
34-
3549
"size": {
3650
Type: schema.TypeInt,
3751
Computed: true,
3852
},
39-
4053
"url": {
4154
Type: schema.TypeString,
4255
Computed: true,
4356
},
57+
"project": {
58+
Type: schema.TypeString,
59+
Optional: true,
60+
Computed: true,
61+
ForceNew: true,
62+
},
4463
},
4564
}
4665
}
4766

48-
func resourceSourceRepoRepositoryCreate(d *schema.ResourceData, meta interface{}) error {
67+
func resourceSourcerepoRepositoryCreate(d *schema.ResourceData, meta interface{}) error {
4968
config := meta.(*Config)
5069

51-
project, err := getProject(d, config)
70+
obj := make(map[string]interface{})
71+
nameProp, err := expandSourcerepoRepositoryName(d.Get("name"), d, config)
5272
if err != nil {
5373
return err
74+
} else if v, ok := d.GetOkExists("name"); !isEmptyValue(reflect.ValueOf(nameProp)) && (ok || !reflect.DeepEqual(v, nameProp)) {
75+
obj["name"] = nameProp
5476
}
5577

56-
repoName := d.Get("name").(string)
57-
name := buildRepositoryName(project, repoName)
58-
59-
repo := &sourcerepo.Repo{
60-
Name: name,
78+
url, err := replaceVars(d, config, "https://sourcerepo.googleapis.com/v1/projects/{{project}}/repos")
79+
if err != nil {
80+
return err
6181
}
6282

63-
parent := "projects/" + project
83+
log.Printf("[DEBUG] Creating new Repository: %#v", obj)
84+
res, err := sendRequestWithTimeout(config, "POST", url, obj, d.Timeout(schema.TimeoutCreate))
85+
if err != nil {
86+
return fmt.Errorf("Error creating Repository: %s", err)
87+
}
6488

65-
op, err := config.clientSourceRepo.Projects.Repos.Create(parent, repo).Do()
89+
// Store the ID now
90+
id, err := replaceVars(d, config, "{{project}}/{{name}}")
6691
if err != nil {
67-
return fmt.Errorf("Error creating the Source Repo: %s", err)
92+
return fmt.Errorf("Error constructing id: %s", err)
6893
}
69-
d.SetId(op.Name)
94+
d.SetId(id)
7095

71-
return nil
96+
log.Printf("[DEBUG] Finished creating Repository %q: %#v", d.Id(), res)
97+
98+
return resourceSourcerepoRepositoryRead(d, meta)
7299
}
73100

74-
func resourceSourceRepoRepositoryRead(d *schema.ResourceData, meta interface{}) error {
101+
func resourceSourcerepoRepositoryRead(d *schema.ResourceData, meta interface{}) error {
75102
config := meta.(*Config)
76103

77-
project, err := getProject(d, config)
104+
url, err := replaceVars(d, config, "https://sourcerepo.googleapis.com/v1/projects/{{project}}/repos/{{name}}")
78105
if err != nil {
79106
return err
80107
}
81108

82-
repoName := d.Get("name").(string)
83-
name := buildRepositoryName(project, repoName)
84-
85-
repo, err := config.clientSourceRepo.Projects.Repos.Get(name).Do()
109+
res, err := sendRequest(config, "GET", url, nil)
110+
if err != nil {
111+
return handleNotFoundError(err, d, fmt.Sprintf("SourcerepoRepository %q", d.Id()))
112+
}
86113

114+
project, err := getProject(d, config)
87115
if err != nil {
88-
return handleNotFoundError(err, d, fmt.Sprintf("Source Repo %q", d.Id()))
116+
return err
117+
}
118+
if err := d.Set("project", project); err != nil {
119+
return fmt.Errorf("Error reading Repository: %s", err)
89120
}
90121

91-
d.Set("size", repo.Size)
92-
d.Set("project", project)
93-
d.Set("url", repo.Url)
122+
if err := d.Set("name", flattenSourcerepoRepositoryName(res["name"], d)); err != nil {
123+
return fmt.Errorf("Error reading Repository: %s", err)
124+
}
125+
if err := d.Set("url", flattenSourcerepoRepositoryUrl(res["url"], d)); err != nil {
126+
return fmt.Errorf("Error reading Repository: %s", err)
127+
}
128+
if err := d.Set("size", flattenSourcerepoRepositorySize(res["size"], d)); err != nil {
129+
return fmt.Errorf("Error reading Repository: %s", err)
130+
}
94131

95132
return nil
96133
}
97134

98-
func resourceSourceRepoRepositoryDelete(d *schema.ResourceData, meta interface{}) error {
135+
func resourceSourcerepoRepositoryDelete(d *schema.ResourceData, meta interface{}) error {
99136
config := meta.(*Config)
100137

101-
project, err := getProject(d, config)
138+
url, err := replaceVars(d, config, "https://sourcerepo.googleapis.com/v1/projects/{{project}}/repos/{{name}}")
102139
if err != nil {
103140
return err
104141
}
105142

106-
repoName := d.Get("name").(string)
107-
name := buildRepositoryName(project, repoName)
108-
109-
_, err = config.clientSourceRepo.Projects.Repos.Delete(name).Do()
143+
var obj map[string]interface{}
144+
log.Printf("[DEBUG] Deleting Repository %q", d.Id())
145+
res, err := sendRequestWithTimeout(config, "DELETE", url, obj, d.Timeout(schema.TimeoutDelete))
110146
if err != nil {
111-
return fmt.Errorf("Error deleting the Source Repo: %s", err)
147+
return handleNotFoundError(err, d, "Repository")
112148
}
113149

150+
log.Printf("[DEBUG] Finished deleting Repository %q: %#v", d.Id(), res)
114151
return nil
115152
}
116153

117-
func buildRepositoryName(project, name string) string {
118-
repositoryName := "projects/" + project + "/repos/" + name
119-
return repositoryName
120-
}
121-
122-
func resourceSourceRepoRepositoryImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
154+
func resourceSourcerepoRepositoryImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
123155
config := meta.(*Config)
124-
parseImportId([]string{"projects/(?P<project>[^/]+)/repos/(?P<name>[^/]+)", "(?P<project>[^/]+)/(?P<name>[^/]+)", "(?P<name>[^/]+)"}, d, config)
156+
if err := parseImportId([]string{"projects/(?P<project>[^/]+)/repos/(?P<name>[^/]+)", "(?P<project>[^/]+)/(?P<name>[^/]+)", "(?P<name>[^/]+)"}, d, config); err != nil {
157+
return nil, err
158+
}
125159

126160
// Replace import id for the resource id
127-
id, err := replaceVars(d, config, "projects/{{project}}/repos/{{name}}")
161+
id, err := replaceVars(d, config, "{{project}}/{{name}}")
128162
if err != nil {
129163
return nil, fmt.Errorf("Error constructing id: %s", err)
130164
}
131165
d.SetId(id)
132166

133167
return []*schema.ResourceData{d}, nil
134168
}
169+
170+
func flattenSourcerepoRepositoryName(v interface{}, d *schema.ResourceData) interface{} {
171+
if v == nil {
172+
return v
173+
}
174+
175+
// We can't use a standard name_from_self_link because the name can include /'s
176+
parts := strings.SplitAfterN(v.(string), "/", 4)
177+
return parts[3]
178+
}
179+
180+
func flattenSourcerepoRepositoryUrl(v interface{}, d *schema.ResourceData) interface{} {
181+
return v
182+
}
183+
184+
func flattenSourcerepoRepositorySize(v interface{}, d *schema.ResourceData) interface{} {
185+
// Handles the string fixed64 format
186+
if strVal, ok := v.(string); ok {
187+
if intVal, err := strconv.ParseInt(strVal, 10, 64); err == nil {
188+
return intVal
189+
} // let terraform core handle it if we can't convert the string to an int.
190+
}
191+
return v
192+
}
193+
194+
func expandSourcerepoRepositoryName(v interface{}, d *schema.ResourceData, config *Config) (interface{}, error) {
195+
return replaceVars(d, config, "projects/{{project}}/repos/{{name}}")
196+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// ----------------------------------------------------------------------------
2+
//
3+
// *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
4+
//
5+
// ----------------------------------------------------------------------------
6+
//
7+
// This file is automatically generated by Magic Modules and manual
8+
// changes will be clobbered when the file is regenerated.
9+
//
10+
// Please read more about how to change this file in
11+
// .github/CONTRIBUTING.md.
12+
//
13+
// ----------------------------------------------------------------------------
14+
15+
package google
16+
17+
import (
18+
"fmt"
19+
"strings"
20+
"testing"
21+
22+
"github.com/hashicorp/terraform/helper/acctest"
23+
"github.com/hashicorp/terraform/helper/resource"
24+
"github.com/hashicorp/terraform/terraform"
25+
)
26+
27+
func TestAccSourcerepoRepository_sourcerepoRepositoryBasicExample(t *testing.T) {
28+
t.Parallel()
29+
30+
context := map[string]interface{}{
31+
"random_suffix": acctest.RandString(10),
32+
}
33+
34+
resource.Test(t, resource.TestCase{
35+
PreCheck: func() { testAccPreCheck(t) },
36+
Providers: testAccProviders,
37+
CheckDestroy: testAccCheckSourcerepoRepositoryDestroy,
38+
Steps: []resource.TestStep{
39+
{
40+
Config: testAccSourcerepoRepository_sourcerepoRepositoryBasicExample(context),
41+
},
42+
{
43+
ResourceName: "google_sourcerepo_repository.my-repo",
44+
ImportState: true,
45+
ImportStateVerify: true,
46+
},
47+
},
48+
})
49+
}
50+
51+
func testAccSourcerepoRepository_sourcerepoRepositoryBasicExample(context map[string]interface{}) string {
52+
return Nprintf(`
53+
resource "google_sourcerepo_repository" "my-repo" {
54+
name = "my-repository-%{random_suffix}"
55+
}
56+
`, context)
57+
}
58+
59+
func testAccCheckSourcerepoRepositoryDestroy(s *terraform.State) error {
60+
for name, rs := range s.RootModule().Resources {
61+
if rs.Type != "google_sourcerepo_repository" {
62+
continue
63+
}
64+
if strings.HasPrefix(name, "data.") {
65+
continue
66+
}
67+
68+
config := testAccProvider.Meta().(*Config)
69+
70+
url, err := replaceVarsForTest(rs, "https://sourcerepo.googleapis.com/v1/projects/{{project}}/repos/{{name}}")
71+
if err != nil {
72+
return err
73+
}
74+
75+
_, err = sendRequest(config, "GET", url, nil)
76+
if err == nil {
77+
return fmt.Errorf("SourcerepoRepository still exists at %s", url)
78+
}
79+
}
80+
81+
return nil
82+
}

0 commit comments

Comments
 (0)