mirror of https://github.com/kubernetes/kops.git
Split out TerraformWriter
This commit is contained in:
parent
4e53018cf8
commit
57dec35f68
|
|
@ -70,6 +70,7 @@ go_library(
|
|||
"//upup/pkg/fi/cloudup/gce:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/openstack:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraform:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraformWriter:go_default_library",
|
||||
"//upup/pkg/fi/loader:go_default_library",
|
||||
"//util/pkg/architectures:go_default_library",
|
||||
"//util/pkg/env:go_default_library",
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ go_library(
|
|||
"//upup/pkg/fi:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/aliup:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraform:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraformWriter:go_default_library",
|
||||
"//vendor/github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests:go_default_library",
|
||||
"//vendor/github.com/aliyun/alibaba-cloud-sdk-go/services/slb:go_default_library",
|
||||
"//vendor/github.com/denverdino/aliyungo/common:go_default_library",
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/aliup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -141,8 +142,8 @@ type terraformEip struct {
|
|||
}
|
||||
|
||||
type terraformEipAssociation struct {
|
||||
InstanceID *terraform.Literal `json:"instance_id,omitempty" cty:"instance_id"`
|
||||
AllocationID *terraform.Literal `json:"allocation_id,omitempty" cty:"allocation_id"`
|
||||
InstanceID *terraformWriter.Literal `json:"instance_id,omitempty" cty:"instance_id"`
|
||||
AllocationID *terraformWriter.Literal `json:"allocation_id,omitempty" cty:"allocation_id"`
|
||||
}
|
||||
|
||||
func (_ *EIP) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EIP) error {
|
||||
|
|
@ -160,6 +161,6 @@ func (_ *EIP) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EIP)
|
|||
return t.RenderResource("alicloud_eip_association", *e.Name+"_asso", associationtf)
|
||||
}
|
||||
|
||||
func (e *EIP) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_eip", *e.Name, "id")
|
||||
func (e *EIP) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_eip", *e.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import (
|
|||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/ess"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/kops/pkg/featureflag"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
|
|
@ -307,10 +308,10 @@ type terraformLaunchConfiguration struct {
|
|||
SystemDiskCategory *string `json:"system_disk_category,omitempty" cty:"system_disk_category"`
|
||||
UserData *string `json:"user_data,omitempty" cty:"user_data"`
|
||||
|
||||
RAMRole *terraform.Literal `json:"role_name,omitempty" cty:"role_name"`
|
||||
ScalingGroup *terraform.Literal `json:"scaling_group_id,omitempty" cty:"scaling_group_id"`
|
||||
SSHKey *terraform.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
SecurityGroup *terraform.Literal `json:"security_group_id,omitempty" cty:"security_group_id"`
|
||||
RAMRole *terraformWriter.Literal `json:"role_name,omitempty" cty:"role_name"`
|
||||
ScalingGroup *terraformWriter.Literal `json:"scaling_group_id,omitempty" cty:"scaling_group_id"`
|
||||
SSHKey *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
SecurityGroup *terraformWriter.Literal `json:"security_group_id,omitempty" cty:"security_group_id"`
|
||||
}
|
||||
|
||||
func (_ *LaunchConfiguration) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *LaunchConfiguration) error {
|
||||
|
|
@ -336,8 +337,8 @@ func (_ *LaunchConfiguration) RenderTerraform(t *terraform.TerraformTarget, a, e
|
|||
return t.RenderResource("alicloud_ess_scaling_configuration", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (l *LaunchConfiguration) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_ess_scaling_configuration", fi.StringValue(l.Name), "id")
|
||||
func (l *LaunchConfiguration) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_ess_scaling_configuration", fi.StringValue(l.Name), "id")
|
||||
}
|
||||
|
||||
// deleteLaunchConfiguration tracks a LaunchConfiguration that we're going to delete
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import (
|
|||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/slb"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/aliup"
|
||||
|
|
@ -264,6 +265,6 @@ func (_ *LoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, chang
|
|||
return t.RenderResource("alicloud_slb", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (l *LoadBalancer) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_slb", *l.Name, "id")
|
||||
func (l *LoadBalancer) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_slb", *l.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import (
|
|||
"strconv"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"github.com/denverdino/aliyungo/slb"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
|
|
@ -149,10 +150,10 @@ func (_ *LoadBalancerListener) RenderALI(t *aliup.ALIAPITarget, a, e, changes *L
|
|||
}
|
||||
|
||||
type terraformLoadBalancerListener struct {
|
||||
ListenerPort *int `json:"frontend_port,omitempty" cty:"frontend_port"`
|
||||
BackendServerPort *int `json:"backend_port,omitempty" cty:"backend_port"`
|
||||
Protocol *string `json:"protocol,omitempty" cty:"protocol"`
|
||||
LoadBalancerId *terraform.Literal `json:"load_balancer_id,omitempty" cty:"load_balancer_id"`
|
||||
ListenerPort *int `json:"frontend_port,omitempty" cty:"frontend_port"`
|
||||
BackendServerPort *int `json:"backend_port,omitempty" cty:"backend_port"`
|
||||
Protocol *string `json:"protocol,omitempty" cty:"protocol"`
|
||||
LoadBalancerId *terraformWriter.Literal `json:"load_balancer_id,omitempty" cty:"load_balancer_id"`
|
||||
}
|
||||
|
||||
func (_ *LoadBalancerListener) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *LoadBalancerListener) error {
|
||||
|
|
@ -167,6 +168,6 @@ func (_ *LoadBalancerListener) RenderTerraform(t *terraform.TerraformTarget, a,
|
|||
return t.RenderResource("alicloud_slb_listener", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (s *LoadBalancerListener) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_slb_listener", *s.Name, "frontend_port")
|
||||
func (s *LoadBalancerListener) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_slb_listener", *s.Name, "frontend_port")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/aliup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -114,8 +115,8 @@ func (_ *NatGateway) RenderALI(t *aliup.ALIAPITarget, a, e, changes *NatGateway)
|
|||
}
|
||||
|
||||
type terraformNatGateway struct {
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
VpcId *terraform.Literal `json:"vpc_id,omitempty" cty:"vpc_id"`
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
VpcId *terraformWriter.Literal `json:"vpc_id,omitempty" cty:"vpc_id"`
|
||||
}
|
||||
|
||||
func (_ *NatGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *NatGateway) error {
|
||||
|
|
@ -127,6 +128,6 @@ func (_ *NatGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
|
|||
return t.RenderResource("alicloud_nat_gateway", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *NatGateway) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_nat_gateway", *e.Name, "id")
|
||||
func (e *NatGateway) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_nat_gateway", *e.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import (
|
|||
|
||||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/ram"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
|
|
@ -146,9 +147,9 @@ type terraformRAMPolicy struct {
|
|||
}
|
||||
|
||||
type terraformRAMPolicyAttach struct {
|
||||
PolicyName *terraform.Literal `json:"policy_name,omitempty" cty:"policy_name"`
|
||||
PolicyType *string `json:"policy_type,omitempty" cty:"policy_type"`
|
||||
RoleName *terraform.Literal `json:"role_name,omitempty" cty:"role_name"`
|
||||
PolicyName *terraformWriter.Literal `json:"policy_name,omitempty" cty:"policy_name"`
|
||||
PolicyType *string `json:"policy_type,omitempty" cty:"policy_type"`
|
||||
RoleName *terraformWriter.Literal `json:"role_name,omitempty" cty:"role_name"`
|
||||
}
|
||||
|
||||
func (_ *RAMPolicy) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *RAMPolicy) error {
|
||||
|
|
@ -176,6 +177,6 @@ func (_ *RAMPolicy) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
|
|||
return err
|
||||
}
|
||||
|
||||
func (s *RAMPolicy) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_ram_policy", *s.Name, "id")
|
||||
func (s *RAMPolicy) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_ram_policy", *s.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import (
|
|||
|
||||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/ram"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
|
|
@ -136,6 +137,6 @@ func (_ *RAMRole) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *R
|
|||
return t.RenderResource("alicloud_ram_role", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (s *RAMRole) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_ram_role", *s.Name, "name")
|
||||
func (s *RAMRole) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_ram_role", *s.Name, "name")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/ess"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/aliup"
|
||||
|
|
@ -181,8 +182,8 @@ type terraformScalingGroup struct {
|
|||
MaxSize *int `json:"max_size,omitempty" cty:"max_size"`
|
||||
MinSize *int `json:"min_size,omitempty" cty:"min_size"`
|
||||
|
||||
VSwitchs []*terraform.Literal `json:"vswitch_ids,omitempty" cty:"vswitch_ids"`
|
||||
LoadBalancer []*terraform.Literal `json:"loadbalancer_ids,omitempty" cty:"loadbalancer_ids"`
|
||||
VSwitchs []*terraformWriter.Literal `json:"vswitch_ids,omitempty" cty:"vswitch_ids"`
|
||||
LoadBalancer []*terraformWriter.Literal `json:"loadbalancer_ids,omitempty" cty:"loadbalancer_ids"`
|
||||
}
|
||||
|
||||
func (_ *ScalingGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ScalingGroup) error {
|
||||
|
|
@ -205,6 +206,6 @@ func (_ *ScalingGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, chang
|
|||
return t.RenderResource("alicloud_ess_scaling_group", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (a *ScalingGroup) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_ess_scaling_group", *a.Name, "id")
|
||||
func (a *ScalingGroup) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_ess_scaling_group", *a.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/ecs"
|
||||
|
|
@ -184,8 +185,8 @@ func (s *SecurityGroup) getGroupTagsToDelete(currentTags map[string]string) map[
|
|||
}
|
||||
|
||||
type terraformSecurityGroup struct {
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
VPCId *terraform.Literal `json:"vpc_id,omitempty" cty:"vpc_id"`
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
VPCId *terraformWriter.Literal `json:"vpc_id,omitempty" cty:"vpc_id"`
|
||||
}
|
||||
|
||||
func (_ *SecurityGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SecurityGroup) error {
|
||||
|
|
@ -197,6 +198,6 @@ func (_ *SecurityGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, chan
|
|||
return t.RenderResource("alicloud_security_group", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (l *SecurityGroup) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_security_group", *l.Name, "id")
|
||||
func (l *SecurityGroup) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_security_group", *l.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import (
|
|||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/ecs"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/aliup"
|
||||
|
|
@ -180,13 +181,13 @@ func (_ *SecurityGroupRule) RenderALI(t *aliup.ALIAPITarget, a, e, changes *Secu
|
|||
}
|
||||
|
||||
type terraformSecurityGroupRole struct {
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
Type *string `json:"type,omitempty" cty:"type"`
|
||||
IpProtocol *string `json:"ip_protocol,omitempty" cty:"ip_protocol"`
|
||||
SourceCidrIp *string `json:"cidr_ip,omitempty" cty:"cidr_ip"`
|
||||
SecurityGroupId *terraform.Literal `json:"security_group_id,omitempty" cty:"security_group_id"`
|
||||
SourceGroupId *terraform.Literal `json:"source_security_group_id,omitempty" cty:"source_security_group_id"`
|
||||
PortRange *string `json:"port_range,omitempty" cty:"port_range"`
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
Type *string `json:"type,omitempty" cty:"type"`
|
||||
IpProtocol *string `json:"ip_protocol,omitempty" cty:"ip_protocol"`
|
||||
SourceCidrIp *string `json:"cidr_ip,omitempty" cty:"cidr_ip"`
|
||||
SecurityGroupId *terraformWriter.Literal `json:"security_group_id,omitempty" cty:"security_group_id"`
|
||||
SourceGroupId *terraformWriter.Literal `json:"source_security_group_id,omitempty" cty:"source_security_group_id"`
|
||||
PortRange *string `json:"port_range,omitempty" cty:"port_range"`
|
||||
}
|
||||
|
||||
func (_ *SecurityGroupRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SecurityGroupRule) error {
|
||||
|
|
@ -217,6 +218,6 @@ func (_ *SecurityGroupRule) RenderTerraform(t *terraform.TerraformTarget, a, e,
|
|||
return t.RenderResource("alicloud_security_group_rule", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (l *SecurityGroupRule) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_security_group_rule", *l.Name, "id")
|
||||
func (l *SecurityGroupRule) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_security_group_rule", *l.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import (
|
|||
|
||||
common "github.com/denverdino/aliyungo/common"
|
||||
ecs "github.com/denverdino/aliyungo/ecs"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/pkg/pki"
|
||||
|
|
@ -163,6 +164,6 @@ func (_ *SSHKey) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SS
|
|||
return t.RenderResource("alicloud_key_pair", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (s *SSHKey) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_key_pair", *s.Name, "name")
|
||||
func (s *SSHKey) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_key_pair", *s.Name, "name")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/aliup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -173,6 +174,6 @@ func (_ *VPC) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPC)
|
|||
return t.RenderResource("alicloud_vpc", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *VPC) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_vpc", *e.Name, "id")
|
||||
func (e *VPC) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_vpc", *e.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/ecs"
|
||||
|
|
@ -175,10 +176,10 @@ func (_ *VSwitch) RenderALI(t *aliup.ALIAPITarget, a, e, changes *VSwitch) error
|
|||
}
|
||||
|
||||
type terraformVSwitch struct {
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
CidrBlock *string `json:"cidr_block,omitempty" cty:"cidr_block"`
|
||||
ZoneId *string `json:"availability_zone,omitempty" cty:"availability_zone"`
|
||||
VPCId *terraform.Literal `json:"vpc_id,omitempty" cty:"vpc_id"`
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
CidrBlock *string `json:"cidr_block,omitempty" cty:"cidr_block"`
|
||||
ZoneId *string `json:"availability_zone,omitempty" cty:"availability_zone"`
|
||||
VPCId *terraformWriter.Literal `json:"vpc_id,omitempty" cty:"vpc_id"`
|
||||
}
|
||||
|
||||
func (_ *VSwitch) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VSwitch) error {
|
||||
|
|
@ -192,6 +193,6 @@ func (_ *VSwitch) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *V
|
|||
return t.RenderResource("alicloud_vswitch", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (v *VSwitch) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("alicloud_vswitch", *v.Name, "id")
|
||||
func (v *VSwitch) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("alicloud_vswitch", *v.Name, "id")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"github.com/denverdino/aliyungo/common"
|
||||
"github.com/denverdino/aliyungo/ecs"
|
||||
|
|
@ -183,8 +184,8 @@ func (_ *VSwitchSNAT) RenderALI(t *aliup.ALIAPITarget, a, e, changes *VSwitchSNA
|
|||
}
|
||||
|
||||
type terraformVSwitchSNAT struct {
|
||||
SnatTableId *string `json:"snat_table_id,omitempty" cty:"snat_table_id"`
|
||||
VSwitchId *terraform.Literal `json:"source_vswitch_id,omitempty" cty:"source_vswitch_id"`
|
||||
SnatTableId *string `json:"snat_table_id,omitempty" cty:"snat_table_id"`
|
||||
VSwitchId *terraformWriter.Literal `json:"source_vswitch_id,omitempty" cty:"source_vswitch_id"`
|
||||
}
|
||||
|
||||
func (_ *VSwitchSNAT) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VSwitchSNAT) error {
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/openstack"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
"k8s.io/kops/util/pkg/architectures"
|
||||
"k8s.io/kops/util/pkg/hashing"
|
||||
"k8s.io/kops/util/pkg/mirrors"
|
||||
|
|
@ -699,17 +700,17 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) error {
|
|||
tf := terraform.NewTerraformTarget(cloud, project, outDir, cluster.Spec.Target)
|
||||
|
||||
// We include a few "util" variables in the TF output
|
||||
if err := tf.AddOutputVariable("region", terraform.LiteralFromStringValue(cloud.Region())); err != nil {
|
||||
if err := tf.AddOutputVariable("region", terraformWriter.LiteralFromStringValue(cloud.Region())); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if project != "" {
|
||||
if err := tf.AddOutputVariable("project", terraform.LiteralFromStringValue(project)); err != nil {
|
||||
if err := tf.AddOutputVariable("project", terraformWriter.LiteralFromStringValue(project)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := tf.AddOutputVariable("cluster_name", terraform.LiteralFromStringValue(cluster.ObjectMeta.Name)); err != nil {
|
||||
if err := tf.AddOutputVariable("cluster_name", terraformWriter.LiteralFromStringValue(cluster.ObjectMeta.Name)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ go_library(
|
|||
"//upup/pkg/fi/cloudup/awsup:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/cloudformation:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraform:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraformWriter:go_default_library",
|
||||
"//upup/pkg/fi/utils:go_default_library",
|
||||
"//util/pkg/maps:go_default_library",
|
||||
"//util/pkg/slice:go_default_library",
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
"k8s.io/kops/util/pkg/maps"
|
||||
)
|
||||
|
||||
|
|
@ -805,16 +806,16 @@ type terraformASGTag struct {
|
|||
|
||||
type terraformAutoscalingLaunchTemplateSpecification struct {
|
||||
// LaunchTemplateID is the ID of the template to use.
|
||||
LaunchTemplateID *terraform.Literal `json:"id,omitempty" cty:"id"`
|
||||
LaunchTemplateID *terraformWriter.Literal `json:"id,omitempty" cty:"id"`
|
||||
// Version is the version of the Launch Template to use.
|
||||
Version *terraform.Literal `json:"version,omitempty" cty:"version"`
|
||||
Version *terraformWriter.Literal `json:"version,omitempty" cty:"version"`
|
||||
}
|
||||
|
||||
type terraformAutoscalingMixedInstancesPolicyLaunchTemplateSpecification struct {
|
||||
// LaunchTemplateID is the ID of the template to use
|
||||
LaunchTemplateID *terraform.Literal `json:"launch_template_id,omitempty" cty:"launch_template_id"`
|
||||
LaunchTemplateID *terraformWriter.Literal `json:"launch_template_id,omitempty" cty:"launch_template_id"`
|
||||
// Version is the version of the Launch Template to use
|
||||
Version *terraform.Literal `json:"version,omitempty" cty:"version"`
|
||||
Version *terraformWriter.Literal `json:"version,omitempty" cty:"version"`
|
||||
}
|
||||
|
||||
type terraformAutoscalingMixedInstancesPolicyLaunchTemplateOverride struct {
|
||||
|
|
@ -853,19 +854,19 @@ type terraformMixedInstancesPolicy struct {
|
|||
|
||||
type terraformAutoscalingGroup struct {
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
LaunchConfigurationName *terraform.Literal `json:"launch_configuration,omitempty" cty:"launch_configuration"`
|
||||
LaunchConfigurationName *terraformWriter.Literal `json:"launch_configuration,omitempty" cty:"launch_configuration"`
|
||||
LaunchTemplate *terraformAutoscalingLaunchTemplateSpecification `json:"launch_template,omitempty" cty:"launch_template"`
|
||||
MaxSize *int64 `json:"max_size,omitempty" cty:"max_size"`
|
||||
MinSize *int64 `json:"min_size,omitempty" cty:"min_size"`
|
||||
MixedInstancesPolicy []*terraformMixedInstancesPolicy `json:"mixed_instances_policy,omitempty" cty:"mixed_instances_policy"`
|
||||
VPCZoneIdentifier []*terraform.Literal `json:"vpc_zone_identifier,omitempty" cty:"vpc_zone_identifier"`
|
||||
VPCZoneIdentifier []*terraformWriter.Literal `json:"vpc_zone_identifier,omitempty" cty:"vpc_zone_identifier"`
|
||||
Tags []*terraformASGTag `json:"tag,omitempty" cty:"tag"`
|
||||
MetricsGranularity *string `json:"metrics_granularity,omitempty" cty:"metrics_granularity"`
|
||||
EnabledMetrics []*string `json:"enabled_metrics,omitempty" cty:"enabled_metrics"`
|
||||
SuspendedProcesses []*string `json:"suspended_processes,omitempty" cty:"suspended_processes"`
|
||||
InstanceProtection *bool `json:"protect_from_scale_in,omitempty" cty:"protect_from_scale_in"`
|
||||
LoadBalancers []*terraform.Literal `json:"load_balancers,omitempty" cty:"load_balancers"`
|
||||
TargetGroupARNs []*terraform.Literal `json:"target_group_arns,omitempty" cty:"target_group_arns"`
|
||||
LoadBalancers []*terraformWriter.Literal `json:"load_balancers,omitempty" cty:"load_balancers"`
|
||||
TargetGroupARNs []*terraformWriter.Literal `json:"target_group_arns,omitempty" cty:"target_group_arns"`
|
||||
}
|
||||
|
||||
// RenderTerraform is responsible for rendering the terraform codebase
|
||||
|
|
@ -895,12 +896,12 @@ func (_ *AutoscalingGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, c
|
|||
for _, k := range e.LoadBalancers {
|
||||
tf.LoadBalancers = append(tf.LoadBalancers, k.TerraformLink())
|
||||
}
|
||||
terraform.SortLiterals(tf.LoadBalancers)
|
||||
terraformWriter.SortLiterals(tf.LoadBalancers)
|
||||
|
||||
for _, tg := range e.TargetGroups {
|
||||
tf.TargetGroupARNs = append(tf.TargetGroupARNs, tg.TerraformLink())
|
||||
}
|
||||
terraform.SortLiterals(tf.TargetGroupARNs)
|
||||
terraformWriter.SortLiterals(tf.TargetGroupARNs)
|
||||
|
||||
if e.UseMixedInstancesPolicy() {
|
||||
// Temporary warning until https://github.com/terraform-providers/terraform-provider-aws/issues/9750 is resolved
|
||||
|
|
@ -988,8 +989,8 @@ func (_ *AutoscalingGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, c
|
|||
}
|
||||
|
||||
// TerraformLink fills in the property
|
||||
func (e *AutoscalingGroup) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("aws_autoscaling_group", fi.StringValue(e.Name), "id")
|
||||
func (e *AutoscalingGroup) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("aws_autoscaling_group", fi.StringValue(e.Name), "id")
|
||||
}
|
||||
|
||||
type cloudformationASGTag struct {
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -120,11 +121,11 @@ func (*AutoscalingLifecycleHook) RenderAWS(t *awsup.AWSAPITarget, a, e, changes
|
|||
}
|
||||
|
||||
type terraformASGLifecycleHook struct {
|
||||
Name *string `json:"name" cty:"name"`
|
||||
AutoScalingGroupName *terraform.Literal `json:"autoscaling_group_name" cty:"autoscaling_group_name"`
|
||||
DefaultResult *string `json:"default_result" cty:"default_result"`
|
||||
HeartbeatTimeout *int64 `json:"heartbeat_timeout" cty:"heartbeat_timeout"`
|
||||
LifecycleTransition *string `json:"lifecycle_transition" cty:"lifecycle_transition"`
|
||||
Name *string `json:"name" cty:"name"`
|
||||
AutoScalingGroupName *terraformWriter.Literal `json:"autoscaling_group_name" cty:"autoscaling_group_name"`
|
||||
DefaultResult *string `json:"default_result" cty:"default_result"`
|
||||
HeartbeatTimeout *int64 `json:"heartbeat_timeout" cty:"heartbeat_timeout"`
|
||||
LifecycleTransition *string `json:"lifecycle_transition" cty:"lifecycle_transition"`
|
||||
}
|
||||
|
||||
func (_ *AutoscalingLifecycleHook) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *AutoscalingLifecycleHook) error {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
"k8s.io/kops/util/pkg/slice"
|
||||
)
|
||||
|
||||
|
|
@ -699,8 +700,8 @@ func (a OrderLoadBalancersByName) Less(i, j int) bool {
|
|||
type terraformLoadBalancer struct {
|
||||
LoadBalancerName *string `json:"name" cty:"name"`
|
||||
Listener []*terraformLoadBalancerListener `json:"listener" cty:"listener"`
|
||||
SecurityGroups []*terraform.Literal `json:"security_groups" cty:"security_groups"`
|
||||
Subnets []*terraform.Literal `json:"subnets" cty:"subnets"`
|
||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups" cty:"security_groups"`
|
||||
Subnets []*terraformWriter.Literal `json:"subnets" cty:"subnets"`
|
||||
Internal *bool `json:"internal,omitempty" cty:"internal"`
|
||||
|
||||
HealthCheck *terraformLoadBalancerHealthCheck `json:"health_check,omitempty" cty:"health_check"`
|
||||
|
|
@ -754,12 +755,12 @@ func (_ *ClassicLoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e
|
|||
for _, subnet := range e.Subnets {
|
||||
tf.Subnets = append(tf.Subnets, subnet.TerraformLink())
|
||||
}
|
||||
terraform.SortLiterals(tf.Subnets)
|
||||
terraformWriter.SortLiterals(tf.Subnets)
|
||||
|
||||
for _, sg := range e.SecurityGroups {
|
||||
tf.SecurityGroups = append(tf.SecurityGroups, sg.TerraformLink())
|
||||
}
|
||||
terraform.SortLiterals(tf.SecurityGroups)
|
||||
terraformWriter.SortLiterals(tf.SecurityGroups)
|
||||
|
||||
for loadBalancerPort, listener := range e.Listeners {
|
||||
loadBalancerPortInt, err := strconv.ParseInt(loadBalancerPort, 10, 64)
|
||||
|
|
@ -827,7 +828,7 @@ func (_ *ClassicLoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e
|
|||
return t.RenderResource("aws_elb", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *ClassicLoadBalancer) TerraformLink(params ...string) *terraform.Literal {
|
||||
func (e *ClassicLoadBalancer) TerraformLink(params ...string) *terraformWriter.Literal {
|
||||
shared := fi.BoolValue(e.Shared)
|
||||
if shared {
|
||||
if e.LoadBalancerName == nil {
|
||||
|
|
@ -835,14 +836,14 @@ func (e *ClassicLoadBalancer) TerraformLink(params ...string) *terraform.Literal
|
|||
}
|
||||
|
||||
klog.V(4).Infof("reusing existing LB with name %q", *e.LoadBalancerName)
|
||||
return terraform.LiteralFromStringValue(*e.LoadBalancerName)
|
||||
return terraformWriter.LiteralFromStringValue(*e.LoadBalancerName)
|
||||
}
|
||||
|
||||
prop := "id"
|
||||
if len(params) > 0 {
|
||||
prop = params[0]
|
||||
}
|
||||
return terraform.LiteralProperty("aws_elb", *e.Name, prop)
|
||||
return terraformWriter.LiteralProperty("aws_elb", *e.Name, prop)
|
||||
}
|
||||
|
||||
type cloudformationClassicLoadBalancer struct {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -189,8 +190,8 @@ func (_ *DHCPOptions) RenderTerraform(t *terraform.TerraformTarget, a, e, change
|
|||
return t.RenderResource("aws_vpc_dhcp_options", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *DHCPOptions) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("aws_vpc_dhcp_options", *e.Name, "id")
|
||||
func (e *DHCPOptions) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("aws_vpc_dhcp_options", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationDHCPOptions struct {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -49,7 +50,7 @@ type DNSTarget interface {
|
|||
getHostedZoneId() *string
|
||||
CloudformationAttrDNSName() *cloudformation.Literal
|
||||
CloudformationAttrCanonicalHostedZoneNameID() *cloudformation.Literal
|
||||
TerraformLink(...string) *terraform.Literal
|
||||
TerraformLink(...string) *terraformWriter.Literal
|
||||
}
|
||||
|
||||
func (e *DNSName) Find(c *fi.Context) (*DNSName, error) {
|
||||
|
|
@ -290,14 +291,14 @@ type terraformRoute53Record struct {
|
|||
TTL *string `json:"ttl,omitempty" cty:"ttl"`
|
||||
Records []string `json:"records,omitempty" cty:"records"`
|
||||
|
||||
Alias *terraformAlias `json:"alias,omitempty" cty:"alias"`
|
||||
ZoneID *terraform.Literal `json:"zone_id" cty:"zone_id"`
|
||||
Alias *terraformAlias `json:"alias,omitempty" cty:"alias"`
|
||||
ZoneID *terraformWriter.Literal `json:"zone_id" cty:"zone_id"`
|
||||
}
|
||||
|
||||
type terraformAlias struct {
|
||||
Name *terraform.Literal `json:"name" cty:"name"`
|
||||
ZoneID *terraform.Literal `json:"zone_id" cty:"zone_id"`
|
||||
EvaluateTargetHealth *bool `json:"evaluate_target_health" cty:"evaluate_target_health"`
|
||||
Name *terraformWriter.Literal `json:"name" cty:"name"`
|
||||
ZoneID *terraformWriter.Literal `json:"zone_id" cty:"zone_id"`
|
||||
EvaluateTargetHealth *bool `json:"evaluate_target_health" cty:"evaluate_target_health"`
|
||||
}
|
||||
|
||||
func (_ *DNSName) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *DNSName) error {
|
||||
|
|
@ -318,8 +319,8 @@ func (_ *DNSName) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *D
|
|||
return t.RenderResource("aws_route53_record", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *DNSName) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralSelfLink("aws_route53_record", *e.Name)
|
||||
func (e *DNSName) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralSelfLink("aws_route53_record", *e.Name)
|
||||
}
|
||||
|
||||
type cloudformationRoute53Record struct {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// DNSZone is a zone object in a dns provider
|
||||
|
|
@ -226,9 +227,9 @@ func (_ *DNSZone) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *DNSZone) error
|
|||
}
|
||||
|
||||
type terraformRoute53ZoneAssociation struct {
|
||||
ZoneID *terraform.Literal `json:"zone_id" cty:"zone_id"`
|
||||
VPCID *terraform.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Lifecycle *terraform.Lifecycle `json:"lifecycle,omitempty" cty:"lifecycle"`
|
||||
ZoneID *terraformWriter.Literal `json:"zone_id" cty:"zone_id"`
|
||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Lifecycle *terraform.Lifecycle `json:"lifecycle,omitempty" cty:"lifecycle"`
|
||||
}
|
||||
|
||||
func (_ *DNSZone) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *DNSZone) error {
|
||||
|
|
@ -271,7 +272,7 @@ func (_ *DNSZone) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *D
|
|||
if assocNeeded {
|
||||
klog.Infof("No association between VPC %q and zone %q; adding", vpcName, aws.StringValue(z.HostedZone.Name))
|
||||
tf := &terraformRoute53ZoneAssociation{
|
||||
ZoneID: terraform.LiteralFromStringValue(*e.ZoneID),
|
||||
ZoneID: terraformWriter.LiteralFromStringValue(*e.ZoneID),
|
||||
VPCID: e.PrivateVPC.TerraformLink(),
|
||||
}
|
||||
return t.RenderResource("aws_route53_zone_association", *e.Name, tf)
|
||||
|
|
@ -290,13 +291,13 @@ func (_ *DNSZone) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *D
|
|||
return fmt.Errorf("Creation of Route53 hosted zones is not supported for terraform")
|
||||
}
|
||||
|
||||
func (e *DNSZone) TerraformLink() *terraform.Literal {
|
||||
func (e *DNSZone) TerraformLink() *terraformWriter.Literal {
|
||||
if e.ZoneID != nil {
|
||||
klog.V(4).Infof("reusing existing route53 zone with id %q", *e.ZoneID)
|
||||
return terraform.LiteralFromStringValue(*e.ZoneID)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ZoneID)
|
||||
}
|
||||
|
||||
return terraform.LiteralSelfLink("aws_route53_zone", *e.Name)
|
||||
return terraformWriter.LiteralSelfLink("aws_route53_zone", *e.Name)
|
||||
}
|
||||
|
||||
type cloudformationRoute53Zone struct {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"github.com/aws/aws-sdk-go/service/ec2"
|
||||
"k8s.io/klog/v2"
|
||||
|
|
@ -243,9 +244,9 @@ func (_ *EBSVolume) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
|
|||
return t.RenderResource("aws_ebs_volume", tfName, tf)
|
||||
}
|
||||
|
||||
func (e *EBSVolume) TerraformLink() *terraform.Literal {
|
||||
func (e *EBSVolume) TerraformLink() *terraformWriter.Literal {
|
||||
tfName, _ := e.TerraformName()
|
||||
return terraform.LiteralSelfLink("aws_ebs_volume", tfName)
|
||||
return terraformWriter.LiteralSelfLink("aws_ebs_volume", tfName)
|
||||
}
|
||||
|
||||
// TerraformName returns the terraform-safe name, along with a boolean indicating of whether name-prefixing was needed.
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/service/ec2"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
|
|
@ -292,15 +293,15 @@ func (_ *ElasticIP) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
|
|||
return t.RenderResource("aws_eip", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *ElasticIP) TerraformLink() *terraform.Literal {
|
||||
func (e *ElasticIP) TerraformLink() *terraformWriter.Literal {
|
||||
if fi.BoolValue(e.Shared) {
|
||||
if e.ID == nil {
|
||||
klog.Fatalf("ID must be set, if ElasticIP is shared: %v", e)
|
||||
}
|
||||
return terraform.LiteralFromStringValue(*e.ID)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ID)
|
||||
}
|
||||
|
||||
return terraform.LiteralProperty("aws_eip", *e.Name, "id")
|
||||
return terraformWriter.LiteralProperty("aws_eip", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationElasticIP struct {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -126,9 +127,9 @@ func (eb *EventBridgeRule) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Event
|
|||
}
|
||||
|
||||
type terraformEventBridgeRule struct {
|
||||
Name *string `json:"name" cty:"name"`
|
||||
EventPattern *terraform.Literal `json:"event_pattern" cty:"event_pattern"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
Name *string `json:"name" cty:"name"`
|
||||
EventPattern *terraformWriter.Literal `json:"event_pattern" cty:"event_pattern"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *EventBridgeRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EventBridgeRule) error {
|
||||
|
|
@ -146,8 +147,8 @@ func (_ *EventBridgeRule) RenderTerraform(t *terraform.TerraformTarget, a, e, ch
|
|||
return t.RenderResource("aws_cloudwatch_event_rule", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (eb *EventBridgeRule) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("aws_cloudwatch_event_rule", fi.StringValue(eb.Name), "id")
|
||||
func (eb *EventBridgeRule) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("aws_cloudwatch_event_rule", fi.StringValue(eb.Name), "id")
|
||||
}
|
||||
|
||||
type cloudformationTarget struct {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/service/eventbridge"
|
||||
|
|
@ -127,8 +128,8 @@ func (eb *EventBridgeTarget) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Eve
|
|||
}
|
||||
|
||||
type terraformEventBridgeTarget struct {
|
||||
RuleName *terraform.Literal `json:"rule" cty:"rule"`
|
||||
TargetArn *string `json:"arn" cty:"arn"`
|
||||
RuleName *terraformWriter.Literal `json:"rule" cty:"rule"`
|
||||
TargetArn *string `json:"arn" cty:"arn"`
|
||||
}
|
||||
|
||||
func (_ *EventBridgeTarget) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *EventBridgeTarget) error {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
|
|
@ -165,11 +166,11 @@ func (_ *IAMInstanceProfile) RenderTerraform(t *terraform.TerraformTarget, a, e,
|
|||
return nil
|
||||
}
|
||||
|
||||
func (e *IAMInstanceProfile) TerraformLink() *terraform.Literal {
|
||||
func (e *IAMInstanceProfile) TerraformLink() *terraformWriter.Literal {
|
||||
if fi.BoolValue(e.Shared) {
|
||||
return terraform.LiteralFromStringValue(fi.StringValue(e.Name))
|
||||
return terraformWriter.LiteralFromStringValue(fi.StringValue(e.Name))
|
||||
}
|
||||
return terraform.LiteralProperty("aws_iam_instance_profile", *e.Name, "id")
|
||||
return terraformWriter.LiteralProperty("aws_iam_instance_profile", *e.Name, "id")
|
||||
}
|
||||
|
||||
func (_ *IAMInstanceProfile) RenderCloudformation(t *cloudformation.CloudformationTarget, a, e, changes *IAMInstanceProfile) error {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -110,9 +111,9 @@ func (_ *IAMInstanceProfileRole) RenderAWS(t *awsup.AWSAPITarget, a, e, changes
|
|||
}
|
||||
|
||||
type terraformIAMInstanceProfile struct {
|
||||
Name *string `json:"name" cty:"name"`
|
||||
Role *terraform.Literal `json:"role" cty:"role"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
Name *string `json:"name" cty:"name"`
|
||||
Role *terraformWriter.Literal `json:"role" cty:"role"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *IAMInstanceProfileRole) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMInstanceProfileRole) error {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -186,8 +187,8 @@ type terraformIAMOIDCProvider struct {
|
|||
ClientIDList []*string `json:"client_id_list" cty:"client_id_list"`
|
||||
ThumbprintList []*string `json:"thumbprint_list" cty:"thumbprint_list"`
|
||||
|
||||
AssumeRolePolicy *terraform.Literal `json:"assume_role_policy" cty:"assume_role_policy"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
AssumeRolePolicy *terraformWriter.Literal `json:"assume_role_policy" cty:"assume_role_policy"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (p *IAMOIDCProvider) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMOIDCProvider) error {
|
||||
|
|
@ -202,8 +203,8 @@ func (p *IAMOIDCProvider) RenderTerraform(t *terraform.TerraformTarget, a, e, ch
|
|||
return t.RenderResource("aws_iam_openid_connect_provider", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *IAMOIDCProvider) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("aws_iam_openid_connect_provider", *e.Name, "arn")
|
||||
func (e *IAMOIDCProvider) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("aws_iam_openid_connect_provider", *e.Name, "arn")
|
||||
}
|
||||
|
||||
func (_ *IAMOIDCProvider) RenderCloudformation(t *cloudformation.CloudformationTarget, a, e, changes *IAMOIDCProvider) error {
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -251,10 +252,10 @@ func (_ *IAMRole) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *IAMRole) error
|
|||
}
|
||||
|
||||
type terraformIAMRole struct {
|
||||
Name *string `json:"name" cty:"name"`
|
||||
AssumeRolePolicy *terraform.Literal `json:"assume_role_policy" cty:"assume_role_policy"`
|
||||
PermissionsBoundary *string `json:"permissions_boundary,omitempty" cty:"permissions_boundary"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
Name *string `json:"name" cty:"name"`
|
||||
AssumeRolePolicy *terraformWriter.Literal `json:"assume_role_policy" cty:"assume_role_policy"`
|
||||
PermissionsBoundary *string `json:"permissions_boundary,omitempty" cty:"permissions_boundary"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *IAMRole) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMRole) error {
|
||||
|
|
@ -274,15 +275,15 @@ func (_ *IAMRole) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *I
|
|||
}
|
||||
|
||||
if fi.StringValue(e.ExportWithID) != "" {
|
||||
t.AddOutputVariable(*e.ExportWithID+"_role_arn", terraform.LiteralProperty("aws_iam_role", *e.Name, "arn"))
|
||||
t.AddOutputVariable(*e.ExportWithID+"_role_arn", terraformWriter.LiteralProperty("aws_iam_role", *e.Name, "arn"))
|
||||
t.AddOutputVariable(*e.ExportWithID+"_role_name", e.TerraformLink())
|
||||
}
|
||||
|
||||
return t.RenderResource("aws_iam_role", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *IAMRole) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("aws_iam_role", *e.Name, "name")
|
||||
func (e *IAMRole) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("aws_iam_role", *e.Name, "name")
|
||||
}
|
||||
|
||||
type cloudformationIAMRole struct {
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -294,10 +295,10 @@ func (e *IAMRolePolicy) policyDocumentString() (string, error) {
|
|||
}
|
||||
|
||||
type terraformIAMRolePolicy struct {
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
Role *terraform.Literal `json:"role" cty:"role"`
|
||||
PolicyDocument *terraform.Literal `json:"policy,omitempty" cty:"policy"`
|
||||
PolicyArn *string `json:"policy_arn,omitempty" cty:"policy_arn"`
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
Role *terraformWriter.Literal `json:"role" cty:"role"`
|
||||
PolicyDocument *terraformWriter.Literal `json:"policy,omitempty" cty:"policy"`
|
||||
PolicyArn *string `json:"policy_arn,omitempty" cty:"policy_arn"`
|
||||
}
|
||||
|
||||
func (_ *IAMRolePolicy) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *IAMRolePolicy) error {
|
||||
|
|
@ -345,8 +346,8 @@ func (_ *IAMRolePolicy) RenderTerraform(t *terraform.TerraformTarget, a, e, chan
|
|||
return t.RenderResource("aws_iam_role_policy", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *IAMRolePolicy) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralSelfLink("aws_iam_role_policy", *e.Name)
|
||||
func (e *IAMRolePolicy) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralSelfLink("aws_iam_role_policy", *e.Name)
|
||||
}
|
||||
|
||||
type cloudformationIAMRolePolicy struct {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import (
|
|||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// MaxUserDataSize is the max size of the userdata
|
||||
|
|
@ -297,14 +297,14 @@ func (_ *Instance) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Instance) err
|
|||
return t.AddAWSTags(*e.ID, e.Tags)
|
||||
}
|
||||
|
||||
func (e *Instance) TerraformLink() *terraform.Literal {
|
||||
func (e *Instance) TerraformLink() *terraformWriter.Literal {
|
||||
if fi.BoolValue(e.Shared) {
|
||||
if e.ID == nil {
|
||||
klog.Fatalf("ID must be set, if NAT Instance is shared: %s", e)
|
||||
}
|
||||
|
||||
return terraform.LiteralFromStringValue(*e.ID)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ID)
|
||||
}
|
||||
|
||||
return terraform.LiteralSelfLink("aws_instance", *e.Name)
|
||||
return terraformWriter.LiteralSelfLink("aws_instance", *e.Name)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -179,8 +180,8 @@ func (_ *InternetGateway) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Intern
|
|||
}
|
||||
|
||||
type terraformInternetGateway struct {
|
||||
VPCID *terraform.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *InternetGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *InternetGateway) error {
|
||||
|
|
@ -218,7 +219,7 @@ func (_ *InternetGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, ch
|
|||
return t.RenderResource("aws_internet_gateway", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *InternetGateway) TerraformLink() *terraform.Literal {
|
||||
func (e *InternetGateway) TerraformLink() *terraformWriter.Literal {
|
||||
shared := fi.BoolValue(e.Shared)
|
||||
if shared {
|
||||
if e.ID == nil {
|
||||
|
|
@ -226,10 +227,10 @@ func (e *InternetGateway) TerraformLink() *terraform.Literal {
|
|||
}
|
||||
|
||||
klog.V(4).Infof("reusing existing InternetGateway with id %q", *e.ID)
|
||||
return terraform.LiteralFromStringValue(*e.ID)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ID)
|
||||
}
|
||||
|
||||
return terraform.LiteralProperty("aws_internet_gateway", *e.Name, "id")
|
||||
return terraformWriter.LiteralProperty("aws_internet_gateway", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationInternetGateway struct {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
type terraformLaunchTemplateNetworkInterface struct {
|
||||
|
|
@ -31,7 +32,7 @@ type terraformLaunchTemplateNetworkInterface struct {
|
|||
// DeleteOnTermination indicates whether the network interface should be destroyed on instance termination.
|
||||
DeleteOnTermination *bool `json:"delete_on_termination,omitempty" cty:"delete_on_termination"`
|
||||
// SecurityGroups is a list of security group ids.
|
||||
SecurityGroups []*terraform.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
||||
}
|
||||
|
||||
type terraformLaunchTemplateMonitoring struct {
|
||||
|
|
@ -56,7 +57,7 @@ type terraformLaunchTemplatePlacement struct {
|
|||
|
||||
type terraformLaunchTemplateIAMProfile struct {
|
||||
// Name is the name of the profile
|
||||
Name *terraform.Literal `json:"name,omitempty" cty:"name"`
|
||||
Name *terraformWriter.Literal `json:"name,omitempty" cty:"name"`
|
||||
}
|
||||
|
||||
type terraformLaunchTemplateMarketOptionsSpotOptions struct {
|
||||
|
|
@ -144,7 +145,7 @@ type terraformLaunchTemplate struct {
|
|||
// InstanceType is the type of instance
|
||||
InstanceType *string `json:"instance_type,omitempty" cty:"instance_type"`
|
||||
// KeyName is the ssh key to use
|
||||
KeyName *terraform.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
KeyName *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
// MarketOptions are the spot pricing options
|
||||
MarketOptions []*terraformLaunchTemplateMarketOptions `json:"instance_market_options,omitempty" cty:"instance_market_options"`
|
||||
// MetadataOptions are the instance metadata options.
|
||||
|
|
@ -160,17 +161,17 @@ type terraformLaunchTemplate struct {
|
|||
// TagSpecifications are the tags to apply to a resource when it is created.
|
||||
TagSpecifications []*terraformLaunchTemplateTagSpecification `json:"tag_specifications,omitempty" cty:"tag_specifications"`
|
||||
// UserData is the user data for the instances
|
||||
UserData *terraform.Literal `json:"user_data,omitempty" cty:"user_data"`
|
||||
UserData *terraformWriter.Literal `json:"user_data,omitempty" cty:"user_data"`
|
||||
}
|
||||
|
||||
// TerraformLink returns the terraform reference
|
||||
func (t *LaunchTemplate) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("aws_launch_template", fi.StringValue(t.Name), "id")
|
||||
func (t *LaunchTemplate) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("aws_launch_template", fi.StringValue(t.Name), "id")
|
||||
}
|
||||
|
||||
// VersionLink returns the terraform version reference
|
||||
func (t *LaunchTemplate) VersionLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("aws_launch_template", fi.StringValue(t.Name), "latest_version")
|
||||
func (t *LaunchTemplate) VersionLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("aws_launch_template", fi.StringValue(t.Name), "latest_version")
|
||||
}
|
||||
|
||||
// RenderTerraform is responsible for rendering the terraform json
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -361,9 +362,9 @@ func (_ *NatGateway) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *NatGateway)
|
|||
}
|
||||
|
||||
type terraformNATGateway struct {
|
||||
AllocationID *terraform.Literal `json:"allocation_id,omitempty" cty:"allocation_id"`
|
||||
SubnetID *terraform.Literal `json:"subnet_id,omitempty" cty:"subnet_id"`
|
||||
Tag map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
AllocationID *terraformWriter.Literal `json:"allocation_id,omitempty" cty:"allocation_id"`
|
||||
SubnetID *terraformWriter.Literal `json:"subnet_id,omitempty" cty:"subnet_id"`
|
||||
Tag map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *NatGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *NatGateway) error {
|
||||
|
|
@ -385,16 +386,16 @@ func (_ *NatGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
|
|||
return t.RenderResource("aws_nat_gateway", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *NatGateway) TerraformLink() *terraform.Literal {
|
||||
func (e *NatGateway) TerraformLink() *terraformWriter.Literal {
|
||||
if fi.BoolValue(e.Shared) {
|
||||
if e.ID == nil {
|
||||
klog.Fatalf("ID must be set, if NatGateway is shared: %s", e)
|
||||
}
|
||||
|
||||
return terraform.LiteralFromStringValue(*e.ID)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ID)
|
||||
}
|
||||
|
||||
return terraform.LiteralProperty("aws_nat_gateway", *e.Name, "id")
|
||||
return terraformWriter.LiteralProperty("aws_nat_gateway", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationNATGateway struct {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// NetworkLoadBalancer manages an NLB. We find the existing NLB using the Name tag.
|
||||
|
|
@ -736,13 +737,13 @@ type terraformNetworkLoadBalancer struct {
|
|||
}
|
||||
|
||||
type terraformNetworkLoadBalancerSubnetMapping struct {
|
||||
Subnet *terraform.Literal `json:"subnet_id" cty:"subnet_id"`
|
||||
AllocationID *string `json:"allocation_id,omitempty" cty:"allocation_id"`
|
||||
PrivateIPv4Address *string `json:"private_ipv4_address,omitempty" cty:"private_ipv4_address"`
|
||||
Subnet *terraformWriter.Literal `json:"subnet_id" cty:"subnet_id"`
|
||||
AllocationID *string `json:"allocation_id,omitempty" cty:"allocation_id"`
|
||||
PrivateIPv4Address *string `json:"private_ipv4_address,omitempty" cty:"private_ipv4_address"`
|
||||
}
|
||||
|
||||
type terraformNetworkLoadBalancerListener struct {
|
||||
LoadBalancer *terraform.Literal `json:"load_balancer_arn" cty:"load_balancer_arn"`
|
||||
LoadBalancer *terraformWriter.Literal `json:"load_balancer_arn" cty:"load_balancer_arn"`
|
||||
Port int64 `json:"port" cty:"port"`
|
||||
Protocol string `json:"protocol" cty:"protocol"`
|
||||
CertificateARN *string `json:"certificate_arn,omitempty" cty:"certificate_arn"`
|
||||
|
|
@ -751,8 +752,8 @@ type terraformNetworkLoadBalancerListener struct {
|
|||
}
|
||||
|
||||
type terraformNetworkLoadBalancerListenerAction struct {
|
||||
Type string `json:"type" cty:"type"`
|
||||
TargetGroupARN *terraform.Literal `json:"target_group_arn,omitempty" cty:"target_group_arn"`
|
||||
Type string `json:"type" cty:"type"`
|
||||
TargetGroupARN *terraformWriter.Literal `json:"target_group_arn,omitempty" cty:"target_group_arn"`
|
||||
}
|
||||
|
||||
func (_ *NetworkLoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *NetworkLoadBalancer) error {
|
||||
|
|
@ -816,12 +817,12 @@ func (_ *NetworkLoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e
|
|||
return nil
|
||||
}
|
||||
|
||||
func (e *NetworkLoadBalancer) TerraformLink(params ...string) *terraform.Literal {
|
||||
func (e *NetworkLoadBalancer) TerraformLink(params ...string) *terraformWriter.Literal {
|
||||
prop := "id"
|
||||
if len(params) > 0 {
|
||||
prop = params[0]
|
||||
}
|
||||
return terraform.LiteralProperty("aws_lb", *e.Name, prop)
|
||||
return terraformWriter.LiteralProperty("aws_lb", *e.Name, prop)
|
||||
}
|
||||
|
||||
type cloudformationNetworkLoadBalancer struct {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -236,12 +237,12 @@ func checkNotNil(s *string) *string {
|
|||
}
|
||||
|
||||
type terraformRoute struct {
|
||||
RouteTableID *terraform.Literal `json:"route_table_id" cty:"route_table_id"`
|
||||
CIDR *string `json:"destination_cidr_block,omitempty" cty:"destination_cidr_block"`
|
||||
InternetGatewayID *terraform.Literal `json:"gateway_id,omitempty" cty:"gateway_id"`
|
||||
NATGatewayID *terraform.Literal `json:"nat_gateway_id,omitempty" cty:"nat_gateway_id"`
|
||||
TransitGatewayID *string `json:"transit_gateway_id,omitempty" cty:"transit_gateway_id"`
|
||||
InstanceID *terraform.Literal `json:"instance_id,omitempty" cty:"instance_id"`
|
||||
RouteTableID *terraformWriter.Literal `json:"route_table_id" cty:"route_table_id"`
|
||||
CIDR *string `json:"destination_cidr_block,omitempty" cty:"destination_cidr_block"`
|
||||
InternetGatewayID *terraformWriter.Literal `json:"gateway_id,omitempty" cty:"gateway_id"`
|
||||
NATGatewayID *terraformWriter.Literal `json:"nat_gateway_id,omitempty" cty:"nat_gateway_id"`
|
||||
TransitGatewayID *string `json:"transit_gateway_id,omitempty" cty:"transit_gateway_id"`
|
||||
InstanceID *terraformWriter.Literal `json:"instance_id,omitempty" cty:"instance_id"`
|
||||
}
|
||||
|
||||
func (_ *Route) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Route) error {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -191,8 +192,8 @@ func (_ *RouteTable) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *RouteTable)
|
|||
}
|
||||
|
||||
type terraformRouteTable struct {
|
||||
VPCID *terraform.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *RouteTable) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *RouteTable) error {
|
||||
|
|
@ -212,8 +213,8 @@ func (_ *RouteTable) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
|
|||
return t.RenderResource("aws_route_table", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *RouteTable) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("aws_route_table", *e.Name, "id")
|
||||
func (e *RouteTable) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("aws_route_table", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationRouteTable struct {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -187,8 +188,8 @@ func (_ *RouteTableAssociation) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *
|
|||
}
|
||||
|
||||
type terraformRouteTableAssociation struct {
|
||||
SubnetID *terraform.Literal `json:"subnet_id" cty:"subnet_id"`
|
||||
RouteTableID *terraform.Literal `json:"route_table_id" cty:"route_table_id"`
|
||||
SubnetID *terraformWriter.Literal `json:"subnet_id" cty:"subnet_id"`
|
||||
RouteTableID *terraformWriter.Literal `json:"route_table_id" cty:"route_table_id"`
|
||||
}
|
||||
|
||||
func (_ *RouteTableAssociation) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *RouteTableAssociation) error {
|
||||
|
|
@ -200,8 +201,8 @@ func (_ *RouteTableAssociation) RenderTerraform(t *terraform.TerraformTarget, a,
|
|||
return t.RenderResource("aws_route_table_association", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *RouteTableAssociation) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralSelfLink("aws_route_table_association", *e.Name)
|
||||
func (e *RouteTableAssociation) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralSelfLink("aws_route_table_association", *e.Name)
|
||||
}
|
||||
|
||||
type cloudformationRouteTableAssociation struct {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -184,10 +185,10 @@ func (_ *SecurityGroup) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Security
|
|||
}
|
||||
|
||||
type terraformSecurityGroup struct {
|
||||
Name *string `json:"name" cty:"name"`
|
||||
VPCID *terraform.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Description *string `json:"description" cty:"description"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
Name *string `json:"name" cty:"name"`
|
||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Description *string `json:"description" cty:"description"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *SecurityGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SecurityGroup) error {
|
||||
|
|
@ -207,18 +208,18 @@ func (_ *SecurityGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, chan
|
|||
return t.RenderResource("aws_security_group", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *SecurityGroup) TerraformLink() *terraform.Literal {
|
||||
func (e *SecurityGroup) TerraformLink() *terraformWriter.Literal {
|
||||
shared := fi.BoolValue(e.Shared)
|
||||
if shared {
|
||||
// Not terraform owned / managed
|
||||
if e.ID != nil {
|
||||
return terraform.LiteralFromStringValue(*e.ID)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ID)
|
||||
} else {
|
||||
klog.Warningf("ID not set on shared subnet %v", e)
|
||||
}
|
||||
}
|
||||
|
||||
return terraform.LiteralProperty("aws_security_group", *e.Name, "id")
|
||||
return terraformWriter.LiteralProperty("aws_security_group", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationSecurityGroup struct {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -293,8 +294,8 @@ func (_ *SecurityGroupRule) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Secu
|
|||
type terraformSecurityGroupIngress struct {
|
||||
Type *string `json:"type" cty:"type"`
|
||||
|
||||
SecurityGroup *terraform.Literal `json:"security_group_id" cty:"security_group_id"`
|
||||
SourceGroup *terraform.Literal `json:"source_security_group_id,omitempty" cty:"source_security_group_id"`
|
||||
SecurityGroup *terraformWriter.Literal `json:"security_group_id" cty:"security_group_id"`
|
||||
SourceGroup *terraformWriter.Literal `json:"source_security_group_id,omitempty" cty:"source_security_group_id"`
|
||||
|
||||
FromPort *int64 `json:"from_port,omitempty" cty:"from_port"`
|
||||
ToPort *int64 `json:"to_port,omitempty" cty:"to_port"`
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/service/sqs"
|
||||
|
|
@ -176,10 +177,10 @@ func (q *SQS) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *SQS) error {
|
|||
}
|
||||
|
||||
type terraformSQSQueue struct {
|
||||
Name *string `json:"name" cty:"name"`
|
||||
MessageRetentionSeconds int `json:"message_retention_seconds" cty:"message_retention_seconds"`
|
||||
Policy *terraform.Literal `json:"policy" cty:"policy"`
|
||||
Tags map[string]string `json:"tags" cty:"tags"`
|
||||
Name *string `json:"name" cty:"name"`
|
||||
MessageRetentionSeconds int `json:"message_retention_seconds" cty:"message_retention_seconds"`
|
||||
Policy *terraformWriter.Literal `json:"policy" cty:"policy"`
|
||||
Tags map[string]string `json:"tags" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *SQS) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SQS) error {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/service/ec2"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
|
||||
"k8s.io/kops/pkg/pki"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
|
|
@ -182,9 +183,9 @@ func (_ *SSHKey) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *SSHKey) error {
|
|||
}
|
||||
|
||||
type terraformSSHKey struct {
|
||||
Name *string `json:"key_name" cty:"key_name"`
|
||||
PublicKey *terraform.Literal `json:"public_key" cty:"public_key"`
|
||||
Tags map[string]string `json:"tags" cty:"tags"`
|
||||
Name *string `json:"key_name" cty:"key_name"`
|
||||
PublicKey *terraformWriter.Literal `json:"public_key" cty:"public_key"`
|
||||
Tags map[string]string `json:"tags" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *SSHKey) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *SSHKey) error {
|
||||
|
|
@ -213,15 +214,15 @@ func (e *SSHKey) IsExistingKey() bool {
|
|||
return e.PublicKey == nil
|
||||
}
|
||||
|
||||
func (e *SSHKey) TerraformLink() *terraform.Literal {
|
||||
func (e *SSHKey) TerraformLink() *terraformWriter.Literal {
|
||||
if e.NoSSHKey() {
|
||||
return nil
|
||||
}
|
||||
if e.IsExistingKey() {
|
||||
return terraform.LiteralFromStringValue(*e.Name)
|
||||
return terraformWriter.LiteralFromStringValue(*e.Name)
|
||||
}
|
||||
tfName := strings.Replace(*e.Name, ":", "", -1)
|
||||
return terraform.LiteralProperty("aws_key_pair", tfName, "id")
|
||||
return terraformWriter.LiteralProperty("aws_key_pair", tfName, "id")
|
||||
}
|
||||
|
||||
func (_ *SSHKey) RenderCloudformation(t *cloudformation.CloudformationTarget, a, e, changes *SSHKey) error {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
"k8s.io/kops/upup/pkg/fi/utils"
|
||||
)
|
||||
|
||||
|
|
@ -215,10 +216,10 @@ func subnetSlicesEqualIgnoreOrder(l, r []*Subnet) bool {
|
|||
}
|
||||
|
||||
type terraformSubnet struct {
|
||||
VPCID *terraform.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
CIDR *string `json:"cidr_block" cty:"cidr_block"`
|
||||
AvailabilityZone *string `json:"availability_zone" cty:"availability_zone"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
CIDR *string `json:"cidr_block" cty:"cidr_block"`
|
||||
AvailabilityZone *string `json:"availability_zone" cty:"availability_zone"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
func (_ *Subnet) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Subnet) error {
|
||||
|
|
@ -237,7 +238,7 @@ func (_ *Subnet) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Su
|
|||
// We probably shouldn't output subnet_ids only in this case - we normally output them by role,
|
||||
// but removing it now might break people. We could always output subnet_ids though, if we
|
||||
// ever get a request for that.
|
||||
return t.AddOutputVariableArray("subnet_ids", terraform.LiteralFromStringValue(*e.ID))
|
||||
return t.AddOutputVariableArray("subnet_ids", terraformWriter.LiteralFromStringValue(*e.ID))
|
||||
}
|
||||
|
||||
tf := &terraformSubnet{
|
||||
|
|
@ -250,7 +251,7 @@ func (_ *Subnet) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Su
|
|||
return t.RenderResource("aws_subnet", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *Subnet) TerraformLink() *terraform.Literal {
|
||||
func (e *Subnet) TerraformLink() *terraformWriter.Literal {
|
||||
shared := fi.BoolValue(e.Shared)
|
||||
if shared {
|
||||
if e.ID == nil {
|
||||
|
|
@ -258,10 +259,10 @@ func (e *Subnet) TerraformLink() *terraform.Literal {
|
|||
}
|
||||
|
||||
klog.V(4).Infof("reusing existing subnet with id %q", *e.ID)
|
||||
return terraform.LiteralFromStringValue(*e.ID)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ID)
|
||||
}
|
||||
|
||||
return terraform.LiteralProperty("aws_subnet", *e.Name, "id")
|
||||
return terraformWriter.LiteralProperty("aws_subnet", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationSubnet struct {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -210,7 +211,7 @@ type terraformTargetGroup struct {
|
|||
Name string `json:"name" cty:"name"`
|
||||
Port int64 `json:"port" cty:"port"`
|
||||
Protocol string `json:"protocol" cty:"protocol"`
|
||||
VPCID terraform.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
VPCID terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
Tags map[string]string `json:"tags,omitempty" cty:"tags"`
|
||||
HealthCheck terraformTargetGroupHealthCheck `json:"health_check" cty:"health_check"`
|
||||
}
|
||||
|
|
@ -247,16 +248,16 @@ func (_ *TargetGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, change
|
|||
return t.RenderResource("aws_lb_target_group", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *TargetGroup) TerraformLink(params ...string) *terraform.Literal {
|
||||
func (e *TargetGroup) TerraformLink(params ...string) *terraformWriter.Literal {
|
||||
shared := fi.BoolValue(e.Shared)
|
||||
if shared {
|
||||
if e.ARN != nil {
|
||||
return terraform.LiteralFromStringValue(*e.ARN)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ARN)
|
||||
} else {
|
||||
klog.Warningf("ID not set on shared Target Group %v", e)
|
||||
}
|
||||
}
|
||||
return terraform.LiteralProperty("aws_lb_target_group", *e.Name, "id")
|
||||
return terraformWriter.LiteralProperty("aws_lb_target_group", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationTargetGroup struct {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -267,7 +268,7 @@ func (_ *VPC) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPC)
|
|||
return nil
|
||||
}
|
||||
|
||||
if err := t.AddOutputVariable("vpc_cidr_block", terraform.LiteralProperty("aws_vpc", *e.Name, "cidr_block")); err != nil {
|
||||
if err := t.AddOutputVariable("vpc_cidr_block", terraformWriter.LiteralProperty("aws_vpc", *e.Name, "cidr_block")); err != nil {
|
||||
// TODO: Should we try to output vpc_cidr_block for shared vpcs?
|
||||
return err
|
||||
}
|
||||
|
|
@ -282,7 +283,7 @@ func (_ *VPC) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPC)
|
|||
return t.RenderResource("aws_vpc", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *VPC) TerraformLink() *terraform.Literal {
|
||||
func (e *VPC) TerraformLink() *terraformWriter.Literal {
|
||||
shared := fi.BoolValue(e.Shared)
|
||||
if shared {
|
||||
if e.ID == nil {
|
||||
|
|
@ -290,10 +291,10 @@ func (e *VPC) TerraformLink() *terraform.Literal {
|
|||
}
|
||||
|
||||
klog.V(4).Infof("reusing existing VPC with id %q", *e.ID)
|
||||
return terraform.LiteralFromStringValue(*e.ID)
|
||||
return terraformWriter.LiteralFromStringValue(*e.ID)
|
||||
}
|
||||
|
||||
return terraform.LiteralProperty("aws_vpc", *e.Name, "id")
|
||||
return terraformWriter.LiteralProperty("aws_vpc", *e.Name, "id")
|
||||
}
|
||||
|
||||
type cloudformationVPC struct {
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -102,8 +103,8 @@ func (_ *VPCDHCPOptionsAssociation) RenderAWS(t *awsup.AWSAPITarget, a, e, chang
|
|||
}
|
||||
|
||||
type terraformVPCDHCPOptionsAssociation struct {
|
||||
VPCID *terraform.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
DHCPOptionsID *terraform.Literal `json:"dhcp_options_id" cty:"dhcp_options_id"`
|
||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
DHCPOptionsID *terraformWriter.Literal `json:"dhcp_options_id" cty:"dhcp_options_id"`
|
||||
}
|
||||
|
||||
func (_ *VPCDHCPOptionsAssociation) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPCDHCPOptionsAssociation) error {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -124,8 +125,8 @@ func (_ *VPCCIDRBlock) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *VPCCIDRBl
|
|||
}
|
||||
|
||||
type terraformVPCCIDRBlock struct {
|
||||
VPCID *terraform.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
CIDRBlock *string `json:"cidr_block" cty:"cidr_block"`
|
||||
VPCID *terraformWriter.Literal `json:"vpc_id" cty:"vpc_id"`
|
||||
CIDRBlock *string `json:"cidr_block" cty:"cidr_block"`
|
||||
}
|
||||
|
||||
func (_ *VPCCIDRBlock) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *VPCCIDRBlock) error {
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ go_library(
|
|||
"//upup/pkg/fi:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/gce:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraform:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraformWriter:go_default_library",
|
||||
"//vendor/google.golang.org/api/compute/v1:go_default_library",
|
||||
"//vendor/google.golang.org/api/storage/v1:go_default_library",
|
||||
"//vendor/k8s.io/klog/v2:go_default_library",
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -163,8 +164,8 @@ func (_ *Address) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *A
|
|||
return t.RenderResource("google_compute_address", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *Address) TerraformAddress() *terraform.Literal {
|
||||
func (e *Address) TerraformAddress() *terraformWriter.Literal {
|
||||
name := fi.StringValue(e.Name)
|
||||
|
||||
return terraform.LiteralProperty("google_compute_address", name, "address")
|
||||
return terraformWriter.LiteralProperty("google_compute_address", name, "address")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// FirewallRule represents a GCE firewall rules
|
||||
|
|
@ -163,8 +164,8 @@ type terraformAllow struct {
|
|||
}
|
||||
|
||||
type terraformFirewall struct {
|
||||
Name string `json:"name" cty:"name"`
|
||||
Network *terraform.Literal `json:"network" cty:"network"`
|
||||
Name string `json:"name" cty:"name"`
|
||||
Network *terraformWriter.Literal `json:"network" cty:"network"`
|
||||
|
||||
Allowed []*terraformAllow `json:"allow,omitempty" cty:"allow"`
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// ForwardingRule represents a GCE ForwardingRule
|
||||
|
|
@ -138,11 +139,11 @@ func (_ *ForwardingRule) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Forwardin
|
|||
}
|
||||
|
||||
type terraformForwardingRule struct {
|
||||
Name string `json:"name" cty:"name"`
|
||||
PortRange string `json:"port_range,omitempty" cty:"port_range"`
|
||||
Target *terraform.Literal `json:"target,omitempty" cty:"target"`
|
||||
IPAddress *terraform.Literal `json:"ip_address,omitempty" cty:"ip_address"`
|
||||
IPProtocol string `json:"ip_protocol,omitempty" cty:"ip_protocol"`
|
||||
Name string `json:"name" cty:"name"`
|
||||
PortRange string `json:"port_range,omitempty" cty:"port_range"`
|
||||
Target *terraformWriter.Literal `json:"target,omitempty" cty:"target"`
|
||||
IPAddress *terraformWriter.Literal `json:"ip_address,omitempty" cty:"ip_address"`
|
||||
IPProtocol string `json:"ip_protocol,omitempty" cty:"ip_protocol"`
|
||||
}
|
||||
|
||||
func (_ *ForwardingRule) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *ForwardingRule) error {
|
||||
|
|
@ -165,8 +166,8 @@ func (_ *ForwardingRule) RenderTerraform(t *terraform.TerraformTarget, a, e, cha
|
|||
return t.RenderResource("google_compute_forwarding_rule", name, tf)
|
||||
}
|
||||
|
||||
func (e *ForwardingRule) TerraformLink() *terraform.Literal {
|
||||
func (e *ForwardingRule) TerraformLink() *terraformWriter.Literal {
|
||||
name := fi.StringValue(e.Name)
|
||||
|
||||
return terraform.LiteralSelfLink("google_compute_forwarding_rule", name)
|
||||
return terraformWriter.LiteralSelfLink("google_compute_forwarding_rule", name)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
var scopeAliases map[string]string
|
||||
|
|
@ -393,17 +394,17 @@ func ShortenImageURL(defaultProject string, imageURL string) (string, error) {
|
|||
}
|
||||
|
||||
type terraformInstance struct {
|
||||
Name string `json:"name" cty:"name"`
|
||||
CanIPForward bool `json:"can_ip_forward" cty:"can_ip_forward"`
|
||||
MachineType string `json:"machine_type,omitempty" cty:"machine_type"`
|
||||
ServiceAccount *terraformServiceAccount `json:"service_account,omitempty" cty:"service_account"`
|
||||
Scheduling *terraformScheduling `json:"scheduling,omitempty" cty:"scheduling"`
|
||||
Disks []*terraformInstanceAttachedDisk `json:"disk,omitempty" cty:"disk"`
|
||||
NetworkInterfaces []*terraformNetworkInterface `json:"network_interface,omitempty" cty:"network_interface"`
|
||||
Metadata map[string]*terraform.Literal `json:"metadata,omitempty" cty:"metadata"`
|
||||
MetadataStartupScript *terraform.Literal `json:"metadata_startup_script,omitempty" cty:"metadata_startup_script"`
|
||||
Tags []string `json:"tags,omitempty" cty:"tags"`
|
||||
Zone string `json:"zone,omitempty" cty:"zone"`
|
||||
Name string `json:"name" cty:"name"`
|
||||
CanIPForward bool `json:"can_ip_forward" cty:"can_ip_forward"`
|
||||
MachineType string `json:"machine_type,omitempty" cty:"machine_type"`
|
||||
ServiceAccount *terraformServiceAccount `json:"service_account,omitempty" cty:"service_account"`
|
||||
Scheduling *terraformScheduling `json:"scheduling,omitempty" cty:"scheduling"`
|
||||
Disks []*terraformInstanceAttachedDisk `json:"disk,omitempty" cty:"disk"`
|
||||
NetworkInterfaces []*terraformNetworkInterface `json:"network_interface,omitempty" cty:"network_interface"`
|
||||
Metadata map[string]*terraformWriter.Literal `json:"metadata,omitempty" cty:"metadata"`
|
||||
MetadataStartupScript *terraformWriter.Literal `json:"metadata_startup_script,omitempty" cty:"metadata_startup_script"`
|
||||
Tags []string `json:"tags,omitempty" cty:"tags"`
|
||||
Zone string `json:"zone,omitempty" cty:"zone"`
|
||||
}
|
||||
|
||||
type terraformInstanceAttachedDisk struct {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -171,16 +172,16 @@ func (_ *InstanceGroupManager) RenderGCE(t *gce.GCEAPITarget, a, e, changes *Ins
|
|||
}
|
||||
|
||||
type terraformInstanceGroupManager struct {
|
||||
Name *string `json:"name" cty:"name"`
|
||||
Zone *string `json:"zone" cty:"zone"`
|
||||
BaseInstanceName *string `json:"base_instance_name" cty:"base_instance_name"`
|
||||
Version *terraformVersion `json:"version" cty:"version"`
|
||||
TargetSize *int64 `json:"target_size" cty:"target_size"`
|
||||
TargetPools []*terraform.Literal `json:"target_pools,omitempty" cty:"target_pools"`
|
||||
Name *string `json:"name" cty:"name"`
|
||||
Zone *string `json:"zone" cty:"zone"`
|
||||
BaseInstanceName *string `json:"base_instance_name" cty:"base_instance_name"`
|
||||
Version *terraformVersion `json:"version" cty:"version"`
|
||||
TargetSize *int64 `json:"target_size" cty:"target_size"`
|
||||
TargetPools []*terraformWriter.Literal `json:"target_pools,omitempty" cty:"target_pools"`
|
||||
}
|
||||
|
||||
type terraformVersion struct {
|
||||
InstanceTemplate *terraform.Literal `json:"instance_template" cty:"instance_template"`
|
||||
InstanceTemplate *terraformWriter.Literal `json:"instance_template" cty:"instance_template"`
|
||||
}
|
||||
|
||||
func (_ *InstanceGroupManager) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *InstanceGroupManager) error {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -451,8 +452,8 @@ type terraformInstanceTemplate struct {
|
|||
Scheduling *terraformScheduling `json:"scheduling,omitempty" cty:"scheduling"`
|
||||
Disks []*terraformInstanceTemplateAttachedDisk `json:"disk,omitempty" cty:"disk"`
|
||||
NetworkInterfaces []*terraformNetworkInterface `json:"network_interface,omitempty" cty:"network_interface"`
|
||||
Metadata map[string]*terraform.Literal `json:"metadata,omitempty" cty:"metadata"`
|
||||
MetadataStartupScript *terraform.Literal `json:"metadata_startup_script,omitempty" cty:"metadata_startup_script"`
|
||||
Metadata map[string]*terraformWriter.Literal `json:"metadata,omitempty" cty:"metadata"`
|
||||
MetadataStartupScript *terraformWriter.Literal `json:"metadata_startup_script,omitempty" cty:"metadata_startup_script"`
|
||||
Tags []string `json:"tags,omitempty" cty:"tags"`
|
||||
}
|
||||
|
||||
|
|
@ -484,13 +485,13 @@ type terraformInstanceTemplateAttachedDisk struct {
|
|||
}
|
||||
|
||||
type terraformNetworkInterface struct {
|
||||
Network *terraform.Literal `json:"network,omitempty" cty:"network"`
|
||||
Subnetwork *terraform.Literal `json:"subnetwork,omitempty" cty:"subnetwork"`
|
||||
Network *terraformWriter.Literal `json:"network,omitempty" cty:"network"`
|
||||
Subnetwork *terraformWriter.Literal `json:"subnetwork,omitempty" cty:"subnetwork"`
|
||||
AccessConfig []*terraformAccessConfig `json:"access_config" cty:"access_config"`
|
||||
}
|
||||
|
||||
type terraformAccessConfig struct {
|
||||
NatIP *terraform.Literal `json:"nat_ip,omitempty" cty:"nat_ip"`
|
||||
NatIP *terraformWriter.Literal `json:"nat_ip,omitempty" cty:"nat_ip"`
|
||||
}
|
||||
|
||||
func addNetworks(network *Network, subnet *Subnet, networkInterfaces []*compute.NetworkInterface) []*terraformNetworkInterface {
|
||||
|
|
@ -507,7 +508,7 @@ func addNetworks(network *Network, subnet *Subnet, networkInterfaces []*compute.
|
|||
tac := &terraformAccessConfig{}
|
||||
natIP := gac.NatIP
|
||||
if natIP != "" {
|
||||
tac.NatIP = terraform.LiteralFromStringValue(natIP)
|
||||
tac.NatIP = terraformWriter.LiteralFromStringValue(natIP)
|
||||
}
|
||||
|
||||
tf.AccessConfig = append(tf.AccessConfig, tac)
|
||||
|
|
@ -518,11 +519,11 @@ func addNetworks(network *Network, subnet *Subnet, networkInterfaces []*compute.
|
|||
return ni
|
||||
}
|
||||
|
||||
func addMetadata(target *terraform.TerraformTarget, name string, metadata *compute.Metadata) (map[string]*terraform.Literal, error) {
|
||||
func addMetadata(target *terraform.TerraformTarget, name string, metadata *compute.Metadata) (map[string]*terraformWriter.Literal, error) {
|
||||
if metadata == nil {
|
||||
return nil, nil
|
||||
}
|
||||
m := make(map[string]*terraform.Literal)
|
||||
m := make(map[string]*terraformWriter.Literal)
|
||||
for _, g := range metadata.Items {
|
||||
val := fi.StringValue(g.Value)
|
||||
if strings.Contains(val, "\n") {
|
||||
|
|
@ -532,7 +533,7 @@ func addMetadata(target *terraform.TerraformTarget, name string, metadata *compu
|
|||
}
|
||||
m[g.Key] = tfResource
|
||||
} else {
|
||||
m[g.Key] = terraform.LiteralFromStringValue(val)
|
||||
m[g.Key] = terraformWriter.LiteralFromStringValue(val)
|
||||
}
|
||||
}
|
||||
return m, nil
|
||||
|
|
@ -612,6 +613,6 @@ func (_ *InstanceTemplate) RenderTerraform(t *terraform.TerraformTarget, a, e, c
|
|||
return t.RenderResource("google_compute_instance_template", name, tf)
|
||||
}
|
||||
|
||||
func (i *InstanceTemplate) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralSelfLink("google_compute_instance_template", *i.Name)
|
||||
func (i *InstanceTemplate) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralSelfLink("google_compute_instance_template", *i.Name)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -175,6 +176,6 @@ func (_ *Network) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *N
|
|||
return t.RenderResource("google_compute_network", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (i *Network) TerraformName() *terraform.Literal {
|
||||
return terraform.LiteralProperty("google_compute_network", *i.Name, "name")
|
||||
func (i *Network) TerraformName() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("google_compute_network", *i.Name, "name")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -202,6 +203,6 @@ func (*Router) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Rout
|
|||
}
|
||||
|
||||
// TerraformName returns the Terraform name.
|
||||
func (r *Router) TerraformName() *terraform.Literal {
|
||||
return terraform.LiteralProperty("google_compute_router_nat", *r.Name, "name")
|
||||
func (r *Router) TerraformName() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("google_compute_router_nat", *r.Name, "name")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -202,10 +203,10 @@ func (e *Subnet) URL(project string, region string) string {
|
|||
}
|
||||
|
||||
type terraformSubnet struct {
|
||||
Name *string `json:"name" cty:"name"`
|
||||
Network *terraform.Literal `json:"network" cty:"network"`
|
||||
Region *string `json:"region" cty:"region"`
|
||||
CIDR *string `json:"ip_cidr_range" cty:"ip_cidr_range"`
|
||||
Name *string `json:"name" cty:"name"`
|
||||
Network *terraformWriter.Literal `json:"network" cty:"network"`
|
||||
Region *string `json:"region" cty:"region"`
|
||||
CIDR *string `json:"ip_cidr_range" cty:"ip_cidr_range"`
|
||||
|
||||
// SecondaryIPRange defines additional IP ranges
|
||||
SecondaryIPRange []terraformSubnetRange `json:"secondary_ip_range,omitempty" cty:"secondary_ip_range"`
|
||||
|
|
@ -234,6 +235,6 @@ func (_ *Subnet) RenderSubnet(t *terraform.TerraformTarget, a, e, changes *Subne
|
|||
return t.RenderResource("google_compute_subnetwork", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (i *Subnet) TerraformName() *terraform.Literal {
|
||||
return terraform.LiteralProperty("google_compute_subnetwork", *i.Name, "name")
|
||||
func (i *Subnet) TerraformName() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("google_compute_subnetwork", *i.Name, "name")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// TargetPool represents a GCE TargetPool
|
||||
|
|
@ -117,8 +118,8 @@ func (_ *TargetPool) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
|
|||
return t.RenderResource("google_compute_target_pool", name, tf)
|
||||
}
|
||||
|
||||
func (e *TargetPool) TerraformLink() *terraform.Literal {
|
||||
func (e *TargetPool) TerraformLink() *terraformWriter.Literal {
|
||||
name := fi.StringValue(e.Name)
|
||||
|
||||
return terraform.LiteralSelfLink("google_compute_target_pool", name)
|
||||
return terraformWriter.LiteralSelfLink("google_compute_target_pool", name)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ go_library(
|
|||
"//upup/pkg/fi/cloudup/awstasks:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/awsup:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraform:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraformWriter:go_default_library",
|
||||
"//upup/pkg/fi/utils:go_default_library",
|
||||
"//vendor/github.com/aws/aws-sdk-go/service/ec2:go_default_library",
|
||||
"//vendor/github.com/aws/aws-sdk-go/service/elb:go_default_library",
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awstasks"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
"k8s.io/kops/upup/pkg/fi/utils"
|
||||
)
|
||||
|
||||
|
|
@ -1346,8 +1347,8 @@ type terraformElastigroup struct {
|
|||
Description *string `json:"description,omitempty" cty:"description"`
|
||||
Product *string `json:"product,omitempty" cty:"product"`
|
||||
Region *string `json:"region,omitempty" cty:"region"`
|
||||
SubnetIDs []*terraform.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
||||
LoadBalancers []*terraform.Literal `json:"elastic_load_balancers,omitempty" cty:"elastic_load_balancers"`
|
||||
SubnetIDs []*terraformWriter.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
||||
LoadBalancers []*terraformWriter.Literal `json:"elastic_load_balancers,omitempty" cty:"elastic_load_balancers"`
|
||||
NetworkInterfaces []*terraformElastigroupNetworkInterface `json:"network_interface,omitempty" cty:"network_interface"`
|
||||
RootBlockDevice *terraformElastigroupBlockDevice `json:"ebs_block_device,omitempty" cty:"ebs_block_device"`
|
||||
EphemeralBlockDevice []*terraformElastigroupBlockDevice `json:"ephemeral_block_device,omitempty" cty:"ephemeral_block_device"`
|
||||
|
|
@ -1368,14 +1369,14 @@ type terraformElastigroup struct {
|
|||
OnDemand *string `json:"instance_types_ondemand,omitempty" cty:"instance_types_ondemand"`
|
||||
Spot []string `json:"instance_types_spot,omitempty" cty:"instance_types_spot"`
|
||||
|
||||
Monitoring *bool `json:"enable_monitoring,omitempty" cty:"enable_monitoring"`
|
||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
||||
ImageID *string `json:"image_id,omitempty" cty:"image_id"`
|
||||
HealthCheckType *string `json:"health_check_type,omitempty" cty:"health_check_type"`
|
||||
SecurityGroups []*terraform.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
||||
UserData *terraform.Literal `json:"user_data,omitempty" cty:"user_data"`
|
||||
IAMInstanceProfile *terraform.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
||||
KeyName *terraform.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
Monitoring *bool `json:"enable_monitoring,omitempty" cty:"enable_monitoring"`
|
||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
||||
ImageID *string `json:"image_id,omitempty" cty:"image_id"`
|
||||
HealthCheckType *string `json:"health_check_type,omitempty" cty:"health_check_type"`
|
||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
||||
UserData *terraformWriter.Literal `json:"user_data,omitempty" cty:"user_data"`
|
||||
IAMInstanceProfile *terraformWriter.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
||||
KeyName *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
}
|
||||
|
||||
type terraformElastigroupBlockDevice struct {
|
||||
|
|
@ -1665,8 +1666,8 @@ func (_ *Elastigroup) RenderTerraform(t *terraform.TerraformTarget, a, e, change
|
|||
return t.RenderResource("spotinst_elastigroup_aws", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (e *Elastigroup) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("spotinst_elastigroup_aws", *e.Name, "id")
|
||||
func (e *Elastigroup) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("spotinst_elastigroup_aws", *e.Name, "id")
|
||||
}
|
||||
|
||||
func (e *Elastigroup) buildTags() []*aws.Tag {
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awstasks"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -770,8 +771,8 @@ func (_ *LaunchSpec) update(cloud awsup.AWSCloud, a, e, changes *LaunchSpec) err
|
|||
}
|
||||
|
||||
type terraformLaunchSpec struct {
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
OceanID *terraform.Literal `json:"ocean_id,omitempty" cty:"ocean_id"`
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
OceanID *terraformWriter.Literal `json:"ocean_id,omitempty" cty:"ocean_id"`
|
||||
|
||||
Monitoring *bool `json:"monitoring,omitempty" cty:"monitoring"`
|
||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
||||
|
|
@ -779,12 +780,12 @@ type terraformLaunchSpec struct {
|
|||
AssociatePublicIPAddress *bool `json:"associate_public_ip_address,omitempty" cty:"associate_public_ip_address"`
|
||||
RestrictScaleDown *bool `json:"restrict_scale_down,omitempty" cty:"restrict_scale_down"`
|
||||
RootVolumeSize *int64 `json:"root_volume_size,omitempty" cty:"root_volume_size"`
|
||||
UserData *terraform.Literal `json:"user_data,omitempty" cty:"user_data"`
|
||||
IAMInstanceProfile *terraform.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
||||
KeyName *terraform.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
UserData *terraformWriter.Literal `json:"user_data,omitempty" cty:"user_data"`
|
||||
IAMInstanceProfile *terraformWriter.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
||||
KeyName *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
InstanceTypes []string `json:"instance_types,omitempty" cty:"instance_types"`
|
||||
SubnetIDs []*terraform.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
||||
SecurityGroups []*terraform.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
||||
SubnetIDs []*terraformWriter.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
||||
Taints []*terraformTaint `json:"taints,omitempty" cty:"taints"`
|
||||
Labels []*terraformKV `json:"labels,omitempty" cty:"labels"`
|
||||
Tags []*terraformKV `json:"tags,omitempty" cty:"tags"`
|
||||
|
|
@ -981,8 +982,8 @@ func (_ *LaunchSpec) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
|
|||
return t.RenderResource("spotinst_ocean_aws_launch_spec", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (o *LaunchSpec) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("spotinst_ocean_aws_launch_spec", *o.Name, "id")
|
||||
func (o *LaunchSpec) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("spotinst_ocean_aws_launch_spec", *o.Name, "id")
|
||||
}
|
||||
|
||||
func (o *LaunchSpec) buildTags() []*aws.Tag {
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import (
|
|||
"k8s.io/kops/upup/pkg/fi/cloudup/awstasks"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// +kops:fitask
|
||||
|
|
@ -977,14 +978,14 @@ func (_ *Ocean) update(cloud awsup.AWSCloud, a, e, changes *Ocean) error {
|
|||
}
|
||||
|
||||
type terraformOcean struct {
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
ControllerClusterID *string `json:"controller_id,omitempty" cty:"controller_id"`
|
||||
Region *string `json:"region,omitempty" cty:"region"`
|
||||
InstanceTypesWhitelist []string `json:"whitelist,omitempty" cty:"whitelist"`
|
||||
InstanceTypesBlacklist []string `json:"blacklist,omitempty" cty:"blacklist"`
|
||||
SubnetIDs []*terraform.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
||||
AutoScaler *terraformAutoScaler `json:"autoscaler,omitempty" cty:"autoscaler"`
|
||||
Tags []*terraformKV `json:"tags,omitempty" cty:"tags"`
|
||||
Name *string `json:"name,omitempty" cty:"name"`
|
||||
ControllerClusterID *string `json:"controller_id,omitempty" cty:"controller_id"`
|
||||
Region *string `json:"region,omitempty" cty:"region"`
|
||||
InstanceTypesWhitelist []string `json:"whitelist,omitempty" cty:"whitelist"`
|
||||
InstanceTypesBlacklist []string `json:"blacklist,omitempty" cty:"blacklist"`
|
||||
SubnetIDs []*terraformWriter.Literal `json:"subnet_ids,omitempty" cty:"subnet_ids"`
|
||||
AutoScaler *terraformAutoScaler `json:"autoscaler,omitempty" cty:"autoscaler"`
|
||||
Tags []*terraformKV `json:"tags,omitempty" cty:"tags"`
|
||||
|
||||
MinSize *int64 `json:"min_size,omitempty" cty:"min_size"`
|
||||
MaxSize *int64 `json:"max_size,omitempty" cty:"max_size"`
|
||||
|
|
@ -995,15 +996,15 @@ type terraformOcean struct {
|
|||
DrainingTimeout *int64 `json:"draining_timeout,omitempty" cty:"draining_timeout"`
|
||||
GracePeriod *int64 `json:"grace_period,omitempty" cty:"grace_period"`
|
||||
|
||||
Monitoring *bool `json:"monitoring,omitempty" cty:"monitoring"`
|
||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
||||
ImageID *string `json:"image_id,omitempty" cty:"image_id"`
|
||||
AssociatePublicIPAddress *bool `json:"associate_public_ip_address,omitempty" cty:"associate_public_ip_address"`
|
||||
RootVolumeSize *int64 `json:"root_volume_size,omitempty" cty:"root_volume_size"`
|
||||
UserData *terraform.Literal `json:"user_data,omitempty" cty:"user_data"`
|
||||
IAMInstanceProfile *terraform.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
||||
KeyName *terraform.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
SecurityGroups []*terraform.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
||||
Monitoring *bool `json:"monitoring,omitempty" cty:"monitoring"`
|
||||
EBSOptimized *bool `json:"ebs_optimized,omitempty" cty:"ebs_optimized"`
|
||||
ImageID *string `json:"image_id,omitempty" cty:"image_id"`
|
||||
AssociatePublicIPAddress *bool `json:"associate_public_ip_address,omitempty" cty:"associate_public_ip_address"`
|
||||
RootVolumeSize *int64 `json:"root_volume_size,omitempty" cty:"root_volume_size"`
|
||||
UserData *terraformWriter.Literal `json:"user_data,omitempty" cty:"user_data"`
|
||||
IAMInstanceProfile *terraformWriter.Literal `json:"iam_instance_profile,omitempty" cty:"iam_instance_profile"`
|
||||
KeyName *terraformWriter.Literal `json:"key_name,omitempty" cty:"key_name"`
|
||||
SecurityGroups []*terraformWriter.Literal `json:"security_groups,omitempty" cty:"security_groups"`
|
||||
}
|
||||
|
||||
func (_ *Ocean) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Ocean) error {
|
||||
|
|
@ -1171,8 +1172,8 @@ func (_ *Ocean) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Oce
|
|||
return t.RenderResource("spotinst_ocean_aws", *e.Name, tf)
|
||||
}
|
||||
|
||||
func (o *Ocean) TerraformLink() *terraform.Literal {
|
||||
return terraform.LiteralProperty("spotinst_ocean_aws", *o.Name, "id")
|
||||
func (o *Ocean) TerraformLink() *terraformWriter.Literal {
|
||||
return terraformWriter.LiteralProperty("spotinst_ocean_aws", *o.Name, "id")
|
||||
}
|
||||
|
||||
func (o *Ocean) buildTags() []*aws.Tag {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ go_library(
|
|||
srcs = [
|
||||
"hcl2.go",
|
||||
"lifecycle.go",
|
||||
"literal.go",
|
||||
"target.go",
|
||||
"target_hcl2.go",
|
||||
"target_json.go",
|
||||
|
|
@ -16,6 +15,7 @@ go_library(
|
|||
"//pkg/apis/kops:go_default_library",
|
||||
"//pkg/featureflag:go_default_library",
|
||||
"//upup/pkg/fi:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraformWriter:go_default_library",
|
||||
"//vendor/github.com/hashicorp/hcl/v2:go_default_library",
|
||||
"//vendor/github.com/hashicorp/hcl/v2/hclsyntax:go_default_library",
|
||||
"//vendor/github.com/hashicorp/hcl/v2/hclwrite:go_default_library",
|
||||
|
|
@ -34,6 +34,7 @@ go_test(
|
|||
embed = [":go_default_library"],
|
||||
deps = [
|
||||
"//pkg/diff:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/terraformWriter:go_default_library",
|
||||
"//vendor/github.com/hashicorp/hcl/v2/hclwrite:go_default_library",
|
||||
"//vendor/github.com/zclconf/go-cty/cty:go_default_library",
|
||||
"//vendor/github.com/zclconf/go-cty/cty/gocty:go_default_library",
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import (
|
|||
"github.com/hashicorp/hcl/v2/hclwrite"
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
"github.com/zclconf/go-cty/cty/gocty"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
// writeValue writes a cty Value to a body with a given key
|
||||
|
|
@ -38,12 +39,12 @@ func writeValue(body *hclwrite.Body, key string, value cty.Value) {
|
|||
if value.LengthInt() == 0 {
|
||||
return
|
||||
}
|
||||
literals := make([]*Literal, 0)
|
||||
literals := make([]*terraformWriter.Literal, 0)
|
||||
|
||||
for _, val := range value.AsValueSlice() {
|
||||
refLiteral := reflect.New(reflect.TypeOf(Literal{}))
|
||||
refLiteral := reflect.New(reflect.TypeOf(terraformWriter.Literal{}))
|
||||
err := gocty.FromCtyValue(val, refLiteral.Interface())
|
||||
if literal, ok := refLiteral.Interface().(*Literal); err == nil && ok {
|
||||
if literal, ok := refLiteral.Interface().(*terraformWriter.Literal); err == nil && ok {
|
||||
literals = append(literals, literal)
|
||||
}
|
||||
}
|
||||
|
|
@ -73,9 +74,9 @@ func writeValue(body *hclwrite.Body, key string, value cty.Value) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
refLiteral := reflect.New(reflect.TypeOf(Literal{}))
|
||||
refLiteral := reflect.New(reflect.TypeOf(terraformWriter.Literal{}))
|
||||
err := gocty.FromCtyValue(value, refLiteral.Interface())
|
||||
if literal, ok := refLiteral.Interface().(*Literal); err == nil && ok {
|
||||
if literal, ok := refLiteral.Interface().(*terraformWriter.Literal); err == nil && ok {
|
||||
writeLiteral(body, key, literal)
|
||||
} else if value.Type().IsObjectType() {
|
||||
childBlock := body.AppendNewBlock(key, nil)
|
||||
|
|
@ -101,7 +102,7 @@ func writeValue(body *hclwrite.Body, key string, value cty.Value) {
|
|||
// key = "value1"
|
||||
// key = res_type.res_name.res_prop
|
||||
// key = file("${module.path}/foo")
|
||||
func writeLiteral(body *hclwrite.Body, key string, literal *Literal) {
|
||||
func writeLiteral(body *hclwrite.Body, key string, literal *terraformWriter.Literal) {
|
||||
if literal.FilePath != "" {
|
||||
tokens := hclwrite.Tokens{
|
||||
{
|
||||
|
|
@ -127,7 +128,7 @@ func writeLiteral(body *hclwrite.Body, key string, literal *Literal) {
|
|||
// key = [type1.name1.attr1, type2.name2.attr2, "stringliteral"]
|
||||
//
|
||||
// The HCL2 library does not support this natively. See https://github.com/hashicorp/hcl/issues/347
|
||||
func writeLiteralList(body *hclwrite.Body, key string, literals []*Literal) {
|
||||
func writeLiteralList(body *hclwrite.Body, key string, literals []*terraformWriter.Literal) {
|
||||
tokens := hclwrite.Tokens{
|
||||
{Type: hclsyntax.TokenOBrack, Bytes: []byte("["), SpacesBefore: 1},
|
||||
}
|
||||
|
|
@ -186,10 +187,10 @@ func writeMap(body *hclwrite.Body, key string, values map[string]cty.Value) {
|
|||
|
||||
v := values[k]
|
||||
|
||||
refLiteral := reflect.New(reflect.TypeOf(Literal{}))
|
||||
refLiteral := reflect.New(reflect.TypeOf(terraformWriter.Literal{}))
|
||||
err := gocty.FromCtyValue(v, refLiteral.Interface())
|
||||
// If this is a map of literals then do not surround the value with quotes
|
||||
if literal, ok := refLiteral.Interface().(*Literal); err == nil && ok {
|
||||
if literal, ok := refLiteral.Interface().(*terraformWriter.Literal); err == nil && ok {
|
||||
// For maps of literals we currently only support file references
|
||||
// If we ever need to support a map of strings to resource property references that can be added here
|
||||
if literal.FilePath != "" {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import (
|
|||
"github.com/zclconf/go-cty/cty"
|
||||
"github.com/zclconf/go-cty/cty/gocty"
|
||||
"k8s.io/kops/pkg/diff"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
func TestWriteValue(t *testing.T) {
|
||||
|
|
@ -113,17 +114,17 @@ foo {
|
|||
func TestWriteLiteral(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
literal *Literal
|
||||
literal *terraformWriter.Literal
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "string",
|
||||
literal: &Literal{Value: "value"},
|
||||
literal: &terraformWriter.Literal{Value: "value"},
|
||||
expected: `foo = "value"`,
|
||||
},
|
||||
{
|
||||
name: "traversal",
|
||||
literal: &Literal{
|
||||
literal: &terraformWriter.Literal{
|
||||
ResourceType: "type",
|
||||
ResourceName: "name",
|
||||
ResourceProp: "prop",
|
||||
|
|
@ -131,11 +132,8 @@ func TestWriteLiteral(t *testing.T) {
|
|||
expected: "foo = type.name.prop",
|
||||
},
|
||||
{
|
||||
name: "file",
|
||||
literal: &Literal{
|
||||
FilePath: "${path.module}/foo",
|
||||
FileFn: fileFnFile,
|
||||
},
|
||||
name: "file",
|
||||
literal: terraformWriter.LiteralFileExpression("${path.module}/foo", false),
|
||||
expected: `foo = file("${path.module}/foo")`,
|
||||
},
|
||||
}
|
||||
|
|
@ -155,7 +153,7 @@ func TestWriteLiteral(t *testing.T) {
|
|||
func TestWriteLiteralList(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
literals []*Literal
|
||||
literals []*terraformWriter.Literal
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
|
|
@ -164,7 +162,7 @@ func TestWriteLiteralList(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "one literal",
|
||||
literals: []*Literal{
|
||||
literals: []*terraformWriter.Literal{
|
||||
{
|
||||
ResourceType: "type",
|
||||
ResourceName: "name",
|
||||
|
|
@ -175,7 +173,7 @@ func TestWriteLiteralList(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "two literals",
|
||||
literals: []*Literal{
|
||||
literals: []*terraformWriter.Literal{
|
||||
{
|
||||
ResourceType: "type1",
|
||||
ResourceName: "name1",
|
||||
|
|
@ -191,7 +189,7 @@ func TestWriteLiteralList(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "one traversal literal, one string literal",
|
||||
literals: []*Literal{
|
||||
literals: []*terraformWriter.Literal{
|
||||
{
|
||||
ResourceType: "type",
|
||||
ResourceName: "name",
|
||||
|
|
@ -268,14 +266,14 @@ tags = {
|
|||
func TestWriteMapLiterals(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
values map[string]Literal
|
||||
values map[string]terraformWriter.Literal
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "literal values",
|
||||
values: map[string]Literal{
|
||||
"key1": {FilePath: "${module.path}/path/to/value1", FileFn: fileFnFile},
|
||||
"key2": {FilePath: "${module.path}/path/to/value2", FileFn: fileFnFileBase64},
|
||||
values: map[string]terraformWriter.Literal{
|
||||
"key1": *terraformWriter.LiteralFileExpression("${module.path}/path/to/value1", false),
|
||||
"key2": *terraformWriter.LiteralFileExpression("${module.path}/path/to/value2", true),
|
||||
},
|
||||
expected: `
|
||||
metadata = {
|
||||
|
|
|
|||
|
|
@ -21,77 +21,41 @@ import (
|
|||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/pkg/apis/kops"
|
||||
"k8s.io/kops/pkg/featureflag"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
type TerraformTarget struct {
|
||||
terraformWriter.TerraformWriter
|
||||
Cloud fi.Cloud
|
||||
Project string
|
||||
|
||||
ClusterName string
|
||||
|
||||
outDir string
|
||||
|
||||
// mutex protects the following items (resources & files)
|
||||
mutex sync.Mutex
|
||||
// resources is a list of TF items that should be created
|
||||
resources []*terraformResource
|
||||
// outputs is a list of our TF output variables
|
||||
outputs map[string]*terraformOutputVariable
|
||||
// files is a map of TF resource files that should be created
|
||||
files map[string][]byte
|
||||
// extra config to add to the provider block
|
||||
clusterSpecTarget *kops.TargetSpec
|
||||
}
|
||||
|
||||
func NewTerraformTarget(cloud fi.Cloud, project string, outDir string, clusterSpecTarget *kops.TargetSpec) *TerraformTarget {
|
||||
return &TerraformTarget{
|
||||
target := TerraformTarget{
|
||||
Cloud: cloud,
|
||||
Project: project,
|
||||
|
||||
outDir: outDir,
|
||||
files: make(map[string][]byte),
|
||||
outputs: make(map[string]*terraformOutputVariable),
|
||||
clusterSpecTarget: clusterSpecTarget,
|
||||
}
|
||||
target.InitTerraformWriter()
|
||||
return &target
|
||||
}
|
||||
|
||||
var _ fi.Target = &TerraformTarget{}
|
||||
|
||||
type terraformResource struct {
|
||||
ResourceType string
|
||||
ResourceName string
|
||||
Item interface{}
|
||||
}
|
||||
|
||||
type terraformOutputVariable struct {
|
||||
Key string
|
||||
Value *Literal
|
||||
ValueArray []*Literal
|
||||
}
|
||||
|
||||
type terraformOutputValue struct {
|
||||
Value *Literal
|
||||
ValueArray []*Literal
|
||||
}
|
||||
|
||||
// A TF name can't have dots in it (if we want to refer to it from a literal),
|
||||
// so we replace them
|
||||
func tfSanitize(name string) string {
|
||||
if _, err := strconv.Atoi(string(name[0])); err == nil {
|
||||
panic(fmt.Sprintf("Terraform resource names cannot start with a digit. This is a bug in Kops, please report this in a GitHub Issue. Name: %v", name))
|
||||
}
|
||||
return strings.NewReplacer(".", "-", "/", "--", ":", "_").Replace(name)
|
||||
}
|
||||
|
||||
func (t *TerraformTarget) AddFileResource(resourceType string, resourceName string, key string, r fi.Resource, base64 bool) (*Literal, error) {
|
||||
func (t *TerraformTarget) AddFileResource(resourceType string, resourceName string, key string, r fi.Resource, base64 bool) (*terraformWriter.Literal, error) {
|
||||
d, err := fi.ResourceAsBytes(r)
|
||||
if err != nil {
|
||||
id := resourceType + "_" + resourceName + "_" + key
|
||||
|
|
@ -101,76 +65,11 @@ func (t *TerraformTarget) AddFileResource(resourceType string, resourceName stri
|
|||
return t.AddFileBytes(resourceType, resourceName, key, d, base64)
|
||||
}
|
||||
|
||||
func (t *TerraformTarget) AddFileBytes(resourceType string, resourceName string, key string, data []byte, base64 bool) (*Literal, error) {
|
||||
id := resourceType + "_" + resourceName + "_" + key
|
||||
|
||||
t.mutex.Lock()
|
||||
defer t.mutex.Unlock()
|
||||
|
||||
p := path.Join("data", id)
|
||||
t.files[p] = data
|
||||
|
||||
modulePath := path.Join("${path.module}", p)
|
||||
l := LiteralFileExpression(modulePath, base64)
|
||||
return l, nil
|
||||
}
|
||||
|
||||
func (t *TerraformTarget) ProcessDeletions() bool {
|
||||
// Terraform tracks & performs deletions itself
|
||||
return false
|
||||
}
|
||||
|
||||
func (t *TerraformTarget) RenderResource(resourceType string, resourceName string, e interface{}) error {
|
||||
res := &terraformResource{
|
||||
ResourceType: resourceType,
|
||||
ResourceName: resourceName,
|
||||
Item: e,
|
||||
}
|
||||
|
||||
t.mutex.Lock()
|
||||
defer t.mutex.Unlock()
|
||||
|
||||
t.resources = append(t.resources, res)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *TerraformTarget) AddOutputVariable(key string, literal *Literal) error {
|
||||
v := &terraformOutputVariable{
|
||||
Key: key,
|
||||
Value: literal,
|
||||
}
|
||||
|
||||
t.mutex.Lock()
|
||||
defer t.mutex.Unlock()
|
||||
|
||||
if t.outputs[key] != nil {
|
||||
return fmt.Errorf("duplicate variable: %q", key)
|
||||
}
|
||||
t.outputs[key] = v
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *TerraformTarget) AddOutputVariableArray(key string, literal *Literal) error {
|
||||
t.mutex.Lock()
|
||||
defer t.mutex.Unlock()
|
||||
|
||||
if t.outputs[key] == nil {
|
||||
v := &terraformOutputVariable{
|
||||
Key: key,
|
||||
}
|
||||
t.outputs[key] = v
|
||||
}
|
||||
if t.outputs[key].Value != nil {
|
||||
return fmt.Errorf("variable %q is both an array and a scalar", key)
|
||||
}
|
||||
|
||||
t.outputs[key].ValueArray = append(t.outputs[key].ValueArray, literal)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// tfGetProviderExtraConfig is a helper function to get extra config with safety checks on the pointers.
|
||||
func tfGetProviderExtraConfig(c *kops.TargetSpec) map[string]string {
|
||||
if c != nil &&
|
||||
|
|
@ -192,7 +91,7 @@ func (t *TerraformTarget) Finish(taskMap map[string]fi.Task) error {
|
|||
return err
|
||||
}
|
||||
|
||||
for relativePath, contents := range t.files {
|
||||
for relativePath, contents := range t.Files {
|
||||
p := path.Join(t.outDir, relativePath)
|
||||
|
||||
err = os.MkdirAll(path.Dir(p), os.FileMode(0755))
|
||||
|
|
@ -209,44 +108,3 @@ func (t *TerraformTarget) Finish(taskMap map[string]fi.Task) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *TerraformTarget) getResourcesByType() (map[string]map[string]interface{}, error) {
|
||||
resourcesByType := make(map[string]map[string]interface{})
|
||||
|
||||
for _, res := range t.resources {
|
||||
resources := resourcesByType[res.ResourceType]
|
||||
if resources == nil {
|
||||
resources = make(map[string]interface{})
|
||||
resourcesByType[res.ResourceType] = resources
|
||||
}
|
||||
|
||||
tfName := tfSanitize(res.ResourceName)
|
||||
|
||||
if resources[tfName] != nil {
|
||||
return nil, fmt.Errorf("duplicate resource found: %s.%s", res.ResourceType, tfName)
|
||||
}
|
||||
|
||||
resources[tfName] = res.Item
|
||||
}
|
||||
|
||||
return resourcesByType, nil
|
||||
}
|
||||
|
||||
func (t *TerraformTarget) getOutputs() (map[string]terraformOutputValue, error) {
|
||||
values := map[string]terraformOutputValue{}
|
||||
for _, v := range t.outputs {
|
||||
tfName := tfSanitize(v.Key)
|
||||
if _, found := values[tfName]; found {
|
||||
return nil, fmt.Errorf("duplicate variable found: %s", tfName)
|
||||
}
|
||||
deduped, err := dedupLiterals(v.ValueArray)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
values[tfName] = terraformOutputValue{
|
||||
Value: v.Value,
|
||||
ValueArray: deduped,
|
||||
}
|
||||
}
|
||||
return values, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,13 +26,14 @@ import (
|
|||
"k8s.io/kops/pkg/apis/kops"
|
||||
"k8s.io/kops/pkg/featureflag"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
func (t *TerraformTarget) finishHCL2(taskMap map[string]fi.Task) error {
|
||||
f := hclwrite.NewEmptyFile()
|
||||
rootBody := f.Body()
|
||||
|
||||
outputs, err := t.getOutputs()
|
||||
outputs, err := t.GetOutputs()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -50,7 +51,7 @@ func (t *TerraformTarget) finishHCL2(taskMap map[string]fi.Task) error {
|
|||
}
|
||||
rootBody.AppendNewline()
|
||||
|
||||
resourcesByType, err := t.getResourcesByType()
|
||||
resourcesByType, err := t.GetResourcesByType()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -117,7 +118,7 @@ func (t *TerraformTarget) finishHCL2(taskMap map[string]fi.Task) error {
|
|||
}
|
||||
|
||||
bytes := hclwrite.Format(f.Bytes())
|
||||
t.files["kubernetes.tf"] = bytes
|
||||
t.Files["kubernetes.tf"] = bytes
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
@ -134,7 +135,7 @@ func (t *TerraformTarget) finishHCL2(taskMap map[string]fi.Task) error {
|
|||
// output "key2" {
|
||||
// value = "value2"
|
||||
// }
|
||||
func writeLocalsOutputs(body *hclwrite.Body, outputs map[string]terraformOutputValue) error {
|
||||
func writeLocalsOutputs(body *hclwrite.Body, outputs map[string]terraformWriter.OutputValue) error {
|
||||
if len(outputs) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,12 +22,13 @@ import (
|
|||
|
||||
"github.com/hashicorp/hcl/v2/hclwrite"
|
||||
"k8s.io/kops/pkg/diff"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
|
||||
)
|
||||
|
||||
func TestWriteLocalsOutputs(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
values map[string]terraformOutputValue
|
||||
values map[string]terraformWriter.OutputValue
|
||||
expected string
|
||||
errExpected bool
|
||||
}{
|
||||
|
|
@ -37,9 +38,9 @@ func TestWriteLocalsOutputs(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "single output",
|
||||
values: map[string]terraformOutputValue{
|
||||
values: map[string]terraformWriter.OutputValue{
|
||||
"key1": {
|
||||
Value: LiteralFromStringValue("value1"),
|
||||
Value: terraformWriter.LiteralFromStringValue("value1"),
|
||||
},
|
||||
},
|
||||
expected: `
|
||||
|
|
@ -53,11 +54,11 @@ output "key1" {
|
|||
},
|
||||
{
|
||||
name: "list output",
|
||||
values: map[string]terraformOutputValue{
|
||||
values: map[string]terraformWriter.OutputValue{
|
||||
"key1": {
|
||||
ValueArray: []*Literal{
|
||||
LiteralFromStringValue("value1"),
|
||||
LiteralFromStringValue("value2"),
|
||||
ValueArray: []*terraformWriter.Literal{
|
||||
terraformWriter.LiteralFromStringValue("value1"),
|
||||
terraformWriter.LiteralFromStringValue("value2"),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import (
|
|||
)
|
||||
|
||||
func (t *TerraformTarget) finishJSON(taskMap map[string]fi.Task) error {
|
||||
resourcesByType, err := t.getResourcesByType()
|
||||
resourcesByType, err := t.GetResourcesByType()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -48,7 +48,7 @@ func (t *TerraformTarget) finishJSON(taskMap map[string]fi.Task) error {
|
|||
providersByName["aws"] = providerAWS
|
||||
}
|
||||
|
||||
outputs, err := t.getOutputs()
|
||||
outputs, err := t.GetOutputs()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -110,6 +110,6 @@ func (t *TerraformTarget) finishJSON(taskMap map[string]fi.Task) error {
|
|||
return fmt.Errorf("error marshaling terraform data to json: %v", err)
|
||||
}
|
||||
|
||||
t.files["kubernetes.tf.json"] = jsonBytes
|
||||
t.Files["kubernetes.tf.json"] = jsonBytes
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"literal.go",
|
||||
"writer.go",
|
||||
],
|
||||
importpath = "k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = ["//vendor/k8s.io/klog/v2:go_default_library"],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = ["writer_test.go"],
|
||||
embed = [":go_default_library"],
|
||||
deps = [
|
||||
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
||||
"//vendor/github.com/stretchr/testify/require:go_default_library",
|
||||
],
|
||||
)
|
||||
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
package terraform
|
||||
package terraformWriter
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
/*
|
||||
Copyright 2021 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 terraformWriter
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type TerraformWriter struct {
|
||||
// mutex protects the following items (resources & Files)
|
||||
mutex sync.Mutex
|
||||
// resources is a list of TF items that should be created
|
||||
resources []*terraformResource
|
||||
// outputs is a list of our TF output variables
|
||||
outputs map[string]*terraformOutputVariable
|
||||
// Files is a map of TF resource Files that should be created
|
||||
Files map[string][]byte
|
||||
}
|
||||
|
||||
type OutputValue struct {
|
||||
Value *Literal
|
||||
ValueArray []*Literal
|
||||
}
|
||||
|
||||
type terraformResource struct {
|
||||
ResourceType string
|
||||
ResourceName string
|
||||
Item interface{}
|
||||
}
|
||||
|
||||
type terraformOutputVariable struct {
|
||||
Key string
|
||||
Value *Literal
|
||||
ValueArray []*Literal
|
||||
}
|
||||
|
||||
// A TF name can't have dots in it (if we want to refer to it from a literal),
|
||||
// so we replace them
|
||||
func tfSanitize(name string) string {
|
||||
if _, err := strconv.Atoi(string(name[0])); err == nil {
|
||||
panic(fmt.Sprintf("Terraform resource names cannot start with a digit. This is a bug in Kops, please report this in a GitHub Issue. Name: %v", name))
|
||||
}
|
||||
return strings.NewReplacer(".", "-", "/", "--", ":", "_").Replace(name)
|
||||
}
|
||||
|
||||
func (t *TerraformWriter) InitTerraformWriter() {
|
||||
t.Files = make(map[string][]byte)
|
||||
t.outputs = make(map[string]*terraformOutputVariable)
|
||||
}
|
||||
|
||||
func (t *TerraformWriter) AddFileBytes(resourceType string, resourceName string, key string, data []byte, base64 bool) (*Literal, error) {
|
||||
id := resourceType + "_" + resourceName + "_" + key
|
||||
|
||||
t.mutex.Lock()
|
||||
defer t.mutex.Unlock()
|
||||
|
||||
p := path.Join("data", id)
|
||||
t.Files[p] = data
|
||||
|
||||
modulePath := path.Join("${path.module}", p)
|
||||
l := LiteralFileExpression(modulePath, base64)
|
||||
return l, nil
|
||||
}
|
||||
|
||||
func (t *TerraformWriter) RenderResource(resourceType string, resourceName string, e interface{}) error {
|
||||
res := &terraformResource{
|
||||
ResourceType: resourceType,
|
||||
ResourceName: resourceName,
|
||||
Item: e,
|
||||
}
|
||||
|
||||
t.mutex.Lock()
|
||||
defer t.mutex.Unlock()
|
||||
|
||||
t.resources = append(t.resources, res)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *TerraformWriter) AddOutputVariable(key string, literal *Literal) error {
|
||||
v := &terraformOutputVariable{
|
||||
Key: key,
|
||||
Value: literal,
|
||||
}
|
||||
|
||||
t.mutex.Lock()
|
||||
defer t.mutex.Unlock()
|
||||
|
||||
if t.outputs[key] != nil {
|
||||
return fmt.Errorf("duplicate variable: %q", key)
|
||||
}
|
||||
t.outputs[key] = v
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *TerraformWriter) AddOutputVariableArray(key string, literal *Literal) error {
|
||||
t.mutex.Lock()
|
||||
defer t.mutex.Unlock()
|
||||
|
||||
if t.outputs[key] == nil {
|
||||
v := &terraformOutputVariable{
|
||||
Key: key,
|
||||
}
|
||||
t.outputs[key] = v
|
||||
}
|
||||
if t.outputs[key].Value != nil {
|
||||
return fmt.Errorf("variable %q is both an array and a scalar", key)
|
||||
}
|
||||
|
||||
t.outputs[key].ValueArray = append(t.outputs[key].ValueArray, literal)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *TerraformWriter) GetResourcesByType() (map[string]map[string]interface{}, error) {
|
||||
resourcesByType := make(map[string]map[string]interface{})
|
||||
|
||||
for _, res := range t.resources {
|
||||
resources := resourcesByType[res.ResourceType]
|
||||
if resources == nil {
|
||||
resources = make(map[string]interface{})
|
||||
resourcesByType[res.ResourceType] = resources
|
||||
}
|
||||
|
||||
tfName := tfSanitize(res.ResourceName)
|
||||
|
||||
if resources[tfName] != nil {
|
||||
return nil, fmt.Errorf("duplicate resource found: %s.%s", res.ResourceType, tfName)
|
||||
}
|
||||
|
||||
resources[tfName] = res.Item
|
||||
}
|
||||
|
||||
return resourcesByType, nil
|
||||
}
|
||||
|
||||
func (t *TerraformWriter) GetOutputs() (map[string]OutputValue, error) {
|
||||
values := map[string]OutputValue{}
|
||||
for _, v := range t.outputs {
|
||||
tfName := tfSanitize(v.Key)
|
||||
if _, found := values[tfName]; found {
|
||||
return nil, fmt.Errorf("duplicate variable found: %s", tfName)
|
||||
}
|
||||
deduped, err := dedupLiterals(v.ValueArray)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
values[tfName] = OutputValue{
|
||||
Value: v.Value,
|
||||
ValueArray: deduped,
|
||||
}
|
||||
}
|
||||
return values, nil
|
||||
}
|
||||
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
package terraform
|
||||
package terraformWriter
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
|
@ -27,7 +27,7 @@ func TestGetOutputs(t *testing.T) {
|
|||
cases := []struct {
|
||||
name string
|
||||
values map[string]*terraformOutputVariable
|
||||
expected map[string]terraformOutputValue
|
||||
expected map[string]OutputValue
|
||||
errExpected bool
|
||||
}{
|
||||
{
|
||||
|
|
@ -41,7 +41,7 @@ func TestGetOutputs(t *testing.T) {
|
|||
Value: LiteralFromStringValue("value1"),
|
||||
},
|
||||
},
|
||||
expected: map[string]terraformOutputValue{
|
||||
expected: map[string]OutputValue{
|
||||
"key1": {
|
||||
Value: LiteralFromStringValue("value1"),
|
||||
},
|
||||
|
|
@ -58,7 +58,7 @@ func TestGetOutputs(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
expected: map[string]terraformOutputValue{
|
||||
expected: map[string]OutputValue{
|
||||
"key1": {
|
||||
ValueArray: []*Literal{
|
||||
LiteralFromStringValue("value1"),
|
||||
|
|
@ -93,7 +93,7 @@ func TestGetOutputs(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
expected: map[string]terraformOutputValue{
|
||||
expected: map[string]OutputValue{
|
||||
"key1": {
|
||||
ValueArray: []*Literal{
|
||||
LiteralFromStringValue("value1"),
|
||||
|
|
@ -105,10 +105,10 @@ func TestGetOutputs(t *testing.T) {
|
|||
}
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
target := TerraformTarget{
|
||||
target := TerraformWriter{
|
||||
outputs: tc.values,
|
||||
}
|
||||
actual, err := target.getOutputs()
|
||||
actual, err := target.GetOutputs()
|
||||
if tc.errExpected {
|
||||
assert.Error(t, err)
|
||||
return
|
||||
Loading…
Reference in New Issue