]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/hashicorp/terraform/terraform/node_resource_validate.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / node_resource_validate.go
CommitLineData
bae9f6d2
JC
1package terraform
2
3import (
107c1cdb
ND
4 "github.com/hashicorp/terraform/configs"
5 "github.com/hashicorp/terraform/configs/configschema"
6 "github.com/hashicorp/terraform/providers"
7 "github.com/hashicorp/terraform/provisioners"
8 "github.com/zclconf/go-cty/cty"
bae9f6d2
JC
9)
10
11// NodeValidatableResource represents a resource that is used for validation
12// only.
13type NodeValidatableResource struct {
bae9f6d2
JC
14 *NodeAbstractResource
15}
16
107c1cdb
ND
17var (
18 _ GraphNodeSubPath = (*NodeValidatableResource)(nil)
19 _ GraphNodeEvalable = (*NodeValidatableResource)(nil)
20 _ GraphNodeReferenceable = (*NodeValidatableResource)(nil)
21 _ GraphNodeReferencer = (*NodeValidatableResource)(nil)
22 _ GraphNodeResource = (*NodeValidatableResource)(nil)
23 _ GraphNodeAttachResourceConfig = (*NodeValidatableResource)(nil)
24)
bae9f6d2 25
107c1cdb
ND
26// GraphNodeEvalable
27func (n *NodeValidatableResource) EvalTree() EvalNode {
28 addr := n.ResourceAddr()
29 config := n.Config
bae9f6d2 30
107c1cdb
ND
31 // Declare the variables will be used are used to pass values along
32 // the evaluation sequence below. These are written to via pointers
33 // passed to the EvalNodes.
34 var provider providers.Interface
35 var providerSchema *ProviderSchema
36 var configVal cty.Value
bae9f6d2
JC
37
38 seq := &EvalSequence{
39 Nodes: []EvalNode{
bae9f6d2 40 &EvalGetProvider{
107c1cdb 41 Addr: n.ResolvedProvider,
bae9f6d2 42 Output: &provider,
107c1cdb 43 Schema: &providerSchema,
bae9f6d2
JC
44 },
45 &EvalValidateResource{
107c1cdb
ND
46 Addr: addr.Resource,
47 Provider: &provider,
48 ProviderSchema: &providerSchema,
49 Config: config,
50 ConfigVal: &configVal,
bae9f6d2
JC
51 },
52 },
53 }
54
107c1cdb
ND
55 if managed := n.Config.Managed; managed != nil {
56 hasCount := n.Config.Count != nil
57
58 // Validate all the provisioners
59 for _, p := range managed.Provisioners {
60 var provisioner provisioners.Interface
61 var provisionerSchema *configschema.Block
62
63 if p.Connection == nil {
64 p.Connection = config.Managed.Connection
65 } else if config.Managed.Connection != nil {
66 p.Connection.Config = configs.MergeBodies(config.Managed.Connection.Config, p.Connection.Config)
67 }
68
69 seq.Nodes = append(
70 seq.Nodes,
71 &EvalGetProvisioner{
72 Name: p.Type,
73 Output: &provisioner,
74 Schema: &provisionerSchema,
75 },
76 &EvalValidateProvisioner{
77 ResourceAddr: addr.Resource,
78 Provisioner: &provisioner,
79 Schema: &provisionerSchema,
80 Config: p,
81 ResourceHasCount: hasCount,
82 },
83 )
84 }
bae9f6d2
JC
85 }
86
87 return seq
88}