github.com/adamar/terraform@v0.2.2-0.20141016210445-2e703afdad0e/builtin/providers/digitalocean/resource_provider.go (about) 1 package digitalocean 2 3 import ( 4 "log" 5 6 "github.com/hashicorp/terraform/helper/config" 7 "github.com/hashicorp/terraform/helper/schema" 8 "github.com/hashicorp/terraform/terraform" 9 "github.com/pearkes/digitalocean" 10 ) 11 12 type ResourceProvider struct { 13 Config Config 14 15 client *digitalocean.Client 16 17 // This is the schema.Provider. Eventually this will replace much 18 // of this structure. For now it is an element of it for compatiblity. 19 p *schema.Provider 20 } 21 22 func (p *ResourceProvider) Input( 23 input terraform.UIInput, 24 c *terraform.ResourceConfig) (*terraform.ResourceConfig, error) { 25 return Provider().Input(input, c) 26 } 27 28 func (p *ResourceProvider) Validate(c *terraform.ResourceConfig) ([]string, []error) { 29 prov := Provider() 30 return prov.Validate(c) 31 } 32 33 func (p *ResourceProvider) ValidateResource( 34 t string, c *terraform.ResourceConfig) ([]string, []error) { 35 prov := Provider() 36 if _, ok := prov.ResourcesMap[t]; ok { 37 return prov.ValidateResource(t, c) 38 } 39 40 return resourceMap.Validate(t, c) 41 } 42 43 func (p *ResourceProvider) Configure(c *terraform.ResourceConfig) error { 44 if _, err := config.Decode(&p.Config, c.Config); err != nil { 45 return err 46 } 47 48 log.Println("[INFO] Initializing DigitalOcean client") 49 var err error 50 p.client, err = p.Config.Client() 51 52 if err != nil { 53 return err 54 } 55 56 // Create the provider, set the meta 57 p.p = Provider() 58 p.p.SetMeta(p) 59 60 return nil 61 } 62 63 func (p *ResourceProvider) Apply( 64 info *terraform.InstanceInfo, 65 s *terraform.InstanceState, 66 d *terraform.InstanceDiff) (*terraform.InstanceState, error) { 67 if _, ok := p.p.ResourcesMap[info.Type]; ok { 68 return p.p.Apply(info, s, d) 69 } 70 71 return resourceMap.Apply(info, s, d, p) 72 } 73 74 func (p *ResourceProvider) Diff( 75 info *terraform.InstanceInfo, 76 s *terraform.InstanceState, 77 c *terraform.ResourceConfig) (*terraform.InstanceDiff, error) { 78 if _, ok := p.p.ResourcesMap[info.Type]; ok { 79 return p.p.Diff(info, s, c) 80 } 81 82 return resourceMap.Diff(info, s, c, p) 83 } 84 85 func (p *ResourceProvider) Refresh( 86 info *terraform.InstanceInfo, 87 s *terraform.InstanceState) (*terraform.InstanceState, error) { 88 if _, ok := p.p.ResourcesMap[info.Type]; ok { 89 return p.p.Refresh(info, s) 90 } 91 92 return resourceMap.Refresh(info, s, p) 93 } 94 95 func (p *ResourceProvider) Resources() []terraform.ResourceType { 96 result := resourceMap.Resources() 97 result = append(result, Provider().Resources()...) 98 return result 99 }