]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/hashicorp/terraform/terraform/node_provider_abstract.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / node_provider_abstract.go
CommitLineData
bae9f6d2
JC
1package terraform
2
3import (
107c1cdb
ND
4 "github.com/hashicorp/terraform/addrs"
5 "github.com/hashicorp/terraform/configs"
6 "github.com/hashicorp/terraform/configs/configschema"
bae9f6d2 7
bae9f6d2
JC
8 "github.com/hashicorp/terraform/dag"
9)
10
11// ConcreteProviderNodeFunc is a callback type used to convert an
12// abstract provider to a concrete one of some type.
13type ConcreteProviderNodeFunc func(*NodeAbstractProvider) dag.Vertex
14
15// NodeAbstractProvider represents a provider that has no associated operations.
16// It registers all the common interfaces across operations for providers.
17type NodeAbstractProvider struct {
107c1cdb 18 Addr addrs.AbsProviderConfig
bae9f6d2
JC
19
20 // The fields below will be automatically set using the Attach
21 // interfaces if you're running those transforms, but also be explicitly
22 // set if you already have that information.
23
107c1cdb
ND
24 Config *configs.Provider
25 Schema *configschema.Block
bae9f6d2
JC
26}
27
107c1cdb
ND
28var (
29 _ GraphNodeSubPath = (*NodeAbstractProvider)(nil)
30 _ RemovableIfNotTargeted = (*NodeAbstractProvider)(nil)
31 _ GraphNodeReferencer = (*NodeAbstractProvider)(nil)
32 _ GraphNodeProvider = (*NodeAbstractProvider)(nil)
33 _ GraphNodeAttachProvider = (*NodeAbstractProvider)(nil)
34 _ GraphNodeAttachProviderConfigSchema = (*NodeAbstractProvider)(nil)
35 _ dag.GraphNodeDotter = (*NodeAbstractProvider)(nil)
36)
15c0b25d
AP
37
38func (n *NodeAbstractProvider) Name() string {
107c1cdb 39 return n.Addr.String()
bae9f6d2
JC
40}
41
42// GraphNodeSubPath
107c1cdb
ND
43func (n *NodeAbstractProvider) Path() addrs.ModuleInstance {
44 return n.Addr.Module
bae9f6d2
JC
45}
46
47// RemovableIfNotTargeted
48func (n *NodeAbstractProvider) RemoveIfNotTargeted() bool {
49 // We need to add this so that this node will be removed if
50 // it isn't targeted or a dependency of a target.
51 return true
52}
53
54// GraphNodeReferencer
107c1cdb
ND
55func (n *NodeAbstractProvider) References() []*addrs.Reference {
56 if n.Config == nil || n.Schema == nil {
bae9f6d2
JC
57 return nil
58 }
59
107c1cdb 60 return ReferencesFromConfig(n.Config.Config, n.Schema)
bae9f6d2
JC
61}
62
63// GraphNodeProvider
107c1cdb
ND
64func (n *NodeAbstractProvider) ProviderAddr() addrs.AbsProviderConfig {
65 return n.Addr
bae9f6d2
JC
66}
67
68// GraphNodeProvider
107c1cdb 69func (n *NodeAbstractProvider) ProviderConfig() *configs.Provider {
bae9f6d2
JC
70 if n.Config == nil {
71 return nil
72 }
73
15c0b25d 74 return n.Config
bae9f6d2
JC
75}
76
77// GraphNodeAttachProvider
107c1cdb 78func (n *NodeAbstractProvider) AttachProvider(c *configs.Provider) {
bae9f6d2
JC
79 n.Config = c
80}
81
107c1cdb
ND
82// GraphNodeAttachProviderConfigSchema impl.
83func (n *NodeAbstractProvider) AttachProviderConfigSchema(schema *configschema.Block) {
84 n.Schema = schema
85}
86
bae9f6d2
JC
87// GraphNodeDotter impl.
88func (n *NodeAbstractProvider) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {
89 return &dag.DotNode{
90 Name: name,
91 Attrs: map[string]string{
92 "label": n.Name(),
93 "shape": "diamond",
94 },
95 }
96}