Documentation
¶
Overview ¶
Package terraform handles creation/destruction of a Constellation cluster using Terraform.
Since Terraform does not provide a stable Go API, we use the `terraform-exec` package to interact with Terraform.
The Terraform templates are located in the "terraform" subdirectory. The templates are embedded into the CLI binary using `go:embed`. On use the relevant template is extracted to the working directory and the user customized variables are written to a `terraform.tfvars` file.
Index ¶
- Variables
- func GetExecutable(ctx context.Context, workingDir string) (terraform *tfexec.Terraform, remove func(), err error)
- type AWSClusterVariables
- type AWSIAMOutput
- type AWSIAMVariables
- type AzureClusterVariables
- type AzureIAMOutput
- type AzureIAMVariables
- type Client
- func (c *Client) CleanUpWorkspace() error
- func (c *Client) CreateCluster(ctx context.Context, logLevel LogLevel, targets ...string) (CreateOutput, error)
- func (c *Client) CreateIAMConfig(ctx context.Context, provider cloudprovider.Provider, logLevel LogLevel) (IAMOutput, error)
- func (c *Client) Destroy(ctx context.Context, logLevel LogLevel) error
- func (c *Client) Plan(ctx context.Context, logLevel LogLevel, planFile string, targets ...string) (bool, error)
- func (c *Client) PrepareUpgradeWorkspace(path, oldWorkingDir, newWorkingDir string, vars Variables) error
- func (c *Client) PrepareWorkspace(path string, vars Variables) error
- func (c *Client) RemoveInstaller()
- func (c *Client) Show(ctx context.Context) (*tfjson.State, error)
- func (c *Client) ShowPlan(ctx context.Context, logLevel LogLevel, planFilePath string, output io.Writer) error
- type CommonVariables
- type CreateOutput
- type GCPClusterVariables
- type GCPIAMOutput
- type GCPIAMVariables
- type IAMOutput
- type LogLevel
- type OpenStackClusterVariables
- type QEMUVariables
- type Variables
Constants ¶
This section is empty.
Variables ¶
var ErrTerraformWorkspaceDifferentFiles = errors.New("creating cluster: trying to overwrite an existing Terraform file with a different version")
ErrTerraformWorkspaceDifferentFiles is returned when a re-used existing Terraform workspace has different files than the ones to be extracted (e.g. due to a version mix-up or incomplete writes).
var ErrTerraformWorkspaceExistsWithDifferentVariables = errors.New("creating cluster: a Terraform workspace already exists with different variables")
ErrTerraformWorkspaceExistsWithDifferentVariables is returned when existing Terraform files differ from the version the CLI wants to extract.
Functions ¶
Types ¶
type AWSClusterVariables ¶ added in v2.3.0
type AWSClusterVariables struct {
// CommonVariables contains common variables.
CommonVariables
// Region is the AWS region to use.
Region string
// Zone is the AWS zone to use in the given region.
Zone string
// AMIImageID is the ID of the AMI image to use.
AMIImageID string
// InstanceType is the type of the EC2 instance to use.
InstanceType string
// StateDiskType is the EBS disk type to use for the state disk.
StateDiskType string
// IAMGroupControlPlane is the IAM group to use for the control-plane nodes.
IAMProfileControlPlane string
// IAMGroupWorkerNodes is the IAM group to use for the worker nodes.
IAMProfileWorkerNodes string
// Debug is true if debug mode is enabled.
Debug bool
}
AWSClusterVariables is user configuration for creating a cluster with Terraform on GCP.
func (*AWSClusterVariables) String ¶ added in v2.3.0
func (v *AWSClusterVariables) String() string
type AWSIAMOutput ¶ added in v2.3.0
AWSIAMOutput contains the output information of the Terraform IAM operation on GCP.
type AWSIAMVariables ¶ added in v2.3.0
type AWSIAMVariables struct {
// Region is the AWS location to use. (e.g. us-east-2)
Region string
// Prefix is the name prefix of the resources to use.
Prefix string
}
AWSIAMVariables is user configuration for creating the IAM configuration with Terraform on Microsoft Azure.
func (*AWSIAMVariables) String ¶ added in v2.3.0
func (v *AWSIAMVariables) String() string
String returns a string representation of the IAM-specific variables, formatted as Terraform variables.
type AzureClusterVariables ¶ added in v2.3.0
type AzureClusterVariables struct {
// CommonVariables contains common variables.
CommonVariables
// ResourceGroup is the name of the Azure resource group to use.
ResourceGroup string
// Location is the Azure location to use.
Location string
// UserAssignedIdentity is the name of the Azure user-assigned identity to use.
UserAssignedIdentity string
// InstanceType is the Azure instance type to use.
InstanceType string
// StateDiskType is the Azure disk type to use for the state disk.
StateDiskType string
// ImageID is the ID of the Azure image to use.
ImageID string
// ConfidentialVM sets the VM to be confidential.
ConfidentialVM bool
// SecureBoot sets the VM to use secure boot.
SecureBoot bool
// CreateMAA sets whether a Microsoft Azure attestation provider should be created.
CreateMAA bool
// Debug is true if debug mode is enabled.
Debug bool
}
AzureClusterVariables is user configuration for creating a cluster with Terraform on Azure.
func (*AzureClusterVariables) String ¶ added in v2.3.0
func (v *AzureClusterVariables) String() string
String returns a string representation of the variables, formatted as Terraform variables.
type AzureIAMOutput ¶ added in v2.3.0
AzureIAMOutput contains the output information of the Terraform IAM operation on Microsoft Azure.
type AzureIAMVariables ¶ added in v2.3.0
type AzureIAMVariables struct {
// Region is the Azure region to use. (e.g. westus)
Region string
// ServicePrincipal is the name of the service principal to use.
ServicePrincipal string
// ResourceGroup is the name of the resource group to use.
ResourceGroup string
}
AzureIAMVariables is user configuration for creating the IAM configuration with Terraform on Microsoft Azure.
func (*AzureIAMVariables) String ¶ added in v2.3.0
func (v *AzureIAMVariables) String() string
String returns a string representation of the IAM-specific variables, formatted as Terraform variables.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client manages interaction with Terraform.
func (*Client) CleanUpWorkspace ¶
CleanUpWorkspace removes terraform files from the current directory.
func (*Client) CreateCluster ¶
func (c *Client) CreateCluster(ctx context.Context, logLevel LogLevel, targets ...string) (CreateOutput, error)
CreateCluster creates a Constellation cluster using Terraform.
func (*Client) CreateIAMConfig ¶ added in v2.3.0
func (c *Client) CreateIAMConfig(ctx context.Context, provider cloudprovider.Provider, logLevel LogLevel) (IAMOutput, error)
CreateIAMConfig creates an IAM configuration using Terraform.
func (*Client) Plan ¶ added in v2.8.0
func (c *Client) Plan(ctx context.Context, logLevel LogLevel, planFile string, targets ...string) (bool, error)
Plan determines the diff that will be applied by Terraform. The plan output is written to the planFile. If there is a diff, the returned bool is true. Otherwise, it is false.
func (*Client) PrepareUpgradeWorkspace ¶ added in v2.8.0
func (c *Client) PrepareUpgradeWorkspace(path, oldWorkingDir, newWorkingDir string, vars Variables) error
PrepareUpgradeWorkspace prepares a Terraform workspace for a Constellation version upgrade. It copies the Terraform state from the old working dir and the embedded Terraform files into the new working dir.
func (*Client) PrepareWorkspace ¶ added in v2.3.0
PrepareWorkspace prepares a Terraform workspace for a Constellation cluster.
func (*Client) RemoveInstaller ¶
func (c *Client) RemoveInstaller()
RemoveInstaller removes the Terraform installer, if it was downloaded for this command.
type CommonVariables ¶
type CommonVariables struct {
// Name of the cluster.
Name string
// CountControlPlanes is the number of control-plane nodes to create.
CountControlPlanes int
// CountWorkers is the number of worker nodes to create.
CountWorkers int
// StateDiskSizeGB is the size of the state disk to allocate to each node, in GB.
StateDiskSizeGB int
}
CommonVariables is user configuration for creating a cluster with Terraform.
func (*CommonVariables) String ¶
func (v *CommonVariables) String() string
String returns a string representation of the variables, formatted as Terraform variables.
type CreateOutput ¶ added in v2.5.0
type CreateOutput struct {
IP string
Secret string
UID string
// AttestationURL is the URL of the attestation provider.
// It is only set if the cluster is created on Azure.
AttestationURL string
}
CreateOutput contains the Terraform output values of a cluster creation.
type GCPClusterVariables ¶ added in v2.3.0
type GCPClusterVariables struct {
// CommonVariables contains common variables.
CommonVariables
// Project is the ID of the GCP project to use.
Project string
// Region is the GCP region to use.
Region string
// Zone is the GCP zone to use.
Zone string
// CredentialsFile is the path to the GCP credentials file.
CredentialsFile string
// InstanceType is the GCP instance type to use.
InstanceType string
// StateDiskType is the GCP disk type to use for the state disk.
StateDiskType string
// ImageID is the ID of the GCP image to use.
ImageID string
// Debug is true if debug mode is enabled.
Debug bool
}
GCPClusterVariables is user configuration for creating resources with Terraform on GCP.
func (*GCPClusterVariables) String ¶ added in v2.3.0
func (v *GCPClusterVariables) String() string
String returns a string representation of the variables, formatted as Terraform variables.
type GCPIAMOutput ¶ added in v2.3.0
type GCPIAMOutput struct {
SaKey string
}
GCPIAMOutput contains the output information of the Terraform IAM operation on GCP.
type GCPIAMVariables ¶ added in v2.3.0
type GCPIAMVariables struct {
// Project is the ID of the GCP project to use.
Project string
// Region is the GCP region to use.
Region string
// Zone is the GCP zone to use.
Zone string
// ServiceAccountID is the ID of the service account to use.
ServiceAccountID string
}
GCPIAMVariables is user configuration for creating the IAM confioguration with Terraform on GCP.
func (*GCPIAMVariables) String ¶ added in v2.3.0
func (v *GCPIAMVariables) String() string
String returns a string representation of the IAM-specific variables, formatted as Terraform variables.
type IAMOutput ¶ added in v2.3.0
type IAMOutput struct {
GCP GCPIAMOutput
Azure AzureIAMOutput
AWS AWSIAMOutput
}
IAMOutput contains the output information of the Terraform IAM operations.
type LogLevel ¶ added in v2.8.0
type LogLevel int
LogLevel is a Terraform log level. As per https://developer.hashicorp.com/terraform/internals/debugging
const ( // LogLevelNone represents a log level that does not produce any output. LogLevelNone LogLevel = iota // LogLevelError enables log output at ERROR level. LogLevelError // LogLevelWarn enables log output at WARN level. LogLevelWarn // LogLevelInfo enables log output at INFO level. LogLevelInfo // LogLevelDebug enables log output at DEBUG level. LogLevelDebug // LogLevelTrace enables log output at TRACE level. LogLevelTrace // LogLevelJSON enables log output at TRACE level in JSON format. LogLevelJSON )
func ParseLogLevel ¶ added in v2.8.0
ParseLogLevel parses a log level string into a Terraform log level.
type OpenStackClusterVariables ¶ added in v2.6.0
type OpenStackClusterVariables struct {
// CommonVariables contains common variables.
CommonVariables
// Cloud is the (optional) name of the OpenStack cloud to use when reading the "clouds.yaml" configuration file. If empty, environment variables are used.
Cloud string
// AvailabilityZone is the OpenStack availability zone to use.
AvailabilityZone string
// Flavor is the ID of the OpenStack flavor (machine type) to use.
FlavorID string
// FloatingIPPoolID is the ID of the OpenStack floating IP pool to use for public IPs.
FloatingIPPoolID string
// StateDiskType is the OpenStack disk type to use for the state disk.
StateDiskType string
// ImageURL is the URL of the OpenStack image to use.
ImageURL string
// DirectDownload decides whether to download the image directly from the URL to OpenStack or to upload it from the local machine.
DirectDownload bool
// OpenstackUserDomainName is the OpenStack user domain name to use.
OpenstackUserDomainName string
// OpenstackUsername is the OpenStack user name to use.
OpenstackUsername string
// OpenstackPassword is the OpenStack password to use.
OpenstackPassword string
// Debug is true if debug mode is enabled.
Debug bool
}
OpenStackClusterVariables is user configuration for creating a cluster with Terraform on OpenStack.
func (*OpenStackClusterVariables) String ¶ added in v2.6.0
func (v *OpenStackClusterVariables) String() string
String returns a string representation of the variables, formatted as Terraform variables.
type QEMUVariables ¶
type QEMUVariables struct {
// CommonVariables contains common variables.
CommonVariables
// LibvirtURI is the libvirt connection URI.
LibvirtURI string
// LibvirtSocketPath is the path to the libvirt socket in case of unix socket.
LibvirtSocketPath string
// BootMode is the boot mode to use.
// Can be either "uefi" or "direct-linux-boot".
BootMode string
// CPUCount is the number of CPUs to allocate to each node.
CPUCount int
// MemorySizeMiB is the amount of memory to allocate to each node, in MiB.
MemorySizeMiB int
// IPRangeStart is the first IP address in the IP range to allocate to the cluster.
ImagePath string
// ImageFormat is the format of the image from ImagePath.
ImageFormat string
// MetadataAPIImage is the container image to use for the metadata API.
MetadataAPIImage string
// MetadataLibvirtURI is the libvirt connection URI used by the metadata container.
// In case of unix socket, this should be "qemu:///system".
// Other wise it should be the same as LibvirtURI.
MetadataLibvirtURI string
// NVRAM is the path to the NVRAM template.
NVRAM string
// Firmware is the path to the firmware.
Firmware string
// BzImagePath is the path to the bzImage (kernel).
BzImagePath string
// InitrdPath is the path to the initrd.
InitrdPath string
// KernelCmdline is the kernel command line.
KernelCmdline string
}
QEMUVariables is user configuration for creating a QEMU cluster with Terraform.
func (*QEMUVariables) String ¶
func (v *QEMUVariables) String() string
String returns a string representation of the variables, formatted as Terraform variables.