From abf561e884d5cada505cb9e09beaebbd0e564245 Mon Sep 17 00:00:00 2001 From: zhihaos Date: Wed, 12 Nov 2025 12:59:01 -0800 Subject: [PATCH 1/2] Set update_mask to false to overwrite the instructions; --- mmv1/products/dialogflowcx/Playbook.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mmv1/products/dialogflowcx/Playbook.yaml b/mmv1/products/dialogflowcx/Playbook.yaml index 6912742b2203..f666afa3d067 100644 --- a/mmv1/products/dialogflowcx/Playbook.yaml +++ b/mmv1/products/dialogflowcx/Playbook.yaml @@ -26,7 +26,7 @@ self_link: '{{parent}}/playbooks/{{name}}' create_url: '{{parent}}/playbooks' update_verb: 'PATCH' -update_mask: true +update_mask: false custom_code: pre_create: 'templates/terraform/pre_create/dialogflow_set_location.go.tmpl' From 588ba2add464ccb73d8b1fe1ee7f6716acfb9729 Mon Sep 17 00:00:00 2001 From: Zhihao S Date: Wed, 12 Nov 2025 16:52:14 -0500 Subject: [PATCH 2/2] Use granular update mask custom code; --- mmv1/products/dialogflowcx/Playbook.yaml | 4 +- ...owcx_playbook_granular_update_mask.go.tmpl | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 mmv1/templates/terraform/pre_update/dialogflowcx_playbook_granular_update_mask.go.tmpl diff --git a/mmv1/products/dialogflowcx/Playbook.yaml b/mmv1/products/dialogflowcx/Playbook.yaml index f666afa3d067..32ecd3e53690 100644 --- a/mmv1/products/dialogflowcx/Playbook.yaml +++ b/mmv1/products/dialogflowcx/Playbook.yaml @@ -26,12 +26,12 @@ self_link: '{{parent}}/playbooks/{{name}}' create_url: '{{parent}}/playbooks' update_verb: 'PATCH' -update_mask: false +update_mask: true custom_code: pre_create: 'templates/terraform/pre_create/dialogflow_set_location.go.tmpl' pre_read: 'templates/terraform/pre_create/dialogflow_set_location.go.tmpl' - pre_update: 'templates/terraform/pre_create/dialogflow_set_location.go.tmpl' + pre_update: 'templates/terraform/pre_update/dialogflowcx_playbook_granular_update_mask.go.tmpl' pre_delete: 'templates/terraform/pre_create/dialogflow_set_location.go.tmpl' custom_import: 'templates/terraform/custom_import/dialogflowcx_playbook.go.tmpl' diff --git a/mmv1/templates/terraform/pre_update/dialogflowcx_playbook_granular_update_mask.go.tmpl b/mmv1/templates/terraform/pre_update/dialogflowcx_playbook_granular_update_mask.go.tmpl new file mode 100644 index 000000000000..7720ad943b63 --- /dev/null +++ b/mmv1/templates/terraform/pre_update/dialogflowcx_playbook_granular_update_mask.go.tmpl @@ -0,0 +1,38 @@ +// extract location from the parent +location := "" + +if parts := regexp.MustCompile(`locations\/([^\/]*)\/`).FindStringSubmatch(d.Get("parent").(string)); parts != nil { + location = parts[1] +} else { + return fmt.Errorf( + "Saw %s when the parent is expected to contains location %s", + d.Get("parent"), + "projects/{{"{{"}}project{{"}}"}}/locations/{{"{{"}}location{{"}}"}}/...", + ) +} + +// only insert location into url if the base_url in products/dialogflowcx/product.yaml is used +if strings.HasPrefix(url, "https://-dialogflow.googleapis.com/v3/") { + url = strings.Replace(url, "-dialogflow", fmt.Sprintf("%s-dialogflow", location), 1) +} + +// The generated code sets the wrong masks for the following fields. +newUpdateMask := []string{} +if d.HasChange("instruction.0.steps") { + newUpdateMask = append(newUpdateMask, "instruction.steps") +} +if d.HasChange("instruction.0.guidelines") { + newUpdateMask = append(newUpdateMask, "instruction.guidelines") +} +// Pull out any other set fields from the generated mask. +for _, mask := range updateMask { + if mask == "instruction" { + continue + } + newUpdateMask = append(newUpdateMask, mask) +} +// Overwrite the previously set mask. +url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(newUpdateMask, ",")}) +if err != nil { + return err +}