terraform-provider-gitea/vendor/github.com/hashicorp/terraform-json/config.go
dependabot[bot] 910ccdb092
Bump github.com/hashicorp/terraform-plugin-sdk/v2 from 2.26.1 to 2.27.0
Bumps [github.com/hashicorp/terraform-plugin-sdk/v2](https://github.com/hashicorp/terraform-plugin-sdk) from 2.26.1 to 2.27.0.
- [Release notes](https://github.com/hashicorp/terraform-plugin-sdk/releases)
- [Changelog](https://github.com/hashicorp/terraform-plugin-sdk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/terraform-plugin-sdk/compare/v2.26.1...v2.27.0)

---
updated-dependencies:
- dependency-name: github.com/hashicorp/terraform-plugin-sdk/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-03 20:21:30 +00:00

198 lines
6.4 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package tfjson
import (
"encoding/json"
"errors"
)
// Config represents the complete configuration source.
type Config struct {
// A map of all provider instances across all modules in the
// configuration.
//
// The index for this field is opaque and should not be parsed. Use
// the individual fields in ProviderConfig to discern actual data
// about the provider such as name, alias, or defined module.
ProviderConfigs map[string]*ProviderConfig `json:"provider_config,omitempty"`
// The root module in the configuration. Any child modules descend
// off of here.
RootModule *ConfigModule `json:"root_module,omitempty"`
}
// Validate checks to ensure that the config is present.
func (c *Config) Validate() error {
if c == nil {
return errors.New("config is nil")
}
return nil
}
func (c *Config) UnmarshalJSON(b []byte) error {
type rawConfig Config
var config rawConfig
err := json.Unmarshal(b, &config)
if err != nil {
return err
}
*c = *(*Config)(&config)
return c.Validate()
}
// ProviderConfig describes a provider configuration instance.
type ProviderConfig struct {
// The name of the provider, ie: "aws".
Name string `json:"name,omitempty"`
// The fully-specified name of the provider, ie: "registry.terraform.io/hashicorp/aws".
FullName string `json:"full_name,omitempty"`
// The alias of the provider, ie: "us-east-1".
Alias string `json:"alias,omitempty"`
// The address of the module the provider is declared in.
ModuleAddress string `json:"module_address,omitempty"`
// Any non-special configuration values in the provider, indexed by
// key.
Expressions map[string]*Expression `json:"expressions,omitempty"`
// The defined version constraint for this provider.
VersionConstraint string `json:"version_constraint,omitempty"`
}
// ConfigModule describes a module in Terraform configuration.
type ConfigModule struct {
// The outputs defined in the module.
Outputs map[string]*ConfigOutput `json:"outputs,omitempty"`
// The resources defined in the module.
Resources []*ConfigResource `json:"resources,omitempty"`
// Any "module" stanzas within the specific module.
ModuleCalls map[string]*ModuleCall `json:"module_calls,omitempty"`
// The variables defined in the module.
Variables map[string]*ConfigVariable `json:"variables,omitempty"`
}
// ConfigOutput defines an output as defined in configuration.
type ConfigOutput struct {
// Indicates whether or not the output was marked as sensitive.
Sensitive bool `json:"sensitive,omitempty"`
// The defined value of the output.
Expression *Expression `json:"expression,omitempty"`
// The defined description of this output.
Description string `json:"description,omitempty"`
// The defined dependencies tied to this output.
DependsOn []string `json:"depends_on,omitempty"`
}
// ConfigResource is the configuration representation of a resource.
type ConfigResource struct {
// The address of the resource relative to the module that it is
// in.
Address string `json:"address,omitempty"`
// The resource mode.
Mode ResourceMode `json:"mode,omitempty"`
// The type of resource, ie: "null_resource" in
// "null_resource.foo".
Type string `json:"type,omitempty"`
// The name of the resource, ie: "foo" in "null_resource.foo".
Name string `json:"name,omitempty"`
// An opaque key representing the provider configuration this
// module uses. Note that there are more than one circumstance that
// this key will not match what is found in the ProviderConfigs
// field in the root Config structure, and as such should not be
// relied on for that purpose.
ProviderConfigKey string `json:"provider_config_key,omitempty"`
// The list of provisioner defined for this configuration. This
// will be nil if no providers are defined.
Provisioners []*ConfigProvisioner `json:"provisioners,omitempty"`
// Any non-special configuration values in the resource, indexed by
// key.
Expressions map[string]*Expression `json:"expressions,omitempty"`
// The resource's configuration schema version. With access to the
// specific Terraform provider for this resource, this can be used
// to determine the correct schema for the configuration data
// supplied in Expressions.
SchemaVersion uint64 `json:"schema_version"`
// The expression data for the "count" value in the resource.
CountExpression *Expression `json:"count_expression,omitempty"`
// The expression data for the "for_each" value in the resource.
ForEachExpression *Expression `json:"for_each_expression,omitempty"`
// The contents of the "depends_on" config directive, which
// declares explicit dependencies for this resource.
DependsOn []string `json:"depends_on,omitempty"`
}
// ConfigVariable defines a variable as defined in configuration.
type ConfigVariable struct {
// The defined default value of the variable.
Default interface{} `json:"default,omitempty"`
// The defined text description of the variable.
Description string `json:"description,omitempty"`
// Whether the variable is marked as sensitive
Sensitive bool `json:"sensitive,omitempty"`
}
// ConfigProvisioner describes a provisioner declared in a resource
// configuration.
type ConfigProvisioner struct {
// The type of the provisioner, ie: "local-exec".
Type string `json:"type,omitempty"`
// Any non-special configuration values in the provisioner, indexed by
// key.
Expressions map[string]*Expression `json:"expressions,omitempty"`
}
// ModuleCall describes a declared "module" within a configuration.
// It also contains the data for the module itself.
type ModuleCall struct {
// The contents of the "source" field.
Source string `json:"source,omitempty"`
// Any non-special configuration values in the module, indexed by
// key.
Expressions map[string]*Expression `json:"expressions,omitempty"`
// The expression data for the "count" value in the module.
CountExpression *Expression `json:"count_expression,omitempty"`
// The expression data for the "for_each" value in the module.
ForEachExpression *Expression `json:"for_each_expression,omitempty"`
// The configuration data for the module itself.
Module *ConfigModule `json:"module,omitempty"`
// The version constraint for modules that come from the registry.
VersionConstraint string `json:"version_constraint,omitempty"`
// The explicit resource dependencies for the "depends_on" value.
// As it must be a slice of references, Expression is not used.
DependsOn []string `json:"depends_on,omitempty"`
}