mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-09-19 17:50:00 +00:00
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
|
package tfconfig
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// Resource represents a single "resource" or "data" block within a module.
|
||
|
type Resource struct {
|
||
|
Mode ResourceMode `json:"mode"`
|
||
|
Type string `json:"type"`
|
||
|
Name string `json:"name"`
|
||
|
|
||
|
Provider ProviderRef `json:"provider"`
|
||
|
|
||
|
Pos SourcePos `json:"pos"`
|
||
|
}
|
||
|
|
||
|
// MapKey returns a string that can be used to uniquely identify the receiver
|
||
|
// in a map[string]*Resource.
|
||
|
func (r *Resource) MapKey() string {
|
||
|
switch r.Mode {
|
||
|
case ManagedResourceMode:
|
||
|
return fmt.Sprintf("%s.%s", r.Type, r.Name)
|
||
|
case DataResourceMode:
|
||
|
return fmt.Sprintf("data.%s.%s", r.Type, r.Name)
|
||
|
default:
|
||
|
// should never happen
|
||
|
return fmt.Sprintf("[invalid_mode!].%s.%s", r.Type, r.Name)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ResourceMode represents the "mode" of a resource, which is used to
|
||
|
// distinguish between managed resources ("resource" blocks in config) and
|
||
|
// data resources ("data" blocks in config).
|
||
|
type ResourceMode rune
|
||
|
|
||
|
const InvalidResourceMode ResourceMode = 0
|
||
|
const ManagedResourceMode ResourceMode = 'M'
|
||
|
const DataResourceMode ResourceMode = 'D'
|
||
|
|
||
|
func (m ResourceMode) String() string {
|
||
|
switch m {
|
||
|
case ManagedResourceMode:
|
||
|
return "managed"
|
||
|
case DataResourceMode:
|
||
|
return "data"
|
||
|
default:
|
||
|
return ""
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// MarshalJSON implements encoding/json.Marshaler.
|
||
|
func (m ResourceMode) MarshalJSON() ([]byte, error) {
|
||
|
return []byte(strconv.Quote(m.String())), nil
|
||
|
}
|
||
|
|
||
|
func resourceTypeDefaultProviderName(typeName string) string {
|
||
|
if underPos := strings.IndexByte(typeName, '_'); underPos != -1 {
|
||
|
return typeName[:underPos]
|
||
|
}
|
||
|
return typeName
|
||
|
}
|