]>
Commit | Line | Data |
---|---|---|
bae9f6d2 JC |
1 | package terraform |
2 | ||
3 | import ( | |
4 | "fmt" | |
5 | ) | |
6 | ||
7 | // contextComponentFactory is the interface that Context uses | |
8 | // to initialize various components such as providers and provisioners. | |
9 | // This factory gets more information than the raw maps using to initialize | |
10 | // a Context. This information is used for debugging. | |
11 | type contextComponentFactory interface { | |
12 | // ResourceProvider creates a new ResourceProvider with the given | |
13 | // type. The "uid" is a unique identifier for this provider being | |
14 | // initialized that can be used for internal tracking. | |
15 | ResourceProvider(typ, uid string) (ResourceProvider, error) | |
16 | ResourceProviders() []string | |
17 | ||
18 | // ResourceProvisioner creates a new ResourceProvisioner with the | |
19 | // given type. The "uid" is a unique identifier for this provisioner | |
20 | // being initialized that can be used for internal tracking. | |
21 | ResourceProvisioner(typ, uid string) (ResourceProvisioner, error) | |
22 | ResourceProvisioners() []string | |
23 | } | |
24 | ||
25 | // basicComponentFactory just calls a factory from a map directly. | |
26 | type basicComponentFactory struct { | |
27 | providers map[string]ResourceProviderFactory | |
28 | provisioners map[string]ResourceProvisionerFactory | |
29 | } | |
30 | ||
31 | func (c *basicComponentFactory) ResourceProviders() []string { | |
32 | result := make([]string, len(c.providers)) | |
33 | for k, _ := range c.providers { | |
34 | result = append(result, k) | |
35 | } | |
36 | ||
37 | return result | |
38 | } | |
39 | ||
40 | func (c *basicComponentFactory) ResourceProvisioners() []string { | |
41 | result := make([]string, len(c.provisioners)) | |
42 | for k, _ := range c.provisioners { | |
43 | result = append(result, k) | |
44 | } | |
45 | ||
46 | return result | |
47 | } | |
48 | ||
49 | func (c *basicComponentFactory) ResourceProvider(typ, uid string) (ResourceProvider, error) { | |
50 | f, ok := c.providers[typ] | |
51 | if !ok { | |
52 | return nil, fmt.Errorf("unknown provider %q", typ) | |
53 | } | |
54 | ||
55 | return f() | |
56 | } | |
57 | ||
58 | func (c *basicComponentFactory) ResourceProvisioner(typ, uid string) (ResourceProvisioner, error) { | |
59 | f, ok := c.provisioners[typ] | |
60 | if !ok { | |
61 | return nil, fmt.Errorf("unknown provisioner %q", typ) | |
62 | } | |
63 | ||
64 | return f() | |
65 | } |