github.com/paybyphone/terraform@v0.9.5-0.20170613192930-9706042ddd51/terraform/node_provider_abstract.go (about) 1 package terraform 2 3 import ( 4 "fmt" 5 6 "github.com/hashicorp/terraform/config" 7 "github.com/hashicorp/terraform/dag" 8 ) 9 10 // ConcreteProviderNodeFunc is a callback type used to convert an 11 // abstract provider to a concrete one of some type. 12 type ConcreteProviderNodeFunc func(*NodeAbstractProvider) dag.Vertex 13 14 // NodeAbstractProvider represents a provider that has no associated operations. 15 // It registers all the common interfaces across operations for providers. 16 type NodeAbstractProvider struct { 17 NameValue string 18 PathValue []string 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 24 Config *config.ProviderConfig 25 } 26 27 func (n *NodeAbstractProvider) Name() string { 28 result := fmt.Sprintf("provider.%s", n.NameValue) 29 if len(n.PathValue) > 1 { 30 result = fmt.Sprintf("%s.%s", modulePrefixStr(n.PathValue), result) 31 } 32 33 return result 34 } 35 36 // GraphNodeSubPath 37 func (n *NodeAbstractProvider) Path() []string { 38 return n.PathValue 39 } 40 41 // RemovableIfNotTargeted 42 func (n *NodeAbstractProvider) RemoveIfNotTargeted() bool { 43 // We need to add this so that this node will be removed if 44 // it isn't targeted or a dependency of a target. 45 return true 46 } 47 48 // GraphNodeReferencer 49 func (n *NodeAbstractProvider) References() []string { 50 if n.Config == nil { 51 return nil 52 } 53 54 return ReferencesFromConfig(n.Config.RawConfig) 55 } 56 57 // GraphNodeProvider 58 func (n *NodeAbstractProvider) ProviderName() string { 59 return n.NameValue 60 } 61 62 // GraphNodeProvider 63 func (n *NodeAbstractProvider) ProviderConfig() *config.RawConfig { 64 if n.Config == nil { 65 return nil 66 } 67 68 return n.Config.RawConfig 69 } 70 71 // GraphNodeAttachProvider 72 func (n *NodeAbstractProvider) AttachProvider(c *config.ProviderConfig) { 73 n.Config = c 74 } 75 76 // GraphNodeDotter impl. 77 func (n *NodeAbstractProvider) DotNode(name string, opts *dag.DotOpts) *dag.DotNode { 78 return &dag.DotNode{ 79 Name: name, 80 Attrs: map[string]string{ 81 "label": n.Name(), 82 "shape": "diamond", 83 }, 84 } 85 }