]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - 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
1 package terraform
2
3 import (
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"
9 )
10
11 // NodeValidatableResource represents a resource that is used for validation
12 // only.
13 type NodeValidatableResource struct {
14 *NodeAbstractResource
15 }
16
17 var (
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 )
25
26 // GraphNodeEvalable
27 func (n *NodeValidatableResource) EvalTree() EvalNode {
28 addr := n.ResourceAddr()
29 config := n.Config
30
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
37
38 seq := &EvalSequence{
39 Nodes: []EvalNode{
40 &EvalGetProvider{
41 Addr: n.ResolvedProvider,
42 Output: &provider,
43 Schema: &providerSchema,
44 },
45 &EvalValidateResource{
46 Addr: addr.Resource,
47 Provider: &provider,
48 ProviderSchema: &providerSchema,
49 Config: config,
50 ConfigVal: &configVal,
51 },
52 },
53 }
54
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 }
85 }
86
87 return seq
88 }