Skip to content

Commit 4151101

Browse files
authored
Add Version Resource (#15114)
1 parent 89ed933 commit 4151101

File tree

3 files changed

+237
-0
lines changed

3 files changed

+237
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Copyright 2025 Google Inc.
2+
# Licensed under the Apache License, Version 2.0 (the "License");
3+
# you may not use this file except in compliance with the License.
4+
# You may obtain a copy of the License at
5+
#
6+
# http://www.apache.org/licenses/LICENSE-2.0
7+
#
8+
# Unless required by applicable law or agreed to in writing, software
9+
# distributed under the License is distributed on an "AS IS" BASIS,
10+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
# See the License for the specific language governing permissions and
12+
# limitations under the License.
13+
14+
---
15+
name: 'Version'
16+
description: |
17+
You can create multiple versions of your agent and publish them to separate environments.
18+
references:
19+
guides:
20+
'Official Documentation': 'https://cloud.google.com/dialogflow/docs/'
21+
api: 'https://docs.cloud.google.com/dialogflow/es/docs/reference/rest/v2/projects.agent.versions'
22+
docs:
23+
id_format: '{{parent}}/versions/{{name}}'
24+
base_url: '{{parent}}/versions'
25+
update_verb: 'PATCH'
26+
update_mask: true
27+
import_format:
28+
- '{{parent}}/versions/{{name}}'
29+
timeouts:
30+
insert_minutes: 40
31+
update_minutes: 40
32+
delete_minutes: 20
33+
custom_code:
34+
custom_import: 'templates/terraform/custom_import/dialogflowcx_version.go.tmpl'
35+
exclude_sweeper: true
36+
examples:
37+
- name: 'dialogflow_version_full'
38+
primary_resource_id: 'full_version'
39+
vars:
40+
project_id: 'my-proj'
41+
test_env_vars:
42+
org_id: 'ORG_ID'
43+
billing_acct: 'BILLING_ACCT'
44+
external_providers:
45+
- "time"
46+
parameters:
47+
properties:
48+
- name: 'parent'
49+
type: String
50+
description: |
51+
The Flow to create an Version for.
52+
Format: projects/<Project ID>/agent.
53+
url_param_only: true
54+
immutable: true
55+
- name: 'name'
56+
type: String
57+
description: |
58+
The unique identifier of this agent version.
59+
output: true
60+
custom_flatten: 'templates/terraform/custom_flatten/name_from_self_link.tmpl'
61+
- name: 'versionNumber'
62+
type: Integer
63+
description: |
64+
The sequential number of this version.
65+
output: true
66+
- name: 'description'
67+
type: String
68+
description: |
69+
The developer-provided description of this version.
70+
- name: 'status'
71+
type: Enum
72+
description: |
73+
The status of this version.
74+
output: true
75+
enum_values:
76+
- 'IN_PROGRESS'
77+
- 'READY'
78+
- 'FAILED'
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
resource "google_project" "project" {
2+
project_id = "{{index $.Vars "project_id"}}"
3+
name = "{{index $.Vars "project_id"}}"
4+
org_id = "{{index $.TestEnvVars "org_id"}}"
5+
billing_account = "{{index $.TestEnvVars "billing_acct"}}"
6+
deletion_policy = "DELETE"
7+
}
8+
resource "google_project_service" "dialogflow" {
9+
project = google_project.project.project_id
10+
service = "dialogflow.googleapis.com"
11+
}
12+
resource "time_sleep" "wait_enable_service_api" {
13+
depends_on = [
14+
google_project_service.dialogflow
15+
]
16+
create_duration = "30s"
17+
}
18+
resource "google_project_service_identity" "gcp_sa" {
19+
service = "dialogflow.googleapis.com"
20+
project = google_project.project.project_id
21+
depends_on = [time_sleep.wait_enable_service_api]
22+
}
23+
resource "google_dialogflow_agent" "basic_agent" {
24+
display_name = "example_agent"
25+
default_language_code = "en-us"
26+
time_zone = "America/New_York"
27+
project = google_project.project.project_id
28+
depends_on = [time_sleep.wait_enable_service_api]
29+
}
30+
resource "google_dialogflow_version" "full_version" {
31+
description = "Dialogflow Version"
32+
parent = "projects/${google_project.project.project_id}/agent"
33+
depends_on = [google_dialogflow_agent.basic_agent]
34+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package dialogflow_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-provider-google/google/acctest"
7+
"github.com/hashicorp/terraform-provider-google/google/envvar"
8+
9+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
10+
)
11+
12+
func TestAccDialogflowVersion_update(t *testing.T) {
13+
t.Parallel()
14+
15+
context := map[string]interface{}{
16+
"org_id": envvar.GetTestOrgFromEnv(t),
17+
"billing_account": envvar.GetTestBillingAccountFromEnv(t),
18+
"random_suffix": acctest.RandString(t, 10),
19+
}
20+
21+
acctest.VcrTest(t, resource.TestCase{
22+
PreCheck: func() { acctest.AccTestPreCheck(t) },
23+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
24+
Steps: []resource.TestStep{
25+
{
26+
Config: testAccDialogflowVersion_full1(context),
27+
},
28+
{
29+
ResourceName: "google_dialogflow_version.foobar",
30+
RefreshState: true,
31+
},
32+
{
33+
Config: testAccDialogflowVersion_full2(context),
34+
},
35+
{
36+
ResourceName: "google_dialogflow_version.foobar",
37+
RefreshState: true,
38+
},
39+
},
40+
})
41+
}
42+
43+
func testAccDialogflowVersion_full1(context map[string]interface{}) string {
44+
return acctest.Nprintf(`
45+
resource "google_project" "agent_project" {
46+
name = "tf-test-dialogflow-%{random_suffix}"
47+
project_id = "tf-test-dialogflow-%{random_suffix}"
48+
org_id = "%{org_id}"
49+
billing_account = "%{billing_account}"
50+
deletion_policy = "DELETE"
51+
}
52+
53+
resource "google_project_service" "agent_project" {
54+
project = google_project.agent_project.project_id
55+
service = "dialogflow.googleapis.com"
56+
disable_dependent_services = false
57+
}
58+
59+
resource "google_service_account" "dialogflow_service_account" {
60+
account_id = "tf-test-dialogflow-%{random_suffix}"
61+
}
62+
63+
resource "google_project_iam_member" "agent_create" {
64+
project = google_project_service.agent_project.project
65+
role = "roles/dialogflow.admin"
66+
member = "serviceAccount:${google_service_account.dialogflow_service_account.email}"
67+
}
68+
69+
resource "google_dialogflow_agent" "agent" {
70+
project = google_project.agent_project.project_id
71+
display_name = "tf-test-agent-%{random_suffix}"
72+
default_language_code = "en"
73+
time_zone = "America/New_York"
74+
depends_on = [google_project_iam_member.agent_create]
75+
}
76+
77+
resource "google_dialogflow_version" "foobar" {
78+
depends_on = [google_dialogflow_agent.agent]
79+
parent = "projects/${google_project.agent_project.project_id}/agent"
80+
description = "tf-test-description-%{random_suffix}"
81+
}
82+
`, context)
83+
}
84+
85+
func testAccDialogflowVersion_full2(context map[string]interface{}) string {
86+
return acctest.Nprintf(`
87+
resource "google_project" "agent_project" {
88+
name = "tf-test-dialogflow-%{random_suffix}"
89+
project_id = "tf-test-dialogflow-%{random_suffix}"
90+
org_id = "%{org_id}"
91+
billing_account = "%{billing_account}"
92+
deletion_policy = "DELETE"
93+
}
94+
95+
resource "google_project_service" "agent_project" {
96+
project = google_project.agent_project.project_id
97+
service = "dialogflow.googleapis.com"
98+
disable_dependent_services = false
99+
}
100+
101+
resource "google_service_account" "dialogflow_service_account" {
102+
account_id = "tf-test-dialogflow-%{random_suffix}"
103+
}
104+
105+
resource "google_project_iam_member" "agent_create" {
106+
project = google_project_service.agent_project.project
107+
role = "roles/dialogflow.admin"
108+
member = "serviceAccount:${google_service_account.dialogflow_service_account.email}"
109+
}
110+
111+
resource "google_dialogflow_agent" "agent" {
112+
project = google_project.agent_project.project_id
113+
display_name = "tf-test-agent-%{random_suffix}"
114+
default_language_code = "en"
115+
time_zone = "America/New_York"
116+
depends_on = [google_project_iam_member.agent_create]
117+
}
118+
119+
resource "google_dialogflow_version" "foobar" {
120+
depends_on = [google_dialogflow_agent.agent]
121+
parent = "projects/${google_project.agent_project.project_id}/agent"
122+
description = "tf-test-version-%{random_suffix}2"
123+
}
124+
`, context)
125+
}

0 commit comments

Comments
 (0)