Skip to content

Commit 59cdc4b

Browse files
dialogflow: support non-global endpoints for google_dialogflow_conversation_profile (#15037) (#10712)
[upstream:0d89fcf3da2d00c01a6564228af5a0b94c0ebaf2] Signed-off-by: Modular Magician <[email protected]>
1 parent 6947d93 commit 59cdc4b

File tree

4 files changed

+165
-3
lines changed

4 files changed

+165
-3
lines changed

.changelog/15037.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
dialogflow: added support for non-global endpoints for `google_dialogflow_conversation_profile`
3+
```

google-beta/services/dialogflow/resource_dialogflow_conversation_profile.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,18 @@ func resourceDialogflowConversationProfileCreate(d *schema.ResourceData, meta in
976976
}
977977

978978
headers := make(http.Header)
979+
location := d.Get("location").(string)
980+
universeDomain := config.UniverseDomain
981+
982+
if universeDomain != "" && universeDomain != "googleapis.com" {
983+
url = strings.Replace(url, "googleapis.com", universeDomain, 1)
984+
}
985+
986+
if strings.HasPrefix(url, "https://dialogflow") {
987+
if location != "" && location != "global" {
988+
url = strings.Replace(url, "https://dialogflow", fmt.Sprintf("https://%s-dialogflow", location), 1)
989+
}
990+
}
979991
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
980992
Config: config,
981993
Method: "POST",
@@ -1052,6 +1064,18 @@ func resourceDialogflowConversationProfileRead(d *schema.ResourceData, meta inte
10521064
}
10531065

10541066
headers := make(http.Header)
1067+
location := d.Get("location").(string)
1068+
universeDomain := config.UniverseDomain
1069+
1070+
if universeDomain != "" && universeDomain != "googleapis.com" {
1071+
url = strings.Replace(url, "googleapis.com", universeDomain, 1)
1072+
}
1073+
1074+
if strings.HasPrefix(url, "https://dialogflow") {
1075+
if location != "" && location != "global" {
1076+
url = strings.Replace(url, "https://dialogflow", fmt.Sprintf("https://%s-dialogflow", location), 1)
1077+
}
1078+
}
10551079
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
10561080
Config: config,
10571081
Method: "GET",
@@ -1259,6 +1283,18 @@ func resourceDialogflowConversationProfileUpdate(d *schema.ResourceData, meta in
12591283
if err != nil {
12601284
return err
12611285
}
1286+
location := d.Get("location").(string)
1287+
universeDomain := config.UniverseDomain
1288+
1289+
if universeDomain != "" && universeDomain != "googleapis.com" {
1290+
url = strings.Replace(url, "googleapis.com", universeDomain, 1)
1291+
}
1292+
1293+
if strings.HasPrefix(url, "https://dialogflow") {
1294+
if location != "" && location != "global" {
1295+
url = strings.Replace(url, "https://dialogflow", fmt.Sprintf("https://%s-dialogflow", location), 1)
1296+
}
1297+
}
12621298

12631299
// err == nil indicates that the billing_project value was found
12641300
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
@@ -1317,6 +1353,18 @@ func resourceDialogflowConversationProfileDelete(d *schema.ResourceData, meta in
13171353
}
13181354

13191355
headers := make(http.Header)
1356+
location := d.Get("location").(string)
1357+
universeDomain := config.UniverseDomain
1358+
1359+
if universeDomain != "" && universeDomain != "googleapis.com" {
1360+
url = strings.Replace(url, "googleapis.com", universeDomain, 1)
1361+
}
1362+
1363+
if strings.HasPrefix(url, "https://dialogflow") {
1364+
if location != "" && location != "global" {
1365+
url = strings.Replace(url, "https://dialogflow", fmt.Sprintf("https://%s-dialogflow", location), 1)
1366+
}
1367+
}
13201368

13211369
log.Printf("[DEBUG] Deleting ConversationProfile %q", d.Id())
13221370
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
@@ -1357,6 +1405,21 @@ func resourceDialogflowConversationProfileImport(d *schema.ResourceData, meta in
13571405
if err := d.Set("project", stringParts[1]); err != nil {
13581406
return nil, fmt.Errorf("Error setting project: %s", err)
13591407
}
1408+
1409+
var location string
1410+
for i, part := range stringParts {
1411+
if part == "locations" && i+1 < len(stringParts) {
1412+
location = stringParts[i+1]
1413+
break
1414+
}
1415+
}
1416+
if location == "" {
1417+
return nil, fmt.Errorf("Could not extract location from name: %s", d.Get("name"))
1418+
}
1419+
if err := d.Set("location", location); err != nil {
1420+
return nil, fmt.Errorf("Error setting location: %s", err)
1421+
}
1422+
13601423
return []*schema.ResourceData{d}, nil
13611424
}
13621425

google-beta/services/dialogflow/resource_dialogflow_conversation_profile_test.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,35 @@ func TestAccDialogflowConversationProfile_update(t *testing.T) {
7979
})
8080
}
8181

82+
func TestAccDialogflowConversationProfile_regional(t *testing.T) {
83+
t.Parallel()
84+
85+
context := map[string]interface{}{
86+
"org_id": envvar.GetTestOrgFromEnv(t),
87+
"billing_account": envvar.GetTestBillingAccountFromEnv(t),
88+
"random_suffix": acctest.RandString(t, 10),
89+
}
90+
91+
acctest.VcrTest(t, resource.TestCase{
92+
PreCheck: func() { acctest.AccTestPreCheck(t) },
93+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
94+
ExternalProviders: map[string]resource.ExternalProvider{
95+
"time": {},
96+
},
97+
Steps: []resource.TestStep{
98+
{
99+
Config: testAccDialogflowConversationProfile_dialogflowRegional(context),
100+
},
101+
{
102+
ResourceName: "google_dialogflow_conversation_profile.profile",
103+
ImportState: true,
104+
ImportStateVerify: true,
105+
ImportStateVerifyIgnore: []string{"location", "logging_config", "logging_config.0", "logging_config.0.enable_stackdriver_logging"},
106+
},
107+
},
108+
})
109+
}
110+
82111
func testAccDialogflowConversationProfile_dialogflowAgentFull1(context map[string]interface{}) string {
83112
return acctest.Nprintf(`
84113
resource "google_project" "agent_project" {
@@ -262,6 +291,7 @@ func testAccDialogflowConversationProfile_dialogflowAgentFull1(context map[strin
262291
}
263292
`, context)
264293
}
294+
265295
func testAccDialogflowConversationProfile_dialogflowAgentFull2(context map[string]interface{}) string {
266296
return acctest.Nprintf(`
267297
resource "google_project" "agent_project" {
@@ -425,3 +455,63 @@ func testAccDialogflowConversationProfile_dialogflowAgentFull2(context map[strin
425455
}
426456
`, context)
427457
}
458+
459+
func testAccDialogflowConversationProfile_dialogflowRegional(context map[string]interface{}) string {
460+
return acctest.Nprintf(`
461+
resource "google_project" "agent_project" {
462+
name = "tf-test-dialogflow-%{random_suffix}"
463+
project_id = "tf-test-dialogflow-%{random_suffix}"
464+
org_id = "%{org_id}"
465+
billing_account = "%{billing_account}"
466+
deletion_policy = "DELETE"
467+
}
468+
resource "google_project_service" "agent_project" {
469+
project = "${google_project.agent_project.id}"
470+
service = "dialogflow.googleapis.com"
471+
disable_dependent_services = false
472+
}
473+
474+
resource "google_service_account" "dialogflow_service_account" {
475+
account_id = "tf-test-dialogflow-%{random_suffix}"
476+
}
477+
478+
resource "google_project_iam_member" "agent_create" {
479+
project = "${google_project.agent_project.id}"
480+
role = "roles/dialogflow.admin"
481+
member = "serviceAccount:${google_service_account.dialogflow_service_account.email}"
482+
}
483+
484+
resource "google_dialogflow_agent" "agent" {
485+
display_name = "tf-test-agent-%{random_suffix}"
486+
default_language_code = "en-us"
487+
time_zone = "America/New_York"
488+
project = google_project.agent_project.name
489+
}
490+
491+
resource "google_pubsub_topic" "topic_diff" {
492+
name = "tf-test-topic-%{random_suffix}-diff"
493+
project = google_project.agent_project.project_id
494+
depends_on = [google_project.agent_project, time_sleep.wait_120_seconds]
495+
message_retention_duration = "8000s"
496+
}
497+
resource "google_dialogflow_cx_security_settings" "security_setting_diff" {
498+
display_name = "tf-test-setting-%{random_suffix}-diff"
499+
location = "us-central1"
500+
purge_data_types = []
501+
retention_window_days = 7
502+
project = google_project.agent_project.project_id
503+
depends_on = [time_sleep.wait_120_seconds]
504+
}
505+
resource "time_sleep" "wait_120_seconds" {
506+
create_duration = "120s"
507+
depends_on = [google_dialogflow_agent.agent]
508+
}
509+
resource "google_dialogflow_conversation_profile" "profile" {
510+
depends_on = [google_dialogflow_agent.agent, google_dialogflow_cx_security_settings.security_setting_diff, time_sleep.wait_120_seconds]
511+
project = "${google_project.agent_project.name}"
512+
display_name = "tf-test-conversation-profile-%{random_suffix}-new"
513+
location = "us-central1"
514+
language_code = "en-US"
515+
}
516+
`, context)
517+
}

google-beta/services/dialogflow/resource_dialogflow_encryption_spec.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,16 @@ func resourceDialogflowEncryptionSpecCreate(d *schema.ResourceData, meta interfa
129129

130130
headers := make(http.Header)
131131
location := d.Get("location").(string)
132+
universeDomain := config.UniverseDomain
132133

133-
// insert location into url for a different endpoint.
134-
if strings.HasPrefix(url, "https://dialogflow.googleapis.com/v2/") {
135-
url = strings.Replace(url, "https://dialogflow", fmt.Sprintf("https://%s-dialogflow", location), 1)
134+
if universeDomain != "" && universeDomain != "googleapis.com" {
135+
url = strings.Replace(url, "googleapis.com", universeDomain, 1)
136+
}
137+
138+
if strings.HasPrefix(url, "https://dialogflow") {
139+
if location != "" && location != "global" {
140+
url = strings.Replace(url, "https://dialogflow", fmt.Sprintf("https://%s-dialogflow", location), 1)
141+
}
136142
}
137143
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
138144
Config: config,

0 commit comments

Comments
 (0)