forked from GoogleCloudPlatform/magic-modules
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds resource BitbucketServerConfig to CloudBuild. (GoogleCloudPlatfo…
…rm#7083) * Adds resource BitbucketServerConfig to CloudBuild. * Adds example bitbucket config with peered_network and ssl_ca fields being used * Minor code refactor. Removing unnecessary code for Cloud Build BitbucketServerConfig * Update doc description mmv1/products/cloudbuild/api.yaml Co-authored-by: Shuya Ma <[email protected]> * Update doc description mmv1/products/cloudbuild/api.yaml Co-authored-by: Shuya Ma <[email protected]> --------- Co-authored-by: Mario Machado <[email protected]> Co-authored-by: Shuya Ma <[email protected]>
- Loading branch information
1 parent
6194061
commit aacacd3
Showing
9 changed files
with
362 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 3 additions & 0 deletions
3
mmv1/templates/terraform/encoders/cloudbuild_bitbucketserver_config.go.erb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
// connectedRepositories is needed for batchCreate on the config after creation. | ||
delete(obj, "connectedRepositories") | ||
return obj, nil |
12 changes: 12 additions & 0 deletions
12
mmv1/templates/terraform/examples/cloudbuild_bitbucket_server_config.tf.erb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
resource "google_cloudbuild_bitbucket_server_config" "<%= ctx[:primary_resource_id] %>" { | ||
config_id = "mybbsconfig" | ||
location = "us-central1" | ||
host_uri = "https://bbs.com" | ||
secrets { | ||
admin_access_token_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
read_access_token_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
webhook_secret_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
} | ||
username = "test" | ||
api_key = "<api-key>" | ||
} |
42 changes: 42 additions & 0 deletions
42
mmv1/templates/terraform/examples/cloudbuild_bitbucket_server_config_peered_network.tf.erb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
data "google_project" "project" {} | ||
|
||
resource "google_project_service" "servicenetworking" { | ||
service = "servicenetworking.googleapis.com" | ||
disable_on_destroy = false | ||
} | ||
|
||
data "google_compute_network" "vpc_network" { | ||
name = "<%= ctx[:vars]['network_name'] %>" | ||
depends_on = [google_project_service.servicenetworking] | ||
} | ||
|
||
resource "google_compute_global_address" "private_ip_alloc" { | ||
name = "private-ip-alloc" | ||
purpose = "VPC_PEERING" | ||
address_type = "INTERNAL" | ||
prefix_length = 16 | ||
network = data.google_compute_network.vpc_network.id | ||
} | ||
|
||
resource "google_service_networking_connection" "default" { | ||
network = data.google_compute_network.vpc_network.id | ||
service = "servicenetworking.googleapis.com" | ||
reserved_peering_ranges = [google_compute_global_address.private_ip_alloc.name] | ||
depends_on = [google_project_service.servicenetworking] | ||
} | ||
|
||
resource "google_cloudbuild_bitbucket_server_config" "<%= ctx[:primary_resource_id] %>" { | ||
config_id = "mybbsconfig" | ||
location = "us-central1" | ||
host_uri = "https://bbs.com" | ||
secrets { | ||
admin_access_token_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
read_access_token_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
webhook_secret_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
} | ||
username = "test" | ||
api_key = "<api-key>" | ||
peered_network = replace(data.google_compute_network.vpc_network.id, data.google_project.project.name, data.google_project.project.number) | ||
ssl_ca = "-----BEGIN CERTIFICATE-----\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n-----END CERTIFICATE-----\n" | ||
depends_on = [google_service_networking_connection.default] | ||
} |
21 changes: 21 additions & 0 deletions
21
mmv1/templates/terraform/examples/cloudbuild_bitbucket_server_config_repositories.tf.erb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
resource "google_cloudbuild_bitbucket_server_config" "<%= ctx[:primary_resource_id] %>" { | ||
config_id = "mybbsconfig" | ||
location = "us-central1" | ||
host_uri = "https://bbs.com" | ||
secrets { | ||
admin_access_token_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
read_access_token_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
webhook_secret_version_name = "projects/myProject/secrets/mybbspat/versions/1" | ||
} | ||
username = "test" | ||
api_key = "<api-key>" | ||
|
||
connected_repositories { | ||
project_key = "DEV" | ||
repo_slug = "repo1" | ||
} | ||
connected_repositories { | ||
project_key = "PROD" | ||
repo_slug = "repo1" | ||
} | ||
} |
42 changes: 42 additions & 0 deletions
42
mmv1/templates/terraform/post_create/cloudbuild_bitbucketserver_config.go.erb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
log.Printf("[DEBUG] Finished creating BitbucketServerConfig without connected repos: %q: %#v", d.Id(), res) | ||
|
||
if v, ok := d.GetOkExists("connected_repositories"); !isEmptyValue(reflect.ValueOf(connectedRepositoriesProp)) && (ok || !reflect.DeepEqual(v, connectedRepositoriesProp)) { | ||
connectedReposPropArray, ok := connectedRepositoriesProp.([]interface{}) | ||
if !ok { | ||
return fmt.Errorf("Error reading connected_repositories") | ||
} | ||
|
||
requests := make([]interface{}, len(connectedReposPropArray)) | ||
for i := 0; i < len(connectedReposPropArray); i++ { | ||
connectedRepo := make(map[string]interface{}) | ||
connectedRepo["parent"] = id | ||
connectedRepo["repo"] = connectedReposPropArray[i] | ||
|
||
connectedRepoRequest := make(map[string]interface{}) | ||
connectedRepoRequest["parent"] = id | ||
connectedRepoRequest["bitbucketServerConnectedRepository"] = connectedRepo | ||
|
||
requests[i] = connectedRepoRequest | ||
} | ||
obj = make(map[string]interface{}) | ||
obj["requests"] = requests | ||
|
||
url, err = replaceVars(d, config, "{{CloudBuildBasePath}}projects/{{project}}/locations/{{location}}/bitbucketServerConfigs/{{config_id}}/connectedRepositories:batchCreate") | ||
if err != nil { | ||
return err | ||
} | ||
|
||
res, err = sendRequestWithTimeout(config, "POST", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutCreate)) | ||
if err != nil { | ||
return fmt.Errorf("Error creating connected_repositories: %s", err) | ||
} | ||
|
||
err = cloudBuildOperationWaitTime( | ||
config, res, project, "Creating connected_repositories on BitbucketServerConfig", userAgent, | ||
d.Timeout(schema.TimeoutCreate)) | ||
if err != nil { | ||
return fmt.Errorf("Error waiting to create connected_repositories: %s", err) | ||
} | ||
} else { | ||
log.Printf("[DEBUG] No connected repositories found to create: %#v", connectedRepositoriesProp) | ||
} |
70 changes: 70 additions & 0 deletions
70
mmv1/templates/terraform/post_update/cloudbuild_bitbucketserver_config.go.erb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
if d.HasChange("connected_repositories") { | ||
o, n := d.GetChange("connected_repositories") | ||
oReposSet, ok := o.(*schema.Set) | ||
if !ok { | ||
return fmt.Errorf("Error reading old connected repositories") | ||
} | ||
nReposSet, ok := n.(*schema.Set) | ||
if !ok { | ||
return fmt.Errorf("Error reading new connected repositories") | ||
} | ||
|
||
removeRepos := oReposSet.Difference(nReposSet).List() | ||
createRepos := nReposSet.Difference(oReposSet).List() | ||
|
||
url, err = replaceVars(d, config, "{{CloudBuildBasePath}}projects/{{project}}/locations/{{location}}/bitbucketServerConfigs/{{config_id}}:removeBitbucketServerConnectedRepository") | ||
if err != nil { | ||
return err | ||
} | ||
|
||
// send remove repo requests. | ||
for _, repo := range removeRepos { | ||
obj := make(map[string]interface{}) | ||
obj["connectedRepository"] = repo | ||
res, err = sendRequestWithTimeout(config, "POST", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutCreate)) | ||
if err != nil { | ||
return fmt.Errorf("Error removing connected_repositories: %s", err) | ||
} | ||
} | ||
|
||
// if repos to create, prepare and send batchCreate request | ||
if len(createRepos) > 0 { | ||
parent, err := replaceVars(d, config, "projects/{{project}}/locations/{{location}}/bitbucketServerConfigs/{{config_id}}") | ||
if err != nil { | ||
return fmt.Errorf("Error constructing id: %s", err) | ||
} | ||
var requests []interface{} | ||
for _, repo := range createRepos { | ||
connectedRepo := make(map[string]interface{}) | ||
connectedRepo["parent"] = parent | ||
connectedRepo["repo"] = repo | ||
|
||
connectedRepoRequest := make(map[string]interface{}) | ||
connectedRepoRequest["parent"] = parent | ||
connectedRepoRequest["bitbucketServerConnectedRepository"] = connectedRepo | ||
|
||
requests = append(requests, connectedRepoRequest) | ||
} | ||
obj = make(map[string]interface{}) | ||
obj["requests"] = requests | ||
|
||
url, err = replaceVars(d, config, "{{CloudBuildBasePath}}projects/{{project}}/locations/{{location}}/bitbucketServerConfigs/{{config_id}}/connectedRepositories:batchCreate") | ||
if err != nil { | ||
return err | ||
} | ||
|
||
res, err = sendRequestWithTimeout(config, "POST", billingProject, url, userAgent, obj, d.Timeout(schema.TimeoutCreate)) | ||
if err != nil { | ||
return fmt.Errorf("Error creating connected_repositories: %s", err) | ||
} | ||
|
||
err = cloudBuildOperationWaitTime( | ||
config, res, project, "Updating connected_repositories on BitbucketServerConfig", userAgent, | ||
d.Timeout(schema.TimeoutUpdate)) | ||
if err != nil { | ||
return fmt.Errorf("Error waiting to create connected_repositories: %s", err) | ||
} | ||
} | ||
} else { | ||
log.Printf("[DEBUG] connected_repositories have no changes") | ||
} |
16 changes: 16 additions & 0 deletions
16
mmv1/templates/terraform/pre_update/cloudbuild_bitbucketserver_config.go.erb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// remove connectedRepositories from updateMask | ||
for i, field := range updateMask { | ||
if field == "connectedRepositories" { | ||
updateMask = append(updateMask[:i], updateMask[i+1:]...) | ||
break | ||
} | ||
} | ||
// reconstruct url | ||
url, err = replaceVars(d, config, "{{CloudBuildBasePath}}projects/{{project}}/locations/{{location}}/bitbucketServerConfigs/{{config_id}}") | ||
if err != nil { | ||
return err | ||
} | ||
url, err = addQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")}) | ||
if err != nil { | ||
return err | ||
} |