terraform: some files laying out an API

This commit is contained in:
Mitchell Hashimoto 2014-05-28 13:56:43 -07:00
parent ab507814b7
commit 1b5dfa043b
4 changed files with 83 additions and 0 deletions

16
terraform/diff.go Normal file
View File

@ -0,0 +1,16 @@
package terraform
// Diff tracks the differences between resources to apply.
type Diff struct {
resources map[string]map[string]*resourceDiff
}
// resourceDiff is the diff of a single attribute of a resource.
//
// This tracks the old value, the new value, and whether the change of this
// value actually requires an entirely new resource.
type resourceDiff struct {
Old string
New string
RequiresNew bool
}

View File

@ -19,3 +19,7 @@ type ResourceProvider interface {
type ResourceType struct {
Name string
}
// ResourceProviderFactory is a function type that creates a new instance
// of a resource provider.
type ResourceProviderFactory func() (ResourceProvider, error)

20
terraform/state.go Normal file
View File

@ -0,0 +1,20 @@
package terraform
// State keeps track of a snapshot state-of-the-world that Terraform
// can use to keep track of what real world resources it is actually
// managing.
type State struct {
resources map[string]resourceState
}
// resourceState is the state of a single resource.
//
// The ID is required and is some opaque string used to recognize
// the realized resource.
//
// Extra is arbitrary extra metadata that the resource provider returns
// that is sent back into the resource provider when it is needed.
type resourceState struct {
ID string
Extra map[string]interface{}
}

43
terraform/terraform.go Normal file
View File

@ -0,0 +1,43 @@
package terraform
import (
"github.com/hashicorp/terraform/config"
)
// Terraform is the primary structure that is used to interact with
// Terraform from code, and can perform operations such as returning
// all resources, a resource tree, a specific resource, etc.
type Terraform struct {
config *config.Config
providers []ResourceProvider
}
// Config is the configuration that must be given to instantiate
// a Terraform structure.
type Config struct {
Config *config.Config
Providers map[string]ResourceProviderFactory
Variables map[string]string
}
// New creates a new Terraform structure, initializes resource providers
// for the given configuration, etc.
//
// Semantic checks of the entire configuration structure are done at this
// time, as well as richer checks such as verifying that the resource providers
// can be properly initialized, can be configured, etc.
func New(c *Config) (*Terraform, error) {
return nil, nil
}
func (t *Terraform) Apply(*State, *Diff) (*State, error) {
return nil, nil
}
func (t *Terraform) Diff(*State) (*Diff, error) {
return nil, nil
}
func (t *Terraform) Refresh(*State) (*State, error) {
return nil, nil
}