mirror of https://github.com/kubernetes/kops.git
Merge pull request #13029 from rifelpet/remove-tf-json
Remove TerraformJSON feature flag
This commit is contained in:
commit
13243b5add
|
|
@ -17,6 +17,5 @@ The following experimental features are currently available:
|
||||||
* `+SpotinstHybrid` - Toggles between hybrid and full instance group implementations
|
* `+SpotinstHybrid` - Toggles between hybrid and full instance group implementations
|
||||||
* `-SpotinstController` - Toggles the installation of the Spot controller addon off
|
* `-SpotinstController` - Toggles the installation of the Spot controller addon off
|
||||||
* `+SkipEtcdVersionCheck` - Bypasses the check that etcd-manager is using a supported etcd version
|
* `+SkipEtcdVersionCheck` - Bypasses the check that etcd-manager is using a supported etcd version
|
||||||
* `+TerraformJSON` - Produce kubernetes.tf.json file instead of writing HCLv2 syntax. Can be consumed by terraform 0.12+
|
|
||||||
* `+VFSVaultSupport` - Enables setting Vault as secret/keystore
|
* `+VFSVaultSupport` - Enables setting Vault as secret/keystore
|
||||||
* `+APIServerNodes` - Enables support for dedicated API server nodes
|
* `+APIServerNodes` - Enables support for dedicated API server nodes
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,13 @@ The Terraform output should be reasonably stable (i.e. the text files should onl
|
||||||
Note that if you modify the Terraform files that kOps spits out, it will override your changes with the configuration state defined by its own configs. In other terms, kOps's own state is the ultimate source of truth (as far as kOps is concerned), and Terraform is a representation of that state for your convenience.
|
Note that if you modify the Terraform files that kOps spits out, it will override your changes with the configuration state defined by its own configs. In other terms, kOps's own state is the ultimate source of truth (as far as kOps is concerned), and Terraform is a representation of that state for your convenience.
|
||||||
|
|
||||||
### Terraform Version Compatibility
|
### Terraform Version Compatibility
|
||||||
| kOps Version | Terraform Version | Feature Flag Notes |
|
| kOps Version | Terraform Version | Feature Flag Notes |
|
||||||
|--------------|-------------------|--------------------|
|
|-----------------|-------------------|--------------------|
|
||||||
| >= 1.19 | >= 0.12.26, >= 0.13 | HCL2 supported by default <br>`KOPS_FEATURE_FLAGS=Terraform-0.12` is now deprecated |
|
| >= 1.19 | >= 0.12.26, >= 0.13 | HCL2 supported by default <br>`KOPS_FEATURE_FLAGS=Terraform-0.12` is now deprecated |
|
||||||
| >= 1.18 | >= 0.12 | HCL2 supported by default |
|
| >= 1.18 | >= 0.12 | HCL2 supported by default |
|
||||||
| >= 1.18 | < 0.12 | `KOPS_FEATURE_FLAGS=-Terraform-0.12` |
|
| >= 1.18 | < 0.12 | `KOPS_FEATURE_FLAGS=-Terraform-0.12` |
|
||||||
| >= 1.17 | >= 0.12 | `KOPS_FEATURE_FLAGS=TerraformJSON` outputs JSON |
|
| >= 1.17, < 1.23 | >= 0.12 | `KOPS_FEATURE_FLAGS=TerraformJSON` outputs JSON |
|
||||||
| <= 1.17 | < 0.12 | Supported by default |
|
| <= 1.17 | < 0.12 | Supported by default |
|
||||||
|
|
||||||
### Using Terraform
|
### Using Terraform
|
||||||
|
|
||||||
|
|
@ -137,14 +137,3 @@ Ps: You don't have to `kops delete cluster` if you just want to recreate from sc
|
||||||
Changes made with `kops edit` (like enabling RBAC and / or feature gates) will result in changes to the LaunchTemplate of your cluster nodes. After a `terraform apply`, they won't be applied right away since terraform will not launch new instances as part of that.
|
Changes made with `kops edit` (like enabling RBAC and / or feature gates) will result in changes to the LaunchTemplate of your cluster nodes. After a `terraform apply`, they won't be applied right away since terraform will not launch new instances as part of that.
|
||||||
|
|
||||||
To see your changes applied to the cluster you'll also need to run `kops rolling-update` after running `terraform apply`. This will ensure that all nodes' changes have the desired settings configured with `kops edit`.
|
To see your changes applied to the cluster you'll also need to run `kops rolling-update` after running `terraform apply`. This will ensure that all nodes' changes have the desired settings configured with `kops edit`.
|
||||||
|
|
||||||
#### Terraform JSON output
|
|
||||||
|
|
||||||
With terraform 0.12 JSON is now officially supported as configuration language. To enable JSON output instead of HCLv2 output you need to enable it through a feature flag.
|
|
||||||
|
|
||||||
```
|
|
||||||
export KOPS_FEATURE_FLAGS=TerraformJSON
|
|
||||||
kops update cluster .....
|
|
||||||
```
|
|
||||||
|
|
||||||
This is an alternative to of using terraforms own configuration syntax HCL. Be sure to delete the existing kubernetes.tf file. Terraform will otherwise use both and then complain.
|
|
||||||
|
|
|
||||||
|
|
@ -72,8 +72,6 @@ var (
|
||||||
VPCSkipEnableDNSSupport = new("VPCSkipEnableDNSSupport", Bool(false))
|
VPCSkipEnableDNSSupport = new("VPCSkipEnableDNSSupport", Bool(false))
|
||||||
// SkipEtcdVersionCheck will bypass the check that etcd-manager is using a supported etcd version
|
// SkipEtcdVersionCheck will bypass the check that etcd-manager is using a supported etcd version
|
||||||
SkipEtcdVersionCheck = new("SkipEtcdVersionCheck", Bool(false))
|
SkipEtcdVersionCheck = new("SkipEtcdVersionCheck", Bool(false))
|
||||||
// TerraformJSON outputs terraform in JSON instead of hcl output. JSON output can be also parsed by terraform 0.12
|
|
||||||
TerraformJSON = new("TerraformJSON", Bool(false))
|
|
||||||
// ClusterAddons activates experimental cluster-addons support
|
// ClusterAddons activates experimental cluster-addons support
|
||||||
ClusterAddons = new("ClusterAddons", Bool(false))
|
ClusterAddons = new("ClusterAddons", Bool(false))
|
||||||
// Azure toggles the Azure support.
|
// Azure toggles the Azure support.
|
||||||
|
|
|
||||||
|
|
@ -819,74 +819,74 @@ func (e *AutoscalingGroup) getTGsToDetach(currentTGs []*TargetGroup) []*string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformASGTag struct {
|
type terraformASGTag struct {
|
||||||
Key *string `json:"key" cty:"key"`
|
Key *string `cty:"key"`
|
||||||
Value *string `json:"value" cty:"value"`
|
Value *string `cty:"value"`
|
||||||
PropagateAtLaunch *bool `json:"propagate_at_launch" cty:"propagate_at_launch"`
|
PropagateAtLaunch *bool `cty:"propagate_at_launch"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoscalingLaunchTemplateSpecification struct {
|
type terraformAutoscalingLaunchTemplateSpecification struct {
|
||||||
// LaunchTemplateID is the ID of the template to use.
|
// LaunchTemplateID is the ID of the template to use.
|
||||||
LaunchTemplateID *terraformWriter.Literal `json:"id,omitempty" cty:"id"`
|
LaunchTemplateID *terraformWriter.Literal `cty:"id"`
|
||||||
// Version is the version of the Launch Template to use.
|
// Version is the version of the Launch Template to use.
|
||||||
Version *terraformWriter.Literal `json:"version,omitempty" cty:"version"`
|
Version *terraformWriter.Literal `cty:"version"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoscalingMixedInstancesPolicyLaunchTemplateSpecification struct {
|
type terraformAutoscalingMixedInstancesPolicyLaunchTemplateSpecification struct {
|
||||||
// LaunchTemplateID is the ID of the template to use
|
// LaunchTemplateID is the ID of the template to use
|
||||||
LaunchTemplateID *terraformWriter.Literal `json:"launch_template_id,omitempty" cty:"launch_template_id"`
|
LaunchTemplateID *terraformWriter.Literal `cty:"launch_template_id"`
|
||||||
// Version is the version of the Launch Template to use
|
// Version is the version of the Launch Template to use
|
||||||
Version *terraformWriter.Literal `json:"version,omitempty" cty:"version"`
|
Version *terraformWriter.Literal `cty:"version"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoscalingMixedInstancesPolicyLaunchTemplateOverride struct {
|
type terraformAutoscalingMixedInstancesPolicyLaunchTemplateOverride struct {
|
||||||
// InstanceType is the instance to use
|
// InstanceType is the instance to use
|
||||||
InstanceType *string `json:"instance_type,omitempty" cty:"instance_type"`
|
InstanceType *string `cty:"instance_type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoscalingMixedInstancesPolicyLaunchTemplate struct {
|
type terraformAutoscalingMixedInstancesPolicyLaunchTemplate struct {
|
||||||
// LaunchTemplateSpecification is the definition for a LT
|
// LaunchTemplateSpecification is the definition for a LT
|
||||||
LaunchTemplateSpecification []*terraformAutoscalingMixedInstancesPolicyLaunchTemplateSpecification `json:"launch_template_specification,omitempty" cty:"launch_template_specification"`
|
LaunchTemplateSpecification []*terraformAutoscalingMixedInstancesPolicyLaunchTemplateSpecification `cty:"launch_template_specification"`
|
||||||
// Override the is machine type override
|
// Override the is machine type override
|
||||||
Override []*terraformAutoscalingMixedInstancesPolicyLaunchTemplateOverride `json:"override,omitempty" cty:"override"`
|
Override []*terraformAutoscalingMixedInstancesPolicyLaunchTemplateOverride `cty:"override"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoscalingInstanceDistribution struct {
|
type terraformAutoscalingInstanceDistribution struct {
|
||||||
// OnDemandAllocationStrategy
|
// OnDemandAllocationStrategy
|
||||||
OnDemandAllocationStrategy *string `json:"on_demand_allocation_strategy,omitempty" cty:"on_demand_allocation_strategy"`
|
OnDemandAllocationStrategy *string `cty:"on_demand_allocation_strategy"`
|
||||||
// OnDemandBaseCapacity is the base ondemand requirement
|
// OnDemandBaseCapacity is the base ondemand requirement
|
||||||
OnDemandBaseCapacity *int64 `json:"on_demand_base_capacity,omitempty" cty:"on_demand_base_capacity"`
|
OnDemandBaseCapacity *int64 `cty:"on_demand_base_capacity"`
|
||||||
// OnDemandPercentageAboveBaseCapacity is the percentage above base for on-demand instances
|
// OnDemandPercentageAboveBaseCapacity is the percentage above base for on-demand instances
|
||||||
OnDemandPercentageAboveBaseCapacity *int64 `json:"on_demand_percentage_above_base_capacity,omitempty" cty:"on_demand_percentage_above_base_capacity"`
|
OnDemandPercentageAboveBaseCapacity *int64 `cty:"on_demand_percentage_above_base_capacity"`
|
||||||
// SpotAllocationStrategy is the spot allocation stratergy
|
// SpotAllocationStrategy is the spot allocation stratergy
|
||||||
SpotAllocationStrategy *string `json:"spot_allocation_strategy,omitempty" cty:"spot_allocation_strategy"`
|
SpotAllocationStrategy *string `cty:"spot_allocation_strategy"`
|
||||||
// SpotInstancePool is the number of pools
|
// SpotInstancePool is the number of pools
|
||||||
SpotInstancePool *int64 `json:"spot_instance_pools,omitempty" cty:"spot_instance_pools"`
|
SpotInstancePool *int64 `cty:"spot_instance_pools"`
|
||||||
// SpotMaxPrice is the max bid on spot instance, defaults to demand value
|
// SpotMaxPrice is the max bid on spot instance, defaults to demand value
|
||||||
SpotMaxPrice *string `json:"spot_max_price,omitempty" cty:"spot_max_price"`
|
SpotMaxPrice *string `cty:"spot_max_price"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformMixedInstancesPolicy struct {
|
type terraformMixedInstancesPolicy struct {
|
||||||
// LaunchTemplate is the launch template spec
|
// LaunchTemplate is the launch template spec
|
||||||
LaunchTemplate []*terraformAutoscalingMixedInstancesPolicyLaunchTemplate `json:"launch_template,omitempty" cty:"launch_template"`
|
LaunchTemplate []*terraformAutoscalingMixedInstancesPolicyLaunchTemplate `cty:"launch_template"`
|
||||||
// InstanceDistribution is the distribution strategy
|
// InstanceDistribution is the distribution strategy
|
||||||
InstanceDistribution []*terraformAutoscalingInstanceDistribution `json:"instances_distribution,omitempty" cty:"instances_distribution"`
|
InstanceDistribution []*terraformAutoscalingInstanceDistribution `cty:"instances_distribution"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoscalingGroup struct {
|
type terraformAutoscalingGroup struct {
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
LaunchConfigurationName *terraformWriter.Literal `json:"launch_configuration,omitempty" cty:"launch_configuration"`
|
LaunchConfigurationName *terraformWriter.Literal `cty:"launch_configuration"`
|
||||||
LaunchTemplate *terraformAutoscalingLaunchTemplateSpecification `json:"launch_template,omitempty" cty:"launch_template"`
|
LaunchTemplate *terraformAutoscalingLaunchTemplateSpecification `cty:"launch_template"`
|
||||||
MaxSize *int64 `json:"max_size,omitempty" cty:"max_size"`
|
MaxSize *int64 `cty:"max_size"`
|
||||||
MinSize *int64 `json:"min_size,omitempty" cty:"min_size"`
|
MinSize *int64 `cty:"min_size"`
|
||||||
MixedInstancesPolicy []*terraformMixedInstancesPolicy `json:"mixed_instances_policy,omitempty" cty:"mixed_instances_policy"`
|
MixedInstancesPolicy []*terraformMixedInstancesPolicy `cty:"mixed_instances_policy"`
|
||||||
VPCZoneIdentifier []*terraformWriter.Literal `json:"vpc_zone_identifier,omitempty" cty:"vpc_zone_identifier"`
|
VPCZoneIdentifier []*terraformWriter.Literal `cty:"vpc_zone_identifier"`
|
||||||
Tags []*terraformASGTag `json:"tag,omitempty" cty:"tag"`
|
Tags []*terraformASGTag `cty:"tag"`
|
||||||
MetricsGranularity *string `json:"metrics_granularity,omitempty" cty:"metrics_granularity"`
|
MetricsGranularity *string `cty:"metrics_granularity"`
|
||||||
EnabledMetrics []*string `json:"enabled_metrics,omitempty" cty:"enabled_metrics"`
|
EnabledMetrics []*string `cty:"enabled_metrics"`
|
||||||
SuspendedProcesses []*string `json:"suspended_processes,omitempty" cty:"suspended_processes"`
|
SuspendedProcesses []*string `cty:"suspended_processes"`
|
||||||
InstanceProtection *bool `json:"protect_from_scale_in,omitempty" cty:"protect_from_scale_in"`
|
InstanceProtection *bool `cty:"protect_from_scale_in"`
|
||||||
LoadBalancers []*terraformWriter.Literal `json:"load_balancers,omitempty" cty:"load_balancers"`
|
LoadBalancers []*terraformWriter.Literal `cty:"load_balancers"`
|
||||||
TargetGroupARNs []*terraformWriter.Literal `json:"target_group_arns,omitempty" cty:"target_group_arns"`
|
TargetGroupARNs []*terraformWriter.Literal `cty:"target_group_arns"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenderTerraform is responsible for rendering the terraform codebase
|
// RenderTerraform is responsible for rendering the terraform codebase
|
||||||
|
|
|
||||||
|
|
@ -121,11 +121,11 @@ func (*AutoscalingLifecycleHook) RenderAWS(t *awsup.AWSAPITarget, a, e, changes
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformASGLifecycleHook struct {
|
type terraformASGLifecycleHook struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
AutoScalingGroupName *terraformWriter.Literal `json:"autoscaling_group_name" cty:"autoscaling_group_name"`
|
AutoScalingGroupName *terraformWriter.Literal `cty:"autoscaling_group_name"`
|
||||||
DefaultResult *string `json:"default_result" cty:"default_result"`
|
DefaultResult *string `cty:"default_result"`
|
||||||
HeartbeatTimeout *int64 `json:"heartbeat_timeout" cty:"heartbeat_timeout"`
|
HeartbeatTimeout *int64 `cty:"heartbeat_timeout"`
|
||||||
LifecycleTransition *string `json:"lifecycle_transition" cty:"lifecycle_transition"`
|
LifecycleTransition *string `cty:"lifecycle_transition"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *AutoscalingLifecycleHook) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *AutoscalingLifecycleHook) error {
|
func (_ *AutoscalingLifecycleHook) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *AutoscalingLifecycleHook) error {
|
||||||
|
|
|
||||||
|
|
@ -614,39 +614,39 @@ func (a OrderLoadBalancersByName) Less(i, j int) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLoadBalancer struct {
|
type terraformLoadBalancer struct {
|
||||||
LoadBalancerName *string `json:"name" cty:"name"`
|
LoadBalancerName *string `cty:"name"`
|
||||||
Listener []*terraformLoadBalancerListener `json:"listener" cty:"listener"`
|
Listener []*terraformLoadBalancerListener `cty:"listener"`
|
||||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups" cty:"security_groups"`
|
SecurityGroups []*terraformWriter.Literal `cty:"security_groups"`
|
||||||
Subnets []*terraformWriter.Literal `json:"subnets" cty:"subnets"`
|
Subnets []*terraformWriter.Literal `cty:"subnets"`
|
||||||
Internal *bool `json:"internal,omitempty" cty:"internal"`
|
Internal *bool `cty:"internal"`
|
||||||
|
|
||||||
HealthCheck *terraformLoadBalancerHealthCheck `json:"health_check,omitempty" cty:"health_check"`
|
HealthCheck *terraformLoadBalancerHealthCheck `cty:"health_check"`
|
||||||
AccessLog *terraformLoadBalancerAccessLog `json:"access_logs,omitempty" cty:"access_logs"`
|
AccessLog *terraformLoadBalancerAccessLog `cty:"access_logs"`
|
||||||
|
|
||||||
ConnectionDraining *bool `json:"connection_draining,omitempty" cty:"connection_draining"`
|
ConnectionDraining *bool `cty:"connection_draining"`
|
||||||
ConnectionDrainingTimeout *int64 `json:"connection_draining_timeout,omitempty" cty:"connection_draining_timeout"`
|
ConnectionDrainingTimeout *int64 `cty:"connection_draining_timeout"`
|
||||||
|
|
||||||
CrossZoneLoadBalancing *bool `json:"cross_zone_load_balancing,omitempty" cty:"cross_zone_load_balancing"`
|
CrossZoneLoadBalancing *bool `cty:"cross_zone_load_balancing"`
|
||||||
|
|
||||||
IdleTimeout *int64 `json:"idle_timeout,omitempty" cty:"idle_timeout"`
|
IdleTimeout *int64 `cty:"idle_timeout"`
|
||||||
|
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLoadBalancerListener struct {
|
type terraformLoadBalancerListener struct {
|
||||||
InstancePort int `json:"instance_port" cty:"instance_port"`
|
InstancePort int `cty:"instance_port"`
|
||||||
InstanceProtocol string `json:"instance_protocol" cty:"instance_protocol"`
|
InstanceProtocol string `cty:"instance_protocol"`
|
||||||
LBPort int64 `json:"lb_port" cty:"lb_port"`
|
LBPort int64 `cty:"lb_port"`
|
||||||
LBProtocol string `json:"lb_protocol" cty:"lb_protocol"`
|
LBProtocol string `cty:"lb_protocol"`
|
||||||
SSLCertificateID *string `json:"ssl_certificate_id,omitempty" cty:"ssl_certificate_id"`
|
SSLCertificateID *string `cty:"ssl_certificate_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLoadBalancerHealthCheck struct {
|
type terraformLoadBalancerHealthCheck struct {
|
||||||
Target *string `json:"target" cty:"target"`
|
Target *string `cty:"target"`
|
||||||
HealthyThreshold *int64 `json:"healthy_threshold" cty:"healthy_threshold"`
|
HealthyThreshold *int64 `cty:"healthy_threshold"`
|
||||||
UnhealthyThreshold *int64 `json:"unhealthy_threshold" cty:"unhealthy_threshold"`
|
UnhealthyThreshold *int64 `cty:"unhealthy_threshold"`
|
||||||
Interval *int64 `json:"interval" cty:"interval"`
|
Interval *int64 `cty:"interval"`
|
||||||
Timeout *int64 `json:"timeout" cty:"timeout"`
|
Timeout *int64 `cty:"timeout"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *ClassicLoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ClassicLoadBalancer) error {
|
func (_ *ClassicLoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ClassicLoadBalancer) error {
|
||||||
|
|
|
||||||
|
|
@ -38,10 +38,10 @@ func (_ *ClassicLoadBalancerAccessLog) GetDependencies(tasks map[string]fi.Task)
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLoadBalancerAccessLog struct {
|
type terraformLoadBalancerAccessLog struct {
|
||||||
EmitInterval *int64 `json:"interval,omitempty" cty:"interval"`
|
EmitInterval *int64 `cty:"interval"`
|
||||||
Enabled *bool `json:"enabled,omitempty" cty:"enabled"`
|
Enabled *bool `cty:"enabled"`
|
||||||
S3BucketName *string `json:"bucket,omitempty" cty:"bucket"`
|
S3BucketName *string `cty:"bucket"`
|
||||||
S3BucketPrefix *string `json:"bucket_prefix,omitempty" cty:"bucket_prefix"`
|
S3BucketPrefix *string `cty:"bucket_prefix"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type cloudformationClassicLoadBalancerAccessLog struct {
|
type cloudformationClassicLoadBalancerAccessLog struct {
|
||||||
|
|
|
||||||
|
|
@ -171,9 +171,9 @@ func (_ *DHCPOptions) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *DHCPOption
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformDHCPOptions struct {
|
type terraformDHCPOptions struct {
|
||||||
DomainName *string `json:"domain_name,omitempty" cty:"domain_name"`
|
DomainName *string `cty:"domain_name"`
|
||||||
DomainNameServers []string `json:"domain_name_servers,omitempty" cty:"domain_name_servers"`
|
DomainNameServers []string `cty:"domain_name_servers"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *DHCPOptions) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *DHCPOptions) error {
|
func (_ *DHCPOptions) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *DHCPOptions) error {
|
||||||
|
|
|
||||||
|
|
@ -251,20 +251,20 @@ func (_ *DNSName) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *DNSName) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformRoute53Record struct {
|
type terraformRoute53Record struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
Type *string `json:"type" cty:"type"`
|
Type *string `cty:"type"`
|
||||||
TTL *string `json:"ttl,omitempty" cty:"ttl"`
|
TTL *string `cty:"ttl"`
|
||||||
Records []string `json:"records,omitempty" cty:"records"`
|
Records []string `cty:"records"`
|
||||||
|
|
||||||
Alias *terraformAlias `json:"alias,omitempty" cty:"alias"`
|
Alias *terraformAlias `cty:"alias"`
|
||||||
ZoneID *terraformWriter.Literal `json:"zone_id" cty:"zone_id"`
|
ZoneID *terraformWriter.Literal `cty:"zone_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAlias struct {
|
type terraformAlias struct {
|
||||||
Name *terraformWriter.Literal `json:"name" cty:"name"`
|
Name *terraformWriter.Literal `cty:"name"`
|
||||||
Type *terraformWriter.Literal `json:"type" cty:"type"`
|
Type *terraformWriter.Literal `cty:"type"`
|
||||||
ZoneID *terraformWriter.Literal `json:"zone_id" cty:"zone_id"`
|
ZoneID *terraformWriter.Literal `cty:"zone_id"`
|
||||||
EvaluateTargetHealth *bool `json:"evaluate_target_health" cty:"evaluate_target_health"`
|
EvaluateTargetHealth *bool `cty:"evaluate_target_health"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *DNSName) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *DNSName) error {
|
func (_ *DNSName) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *DNSName) error {
|
||||||
|
|
|
||||||
|
|
@ -226,9 +226,9 @@ func (_ *DNSZone) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *DNSZone) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformRoute53ZoneAssociation struct {
|
type terraformRoute53ZoneAssociation struct {
|
||||||
ZoneID *terraformWriter.Literal `json:"zone_id" cty:"zone_id"`
|
ZoneID *terraformWriter.Literal `cty:"zone_id"`
|
||||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID *terraformWriter.Literal `cty:"vpc_id"`
|
||||||
Lifecycle *terraform.Lifecycle `json:"lifecycle,omitempty" cty:"lifecycle"`
|
Lifecycle *terraform.Lifecycle `cty:"lifecycle"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *DNSZone) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *DNSZone) error {
|
func (_ *DNSZone) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *DNSZone) error {
|
||||||
|
|
|
||||||
|
|
@ -218,14 +218,14 @@ func (e *EBSVolume) getEBSVolumeTagsToDelete(currentTags map[string]string) map[
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformVolume struct {
|
type terraformVolume struct {
|
||||||
AvailabilityZone *string `json:"availability_zone,omitempty" cty:"availability_zone"`
|
AvailabilityZone *string `cty:"availability_zone"`
|
||||||
Size *int64 `json:"size,omitempty" cty:"size"`
|
Size *int64 `cty:"size"`
|
||||||
Type *string `json:"type,omitempty" cty:"type"`
|
Type *string `cty:"type"`
|
||||||
Iops *int64 `json:"iops,omitempty" cty:"iops"`
|
Iops *int64 `cty:"iops"`
|
||||||
Throughput *int64 `json:"throughput,omitempty" cty:"throughput"`
|
Throughput *int64 `cty:"throughput"`
|
||||||
KmsKeyId *string `json:"kms_key_id,omitempty" cty:"kms_key_id"`
|
KmsKeyId *string `cty:"kms_key_id"`
|
||||||
Encrypted *bool `json:"encrypted,omitempty" cty:"encrypted"`
|
Encrypted *bool `cty:"encrypted"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *EBSVolume) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EBSVolume) error {
|
func (_ *EBSVolume) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EBSVolume) error {
|
||||||
|
|
|
||||||
|
|
@ -167,8 +167,8 @@ func (_ *EgressOnlyInternetGateway) RenderAWS(t *awsup.AWSAPITarget, a, e, chang
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformEgressOnlyInternetGateway struct {
|
type terraformEgressOnlyInternetGateway struct {
|
||||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID *terraformWriter.Literal `cty:"vpc_id"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *EgressOnlyInternetGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EgressOnlyInternetGateway) error {
|
func (_ *EgressOnlyInternetGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EgressOnlyInternetGateway) error {
|
||||||
|
|
|
||||||
|
|
@ -272,8 +272,8 @@ func (_ *ElasticIP) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *ElasticIP) e
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformElasticIP struct {
|
type terraformElasticIP struct {
|
||||||
VPC *bool `json:"vpc" cty:"vpc"`
|
VPC *bool `cty:"vpc"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *ElasticIP) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ElasticIP) error {
|
func (_ *ElasticIP) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ElasticIP) error {
|
||||||
|
|
|
||||||
|
|
@ -127,9 +127,9 @@ func (eb *EventBridgeRule) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Event
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformEventBridgeRule struct {
|
type terraformEventBridgeRule struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
EventPattern *terraformWriter.Literal `json:"event_pattern" cty:"event_pattern"`
|
EventPattern *terraformWriter.Literal `cty:"event_pattern"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *EventBridgeRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EventBridgeRule) error {
|
func (_ *EventBridgeRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EventBridgeRule) error {
|
||||||
|
|
|
||||||
|
|
@ -128,8 +128,8 @@ func (eb *EventBridgeTarget) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Eve
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformEventBridgeTarget struct {
|
type terraformEventBridgeTarget struct {
|
||||||
RuleName *terraformWriter.Literal `json:"rule" cty:"rule"`
|
RuleName *terraformWriter.Literal `cty:"rule"`
|
||||||
TargetArn *terraformWriter.Literal `json:"arn" cty:"arn"`
|
TargetArn *terraformWriter.Literal `cty:"arn"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *EventBridgeTarget) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EventBridgeTarget) error {
|
func (_ *EventBridgeTarget) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EventBridgeTarget) error {
|
||||||
|
|
|
||||||
|
|
@ -111,9 +111,9 @@ func (_ *IAMInstanceProfileRole) RenderAWS(t *awsup.AWSAPITarget, a, e, changes
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformIAMInstanceProfile struct {
|
type terraformIAMInstanceProfile struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
Role *terraformWriter.Literal `json:"role" cty:"role"`
|
Role *terraformWriter.Literal `cty:"role"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *IAMInstanceProfileRole) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMInstanceProfileRole) error {
|
func (_ *IAMInstanceProfileRole) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMInstanceProfileRole) error {
|
||||||
|
|
|
||||||
|
|
@ -213,12 +213,12 @@ func (p *IAMOIDCProvider) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *IAMOID
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformIAMOIDCProvider struct {
|
type terraformIAMOIDCProvider struct {
|
||||||
URL *string `json:"url" cty:"url"`
|
URL *string `cty:"url"`
|
||||||
ClientIDList []*string `json:"client_id_list" cty:"client_id_list"`
|
ClientIDList []*string `cty:"client_id_list"`
|
||||||
ThumbprintList []*string `json:"thumbprint_list" cty:"thumbprint_list"`
|
ThumbprintList []*string `cty:"thumbprint_list"`
|
||||||
|
|
||||||
AssumeRolePolicy *terraformWriter.Literal `json:"assume_role_policy" cty:"assume_role_policy"`
|
AssumeRolePolicy *terraformWriter.Literal `cty:"assume_role_policy"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *IAMOIDCProvider) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMOIDCProvider) error {
|
func (p *IAMOIDCProvider) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMOIDCProvider) error {
|
||||||
|
|
|
||||||
|
|
@ -325,10 +325,10 @@ func (_ *IAMRole) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *IAMRole) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformIAMRole struct {
|
type terraformIAMRole struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
AssumeRolePolicy *terraformWriter.Literal `json:"assume_role_policy" cty:"assume_role_policy"`
|
AssumeRolePolicy *terraformWriter.Literal `cty:"assume_role_policy"`
|
||||||
PermissionsBoundary *string `json:"permissions_boundary,omitempty" cty:"permissions_boundary"`
|
PermissionsBoundary *string `cty:"permissions_boundary"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *IAMRole) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMRole) error {
|
func (_ *IAMRole) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMRole) error {
|
||||||
|
|
|
||||||
|
|
@ -305,10 +305,10 @@ func (e *IAMRolePolicy) policyDocumentString() (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformIAMRolePolicy struct {
|
type terraformIAMRolePolicy struct {
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
Role *terraformWriter.Literal `json:"role" cty:"role"`
|
Role *terraformWriter.Literal `cty:"role"`
|
||||||
PolicyDocument *terraformWriter.Literal `json:"policy,omitempty" cty:"policy"`
|
PolicyDocument *terraformWriter.Literal `cty:"policy"`
|
||||||
PolicyArn *string `json:"policy_arn,omitempty" cty:"policy_arn"`
|
PolicyArn *string `cty:"policy_arn"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *IAMRolePolicy) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMRolePolicy) error {
|
func (_ *IAMRolePolicy) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMRolePolicy) error {
|
||||||
|
|
|
||||||
|
|
@ -180,8 +180,8 @@ func (_ *InternetGateway) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Intern
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformInternetGateway struct {
|
type terraformInternetGateway struct {
|
||||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID *terraformWriter.Literal `cty:"vpc_id"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *InternetGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *InternetGateway) error {
|
func (_ *InternetGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *InternetGateway) error {
|
||||||
|
|
|
||||||
|
|
@ -25,144 +25,144 @@ import (
|
||||||
|
|
||||||
type terraformLaunchTemplateNetworkInterface struct {
|
type terraformLaunchTemplateNetworkInterface struct {
|
||||||
// AssociatePublicIPAddress associates a public ip address with the network interface. Boolean value.
|
// AssociatePublicIPAddress associates a public ip address with the network interface. Boolean value.
|
||||||
AssociatePublicIPAddress *bool `json:"associate_public_ip_address,omitempty" cty:"associate_public_ip_address"`
|
AssociatePublicIPAddress *bool `cty:"associate_public_ip_address"`
|
||||||
// DeleteOnTermination indicates whether the network interface should be destroyed on instance termination.
|
// DeleteOnTermination indicates whether the network interface should be destroyed on instance termination.
|
||||||
DeleteOnTermination *bool `json:"delete_on_termination,omitempty" cty:"delete_on_termination"`
|
DeleteOnTermination *bool `cty:"delete_on_termination"`
|
||||||
// Ipv6AddressCount is the number of IPv6 addresses to assign with the primary network interface.
|
// Ipv6AddressCount is the number of IPv6 addresses to assign with the primary network interface.
|
||||||
Ipv6AddressCount *int64 `json:"ipv6_address_count,omitempty" cty:"ipv6_address_count"`
|
Ipv6AddressCount *int64 `cty:"ipv6_address_count"`
|
||||||
// SecurityGroups is a list of security group ids.
|
// SecurityGroups is a list of security group ids.
|
||||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
SecurityGroups []*terraformWriter.Literal `cty:"security_groups"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateMonitoring struct {
|
type terraformLaunchTemplateMonitoring struct {
|
||||||
// Enabled indicates that monitoring is enabled
|
// Enabled indicates that monitoring is enabled
|
||||||
Enabled *bool `json:"enabled,omitempty" cty:"enabled"`
|
Enabled *bool `cty:"enabled"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplatePlacement struct {
|
type terraformLaunchTemplatePlacement struct {
|
||||||
// Affinity is he affinity setting for an instance on a Dedicated Host.
|
// Affinity is he affinity setting for an instance on a Dedicated Host.
|
||||||
Affinity *string `json:"affinity,omitempty" cty:"affinity"`
|
Affinity *string `cty:"affinity"`
|
||||||
// AvailabilityZone is the Availability Zone for the instance.
|
// AvailabilityZone is the Availability Zone for the instance.
|
||||||
AvailabilityZone *string `json:"availability_zone,omitempty" cty:"availability_zone"`
|
AvailabilityZone *string `cty:"availability_zone"`
|
||||||
// GroupName is the name of the placement group for the instance.
|
// GroupName is the name of the placement group for the instance.
|
||||||
GroupName *string `json:"group_name,omitempty" cty:"group_name"`
|
GroupName *string `cty:"group_name"`
|
||||||
// HostID is the ID of the Dedicated Host for the instance.
|
// HostID is the ID of the Dedicated Host for the instance.
|
||||||
HostID *string `json:"host_id,omitempty" cty:"host_id"`
|
HostID *string `cty:"host_id"`
|
||||||
// SpreadDomain are reserved for future use.
|
// SpreadDomain are reserved for future use.
|
||||||
SpreadDomain *string `json:"spread_domain,omitempty" cty:"spread_domain"`
|
SpreadDomain *string `cty:"spread_domain"`
|
||||||
// Tenancy ist he tenancy of the instance. Can be default, dedicated, or host.
|
// Tenancy ist he tenancy of the instance. Can be default, dedicated, or host.
|
||||||
Tenancy *string `json:"tenancy,omitempty" cty:"tenancy"`
|
Tenancy *string `cty:"tenancy"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateIAMProfile struct {
|
type terraformLaunchTemplateIAMProfile struct {
|
||||||
// Name is the name of the profile
|
// Name is the name of the profile
|
||||||
Name *terraformWriter.Literal `json:"name,omitempty" cty:"name"`
|
Name *terraformWriter.Literal `cty:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateMarketOptionsSpotOptions struct {
|
type terraformLaunchTemplateMarketOptionsSpotOptions struct {
|
||||||
// BlockDurationMinutes is required duration in minutes. This value must be a multiple of 60.
|
// BlockDurationMinutes is required duration in minutes. This value must be a multiple of 60.
|
||||||
BlockDurationMinutes *int64 `json:"block_duration_minutes,omitempty" cty:"block_duration_minutes"`
|
BlockDurationMinutes *int64 `cty:"block_duration_minutes"`
|
||||||
// InstanceInterruptionBehavior is the behavior when a Spot Instance is interrupted. Can be hibernate, stop, or terminate
|
// InstanceInterruptionBehavior is the behavior when a Spot Instance is interrupted. Can be hibernate, stop, or terminate
|
||||||
InstanceInterruptionBehavior *string `json:"instance_interruption_behavior,omitempty" cty:"instance_interruption_behavior"`
|
InstanceInterruptionBehavior *string `cty:"instance_interruption_behavior"`
|
||||||
// MaxPrice is the maximum hourly price you're willing to pay for the Spot Instances
|
// MaxPrice is the maximum hourly price you're willing to pay for the Spot Instances
|
||||||
MaxPrice *string `json:"max_price,omitempty" cty:"max_price"`
|
MaxPrice *string `cty:"max_price"`
|
||||||
// SpotInstanceType is the Spot Instance request type. Can be one-time, or persistent
|
// SpotInstanceType is the Spot Instance request type. Can be one-time, or persistent
|
||||||
SpotInstanceType *string `json:"spot_instance_type,omitempty" cty:"spot_instance_type"`
|
SpotInstanceType *string `cty:"spot_instance_type"`
|
||||||
// ValidUntil is the end date of the request
|
// ValidUntil is the end date of the request
|
||||||
ValidUntil *string `json:"valid_until,omitempty" cty:"valid_until"`
|
ValidUntil *string `cty:"valid_until"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateMarketOptions struct {
|
type terraformLaunchTemplateMarketOptions struct {
|
||||||
// MarketType is the option type
|
// MarketType is the option type
|
||||||
MarketType *string `json:"market_type,omitempty" cty:"market_type"`
|
MarketType *string `cty:"market_type"`
|
||||||
// SpotOptions are the set of options
|
// SpotOptions are the set of options
|
||||||
SpotOptions []*terraformLaunchTemplateMarketOptionsSpotOptions `json:"spot_options,omitempty" cty:"spot_options"`
|
SpotOptions []*terraformLaunchTemplateMarketOptionsSpotOptions `cty:"spot_options"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateBlockDeviceEBS struct {
|
type terraformLaunchTemplateBlockDeviceEBS struct {
|
||||||
// VolumeType is the ebs type to use
|
// VolumeType is the ebs type to use
|
||||||
VolumeType *string `json:"volume_type,omitempty" cty:"volume_type"`
|
VolumeType *string `cty:"volume_type"`
|
||||||
// VolumeSize is the volume size
|
// VolumeSize is the volume size
|
||||||
VolumeSize *int64 `json:"volume_size,omitempty" cty:"volume_size"`
|
VolumeSize *int64 `cty:"volume_size"`
|
||||||
// IOPS is the provisioned IOPS
|
// IOPS is the provisioned IOPS
|
||||||
IOPS *int64 `json:"iops,omitempty" cty:"iops"`
|
IOPS *int64 `cty:"iops"`
|
||||||
// Throughput is the gp3 volume throughput
|
// Throughput is the gp3 volume throughput
|
||||||
Throughput *int64 `json:"throughput,omitempty" cty:"throughput"`
|
Throughput *int64 `cty:"throughput"`
|
||||||
// DeleteOnTermination indicates the volume should die with the instance
|
// DeleteOnTermination indicates the volume should die with the instance
|
||||||
DeleteOnTermination *bool `json:"delete_on_termination,omitempty" cty:"delete_on_termination"`
|
DeleteOnTermination *bool `cty:"delete_on_termination"`
|
||||||
// Encrypted indicates the device should be encrypted
|
// Encrypted indicates the device should be encrypted
|
||||||
Encrypted *bool `json:"encrypted,omitempty" cty:"encrypted"`
|
Encrypted *bool `cty:"encrypted"`
|
||||||
// KmsKeyID is the encryption key identifier for the volume
|
// KmsKeyID is the encryption key identifier for the volume
|
||||||
KmsKeyID *string `json:"kms_key_id,omitempty" cty:"kms_key_id"`
|
KmsKeyID *string `cty:"kms_key_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateBlockDevice struct {
|
type terraformLaunchTemplateBlockDevice struct {
|
||||||
// DeviceName is the name of the device
|
// DeviceName is the name of the device
|
||||||
DeviceName *string `json:"device_name,omitempty" cty:"device_name"`
|
DeviceName *string `cty:"device_name"`
|
||||||
// VirtualName is used for the ephemeral devices
|
// VirtualName is used for the ephemeral devices
|
||||||
VirtualName *string `json:"virtual_name,omitempty" cty:"virtual_name"`
|
VirtualName *string `cty:"virtual_name"`
|
||||||
// EBS defines the ebs spec
|
// EBS defines the ebs spec
|
||||||
EBS []*terraformLaunchTemplateBlockDeviceEBS `json:"ebs,omitempty" cty:"ebs"`
|
EBS []*terraformLaunchTemplateBlockDeviceEBS `cty:"ebs"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateCreditSpecification struct {
|
type terraformLaunchTemplateCreditSpecification struct {
|
||||||
CPUCredits *string `json:"cpu_credits,omitempty" cty:"cpu_credits"`
|
CPUCredits *string `cty:"cpu_credits"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateTagSpecification struct {
|
type terraformLaunchTemplateTagSpecification struct {
|
||||||
// ResourceType is the type of resource to tag.
|
// ResourceType is the type of resource to tag.
|
||||||
ResourceType *string `json:"resource_type,omitempty" cty:"resource_type"`
|
ResourceType *string `cty:"resource_type"`
|
||||||
// Tags are the tags to apply to the resource.
|
// Tags are the tags to apply to the resource.
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplateInstanceMetadata struct {
|
type terraformLaunchTemplateInstanceMetadata struct {
|
||||||
// HTTPEndpoint enables or disables the HTTP metadata endpoint on instances.
|
// HTTPEndpoint enables or disables the HTTP metadata endpoint on instances.
|
||||||
HTTPEndpoint *string `json:"http_endpoint,omitempty" cty:"http_endpoint"`
|
HTTPEndpoint *string `cty:"http_endpoint"`
|
||||||
// HTTPPutResponseHopLimit is the desired HTTP PUT response hop limit for instance metadata requests.
|
// HTTPPutResponseHopLimit is the desired HTTP PUT response hop limit for instance metadata requests.
|
||||||
HTTPPutResponseHopLimit *int64 `json:"http_put_response_hop_limit,omitempty" cty:"http_put_response_hop_limit"`
|
HTTPPutResponseHopLimit *int64 `cty:"http_put_response_hop_limit"`
|
||||||
// HTTPTokens is the state of token usage for your instance metadata requests.
|
// HTTPTokens is the state of token usage for your instance metadata requests.
|
||||||
HTTPTokens *string `json:"http_tokens,omitempty" cty:"http_tokens"`
|
HTTPTokens *string `cty:"http_tokens"`
|
||||||
// HTTPProtocolIPv6 enables the IPv6 instance metadata endpoint
|
// HTTPProtocolIPv6 enables the IPv6 instance metadata endpoint
|
||||||
HTTPProtocolIPv6 *string `json:"http_protocol_ipv6,omitempty" cty:"http_protocol_ipv6"`
|
HTTPProtocolIPv6 *string `cty:"http_protocol_ipv6"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchTemplate struct {
|
type terraformLaunchTemplate struct {
|
||||||
// Name is the name of the launch template
|
// Name is the name of the launch template
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
// Lifecycle is the terraform lifecycle
|
// Lifecycle is the terraform lifecycle
|
||||||
Lifecycle *terraform.Lifecycle `json:"lifecycle,omitempty" cty:"lifecycle"`
|
Lifecycle *terraform.Lifecycle `cty:"lifecycle"`
|
||||||
|
|
||||||
// BlockDeviceMappings is the device mappings
|
// BlockDeviceMappings is the device mappings
|
||||||
BlockDeviceMappings []*terraformLaunchTemplateBlockDevice `json:"block_device_mappings,omitempty" cty:"block_device_mappings"`
|
BlockDeviceMappings []*terraformLaunchTemplateBlockDevice `cty:"block_device_mappings"`
|
||||||
// CreditSpecification is the credit option for CPU Usage on some instance types
|
// CreditSpecification is the credit option for CPU Usage on some instance types
|
||||||
CreditSpecification *terraformLaunchTemplateCreditSpecification `json:"credit_specification,omitempty" cty:"credit_specification"`
|
CreditSpecification *terraformLaunchTemplateCreditSpecification `cty:"credit_specification"`
|
||||||
// EBSOptimized indicates if the root device is ebs optimized
|
// EBSOptimized indicates if the root device is ebs optimized
|
||||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
EBSOptimized *bool `cty:"ebs_optimized"`
|
||||||
// IAMInstanceProfile is the IAM profile to assign to the nodes
|
// IAMInstanceProfile is the IAM profile to assign to the nodes
|
||||||
IAMInstanceProfile []*terraformLaunchTemplateIAMProfile `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
IAMInstanceProfile []*terraformLaunchTemplateIAMProfile `cty:"iam_instance_profile"`
|
||||||
// ImageID is the ami to use for the instances
|
// ImageID is the ami to use for the instances
|
||||||
ImageID *string `json:"image_id,omitempty" cty:"image_id"`
|
ImageID *string `cty:"image_id"`
|
||||||
// InstanceType is the type of instance
|
// InstanceType is the type of instance
|
||||||
InstanceType *string `json:"instance_type,omitempty" cty:"instance_type"`
|
InstanceType *string `cty:"instance_type"`
|
||||||
// KeyName is the ssh key to use
|
// KeyName is the ssh key to use
|
||||||
KeyName *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
KeyName *terraformWriter.Literal `cty:"key_name"`
|
||||||
// MarketOptions are the spot pricing options
|
// MarketOptions are the spot pricing options
|
||||||
MarketOptions []*terraformLaunchTemplateMarketOptions `json:"instance_market_options,omitempty" cty:"instance_market_options"`
|
MarketOptions []*terraformLaunchTemplateMarketOptions `cty:"instance_market_options"`
|
||||||
// MetadataOptions are the instance metadata options.
|
// MetadataOptions are the instance metadata options.
|
||||||
MetadataOptions *terraformLaunchTemplateInstanceMetadata `json:"metadata_options,omitempty" cty:"metadata_options"`
|
MetadataOptions *terraformLaunchTemplateInstanceMetadata `cty:"metadata_options"`
|
||||||
// Monitoring are the instance monitoring options
|
// Monitoring are the instance monitoring options
|
||||||
Monitoring []*terraformLaunchTemplateMonitoring `json:"monitoring,omitempty" cty:"monitoring"`
|
Monitoring []*terraformLaunchTemplateMonitoring `cty:"monitoring"`
|
||||||
// NetworkInterfaces are the networking options
|
// NetworkInterfaces are the networking options
|
||||||
NetworkInterfaces []*terraformLaunchTemplateNetworkInterface `json:"network_interfaces,omitempty" cty:"network_interfaces"`
|
NetworkInterfaces []*terraformLaunchTemplateNetworkInterface `cty:"network_interfaces"`
|
||||||
// Placement are the tenancy options
|
// Placement are the tenancy options
|
||||||
Placement []*terraformLaunchTemplatePlacement `json:"placement,omitempty" cty:"placement"`
|
Placement []*terraformLaunchTemplatePlacement `cty:"placement"`
|
||||||
// Tags is a map of tags applied to the launch template itself
|
// Tags is a map of tags applied to the launch template itself
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
// TagSpecifications are the tags to apply to a resource when it is created.
|
// TagSpecifications are the tags to apply to a resource when it is created.
|
||||||
TagSpecifications []*terraformLaunchTemplateTagSpecification `json:"tag_specifications,omitempty" cty:"tag_specifications"`
|
TagSpecifications []*terraformLaunchTemplateTagSpecification `cty:"tag_specifications"`
|
||||||
// UserData is the user data for the instances
|
// UserData is the user data for the instances
|
||||||
UserData *terraformWriter.Literal `json:"user_data,omitempty" cty:"user_data"`
|
UserData *terraformWriter.Literal `cty:"user_data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TerraformLink returns the terraform reference
|
// TerraformLink returns the terraform reference
|
||||||
|
|
|
||||||
|
|
@ -361,9 +361,9 @@ func (_ *NatGateway) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *NatGateway)
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformNATGateway struct {
|
type terraformNATGateway struct {
|
||||||
AllocationID *terraformWriter.Literal `json:"allocation_id,omitempty" cty:"allocation_id"`
|
AllocationID *terraformWriter.Literal `cty:"allocation_id"`
|
||||||
SubnetID *terraformWriter.Literal `json:"subnet_id,omitempty" cty:"subnet_id"`
|
SubnetID *terraformWriter.Literal `cty:"subnet_id"`
|
||||||
Tag map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tag map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *NatGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *NatGateway) error {
|
func (_ *NatGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *NatGateway) error {
|
||||||
|
|
|
||||||
|
|
@ -694,34 +694,34 @@ func (_ *NetworkLoadBalancer) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Ne
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformNetworkLoadBalancer struct {
|
type terraformNetworkLoadBalancer struct {
|
||||||
Name string `json:"name" cty:"name"`
|
Name string `cty:"name"`
|
||||||
Internal bool `json:"internal" cty:"internal"`
|
Internal bool `cty:"internal"`
|
||||||
Type string `json:"load_balancer_type" cty:"load_balancer_type"`
|
Type string `cty:"load_balancer_type"`
|
||||||
SubnetMappings []terraformNetworkLoadBalancerSubnetMapping `json:"subnet_mapping" cty:"subnet_mapping"`
|
SubnetMappings []terraformNetworkLoadBalancerSubnetMapping `cty:"subnet_mapping"`
|
||||||
CrossZoneLoadBalancing bool `json:"enable_cross_zone_load_balancing" cty:"enable_cross_zone_load_balancing"`
|
CrossZoneLoadBalancing bool `cty:"enable_cross_zone_load_balancing"`
|
||||||
AccessLog *terraformNetworkLoadBalancerAccessLog `json:"access_logs,omitempty" cty:"access_logs"`
|
AccessLog *terraformNetworkLoadBalancerAccessLog `cty:"access_logs"`
|
||||||
|
|
||||||
Tags map[string]string `json:"tags" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformNetworkLoadBalancerSubnetMapping struct {
|
type terraformNetworkLoadBalancerSubnetMapping struct {
|
||||||
Subnet *terraformWriter.Literal `json:"subnet_id" cty:"subnet_id"`
|
Subnet *terraformWriter.Literal `cty:"subnet_id"`
|
||||||
AllocationID *string `json:"allocation_id,omitempty" cty:"allocation_id"`
|
AllocationID *string `cty:"allocation_id"`
|
||||||
PrivateIPv4Address *string `json:"private_ipv4_address,omitempty" cty:"private_ipv4_address"`
|
PrivateIPv4Address *string `cty:"private_ipv4_address"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformNetworkLoadBalancerListener struct {
|
type terraformNetworkLoadBalancerListener struct {
|
||||||
LoadBalancer *terraformWriter.Literal `json:"load_balancer_arn" cty:"load_balancer_arn"`
|
LoadBalancer *terraformWriter.Literal `cty:"load_balancer_arn"`
|
||||||
Port int64 `json:"port" cty:"port"`
|
Port int64 `cty:"port"`
|
||||||
Protocol string `json:"protocol" cty:"protocol"`
|
Protocol string `cty:"protocol"`
|
||||||
CertificateARN *string `json:"certificate_arn,omitempty" cty:"certificate_arn"`
|
CertificateARN *string `cty:"certificate_arn"`
|
||||||
SSLPolicy *string `json:"ssl_policy,omitempty" cty:"ssl_policy"`
|
SSLPolicy *string `cty:"ssl_policy"`
|
||||||
DefaultAction []terraformNetworkLoadBalancerListenerAction `json:"default_action" cty:"default_action"`
|
DefaultAction []terraformNetworkLoadBalancerListenerAction `cty:"default_action"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformNetworkLoadBalancerListenerAction struct {
|
type terraformNetworkLoadBalancerListenerAction struct {
|
||||||
Type string `json:"type" cty:"type"`
|
Type string `cty:"type"`
|
||||||
TargetGroupARN *terraformWriter.Literal `json:"target_group_arn,omitempty" cty:"target_group_arn"`
|
TargetGroupARN *terraformWriter.Literal `cty:"target_group_arn"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *NetworkLoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *NetworkLoadBalancer) error {
|
func (_ *NetworkLoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *NetworkLoadBalancer) error {
|
||||||
|
|
|
||||||
|
|
@ -38,9 +38,9 @@ func (_ *NetworkLoadBalancerAccessLog) GetDependencies(tasks map[string]fi.Task)
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformNetworkLoadBalancerAccessLog struct {
|
type terraformNetworkLoadBalancerAccessLog struct {
|
||||||
Enabled *bool `json:"enabled,omitempty" cty:"enabled"`
|
Enabled *bool `cty:"enabled"`
|
||||||
S3BucketName *string `json:"bucket,omitempty" cty:"bucket"`
|
S3BucketName *string `cty:"bucket"`
|
||||||
S3BucketPrefix *string `json:"bucket_prefix,omitempty" cty:"prefix"`
|
S3BucketPrefix *string `cty:"prefix"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func findNetworkLoadBalancerAttributes(cloud awsup.AWSCloud, LoadBalancerArn string) ([]*elbv2.LoadBalancerAttribute, error) {
|
func findNetworkLoadBalancerAttributes(cloud awsup.AWSCloud, LoadBalancerArn string) ([]*elbv2.LoadBalancerAttribute, error) {
|
||||||
|
|
|
||||||
|
|
@ -271,14 +271,14 @@ func checkNotNil(s *string) *string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformRoute struct {
|
type terraformRoute struct {
|
||||||
RouteTableID *terraformWriter.Literal `json:"route_table_id" cty:"route_table_id"`
|
RouteTableID *terraformWriter.Literal `cty:"route_table_id"`
|
||||||
CIDR *string `json:"destination_cidr_block,omitempty" cty:"destination_cidr_block"`
|
CIDR *string `cty:"destination_cidr_block"`
|
||||||
IPv6CIDR *string `json:"destination_ipv6_cidr_block,omitempty" cty:"destination_ipv6_cidr_block"`
|
IPv6CIDR *string `cty:"destination_ipv6_cidr_block"`
|
||||||
EgressOnlyInternetGatewayID *terraformWriter.Literal `json:"egress_onlygateway_id,omitempty" cty:"egress_only_gateway_id"`
|
EgressOnlyInternetGatewayID *terraformWriter.Literal `cty:"egress_only_gateway_id"`
|
||||||
InternetGatewayID *terraformWriter.Literal `json:"gateway_id,omitempty" cty:"gateway_id"`
|
InternetGatewayID *terraformWriter.Literal `cty:"gateway_id"`
|
||||||
NATGatewayID *terraformWriter.Literal `json:"nat_gateway_id,omitempty" cty:"nat_gateway_id"`
|
NATGatewayID *terraformWriter.Literal `cty:"nat_gateway_id"`
|
||||||
TransitGatewayID *string `json:"transit_gateway_id,omitempty" cty:"transit_gateway_id"`
|
TransitGatewayID *string `cty:"transit_gateway_id"`
|
||||||
InstanceID *terraformWriter.Literal `json:"instance_id,omitempty" cty:"instance_id"`
|
InstanceID *terraformWriter.Literal `cty:"instance_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Route) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Route) error {
|
func (_ *Route) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Route) error {
|
||||||
|
|
|
||||||
|
|
@ -192,8 +192,8 @@ func (_ *RouteTable) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *RouteTable)
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformRouteTable struct {
|
type terraformRouteTable struct {
|
||||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID *terraformWriter.Literal `cty:"vpc_id"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *RouteTable) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *RouteTable) error {
|
func (_ *RouteTable) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *RouteTable) error {
|
||||||
|
|
|
||||||
|
|
@ -188,8 +188,8 @@ func (_ *RouteTableAssociation) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformRouteTableAssociation struct {
|
type terraformRouteTableAssociation struct {
|
||||||
SubnetID *terraformWriter.Literal `json:"subnet_id" cty:"subnet_id"`
|
SubnetID *terraformWriter.Literal `cty:"subnet_id"`
|
||||||
RouteTableID *terraformWriter.Literal `json:"route_table_id" cty:"route_table_id"`
|
RouteTableID *terraformWriter.Literal `cty:"route_table_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *RouteTableAssociation) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *RouteTableAssociation) error {
|
func (_ *RouteTableAssociation) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *RouteTableAssociation) error {
|
||||||
|
|
|
||||||
|
|
@ -186,10 +186,10 @@ func (_ *SecurityGroup) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Security
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformSecurityGroup struct {
|
type terraformSecurityGroup struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID *terraformWriter.Literal `cty:"vpc_id"`
|
||||||
Description *string `json:"description" cty:"description"`
|
Description *string `cty:"description"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *SecurityGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SecurityGroup) error {
|
func (_ *SecurityGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SecurityGroup) error {
|
||||||
|
|
|
||||||
|
|
@ -309,17 +309,17 @@ func (_ *SecurityGroupRule) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Secu
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformSecurityGroupIngress struct {
|
type terraformSecurityGroupIngress struct {
|
||||||
Type *string `json:"type" cty:"type"`
|
Type *string `cty:"type"`
|
||||||
|
|
||||||
SecurityGroup *terraformWriter.Literal `json:"security_group_id" cty:"security_group_id"`
|
SecurityGroup *terraformWriter.Literal `cty:"security_group_id"`
|
||||||
SourceGroup *terraformWriter.Literal `json:"source_security_group_id,omitempty" cty:"source_security_group_id"`
|
SourceGroup *terraformWriter.Literal `cty:"source_security_group_id"`
|
||||||
|
|
||||||
FromPort *int64 `json:"from_port,omitempty" cty:"from_port"`
|
FromPort *int64 `cty:"from_port"`
|
||||||
ToPort *int64 `json:"to_port,omitempty" cty:"to_port"`
|
ToPort *int64 `cty:"to_port"`
|
||||||
|
|
||||||
Protocol *string `json:"protocol,omitempty" cty:"protocol"`
|
Protocol *string `cty:"protocol"`
|
||||||
CIDRBlocks []string `json:"cidr_blocks,omitempty" cty:"cidr_blocks"`
|
CIDRBlocks []string `cty:"cidr_blocks"`
|
||||||
IPv6CIDRBlocks []string `json:"ipv6_cidr_blocks,omitempty" cty:"ipv6_cidr_blocks"`
|
IPv6CIDRBlocks []string `cty:"ipv6_cidr_blocks"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *SecurityGroupRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SecurityGroupRule) error {
|
func (_ *SecurityGroupRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SecurityGroupRule) error {
|
||||||
|
|
|
||||||
|
|
@ -188,10 +188,10 @@ func (q *SQS) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *SQS) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformSQSQueue struct {
|
type terraformSQSQueue struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
MessageRetentionSeconds int `json:"message_retention_seconds" cty:"message_retention_seconds"`
|
MessageRetentionSeconds int `cty:"message_retention_seconds"`
|
||||||
Policy *terraformWriter.Literal `json:"policy" cty:"policy"`
|
Policy *terraformWriter.Literal `cty:"policy"`
|
||||||
Tags map[string]string `json:"tags" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *SQS) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SQS) error {
|
func (_ *SQS) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SQS) error {
|
||||||
|
|
|
||||||
|
|
@ -183,9 +183,9 @@ func (_ *SSHKey) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *SSHKey) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformSSHKey struct {
|
type terraformSSHKey struct {
|
||||||
Name *string `json:"key_name" cty:"key_name"`
|
Name *string `cty:"key_name"`
|
||||||
PublicKey *terraformWriter.Literal `json:"public_key" cty:"public_key"`
|
PublicKey *terraformWriter.Literal `cty:"public_key"`
|
||||||
Tags map[string]string `json:"tags" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *SSHKey) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SSHKey) error {
|
func (_ *SSHKey) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SSHKey) error {
|
||||||
|
|
|
||||||
|
|
@ -355,11 +355,11 @@ func subnetSlicesEqualIgnoreOrder(l, r []*Subnet) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformSubnet struct {
|
type terraformSubnet struct {
|
||||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID *terraformWriter.Literal `cty:"vpc_id"`
|
||||||
CIDR *string `json:"cidr_block" cty:"cidr_block"`
|
CIDR *string `cty:"cidr_block"`
|
||||||
IPv6CIDR *string `json:"ipv6_cidr_block" cty:"ipv6_cidr_block"`
|
IPv6CIDR *string `cty:"ipv6_cidr_block"`
|
||||||
AvailabilityZone *string `json:"availability_zone" cty:"availability_zone"`
|
AvailabilityZone *string `cty:"availability_zone"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Subnet) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Subnet) error {
|
func (_ *Subnet) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Subnet) error {
|
||||||
|
|
|
||||||
|
|
@ -206,18 +206,18 @@ func (a OrderTargetGroupsByName) Less(i, j int) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformTargetGroup struct {
|
type terraformTargetGroup struct {
|
||||||
Name string `json:"name" cty:"name"`
|
Name string `cty:"name"`
|
||||||
Port int64 `json:"port" cty:"port"`
|
Port int64 `cty:"port"`
|
||||||
Protocol string `json:"protocol" cty:"protocol"`
|
Protocol string `cty:"protocol"`
|
||||||
VPCID terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID terraformWriter.Literal `cty:"vpc_id"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
HealthCheck terraformTargetGroupHealthCheck `json:"health_check" cty:"health_check"`
|
HealthCheck terraformTargetGroupHealthCheck `cty:"health_check"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformTargetGroupHealthCheck struct {
|
type terraformTargetGroupHealthCheck struct {
|
||||||
HealthyThreshold int64 `json:"healthy_threshold" cty:"healthy_threshold"`
|
HealthyThreshold int64 `cty:"healthy_threshold"`
|
||||||
UnhealthyThreshold int64 `json:"unhealthy_threshold" cty:"unhealthy_threshold"`
|
UnhealthyThreshold int64 `cty:"unhealthy_threshold"`
|
||||||
Protocol string `json:"protocol" cty:"protocol"`
|
Protocol string `cty:"protocol"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *TargetGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *TargetGroup) error {
|
func (_ *TargetGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *TargetGroup) error {
|
||||||
|
|
|
||||||
|
|
@ -281,11 +281,11 @@ func (e *VPC) FindDeletions(c *fi.Context) ([]fi.Deletion, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformVPC struct {
|
type terraformVPC struct {
|
||||||
CIDR *string `json:"cidr_block,omitempty" cty:"cidr_block"`
|
CIDR *string `cty:"cidr_block"`
|
||||||
EnableDNSHostnames *bool `json:"enable_dns_hostnames,omitempty" cty:"enable_dns_hostnames"`
|
EnableDNSHostnames *bool `cty:"enable_dns_hostnames"`
|
||||||
EnableDNSSupport *bool `json:"enable_dns_support,omitempty" cty:"enable_dns_support"`
|
EnableDNSSupport *bool `cty:"enable_dns_support"`
|
||||||
AmazonIPv6 *bool `json:"assign_generated_ipv6_cidr_block,omitempty" cty:"assign_generated_ipv6_cidr_block"`
|
AmazonIPv6 *bool `cty:"assign_generated_ipv6_cidr_block"`
|
||||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
Tags map[string]string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *VPC) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPC) error {
|
func (_ *VPC) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPC) error {
|
||||||
|
|
|
||||||
|
|
@ -103,8 +103,8 @@ func (_ *VPCDHCPOptionsAssociation) RenderAWS(t *awsup.AWSAPITarget, a, e, chang
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformVPCDHCPOptionsAssociation struct {
|
type terraformVPCDHCPOptionsAssociation struct {
|
||||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID *terraformWriter.Literal `cty:"vpc_id"`
|
||||||
DHCPOptionsID *terraformWriter.Literal `json:"dhcp_options_id" cty:"dhcp_options_id"`
|
DHCPOptionsID *terraformWriter.Literal `cty:"dhcp_options_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *VPCDHCPOptionsAssociation) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPCDHCPOptionsAssociation) error {
|
func (_ *VPCDHCPOptionsAssociation) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPCDHCPOptionsAssociation) error {
|
||||||
|
|
|
||||||
|
|
@ -140,8 +140,8 @@ func (_ *VPCCIDRBlock) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *VPCCIDRBl
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformVPCCIDRBlock struct {
|
type terraformVPCCIDRBlock struct {
|
||||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
VPCID *terraformWriter.Literal `cty:"vpc_id"`
|
||||||
CIDRBlock *string `json:"cidr_block" cty:"cidr_block"`
|
CIDRBlock *string `cty:"cidr_block"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *VPCCIDRBlock) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPCCIDRBlock) error {
|
func (_ *VPCCIDRBlock) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPCCIDRBlock) error {
|
||||||
|
|
|
||||||
|
|
@ -132,9 +132,9 @@ func (_ *Volume) RenderDO(t *do.DOAPITarget, a, e, changes *Volume) error {
|
||||||
// terraformVolume represents the digitalocean_volume resource in terraform
|
// terraformVolume represents the digitalocean_volume resource in terraform
|
||||||
// https://www.terraform.io/docs/providers/do/r/volume.html
|
// https://www.terraform.io/docs/providers/do/r/volume.html
|
||||||
type terraformVolume struct {
|
type terraformVolume struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
SizeGB *int64 `json:"size" cty:"size"`
|
SizeGB *int64 `cty:"size"`
|
||||||
Region *string `json:"region" cty:"region"`
|
Region *string `cty:"region"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Volume) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Volume) error {
|
func (_ *Volume) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Volume) error {
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,7 @@ func (_ *Address) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Address) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAddress struct {
|
type terraformAddress struct {
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Address) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Address) error {
|
func (_ *Address) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Address) error {
|
||||||
|
|
|
||||||
|
|
@ -163,11 +163,11 @@ func (_ *Disk) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Disk) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformDisk struct {
|
type terraformDisk struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
VolumeType *string `json:"type" cty:"type"`
|
VolumeType *string `cty:"type"`
|
||||||
SizeGB *int64 `json:"size" cty:"size"`
|
SizeGB *int64 `cty:"size"`
|
||||||
Zone *string `json:"zone" cty:"zone"`
|
Zone *string `cty:"zone"`
|
||||||
Labels map[string]string `json:"labels,omitempty" cty:"labels"`
|
Labels map[string]string `cty:"labels"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Disk) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Disk) error {
|
func (_ *Disk) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Disk) error {
|
||||||
|
|
|
||||||
|
|
@ -213,22 +213,22 @@ func (_ *FirewallRule) RenderGCE(t *gce.GCEAPITarget, a, e, changes *FirewallRul
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAllow struct {
|
type terraformAllow struct {
|
||||||
Protocol string `json:"protocol,omitempty" cty:"protocol"`
|
Protocol string `cty:"protocol"`
|
||||||
Ports []string `json:"ports,omitempty" cty:"ports"`
|
Ports []string `cty:"ports"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformFirewall struct {
|
type terraformFirewall struct {
|
||||||
Name string `json:"name" cty:"name"`
|
Name string `cty:"name"`
|
||||||
Network *terraformWriter.Literal `json:"network" cty:"network"`
|
Network *terraformWriter.Literal `cty:"network"`
|
||||||
|
|
||||||
Allowed []*terraformAllow `json:"allow,omitempty" cty:"allow"`
|
Allowed []*terraformAllow `cty:"allow"`
|
||||||
|
|
||||||
SourceTags []string `json:"source_tags,omitempty" cty:"source_tags"`
|
SourceTags []string `cty:"source_tags"`
|
||||||
|
|
||||||
SourceRanges []string `json:"source_ranges,omitempty" cty:"source_ranges"`
|
SourceRanges []string `cty:"source_ranges"`
|
||||||
TargetTags []string `json:"target_tags,omitempty" cty:"target_tags"`
|
TargetTags []string `cty:"target_tags"`
|
||||||
|
|
||||||
Disabled bool `json:"disabled,omitempty" cty:"disabled"`
|
Disabled bool `cty:"disabled"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *FirewallRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *FirewallRule) error {
|
func (_ *FirewallRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *FirewallRule) error {
|
||||||
|
|
|
||||||
|
|
@ -139,11 +139,11 @@ func (_ *ForwardingRule) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Forwardin
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformForwardingRule struct {
|
type terraformForwardingRule struct {
|
||||||
Name string `json:"name" cty:"name"`
|
Name string `cty:"name"`
|
||||||
PortRange string `json:"port_range,omitempty" cty:"port_range"`
|
PortRange string `cty:"port_range"`
|
||||||
Target *terraformWriter.Literal `json:"target,omitempty" cty:"target"`
|
Target *terraformWriter.Literal `cty:"target"`
|
||||||
IPAddress *terraformWriter.Literal `json:"ip_address,omitempty" cty:"ip_address"`
|
IPAddress *terraformWriter.Literal `cty:"ip_address"`
|
||||||
IPProtocol string `json:"ip_protocol,omitempty" cty:"ip_protocol"`
|
IPProtocol string `cty:"ip_protocol"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *ForwardingRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ForwardingRule) error {
|
func (_ *ForwardingRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ForwardingRule) error {
|
||||||
|
|
|
||||||
|
|
@ -394,29 +394,29 @@ func ShortenImageURL(defaultProject string, imageURL string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformInstance struct {
|
type terraformInstance struct {
|
||||||
Name string `json:"name" cty:"name"`
|
Name string `cty:"name"`
|
||||||
CanIPForward bool `json:"can_ip_forward" cty:"can_ip_forward"`
|
CanIPForward bool `cty:"can_ip_forward"`
|
||||||
MachineType string `json:"machine_type,omitempty" cty:"machine_type"`
|
MachineType string `cty:"machine_type"`
|
||||||
ServiceAccounts []*terraformTemplateServiceAccount `json:"service_account,omitempty" cty:"service_account"`
|
ServiceAccounts []*terraformTemplateServiceAccount `cty:"service_account"`
|
||||||
Scheduling *terraformScheduling `json:"scheduling,omitempty" cty:"scheduling"`
|
Scheduling *terraformScheduling `cty:"scheduling"`
|
||||||
Disks []*terraformInstanceAttachedDisk `json:"disk,omitempty" cty:"disk"`
|
Disks []*terraformInstanceAttachedDisk `cty:"disk"`
|
||||||
NetworkInterfaces []*terraformNetworkInterface `json:"network_interface,omitempty" cty:"network_interface"`
|
NetworkInterfaces []*terraformNetworkInterface `cty:"network_interface"`
|
||||||
Metadata map[string]*terraformWriter.Literal `json:"metadata,omitempty" cty:"metadata"`
|
Metadata map[string]*terraformWriter.Literal `cty:"metadata"`
|
||||||
MetadataStartupScript *terraformWriter.Literal `json:"metadata_startup_script,omitempty" cty:"metadata_startup_script"`
|
MetadataStartupScript *terraformWriter.Literal `cty:"metadata_startup_script"`
|
||||||
Tags []string `json:"tags,omitempty" cty:"tags"`
|
Tags []string `cty:"tags"`
|
||||||
Zone string `json:"zone,omitempty" cty:"zone"`
|
Zone string `cty:"zone"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformInstanceAttachedDisk struct {
|
type terraformInstanceAttachedDisk struct {
|
||||||
AutoDelete bool `json:"auto_delete,omitempty" cty:"auto_delete"`
|
AutoDelete bool `cty:"auto_delete"`
|
||||||
DeviceName string `json:"device_name,omitempty" cty:"device_name"`
|
DeviceName string `cty:"device_name"`
|
||||||
|
|
||||||
// 'pd-standard', 'pd-ssd', 'local-ssd' etc
|
// 'pd-standard', 'pd-ssd', 'local-ssd' etc
|
||||||
Type string `json:"type,omitempty" cty:"type"`
|
Type string `cty:"type"`
|
||||||
Disk string `json:"disk,omitempty" cty:"disk"`
|
Disk string `cty:"disk"`
|
||||||
Image string `json:"image,omitempty" cty:"image"`
|
Image string `cty:"image"`
|
||||||
Scratch bool `json:"scratch,omitempty" cty:"scratch"`
|
Scratch bool `cty:"scratch"`
|
||||||
Size int64 `json:"size,omitempty" cty:"size"`
|
Size int64 `cty:"size"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Instance) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Instance) error {
|
func (_ *Instance) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Instance) error {
|
||||||
|
|
|
||||||
|
|
@ -172,16 +172,16 @@ func (_ *InstanceGroupManager) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Ins
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformInstanceGroupManager struct {
|
type terraformInstanceGroupManager struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
Zone *string `json:"zone" cty:"zone"`
|
Zone *string `cty:"zone"`
|
||||||
BaseInstanceName *string `json:"base_instance_name" cty:"base_instance_name"`
|
BaseInstanceName *string `cty:"base_instance_name"`
|
||||||
Version *terraformVersion `json:"version" cty:"version"`
|
Version *terraformVersion `cty:"version"`
|
||||||
TargetSize *int64 `json:"target_size" cty:"target_size"`
|
TargetSize *int64 `cty:"target_size"`
|
||||||
TargetPools []*terraformWriter.Literal `json:"target_pools,omitempty" cty:"target_pools"`
|
TargetPools []*terraformWriter.Literal `cty:"target_pools"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformVersion struct {
|
type terraformVersion struct {
|
||||||
InstanceTemplate *terraformWriter.Literal `json:"instance_template" cty:"instance_template"`
|
InstanceTemplate *terraformWriter.Literal `cty:"instance_template"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *InstanceGroupManager) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *InstanceGroupManager) error {
|
func (_ *InstanceGroupManager) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *InstanceGroupManager) error {
|
||||||
|
|
|
||||||
|
|
@ -442,54 +442,54 @@ func (_ *InstanceTemplate) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Instanc
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformInstanceTemplate struct {
|
type terraformInstanceTemplate struct {
|
||||||
NamePrefix string `json:"name_prefix" cty:"name_prefix"`
|
NamePrefix string `cty:"name_prefix"`
|
||||||
CanIPForward bool `json:"can_ip_forward" cty:"can_ip_forward"`
|
CanIPForward bool `cty:"can_ip_forward"`
|
||||||
MachineType string `json:"machine_type,omitempty" cty:"machine_type"`
|
MachineType string `cty:"machine_type"`
|
||||||
ServiceAccounts []*terraformTemplateServiceAccount `json:"service_account,omitempty" cty:"service_account"`
|
ServiceAccounts []*terraformTemplateServiceAccount `cty:"service_account"`
|
||||||
Scheduling *terraformScheduling `json:"scheduling,omitempty" cty:"scheduling"`
|
Scheduling *terraformScheduling `cty:"scheduling"`
|
||||||
Disks []*terraformInstanceTemplateAttachedDisk `json:"disk,omitempty" cty:"disk"`
|
Disks []*terraformInstanceTemplateAttachedDisk `cty:"disk"`
|
||||||
Labels map[string]string `json:"labels,omitempty" cty:"labels"`
|
Labels map[string]string `cty:"labels"`
|
||||||
NetworkInterfaces []*terraformNetworkInterface `json:"network_interface,omitempty" cty:"network_interface"`
|
NetworkInterfaces []*terraformNetworkInterface `cty:"network_interface"`
|
||||||
Metadata map[string]*terraformWriter.Literal `json:"metadata,omitempty" cty:"metadata"`
|
Metadata map[string]*terraformWriter.Literal `cty:"metadata"`
|
||||||
MetadataStartupScript *terraformWriter.Literal `json:"metadata_startup_script,omitempty" cty:"metadata_startup_script"`
|
MetadataStartupScript *terraformWriter.Literal `cty:"metadata_startup_script"`
|
||||||
Tags []string `json:"tags,omitempty" cty:"tags"`
|
Tags []string `cty:"tags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformTemplateServiceAccount struct {
|
type terraformTemplateServiceAccount struct {
|
||||||
Email *terraformWriter.Literal `json:"email" cty:"email"`
|
Email *terraformWriter.Literal `cty:"email"`
|
||||||
Scopes []string `json:"scopes" cty:"scopes"`
|
Scopes []string `cty:"scopes"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformScheduling struct {
|
type terraformScheduling struct {
|
||||||
AutomaticRestart bool `json:"automatic_restart" cty:"automatic_restart"`
|
AutomaticRestart bool `cty:"automatic_restart"`
|
||||||
OnHostMaintenance string `json:"on_host_maintenance,omitempty" cty:"on_host_maintenance"`
|
OnHostMaintenance string `cty:"on_host_maintenance"`
|
||||||
Preemptible bool `json:"preemptible" cty:"preemptible"`
|
Preemptible bool `cty:"preemptible"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformInstanceTemplateAttachedDisk struct {
|
type terraformInstanceTemplateAttachedDisk struct {
|
||||||
AutoDelete bool `json:"auto_delete,omitempty" cty:"auto_delete"`
|
AutoDelete bool `cty:"auto_delete"`
|
||||||
DeviceName string `json:"device_name,omitempty" cty:"device_name"`
|
DeviceName string `cty:"device_name"`
|
||||||
|
|
||||||
// scratch vs persistent
|
// scratch vs persistent
|
||||||
Type string `json:"type,omitempty" cty:"type"`
|
Type string `cty:"type"`
|
||||||
Boot bool `json:"boot,omitempty" cty:"boot"`
|
Boot bool `cty:"boot"`
|
||||||
DiskName string `json:"disk_name,omitempty" cty:"disk_name"`
|
DiskName string `cty:"disk_name"`
|
||||||
SourceImage string `json:"source_image,omitempty" cty:"source_image"`
|
SourceImage string `cty:"source_image"`
|
||||||
Source string `json:"source,omitempty" cty:"source"`
|
Source string `cty:"source"`
|
||||||
Interface string `json:"interface,omitempty" cty:"interface"`
|
Interface string `cty:"interface"`
|
||||||
Mode string `json:"mode,omitempty" cty:"mode"`
|
Mode string `cty:"mode"`
|
||||||
DiskType string `json:"disk_type,omitempty" cty:"disk_type"`
|
DiskType string `cty:"disk_type"`
|
||||||
DiskSizeGB int64 `json:"disk_size_gb,omitempty" cty:"disk_size_gb"`
|
DiskSizeGB int64 `cty:"disk_size_gb"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformNetworkInterface struct {
|
type terraformNetworkInterface struct {
|
||||||
Network *terraformWriter.Literal `json:"network,omitempty" cty:"network"`
|
Network *terraformWriter.Literal `cty:"network"`
|
||||||
Subnetwork *terraformWriter.Literal `json:"subnetwork,omitempty" cty:"subnetwork"`
|
Subnetwork *terraformWriter.Literal `cty:"subnetwork"`
|
||||||
AccessConfig []*terraformAccessConfig `json:"access_config" cty:"access_config"`
|
AccessConfig []*terraformAccessConfig `cty:"access_config"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAccessConfig struct {
|
type terraformAccessConfig struct {
|
||||||
NatIP *terraformWriter.Literal `json:"nat_ip,omitempty" cty:"nat_ip"`
|
NatIP *terraformWriter.Literal `cty:"nat_ip"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func addNetworks(network *Network, subnet *Subnet, networkInterfaces []*compute.NetworkInterface) []*terraformNetworkInterface {
|
func addNetworks(network *Network, subnet *Subnet, networkInterfaces []*compute.NetworkInterface) []*terraformNetworkInterface {
|
||||||
|
|
|
||||||
|
|
@ -187,9 +187,9 @@ func (_ *Network) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Network) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformNetwork struct {
|
type terraformNetwork struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
IPv4Range *string `json:"ipv4_range,omitempty" cty:"ipv4_range"`
|
IPv4Range *string `cty:"ipv4_range"`
|
||||||
AutoCreateSubnetworks *bool `json:"auto_create_subnetworks,omitempty" cty:"auto_create_subnetworks"`
|
AutoCreateSubnetworks *bool `cty:"auto_create_subnetworks"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Network) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Network) error {
|
func (_ *Network) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Network) error {
|
||||||
|
|
|
||||||
|
|
@ -127,9 +127,9 @@ func (_ *ProjectIAMBinding) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Projec
|
||||||
|
|
||||||
// terraformProjectIAMBinding is the model for a terraform google_project_iam_binding rule
|
// terraformProjectIAMBinding is the model for a terraform google_project_iam_binding rule
|
||||||
type terraformProjectIAMBinding struct {
|
type terraformProjectIAMBinding struct {
|
||||||
Project string `json:"project,omitempty" cty:"project"`
|
Project string `cty:"project"`
|
||||||
Role string `json:"role,omitempty" cty:"role"`
|
Role string `cty:"role"`
|
||||||
Members []string `json:"members,omitempty" cty:"members"`
|
Members []string `cty:"members"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *ProjectIAMBinding) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ProjectIAMBinding) error {
|
func (_ *ProjectIAMBinding) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ProjectIAMBinding) error {
|
||||||
|
|
|
||||||
|
|
@ -186,23 +186,23 @@ func (*Router) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Router) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformRouterNat struct {
|
type terraformRouterNat struct {
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
Region *string `json:"region,omitempty" cty:"region"`
|
Region *string `cty:"region"`
|
||||||
Router *terraformWriter.Literal `json:"router,omitempty" cty:"router"`
|
Router *terraformWriter.Literal `cty:"router"`
|
||||||
NATIPAllocateOption *string `json:"nat_ip_allocate_option,omitempty" cty:"nat_ip_allocate_option"`
|
NATIPAllocateOption *string `cty:"nat_ip_allocate_option"`
|
||||||
SourceSubnetworkIPRangesToNat *string `json:"source_subnetwork_ip_ranges_to_nat,omitempty" cty:"source_subnetwork_ip_ranges_to_nat"`
|
SourceSubnetworkIPRangesToNat *string `cty:"source_subnetwork_ip_ranges_to_nat"`
|
||||||
Subnetworks []*terraformRouterNatSubnetwork `json:"subnetwork,omitempty" cty:"subnetwork"`
|
Subnetworks []*terraformRouterNatSubnetwork `cty:"subnetwork"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformRouterNatSubnetwork struct {
|
type terraformRouterNatSubnetwork struct {
|
||||||
Name *terraformWriter.Literal `json:"name,omitempty" cty:"name"`
|
Name *terraformWriter.Literal `cty:"name"`
|
||||||
SourceIPRangesToNat []string `json:"source_ip_ranges_to_nat,omitempty" cty:"source_ip_ranges_to_nat"`
|
SourceIPRangesToNat []string `cty:"source_ip_ranges_to_nat"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformRouter struct {
|
type terraformRouter struct {
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
Network *terraformWriter.Literal `json:"network,omitempty" cty:"network"`
|
Network *terraformWriter.Literal `cty:"network"`
|
||||||
Region *string `json:"region,omitempty" cty:"region"`
|
Region *string `cty:"region"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RenderTerraform renders the Terraform config.
|
// RenderTerraform renders the Terraform config.
|
||||||
|
|
|
||||||
|
|
@ -182,10 +182,10 @@ func (_ *ServiceAccount) RenderGCE(t *gce.GCEAPITarget, a, e, changes *ServiceAc
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformServiceAccount struct {
|
type terraformServiceAccount struct {
|
||||||
AccountID *string `json:"account_id" cty:"account_id"`
|
AccountID *string `cty:"account_id"`
|
||||||
ProjectID *string `json:"project" cty:"project"`
|
ProjectID *string `cty:"project"`
|
||||||
Description *string `json:"description" cty:"description"`
|
Description *string `cty:"description"`
|
||||||
DisplayName *string `json:"display_name" cty:"display_name"`
|
DisplayName *string `cty:"display_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *ServiceAccount) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ServiceAccount) error {
|
func (_ *ServiceAccount) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ServiceAccount) error {
|
||||||
|
|
|
||||||
|
|
@ -117,8 +117,8 @@ func (_ *StorageBucketAcl) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Storage
|
||||||
|
|
||||||
// terraformStorageBucketAcl is the model for a terraform google_storage_bucket_acl rule
|
// terraformStorageBucketAcl is the model for a terraform google_storage_bucket_acl rule
|
||||||
type terraformStorageBucketAcl struct {
|
type terraformStorageBucketAcl struct {
|
||||||
Bucket string `json:"bucket,omitempty" cty:"bucket"`
|
Bucket string `cty:"bucket"`
|
||||||
RoleEntity []string `json:"role_entity,omitempty" cty:"role_entity"`
|
RoleEntity []string `cty:"role_entity"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *StorageBucketAcl) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *StorageBucketAcl) error {
|
func (_ *StorageBucketAcl) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *StorageBucketAcl) error {
|
||||||
|
|
|
||||||
|
|
@ -126,9 +126,9 @@ func (_ *StorageBucketIAM) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Storage
|
||||||
|
|
||||||
// terraformStorageBucketIAM is the model for a terraform google_storage_bucket_iam_member rule
|
// terraformStorageBucketIAM is the model for a terraform google_storage_bucket_iam_member rule
|
||||||
type terraformStorageBucketIAM struct {
|
type terraformStorageBucketIAM struct {
|
||||||
Bucket string `json:"bucket,omitempty" cty:"bucket"`
|
Bucket string `cty:"bucket"`
|
||||||
Role string `json:"role,omitempty" cty:"role"`
|
Role string `cty:"role"`
|
||||||
Member string `json:"member,omitempty" cty:"member"`
|
Member string `cty:"member"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *StorageBucketIAM) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *StorageBucketIAM) error {
|
func (_ *StorageBucketIAM) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *StorageBucketIAM) error {
|
||||||
|
|
|
||||||
|
|
@ -124,9 +124,9 @@ func (_ *StorageObjectAcl) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Storage
|
||||||
|
|
||||||
// terraformStorageObjectAcl is the model for a terraform google_storage_object_acl rule
|
// terraformStorageObjectAcl is the model for a terraform google_storage_object_acl rule
|
||||||
type terraformStorageObjectAcl struct {
|
type terraformStorageObjectAcl struct {
|
||||||
Bucket string `json:"bucket,omitempty" cty:"bucket"`
|
Bucket string `cty:"bucket"`
|
||||||
Object string `json:"object,omitempty" cty:"object"`
|
Object string `cty:"object"`
|
||||||
RoleEntity []string `json:"role_entity,omitempty" cty:"role_entity"`
|
RoleEntity []string `cty:"role_entity"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *StorageObjectAcl) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *StorageObjectAcl) error {
|
func (_ *StorageObjectAcl) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *StorageObjectAcl) error {
|
||||||
|
|
|
||||||
|
|
@ -232,18 +232,18 @@ func (e *Subnet) URL(project string, region string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformSubnet struct {
|
type terraformSubnet struct {
|
||||||
Name *string `json:"name" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
Network *terraformWriter.Literal `json:"network" cty:"network"`
|
Network *terraformWriter.Literal `cty:"network"`
|
||||||
Region *string `json:"region" cty:"region"`
|
Region *string `cty:"region"`
|
||||||
CIDR *string `json:"ip_cidr_range" cty:"ip_cidr_range"`
|
CIDR *string `cty:"ip_cidr_range"`
|
||||||
|
|
||||||
// SecondaryIPRange defines additional IP ranges
|
// SecondaryIPRange defines additional IP ranges
|
||||||
SecondaryIPRange []terraformSubnetRange `json:"secondary_ip_range,omitempty" cty:"secondary_ip_range"`
|
SecondaryIPRange []terraformSubnetRange `cty:"secondary_ip_range"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformSubnetRange struct {
|
type terraformSubnetRange struct {
|
||||||
Name string `json:"range_name,omitempty" cty:"range_name"`
|
Name string `cty:"range_name"`
|
||||||
CIDR string `json:"ip_cidr_range,omitempty" cty:"ip_cidr_range"`
|
CIDR string `cty:"ip_cidr_range"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Subnet) RenderSubnet(t *terraform.TerraformTarget, a, e, changes *Subnet) error {
|
func (_ *Subnet) RenderSubnet(t *terraform.TerraformTarget, a, e, changes *Subnet) error {
|
||||||
|
|
|
||||||
|
|
@ -104,11 +104,11 @@ func (_ *TargetPool) RenderGCE(t *gce.GCEAPITarget, a, e, changes *TargetPool) e
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformTargetPool struct {
|
type terraformTargetPool struct {
|
||||||
Name string `json:"name" cty:"name"`
|
Name string `cty:"name"`
|
||||||
Description string `json:"description,omitempty" cty:"description"`
|
Description string `cty:"description"`
|
||||||
HealthChecks []string `json:"health_checks,omitempty" cty:"health_checks"`
|
HealthChecks []string `cty:"health_checks"`
|
||||||
Instances []string `json:"instances,omitempty" cty:"instances"`
|
Instances []string `cty:"instances"`
|
||||||
SessionAffinity string `json:"session_affinity,omitempty" cty:"session_affinity"`
|
SessionAffinity string `cty:"session_affinity"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *TargetPool) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *TargetPool) error {
|
func (_ *TargetPool) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *TargetPool) error {
|
||||||
|
|
|
||||||
|
|
@ -1352,110 +1352,110 @@ func (_ *Elastigroup) update(cloud awsup.AWSCloud, a, e, changes *Elastigroup) e
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformElastigroup struct {
|
type terraformElastigroup struct {
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
Description *string `json:"description,omitempty" cty:"description"`
|
Description *string `cty:"description"`
|
||||||
Product *string `json:"product,omitempty" cty:"product"`
|
Product *string `cty:"product"`
|
||||||
Region *string `json:"region,omitempty" cty:"region"`
|
Region *string `cty:"region"`
|
||||||
SubnetIDs []*terraformWriter.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
SubnetIDs []*terraformWriter.Literal `cty:"subnet_ids"`
|
||||||
LoadBalancers []*terraformWriter.Literal `json:"elastic_load_balancers,omitempty" cty:"elastic_load_balancers"`
|
LoadBalancers []*terraformWriter.Literal `cty:"elastic_load_balancers"`
|
||||||
TargetGroups []*terraformWriter.Literal `json:"target_group_arns,omitempty" cty:"target_group_arns"`
|
TargetGroups []*terraformWriter.Literal `cty:"target_group_arns"`
|
||||||
NetworkInterfaces []*terraformElastigroupNetworkInterface `json:"network_interface,omitempty" cty:"network_interface"`
|
NetworkInterfaces []*terraformElastigroupNetworkInterface `cty:"network_interface"`
|
||||||
RootBlockDevice *terraformElastigroupBlockDevice `json:"ebs_block_device,omitempty" cty:"ebs_block_device"`
|
RootBlockDevice *terraformElastigroupBlockDevice `cty:"ebs_block_device"`
|
||||||
EphemeralBlockDevice []*terraformElastigroupBlockDevice `json:"ephemeral_block_device,omitempty" cty:"ephemeral_block_device"`
|
EphemeralBlockDevice []*terraformElastigroupBlockDevice `cty:"ephemeral_block_device"`
|
||||||
Integration *terraformElastigroupIntegration `json:"integration_kubernetes,omitempty" cty:"integration_kubernetes"`
|
Integration *terraformElastigroupIntegration `cty:"integration_kubernetes"`
|
||||||
Tags []*terraformKV `json:"tags,omitempty" cty:"tags"`
|
Tags []*terraformKV `cty:"tags"`
|
||||||
|
|
||||||
MinSize *int64 `json:"min_size,omitempty" cty:"min_size"`
|
MinSize *int64 `cty:"min_size"`
|
||||||
MaxSize *int64 `json:"max_size,omitempty" cty:"max_size"`
|
MaxSize *int64 `cty:"max_size"`
|
||||||
DesiredCapacity *int64 `json:"desired_capacity,omitempty" cty:"desired_capacity"`
|
DesiredCapacity *int64 `cty:"desired_capacity"`
|
||||||
CapacityUnit *string `json:"capacity_unit,omitempty" cty:"capacity_unit"`
|
CapacityUnit *string `cty:"capacity_unit"`
|
||||||
|
|
||||||
SpotPercentage *float64 `json:"spot_percentage,omitempty" cty:"spot_percentage"`
|
SpotPercentage *float64 `cty:"spot_percentage"`
|
||||||
Orientation *string `json:"orientation,omitempty" cty:"orientation"`
|
Orientation *string `cty:"orientation"`
|
||||||
FallbackToOnDemand *bool `json:"fallback_to_ondemand,omitempty" cty:"fallback_to_ondemand"`
|
FallbackToOnDemand *bool `cty:"fallback_to_ondemand"`
|
||||||
UtilizeReservedInstances *bool `json:"utilize_reserved_instances,omitempty" cty:"utilize_reserved_instances"`
|
UtilizeReservedInstances *bool `cty:"utilize_reserved_instances"`
|
||||||
UtilizeCommitments *bool `json:"utilize_commitments,omitempty" cty:"utilize_commitments"`
|
UtilizeCommitments *bool `cty:"utilize_commitments"`
|
||||||
DrainingTimeout *int64 `json:"draining_timeout,omitempty" cty:"draining_timeout"`
|
DrainingTimeout *int64 `cty:"draining_timeout"`
|
||||||
|
|
||||||
OnDemand *string `json:"instance_types_ondemand,omitempty" cty:"instance_types_ondemand"`
|
OnDemand *string `cty:"instance_types_ondemand"`
|
||||||
Spot []string `json:"instance_types_spot,omitempty" cty:"instance_types_spot"`
|
Spot []string `cty:"instance_types_spot"`
|
||||||
|
|
||||||
Monitoring *bool `json:"enable_monitoring,omitempty" cty:"enable_monitoring"`
|
Monitoring *bool `cty:"enable_monitoring"`
|
||||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
EBSOptimized *bool `cty:"ebs_optimized"`
|
||||||
ImageID *string `json:"image_id,omitempty" cty:"image_id"`
|
ImageID *string `cty:"image_id"`
|
||||||
HealthCheckType *string `json:"health_check_type,omitempty" cty:"health_check_type"`
|
HealthCheckType *string `cty:"health_check_type"`
|
||||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
SecurityGroups []*terraformWriter.Literal `cty:"security_groups"`
|
||||||
UserData *terraformWriter.Literal `json:"user_data,omitempty" cty:"user_data"`
|
UserData *terraformWriter.Literal `cty:"user_data"`
|
||||||
IAMInstanceProfile *terraformWriter.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
IAMInstanceProfile *terraformWriter.Literal `cty:"iam_instance_profile"`
|
||||||
KeyName *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
KeyName *terraformWriter.Literal `cty:"key_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformElastigroupBlockDevice struct {
|
type terraformElastigroupBlockDevice struct {
|
||||||
DeviceName *string `json:"device_name,omitempty" cty:"device_name"`
|
DeviceName *string `cty:"device_name"`
|
||||||
VirtualName *string `json:"virtual_name,omitempty" cty:"virtual_name"`
|
VirtualName *string `cty:"virtual_name"`
|
||||||
VolumeType *string `json:"volume_type,omitempty" cty:"volume_type"`
|
VolumeType *string `cty:"volume_type"`
|
||||||
VolumeSize *int64 `json:"volume_size,omitempty" cty:"volume_size"`
|
VolumeSize *int64 `cty:"volume_size"`
|
||||||
VolumeIOPS *int64 `json:"iops,omitempty" cty:"iops"`
|
VolumeIOPS *int64 `cty:"iops"`
|
||||||
VolumeThroughput *int64 `json:"throughput,omitempty" cty:"throughput"`
|
VolumeThroughput *int64 `cty:"throughput"`
|
||||||
DeleteOnTermination *bool `json:"delete_on_termination,omitempty" cty:"delete_on_termination"`
|
DeleteOnTermination *bool `cty:"delete_on_termination"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformElastigroupNetworkInterface struct {
|
type terraformElastigroupNetworkInterface struct {
|
||||||
Description *string `json:"description,omitempty" cty:"description"`
|
Description *string `cty:"description"`
|
||||||
DeviceIndex *int `json:"device_index,omitempty" cty:"device_index"`
|
DeviceIndex *int `cty:"device_index"`
|
||||||
AssociatePublicIPAddress *bool `json:"associate_public_ip_address,omitempty" cty:"associate_public_ip_address"`
|
AssociatePublicIPAddress *bool `cty:"associate_public_ip_address"`
|
||||||
DeleteOnTermination *bool `json:"delete_on_termination,omitempty" cty:"delete_on_termination"`
|
DeleteOnTermination *bool `cty:"delete_on_termination"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformElastigroupIntegration struct {
|
type terraformElastigroupIntegration struct {
|
||||||
IntegrationMode *string `json:"integration_mode,omitempty" cty:"integration_mode"`
|
IntegrationMode *string `cty:"integration_mode"`
|
||||||
ClusterIdentifier *string `json:"cluster_identifier,omitempty" cty:"cluster_identifier"`
|
ClusterIdentifier *string `cty:"cluster_identifier"`
|
||||||
|
|
||||||
Enabled *bool `json:"autoscale_is_enabled,omitempty" cty:"autoscale_is_enabled"`
|
Enabled *bool `cty:"autoscale_is_enabled"`
|
||||||
AutoConfig *bool `json:"autoscale_is_auto_config,omitempty" cty:"autoscale_is_auto_config"`
|
AutoConfig *bool `cty:"autoscale_is_auto_config"`
|
||||||
Cooldown *int `json:"autoscale_cooldown,omitempty" cty:"autoscale_cooldown"`
|
Cooldown *int `cty:"autoscale_cooldown"`
|
||||||
Headroom *terraformAutoScalerHeadroom `json:"autoscale_headroom,omitempty" cty:"autoscale_headroom"`
|
Headroom *terraformAutoScalerHeadroom `cty:"autoscale_headroom"`
|
||||||
Down *terraformAutoScalerDown `json:"autoscale_down,omitempty" cty:"autoscale_down"`
|
Down *terraformAutoScalerDown `cty:"autoscale_down"`
|
||||||
Labels []*terraformKV `json:"autoscale_labels,omitempty" cty:"autoscale_labels"`
|
Labels []*terraformKV `cty:"autoscale_labels"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoScaler struct {
|
type terraformAutoScaler struct {
|
||||||
Enabled *bool `json:"autoscale_is_enabled,omitempty" cty:"autoscale_is_enabled"`
|
Enabled *bool `cty:"autoscale_is_enabled"`
|
||||||
AutoConfig *bool `json:"autoscale_is_auto_config,omitempty" cty:"autoscale_is_auto_config"`
|
AutoConfig *bool `cty:"autoscale_is_auto_config"`
|
||||||
AutoHeadroomPercentage *int `json:"auto_headroom_percentage,omitempty" cty:"auto_headroom_percentage"`
|
AutoHeadroomPercentage *int `cty:"auto_headroom_percentage"`
|
||||||
Cooldown *int `json:"autoscale_cooldown,omitempty" cty:"autoscale_cooldown"`
|
Cooldown *int `cty:"autoscale_cooldown"`
|
||||||
Headroom *terraformAutoScalerHeadroom `json:"autoscale_headroom,omitempty" cty:"autoscale_headroom"`
|
Headroom *terraformAutoScalerHeadroom `cty:"autoscale_headroom"`
|
||||||
Down *terraformAutoScalerDown `json:"autoscale_down,omitempty" cty:"autoscale_down"`
|
Down *terraformAutoScalerDown `cty:"autoscale_down"`
|
||||||
ResourceLimits *terraformAutoScalerResourceLimits `json:"resource_limits,omitempty" cty:"resource_limits"`
|
ResourceLimits *terraformAutoScalerResourceLimits `cty:"resource_limits"`
|
||||||
Labels []*terraformKV `json:"autoscale_labels,omitempty" cty:"autoscale_labels"`
|
Labels []*terraformKV `cty:"autoscale_labels"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoScalerHeadroom struct {
|
type terraformAutoScalerHeadroom struct {
|
||||||
CPUPerUnit *int `json:"cpu_per_unit,omitempty" cty:"cpu_per_unit"`
|
CPUPerUnit *int `cty:"cpu_per_unit"`
|
||||||
GPUPerUnit *int `json:"gpu_per_unit,omitempty" cty:"gpu_per_unit"`
|
GPUPerUnit *int `cty:"gpu_per_unit"`
|
||||||
MemPerUnit *int `json:"memory_per_unit,omitempty" cty:"memory_per_unit"`
|
MemPerUnit *int `cty:"memory_per_unit"`
|
||||||
NumOfUnits *int `json:"num_of_units,omitempty" cty:"num_of_units"`
|
NumOfUnits *int `cty:"num_of_units"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoScalerDown struct {
|
type terraformAutoScalerDown struct {
|
||||||
MaxPercentage *float64 `json:"max_scale_down_percentage,omitempty" cty:"max_scale_down_percentage"`
|
MaxPercentage *float64 `cty:"max_scale_down_percentage"`
|
||||||
EvaluationPeriods *int `json:"evaluation_periods,omitempty" cty:"evaluation_periods"`
|
EvaluationPeriods *int `cty:"evaluation_periods"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformAutoScalerResourceLimits struct {
|
type terraformAutoScalerResourceLimits struct {
|
||||||
MaxVCPU *int `json:"max_vcpu,omitempty" cty:"max_vcpu"`
|
MaxVCPU *int `cty:"max_vcpu"`
|
||||||
MaxMemory *int `json:"max_memory_gib,omitempty" cty:"max_memory_gib"`
|
MaxMemory *int `cty:"max_memory_gib"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformKV struct {
|
type terraformKV struct {
|
||||||
Key *string `json:"key" cty:"key"`
|
Key *string `cty:"key"`
|
||||||
Value *string `json:"value" cty:"value"`
|
Value *string `cty:"value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformTaint struct {
|
type terraformTaint struct {
|
||||||
Key *string `json:"key" cty:"key"`
|
Key *string `cty:"key"`
|
||||||
Value *string `json:"value" cty:"value"`
|
Value *string `cty:"value"`
|
||||||
Effect *string `json:"effect" cty:"effect"`
|
Effect *string `cty:"effect"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Elastigroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Elastigroup) error {
|
func (_ *Elastigroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Elastigroup) error {
|
||||||
|
|
|
||||||
|
|
@ -773,45 +773,45 @@ func (_ *LaunchSpec) update(cloud awsup.AWSCloud, a, e, changes *LaunchSpec) err
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchSpec struct {
|
type terraformLaunchSpec struct {
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
OceanID *terraformWriter.Literal `json:"ocean_id,omitempty" cty:"ocean_id"`
|
OceanID *terraformWriter.Literal `cty:"ocean_id"`
|
||||||
|
|
||||||
Monitoring *bool `json:"monitoring,omitempty" cty:"monitoring"`
|
Monitoring *bool `cty:"monitoring"`
|
||||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
EBSOptimized *bool `cty:"ebs_optimized"`
|
||||||
ImageID *string `json:"image_id,omitempty" cty:"image_id"`
|
ImageID *string `cty:"image_id"`
|
||||||
AssociatePublicIPAddress *bool `json:"associate_public_ip_address,omitempty" cty:"associate_public_ip_address"`
|
AssociatePublicIPAddress *bool `cty:"associate_public_ip_address"`
|
||||||
RestrictScaleDown *bool `json:"restrict_scale_down,omitempty" cty:"restrict_scale_down"`
|
RestrictScaleDown *bool `cty:"restrict_scale_down"`
|
||||||
RootVolumeSize *int64 `json:"root_volume_size,omitempty" cty:"root_volume_size"`
|
RootVolumeSize *int64 `cty:"root_volume_size"`
|
||||||
UserData *terraformWriter.Literal `json:"user_data,omitempty" cty:"user_data"`
|
UserData *terraformWriter.Literal `cty:"user_data"`
|
||||||
IAMInstanceProfile *terraformWriter.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
IAMInstanceProfile *terraformWriter.Literal `cty:"iam_instance_profile"`
|
||||||
KeyName *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
KeyName *terraformWriter.Literal `cty:"key_name"`
|
||||||
InstanceTypes []string `json:"instance_types,omitempty" cty:"instance_types"`
|
InstanceTypes []string `cty:"instance_types"`
|
||||||
SubnetIDs []*terraformWriter.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
SubnetIDs []*terraformWriter.Literal `cty:"subnet_ids"`
|
||||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
SecurityGroups []*terraformWriter.Literal `cty:"security_groups"`
|
||||||
Taints []*terraformTaint `json:"taints,omitempty" cty:"taints"`
|
Taints []*terraformTaint `cty:"taints"`
|
||||||
Labels []*terraformKV `json:"labels,omitempty" cty:"labels"`
|
Labels []*terraformKV `cty:"labels"`
|
||||||
Tags []*terraformKV `json:"tags,omitempty" cty:"tags"`
|
Tags []*terraformKV `cty:"tags"`
|
||||||
Headrooms []*terraformAutoScalerHeadroom `json:"autoscale_headrooms,omitempty" cty:"autoscale_headrooms"`
|
Headrooms []*terraformAutoScalerHeadroom `cty:"autoscale_headrooms"`
|
||||||
BlockDeviceMappings []*terraformBlockDeviceMapping `json:"block_device_mappings,omitempty" cty:"block_device_mappings"`
|
BlockDeviceMappings []*terraformBlockDeviceMapping `cty:"block_device_mappings"`
|
||||||
Strategy *terraformLaunchSpecStrategy `json:"strategy,omitempty" cty:"strategy"`
|
Strategy *terraformLaunchSpecStrategy `cty:"strategy"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformLaunchSpecStrategy struct {
|
type terraformLaunchSpecStrategy struct {
|
||||||
SpotPercentage *int64 `json:"spot_percentage,omitempty" cty:"spot_percentage"`
|
SpotPercentage *int64 `cty:"spot_percentage"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformBlockDeviceMapping struct {
|
type terraformBlockDeviceMapping struct {
|
||||||
DeviceName *string `json:"device_name,omitempty" cty:"device_name"`
|
DeviceName *string `cty:"device_name"`
|
||||||
EBS *terraformBlockDeviceMappingEBS `json:"ebs,omitempty" cty:"ebs"`
|
EBS *terraformBlockDeviceMappingEBS `cty:"ebs"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformBlockDeviceMappingEBS struct {
|
type terraformBlockDeviceMappingEBS struct {
|
||||||
VirtualName *string `json:"virtual_name,omitempty" cty:"virtual_name"`
|
VirtualName *string `cty:"virtual_name"`
|
||||||
VolumeType *string `json:"volume_type,omitempty" cty:"volume_type"`
|
VolumeType *string `cty:"volume_type"`
|
||||||
VolumeSize *int64 `json:"volume_size,omitempty" cty:"volume_size"`
|
VolumeSize *int64 `cty:"volume_size"`
|
||||||
VolumeIOPS *int64 `json:"iops,omitempty" cty:"iops"`
|
VolumeIOPS *int64 `cty:"iops"`
|
||||||
VolumeThroughput *int64 `json:"throughput,omitempty" cty:"throughput"`
|
VolumeThroughput *int64 `cty:"throughput"`
|
||||||
DeleteOnTermination *bool `json:"delete_on_termination,omitempty" cty:"delete_on_termination"`
|
DeleteOnTermination *bool `cty:"delete_on_termination"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *LaunchSpec) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *LaunchSpec) error {
|
func (_ *LaunchSpec) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *LaunchSpec) error {
|
||||||
|
|
|
||||||
|
|
@ -994,34 +994,34 @@ func (_ *Ocean) update(cloud awsup.AWSCloud, a, e, changes *Ocean) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type terraformOcean struct {
|
type terraformOcean struct {
|
||||||
Name *string `json:"name,omitempty" cty:"name"`
|
Name *string `cty:"name"`
|
||||||
ControllerClusterID *string `json:"controller_id,omitempty" cty:"controller_id"`
|
ControllerClusterID *string `cty:"controller_id"`
|
||||||
Region *string `json:"region,omitempty" cty:"region"`
|
Region *string `cty:"region"`
|
||||||
InstanceTypesWhitelist []string `json:"whitelist,omitempty" cty:"whitelist"`
|
InstanceTypesWhitelist []string `cty:"whitelist"`
|
||||||
InstanceTypesBlacklist []string `json:"blacklist,omitempty" cty:"blacklist"`
|
InstanceTypesBlacklist []string `cty:"blacklist"`
|
||||||
SubnetIDs []*terraformWriter.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
SubnetIDs []*terraformWriter.Literal `cty:"subnet_ids"`
|
||||||
AutoScaler *terraformAutoScaler `json:"autoscaler,omitempty" cty:"autoscaler"`
|
AutoScaler *terraformAutoScaler `cty:"autoscaler"`
|
||||||
Tags []*terraformKV `json:"tags,omitempty" cty:"tags"`
|
Tags []*terraformKV `cty:"tags"`
|
||||||
|
|
||||||
MinSize *int64 `json:"min_size,omitempty" cty:"min_size"`
|
MinSize *int64 `cty:"min_size"`
|
||||||
MaxSize *int64 `json:"max_size,omitempty" cty:"max_size"`
|
MaxSize *int64 `cty:"max_size"`
|
||||||
DesiredCapacity *int64 `json:"desired_capacity,omitempty" cty:"desired_capacity"`
|
DesiredCapacity *int64 `cty:"desired_capacity"`
|
||||||
|
|
||||||
FallbackToOnDemand *bool `json:"fallback_to_ondemand,omitempty" cty:"fallback_to_ondemand"`
|
FallbackToOnDemand *bool `cty:"fallback_to_ondemand"`
|
||||||
UtilizeReservedInstances *bool `json:"utilize_reserved_instances,omitempty" cty:"utilize_reserved_instances"`
|
UtilizeReservedInstances *bool `cty:"utilize_reserved_instances"`
|
||||||
UtilizeCommitments *bool `json:"utilize_commitments,omitempty" cty:"utilize_commitments"`
|
UtilizeCommitments *bool `cty:"utilize_commitments"`
|
||||||
DrainingTimeout *int64 `json:"draining_timeout,omitempty" cty:"draining_timeout"`
|
DrainingTimeout *int64 `cty:"draining_timeout"`
|
||||||
GracePeriod *int64 `json:"grace_period,omitempty" cty:"grace_period"`
|
GracePeriod *int64 `cty:"grace_period"`
|
||||||
|
|
||||||
Monitoring *bool `json:"monitoring,omitempty" cty:"monitoring"`
|
Monitoring *bool `cty:"monitoring"`
|
||||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
EBSOptimized *bool `cty:"ebs_optimized"`
|
||||||
ImageID *string `json:"image_id,omitempty" cty:"image_id"`
|
ImageID *string `cty:"image_id"`
|
||||||
AssociatePublicIPAddress *bool `json:"associate_public_ip_address,omitempty" cty:"associate_public_ip_address"`
|
AssociatePublicIPAddress *bool `cty:"associate_public_ip_address"`
|
||||||
RootVolumeSize *int64 `json:"root_volume_size,omitempty" cty:"root_volume_size"`
|
RootVolumeSize *int64 `cty:"root_volume_size"`
|
||||||
UserData *terraformWriter.Literal `json:"user_data,omitempty" cty:"user_data"`
|
UserData *terraformWriter.Literal `cty:"user_data"`
|
||||||
IAMInstanceProfile *terraformWriter.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
IAMInstanceProfile *terraformWriter.Literal `cty:"iam_instance_profile"`
|
||||||
KeyName *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
KeyName *terraformWriter.Literal `cty:"key_name"`
|
||||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
SecurityGroups []*terraformWriter.Literal `cty:"security_groups"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_ *Ocean) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Ocean) error {
|
func (_ *Ocean) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Ocean) error {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ go_library(
|
||||||
"lifecycle.go",
|
"lifecycle.go",
|
||||||
"target.go",
|
"target.go",
|
||||||
"target_hcl2.go",
|
"target_hcl2.go",
|
||||||
"target_json.go",
|
|
||||||
],
|
],
|
||||||
importpath = "k8s.io/kops/upup/pkg/fi/cloudup/terraform",
|
importpath = "k8s.io/kops/upup/pkg/fi/cloudup/terraform",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,6 @@ limitations under the License.
|
||||||
package terraform
|
package terraform
|
||||||
|
|
||||||
type Lifecycle struct {
|
type Lifecycle struct {
|
||||||
PreventDestroy *bool `json:"prevent_destroy,omitempty" cty:"prevent_destroy"`
|
PreventDestroy *bool `cty:"prevent_destroy"`
|
||||||
CreateBeforeDestroy *bool `json:"create_before_destroy,omitempty" cty:"create_before_destroy"`
|
CreateBeforeDestroy *bool `cty:"create_before_destroy"`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,12 @@ limitations under the License.
|
||||||
package terraform
|
package terraform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/featureflag"
|
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||||
"k8s.io/kops/util/pkg/vfs"
|
"k8s.io/kops/util/pkg/vfs"
|
||||||
|
|
@ -94,24 +92,14 @@ func tfGetFilesProviderExtraConfig(c *kops.TargetSpec) map[string]string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TerraformTarget) Finish(taskMap map[string]fi.Task) error {
|
func (t *TerraformTarget) Finish(taskMap map[string]fi.Task) error {
|
||||||
var err error
|
if err := t.finishHCL2(); err != nil {
|
||||||
if featureflag.TerraformJSON.Enabled() {
|
|
||||||
if featureflag.TerraformManagedFiles.Enabled() {
|
|
||||||
// Terraform's JSON representation doesn't support provider aliases which are required for managed files
|
|
||||||
return errors.New("TerraformJSON cannot be used with TerraformManagedFiles")
|
|
||||||
}
|
|
||||||
err = t.finishJSON()
|
|
||||||
} else {
|
|
||||||
err = t.finishHCL2()
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for relativePath, contents := range t.Files {
|
for relativePath, contents := range t.Files {
|
||||||
p := path.Join(t.outDir, relativePath)
|
p := path.Join(t.outDir, relativePath)
|
||||||
|
|
||||||
err = os.MkdirAll(path.Dir(p), os.FileMode(0o755))
|
err := os.MkdirAll(path.Dir(p), os.FileMode(0o755))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error creating output directory %q: %v", path.Dir(p), err)
|
return fmt.Errorf("error creating output directory %q: %v", path.Dir(p), err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2020 The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package terraform
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (t *TerraformTarget) finishJSON() error {
|
|
||||||
resourcesByType, err := t.GetResourcesByType()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
providersByName := make(map[string]map[string]interface{})
|
|
||||||
if t.Cloud.ProviderID() == kops.CloudProviderGCE {
|
|
||||||
providerGoogle := make(map[string]interface{})
|
|
||||||
providerGoogle["project"] = t.Project
|
|
||||||
providerGoogle["region"] = t.Cloud.Region()
|
|
||||||
for k, v := range tfGetProviderExtraConfig(t.clusterSpecTarget) {
|
|
||||||
providerGoogle[k] = v
|
|
||||||
}
|
|
||||||
providersByName["google"] = providerGoogle
|
|
||||||
} else if t.Cloud.ProviderID() == kops.CloudProviderAWS {
|
|
||||||
providerAWS := make(map[string]interface{})
|
|
||||||
providerAWS["region"] = t.Cloud.Region()
|
|
||||||
for k, v := range tfGetProviderExtraConfig(t.clusterSpecTarget) {
|
|
||||||
providerAWS[k] = v
|
|
||||||
}
|
|
||||||
providersByName["aws"] = providerAWS
|
|
||||||
}
|
|
||||||
|
|
||||||
outputs, err := t.GetOutputs()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
outputVariables := make(map[string]interface{})
|
|
||||||
localVariables := make(map[string]interface{})
|
|
||||||
for tfName, v := range outputs {
|
|
||||||
var tfVar interface{}
|
|
||||||
if v.Value != nil {
|
|
||||||
tfVar = v.Value
|
|
||||||
} else {
|
|
||||||
tfVar = v.ValueArray
|
|
||||||
}
|
|
||||||
outputVariables[tfName] = map[string]interface{}{"value": tfVar}
|
|
||||||
localVariables[tfName] = tfVar
|
|
||||||
}
|
|
||||||
|
|
||||||
data := make(map[string]interface{})
|
|
||||||
data["resource"] = resourcesByType
|
|
||||||
if len(providersByName) != 0 {
|
|
||||||
data["provider"] = providersByName
|
|
||||||
}
|
|
||||||
if len(outputVariables) != 0 {
|
|
||||||
data["output"] = outputVariables
|
|
||||||
}
|
|
||||||
if len(localVariables) != 0 {
|
|
||||||
data["locals"] = localVariables
|
|
||||||
}
|
|
||||||
|
|
||||||
terraformConfiguration := make(map[string]interface{})
|
|
||||||
terraformConfiguration["required_version"] = ">= 0.12.26"
|
|
||||||
|
|
||||||
requiredProvidersByName := make(map[string]interface{})
|
|
||||||
if t.Cloud.ProviderID() == kops.CloudProviderGCE {
|
|
||||||
requiredProviderGoogle := make(map[string]interface{})
|
|
||||||
requiredProviderGoogle["source"] = "hashicorp/google"
|
|
||||||
requiredProviderGoogle["version"] = ">= 2.19.0"
|
|
||||||
for k, v := range tfGetProviderExtraConfig(t.clusterSpecTarget) {
|
|
||||||
requiredProviderGoogle[k] = v
|
|
||||||
}
|
|
||||||
requiredProvidersByName["google"] = requiredProviderGoogle
|
|
||||||
} else if t.Cloud.ProviderID() == kops.CloudProviderAWS {
|
|
||||||
requiredProviderAWS := make(map[string]interface{})
|
|
||||||
requiredProviderAWS["source"] = "hashicorp/aws"
|
|
||||||
requiredProviderAWS["version"] = ">= 3.59.0"
|
|
||||||
for k, v := range tfGetProviderExtraConfig(t.clusterSpecTarget) {
|
|
||||||
requiredProviderAWS[k] = v
|
|
||||||
}
|
|
||||||
requiredProvidersByName["aws"] = requiredProviderAWS
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(requiredProvidersByName) != 0 {
|
|
||||||
terraformConfiguration["required_providers"] = requiredProvidersByName
|
|
||||||
}
|
|
||||||
|
|
||||||
data["terraform"] = terraformConfiguration
|
|
||||||
|
|
||||||
jsonBytes, err := json.MarshalIndent(data, "", " ")
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("error marshaling terraform data to json: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Files["kubernetes.tf.json"] = jsonBytes
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
@ -27,8 +27,7 @@ import (
|
||||||
|
|
||||||
// Literal represents a literal in terraform syntax
|
// Literal represents a literal in terraform syntax
|
||||||
type Literal struct {
|
type Literal struct {
|
||||||
// Value is only used in JSON output via the TerraformJSON feature flag
|
// Value is used to support Terraform's "${}" interpolation
|
||||||
// "${}" interpolation is supported.
|
|
||||||
Value string `cty:"value"`
|
Value string `cty:"value"`
|
||||||
|
|
||||||
// Tokens are portions of a literal reference joined by periods.
|
// Tokens are portions of a literal reference joined by periods.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue