diff --git a/website/source/guides/index.html.md b/website/source/guides/index.html.md
index 3830177b0..8eb707384 100644
--- a/website/source/guides/index.html.md
+++ b/website/source/guides/index.html.md
@@ -10,7 +10,8 @@ description: |-
# Terraform Guides
-Welcome to the Terraform guides! If you are just getting started with Terraform,
-please start with the [Terraform introduction](/intro/index.html) instead and
-then continue on to the guides. The guides provide examples for common Terraform
-workflows and actions for both beginner and advanced Terraform users.
+Welcome to the Terraform guides section! If you are just getting started with
+Terraform, please start with the [Terraform introduction](/intro/index.html)
+instead and then continue on to the guides. The guides provide examples for
+common Terraform workflows and actions for both beginner and advanced Terraform
+users.
diff --git a/website/source/guides/writing-custom-terraform-providers.html.md b/website/source/guides/writing-custom-terraform-providers.html.md
index 696e81a28..47ce4d078 100644
--- a/website/source/guides/writing-custom-terraform-providers.html.md
+++ b/website/source/guides/writing-custom-terraform-providers.html.md
@@ -30,7 +30,7 @@ as:
## Local Setup
-Terraform supports a plugin model, and all providers and actually plugins.
+Terraform supports a plugin model, and all providers are actually plugins.
Plugins are distributed as Go binaries. Although technically possible to write a
plugin in another language, almost all Terraform plugins are written in
[Go](https://golang.org). For more information on installing and configuring Go,
@@ -123,7 +123,14 @@ Please execute the program that consumes these plugins, which will
load any plugins automatically
```
-This is the basic project structure and scaffolding for a Terraform plugin.
+This is the basic project structure and scaffolding for a Terraform plugin. To
+recap, the file structure is:
+
+```text
+.
+├── main.go
+└── provider.go
+```
## Defining Resources
@@ -162,8 +169,8 @@ func resourceServer() *schema.Resource {
```
-This uses the [`schema.Resource`
-type](https://godoc.org/github.com/hashicorp/terraform/helper/schema#Resource).
+This uses the
+[`schema.Resource` type](https://godoc.org/github.com/hashicorp/terraform/helper/schema#Resource).
This structure defines the data schema and CRUD operations for the resource.
Defining these properties are the only required thing to create a resource.
@@ -171,11 +178,11 @@ The schema above defines one element, `"address"`, which is a required string.
Terraform's schema automatically enforces validation and type casting.
Next there are four "fields" defined - `Create`, `Read`, `Update`, and `Delete`.
-These four functions are required for a resource to be functional. There are
-other functions, but these are the only required ones. Terraform itself handles
-which function to call and with what data. Based on the schema and current state
-of the resource, Terraform can determine whether it needs to create a new
-resource, update an existing one, or destroy.
+The `Create`, `Read`, and `Delete` functions are required for a resource to be
+functional. There are other functions, but these are the only required ones.
+Terraform itself handles which function to call and with what data. Based on the
+schema and current state of the resource, Terraform can determine whether it
+needs to create a new resource, update an existing one, or destroy.
Each of the four struct fields point to a function. While it is technically
possible to inline all functions in the resource schema, best practice dictates
@@ -225,6 +232,16 @@ Please execute the program that consumes these plugins, which will
load any plugins automatically
```
+The layout now looks like this:
+
+```text
+.
+├── main.go
+├── provider.go
+├── resource_server.go
+└── terraform-provider-example
+```
+
## Invoking the Provider
Previous sections showed running the provider directly via the shell, which
@@ -484,6 +501,8 @@ the resource was deleted successfully.
```go
func resourceServerDelete(d *schema.ResourceData, m interface{}) error {
+ // d.SetId("") is automatically called assuming delete returns no errors, but
+ // it is added here for explicitness.
d.SetId("")
return nil
}
@@ -495,7 +514,7 @@ destroyed, this should not return an error. This allows Terraform users to
manually delete resources without breaking Terraform.
```shell
-$ go build -o terraform-plugin-example
+$ go build -o terraform-provider-example
```
Run `terraform destroy` to destroy the resource.