diff --git a/website/docs/version_2_upgrade.html.markdown b/website/docs/version_2_upgrade.html.markdown
index 3be1c894089..8548d582fb6 100644
--- a/website/docs/version_2_upgrade.html.markdown
+++ b/website/docs/version_2_upgrade.html.markdown
@@ -20,11 +20,18 @@ Upgrade topics:
- [`google-beta` provider](#google-beta-provider)
- [Open in Cloud Shell](#open-in-cloud-shell)
- [Resource: `google_bigtable_instance`](#resource-google_bigtable_instance)
+- [Resource: `google_cloudfunctions_function`](#resource-google_cloudfunctions_function)
+- [Resource: `google_compute_disk`](#resource-google_compute_disk)
+- [Resource: `google_compute_image`](#resource-google_compute_image)
- [Resource: `google_compute_instance`](#resource-google_compute_instance)
- [Resource: `google_compute_instance_from_template`](#resource-google_compute_instance_from_template)
- [Resource: `google_compute_project_metadata`](#resource-google_compute_project_metadata)
+- [Resource: `google_compute_target_pool`](#resource-google_compute_target_pool)
- [Resource: `google_compute_url_map`](#resource-google_compute_url_map)
+- [Resource: `google_container_node_pool`](#resource-google_container_node_pool)
+- [Resource: `google_dataproc_cluster`](#resource-google_dataproc_cluster)
- [Resource: `google_project_iam_policy`](#resource-google_project_iam_policy)
+- [Resource: `google_service_account`](#resource-google_service_account)
- [Resource: `google_sql_database_instance`](#resource-google_sql_database_instance)
- [Resource: `google_storage_default_object_acl`](#resource-google_storage_default_object_acl)
- [Resource: `google_storage_object_acl`](#resource-google_storage_object_acl)
@@ -152,13 +159,94 @@ resource "google_bigtable_instance" "instance" {
`cluster.zone` is now required, even if the provider block has a zone set.
+## Resource: `google_cloudfunctions_function`
+
+### `trigger_bucket`, `trigger_topic`, and `retry_on_failure` have been removed
+
+Use the `event_trigger` block instead.
+
+Example updated configuration:
+
+```hcl
+resource "google_cloudfunctions_function" "function" {
+ name = "example-function"
+ available_memory_mb = 128
+ source_archive_bucket = "${google_storage_bucket.bucket.name}"
+ source_archive_object = "${google_storage_bucket_object.archive.name}"
+ timeout = 61
+ entry_point = "helloGCS"
+
+ event_trigger {
+ event_type = "providers/cloud.storage/eventTypes/object.change"
+ resource = "${google_storage_bucket.bucket.name}"
+ failure_policy {
+ retry = true
+ }
+ }
+}
+
+resource "google_storage_bucket" "bucket" {
+ name = "example-bucket"
+}
+
+resource "google_storage_bucket_object" "archive" {
+ name = "index.zip"
+ bucket = "${google_storage_bucket.bucket.name}"
+ source = "path/to/source.zip"
+}
+```
+
+See the documentation at
+[`google_cloudfunctions_function`](https://www.terraform.io/docs/providers/google/r/cloudfunctions_function.html)
+for more details.
+
+## Resource: `google_compute_disk`
+
+### `disk_encryption_key_raw` and `disk_encryption_key_sha256` have been removed.
+
+Use the `disk_encryption_key` block instead:
+
+```hcl
+data "google_compute_image" "my_image" {
+ family = "debian-9"
+ project = "debian-cloud"
+}
+
+resource "google_compute_disk" "foobar" {
+ name = "example-disk"
+ image = "${data.google_compute_image.my_image.self_link}"
+ size = 50
+ type = "pd-ssd"
+ zone = "us-central1-a"
+ disk_encryption_key {
+ raw_key = "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
+ }
+}
+```
+
+## Resource: `google_compute_image`
+
+### `create_timeout` has been removed
+
+Use the standard [timeouts](https://www.terraform.io/docs/configuration/resources.html#timeouts)
+block instead.
+
## Resource: `google_compute_instance`
+### `create_timeout` has been removed
+
+Use the standard [timeouts](https://www.terraform.io/docs/configuration/resources.html#timeouts)
+block instead.
+
### `metadata` is now authoritative
Terraform will remove values not explicitly set in this field. Any `metadata` values
that were added outside of Terraform should be added to the config.
+### `network_interface.*.address` has been removed
+
+Use `network_interface.*.network_ip` instead.
+
## Resource: `google_compute_instance_from_template`
### `metadata` is now authoritative
@@ -173,6 +261,14 @@ that were added outside of Terraform should be added to the config.
Terraform will remove values not explicitly set in this field. Any `metadata` values
that were added outside of Terraform should be added to the config.
+## Resource: `google_compute_target_pool`
+
+### `instances` is now a Set
+
+The order of entries in `instances` no longer matters. Any configurations that
+interpolate based on an item at a specific index will need to be updated as items
+may have been reordered.
+
## Resource: `google_compute_url_map`
### `host_rule`, `path_matcher`, and `test` are now authoritative
@@ -180,6 +276,77 @@ that were added outside of Terraform should be added to the config.
Terraform will remove values not explicitly set in these fields. Any `host_rule`, `path_matcher`, or `test`
values that were added outside of Terraform should be added to the config.
+## Resource: `google_container_node_pool`
+
+### `name_prefix` has been removed
+
+Use the `name` field along with the `random` provider instead.
+
+Sample config:
+
+```hcl
+variable "machine_type" {}
+
+resource "google_container_cluster" "example" {
+ name = "example-cluster"
+ zone = "us-central1-a"
+ initial_node_count = 1
+
+ remove_default_node_pool = true
+}
+
+resource "random_id" "np" {
+ byte_length = 11
+ prefix = "example-np-"
+ keepers = {
+ machine_type = "${var.machine_type}"
+ }
+}
+
+resource "google_container_node_pool" "example" {
+ name = "${random_id.np.dec}"
+ zone = "us-central1-a"
+ cluster = "${google_container_cluster.example.name}"
+ node_count = 1
+
+ node_config {
+ machine_type = "${var.machine_type}"
+ }
+
+ lifecycle {
+ create_before_destroy = true
+ }
+}
+```
+
+The `keepers` parameter in `random_id` takes a map of values that cause the random id to be regenerated.
+By tying it to attributes that might change, it makes sure the random id changes too.
+
+To make sure the node pool keeps its old name, figure out what the suffix was by running `terraform show`:
+
+```
+google_container_node_pool.example:
+ ...
+ name = example-np-20180329213336514500000001
+```
+
+Determine the base64 encoding of that value by running [this script](https://play.golang.org/p/9KrkDoxRTOw).
+Then, import that suffix as the value of `random_id`:
+
+```
+terraform import random_id.np example-np-,ELFZ1rbrAThoeQE
+```
+
+For more details, see [terraform-provider-google#1054](https://github.com/terraform-providers/terraform-provider-google/issues/1054).
+
+## Resource: `google_dataproc_cluster`
+
+### `cluster_config.0.delete_autogen_bucket` has been removed
+
+Autogenerated buckets are shared by all clusters in the same region, so deleting
+this bucket could adversely harm other dataproc clusters. If you need a bucket
+that can be deleted, please create a new one and set the `staging_bucket` field.
+
## Resource: `google_project_iam_policy`
### `policy_data` is now authoritative
@@ -195,6 +362,13 @@ policy values that exist on the project.
This resource is very dangerous. Consider using `google_project_iam_binding` or
`google_project_iam_member` instead.
+## Resource: `google_service_account`
+
+### `policy_data` has been removed
+
+Use one of the other
+[service account IAM resources](https://www.terraform.io/docs/providers/google/r/google_service_account_iam.html) instead.
+
## Resource: `google_sql_database_instance`
### `settings` is now authoritative