github.com/hashicorp/terraform-plugin-sdk@v1.17.2/README.md (about)

     1  # Terraform Plugin SDK
     2  
     3  This SDK enables building Terraform plugin which allows Terraform's users to manage existing and popular service providers as well as custom in-house solutions.
     4  
     5  Terraform itself is a tool for building, changing, and versioning infrastructure safely and efficiently. You can find more about Terraform on its [website](https://www.terraform.io) and [its GitHub repository](https://github.com/hashicorp/terraform).
     6  
     7  ## Terraform CLI Compatibility
     8  
     9  The v1 major release of the Terraform Plugin SDK supports Terraform 0.11 and later.
    10  
    11  It cannot, however, take advantage of all newer features and capabilities in releases of Terraform after 0.11.
    12  
    13  Testing using the reattach-based binary test driver, which is opt-in, requires the test runner to be using Terraform 0.12.26 or later. Only test runners, not users, have this requirement.
    14  
    15  ## Go Compatibility
    16  
    17  The Terraform Plugin SDK is built in Go, and uses the [support policy](https://golang.org/doc/devel/release.html#policy) of Go as its support policy. The two latest major releases of Go are supported by the SDK.
    18  
    19  ## Documentation
    20  
    21  See [Extending Terraform](https://www.terraform.io/docs/extend/index.html) section on the website.
    22  
    23  ## Scope (Providers VS Core)
    24  
    25  ### Terraform Core
    26  
    27   - acts as gRPC _client_
    28   - interacts with the user
    29   - parses (HCL/JSON) configuration
    30   - manages state as whole, asks **Provider(s)** to mutate provider-specific parts of state
    31   - handles backends & provisioners
    32   - handles inputs, outputs, modules, and functions
    33   - discovers **Provider(s)** and their versions per configuration
    34   - manages **Provider(s)** lifecycle (i.e. spins up & tears down provider process)
    35   - passes relevant parts of parsed (valid JSON/HCL) and interpolated configuration to **Provider(s)**
    36   - decides ordering of (Create, Read, Update, Delete) operations on resources and data sources
    37   - ...
    38  
    39  ### Terraform Provider (via this SDK)
    40  
    41   - acts as gRPC _server_
    42   - executes any domain-specific logic based on received parsed configuration
    43     - (Create, Read, Update, Delete, Import, Validate) a Resource
    44     - Read a Data Source
    45   - tests domain-specific logic via provided acceptance test framework
    46   - provides **Core** updated state of a resource or data source and/or appropriate feedback in the form of validation or other errors
    47  
    48  ## Migrating to SDK v1 from built-in SDK
    49  
    50  Migrating to the standalone SDK v1 is covered on the [Plugin SDK section](https://www.terraform.io/docs/extend/plugin-sdk.html) of the website.
    51  
    52  ## Versioning
    53  
    54  The Terraform Plugin SDK is a [Go module](https://github.com/golang/go/wiki/Modules) versioned using [semantic versioning](https://semver.org/). See [SUPPORT.md](https://github.com/hashicorp/terraform-plugin-sdk/blob/v1-maint/SUPPORT.md) for information on our support policies.
    55  
    56  ## Contributing
    57  
    58  See [`.github/CONTRIBUTING.md`](https://github.com/hashicorp/terraform-plugin-sdk/blob/master/.github/CONTRIBUTING.md)
    59  
    60  ## License
    61  
    62  [Mozilla Public License v2.0](https://github.com/hashicorp/terraform-plugin-sdk/blob/master/LICENSE)