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  }