generator

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 29, 2024 License: MPL-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BoolAttributeType         = "BoolAttribute"
	StringAttributeType       = "StringAttribute"
	NumberAttributeType       = "NumberAttribute"
	Int64AttributeType        = "Int64Attribute"
	MapAttributeType          = "MapAttribute"
	ListAttributeType         = "ListAttribute"
	ObjectAttributeType       = "ObjectAttribute"
	SingleNestedAttributeType = "SingleNestedAttribute"
	ListNestedAttributeType   = "ListNestedAttribute"
)
View Source
const (
	BoolElementType   = "BoolType"
	StringElementType = "StringType"
	NumberElementType = "NumberType"
	Int64ElementType  = "Int64Type"
)
View Source
const (
	BoolModelType   = "Bool"
	StringModelType = "String"
	NumberModelType = "Number"
	Int64ModelType  = "Int64"
)
View Source
const (
	BoolPlanModifierType   = "Bool"
	StringPlanModifierType = "String"
	NumberPlanModifierType = "Number"
	Int64PlanModifierType  = "Int64"
)
View Source
const (
	BoolPlanModifierPackage   = "boolplanmodifier"
	StringPlanModifierPackage = "stringplanmodifier"
	NumberPlanModifierPackage = "numberplanmodifier"
	Int64PlanModifierPackage  = "int64planmodifier"
)

Variables

This section is empty.

Functions

func GenerateResourceSpec

func GenerateResourceSpec(r ResourceConfig) (specresource.Resource, error)

GenerateResourceSpec uses the supplied configuration to generate the framework IR JSON from an OpenAPI spec then marshalls the IR into a spec.Resource

func MapTerraformAttributeToKubernetes

func MapTerraformAttributeToKubernetes(terraformAttributeName string) string

MapTerraformAttributeToKubernetes maps a string containing snake_case into camelCase

func MapTerraformAttributeToModel

func MapTerraformAttributeToModel(terraformAttributeName string) string

func WriteFormattedSourceFile

func WriteFormattedSourceFile(wd, path string, contents string) error

WriteFormattedSourceFile runs Go code through format before writing to a file

Types

type AfterHook

type AfterHook struct {
	Create bool `hcl:"create,optional"`
	Read   bool `hcl:"read,optional"`
	Update bool `hcl:"update,optional"`
	Delete bool `hcl:"delete,optional"`
}

type AttributeGenerator

type AttributeGenerator struct {
	Name string

	AttributeType string
	ElementType   string

	PlanModifierType    string
	PlanModifierPackage string

	Required    bool
	Description string
	Computed    bool
	Sensitive   bool
	Immutable   bool

	NestedAttributes AttributesGenerator
}

func (AttributeGenerator) String

func (g AttributeGenerator) String() string

type AttributesGenerator

type AttributesGenerator []AttributeGenerator

func GenerateAttributes

func GenerateAttributes(attrs specresource.Attributes, ignored, computed, required, sensitive, immutable []string, path string) AttributesGenerator

FIXME this function has too many parameters now, should maybe be part of ResourceGenerator.

func (AttributesGenerator) String

func (g AttributesGenerator) String() string

type BeforeHook

type BeforeHook struct {
	Create bool `hcl:"create,optional"`
	Read   bool `hcl:"read,optional"`
	Update bool `hcl:"update,optional"`
	Delete bool `hcl:"delete,optional"`
}

type CRUDAutoOptions

type CRUDAutoOptions struct {
	WaitForDeletion bool   `hcl:"wait_for_deletion,optional"`
	Hooks           *Hooks `hcl:"hooks,block"`
}

CRUDAutoOptions configures options for the autocrud template

type DataSourceConfig

type DataSourceConfig struct {
}

DataSourceConfig configures code generation for a Terraform data source

type GenerateConfig

type GenerateConfig struct {
	Schema          bool             `hcl:"schema,optional"`
	Overrides       bool             `hcl:"overrides,optional"`
	Model           bool             `hcl:"model,optional"`
	CRUDAuto        bool             `hcl:"autocrud,optional"`
	CRUDAutoOptions *CRUDAutoOptions `hcl:"autocrud_options,block"`
	CRUDStubs       bool             `hcl:"crud_stubs,optional"`
	Timeouts        *Timeouts        `hcl:"timeouts,block"`
}

GenerateConfig configures the options for what we should generate

type GeneratorConfig

type GeneratorConfig struct {
	Resources  []ResourceConfig   `hcl:"resource,block"`
	DataSource []DataSourceConfig `hcl:"data,block"`
}

GeneratorConfig is the top level code generator configuration

func ParseHCLConfig

func ParseHCLConfig(filename string) (GeneratorConfig, error)

ParseHCLConfig parses the .hcl configuraiton file and produces a GeneratorConfig

type Hooks

type Hooks struct {
	BeforeHook *BeforeHook `hcl:"before,block"`
	AfterHook  *AfterHook  `hcl:"after,block"`
}

Hooks configures which hooks to include for autocrud template if necessary

func (*Hooks) IsEmpty

func (h *Hooks) IsEmpty() bool

Checks whether hooks are used to prevent file from being generated if block is empty or all set to false.

type ModelFieldGenerator

type ModelFieldGenerator struct {
	// ModelFieldName is the name the attribute has in the model struct, e.g ApiVersion
	FieldName   string
	Type        string
	ElementType string

	// AttributeName is the name of the attribute in the terraform schema api_version
	AttributeName string
	AttributeType string

	// ManifestFieldName is the name the attribute has in the Kubernetes manifest, e.g apiVersion
	ManifestFieldName string

	NestedFields ModelFieldsGenerator
}

func (ModelFieldGenerator) String

func (g ModelFieldGenerator) String() string

type ModelFieldsGenerator

type ModelFieldsGenerator []ModelFieldGenerator

func GenerateModelFields

func GenerateModelFields(attrs specresource.Attributes, ignored []string, path string) ModelFieldsGenerator

func (ModelFieldsGenerator) String

func (g ModelFieldsGenerator) String() string

type ResourceConfig

type ResourceConfig struct {
	// Name is the terraform name of this resource
	Name string `hcl:"name,label"`

	// Package is the name of the Go package for the source files for this resource
	Package string `hcl:"package"`

	// OutputFilenamePrefix is a prefix to be added to all source files generated
	// for this resource
	OutputFilenamePrefix string `hcl:"output_filename_prefix"`

	// APIVersion is the Kubernetes API version of the resource
	APIVersion string `hcl:"api_version"`

	// Kind is the Kubernetes kind of the resource
	Kind string `hcl:"kind"`

	// Description is a Markdown description for the resource
	Description string `hcl:"description"`

	// IgnoredAttributes is a list of attribute paths to omit from the resource
	IgnoredAttributes []string `hcl:"ignored_attributes,optional"`

	// RequiredAttributes is a list of attribute paths to mark as required in the schema
	RequiredAttributes []string `hcl:"required_attributes,optional"`

	// ComputedAttributes is a list of attribute paths to mark as computed in the schema
	ComputedAttributes []string `hcl:"computed_attributes,optional"`

	// SensitiveAttributes is a list of attribute paths to mark as sensitive in the schema
	SensitiveAttributes []string `hcl:"sensitive_attributes,optional"`

	// ImmutableAttributes is a list of attribute paths to mark as requiring a forced
	// replacement if changed in the schema
	ImmutableAttributes []string `hcl:"immutable_attributes,optional"`

	// Generate controls generator specific options
	Generate GenerateConfig `hcl:"generate,block"`

	// OpenAPIConfig configures options for the OpenAPI to Framework IR generator
	OpenAPIConfig TerraformPluginGenOpenAPIConfig `hcl:"openapi,block"`

	// Disabled tells the generator to skip this configuration
	Disabled bool `hcl:"disabled,optional"`
}

ResourceConfig configures code generation for a Terraform resource

type ResourceGenerator

type ResourceGenerator struct {
	GeneratedTimestamp time.Time
	ResourceConfig     ResourceConfig
	Schema             SchemaGenerator
	ModelFields        ModelFieldsGenerator
}

func NewResourceGenerator

func NewResourceGenerator(cfg ResourceConfig, spec specresource.Resource) ResourceGenerator

func (*ResourceGenerator) GenerateAutoCRUDCode

func (g *ResourceGenerator) GenerateAutoCRUDCode() string

func (*ResourceGenerator) GenerateAutoCRUDHooksCode

func (g *ResourceGenerator) GenerateAutoCRUDHooksCode() string

func (*ResourceGenerator) GenerateCRUDStubCode

func (g *ResourceGenerator) GenerateCRUDStubCode() string

func (*ResourceGenerator) GenerateModelCode

func (g *ResourceGenerator) GenerateModelCode() string

func (*ResourceGenerator) GenerateResourceCode

func (g *ResourceGenerator) GenerateResourceCode() string

func (*ResourceGenerator) GenerateSchemaFunctionCode

func (g *ResourceGenerator) GenerateSchemaFunctionCode() string

type ResourcesListGenerator

type ResourcesListGenerator struct {
	GeneratedTimestamp time.Time
	Resources          []ResourceConfig
	Packages           []string
}

func (ResourcesListGenerator) String

func (p ResourcesListGenerator) String() string

type SchemaGenerator

type SchemaGenerator struct {
	Name        string
	Description string
	Attributes  AttributesGenerator
	Imports     []string
}

func (SchemaGenerator) String

func (g SchemaGenerator) String() string

type TerraformPluginGenOpenAPIConfig

type TerraformPluginGenOpenAPIConfig struct {
	// Filename is the filename for the OpenAPI JSON specification
	Filename string `hcl:"filename"`

	// CreatePath is the POST path for the resource in the OpenAPI spec, e.g. /api/v1/namespaces/{namespace}/configmaps
	CreatePath string `hcl:"create_path"`

	// ReadPath is the GET path for the resource in the OpenAPI spec, e.g. /api/v1/namespaces/{namespace}/configmaps/{name}
	ReadPath string `hcl:"read_path"`
}

TerraformPluginGenOpenAPIConfig supplies configuration to tfplugingen-openapi See: https://github.com/hashicorp/terraform-plugin-codegen-openapi

type Timeouts

type Timeouts struct {
	Create string `hcl:"create,optional"`
	Read   string `hcl:"read,optional"`
	Update string `hcl:"update,optional"`
	Delete string `hcl:"delete,optional"`
}

Timeouts allowes overriding the 20m default timeout for a CRUD method

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL