Skip to content

Commit

Permalink
integration test part 2 (terraform render ok but diff)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mia-Cross committed Feb 2, 2023
1 parent b15f777 commit 1a3adda
Show file tree
Hide file tree
Showing 7 changed files with 286 additions and 134 deletions.
197 changes: 85 additions & 112 deletions tests/integration/update_cluster/minimal_scaleway/kubernetes.tf
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ output "region" {
}

provider "scaleway" {
region = "fr-par"
}

provider "aws" {
Expand Down Expand Up @@ -75,6 +76,22 @@ resource "aws_s3_object" "manifests-static-kube-apiserver-healthcheck" {
server_side_encryption = "AES256"
}

resource "aws_s3_object" "nodeupconfig-control-plane-fr-par-1" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_nodeupconfig-control-plane-fr-par-1_content")
key = "tests/scw-minimal.k8s.local/igconfig/control-plane/control-plane-fr-par-1/nodeupconfig.yaml"
provider = aws.files
server_side_encryption = "AES256"
}

resource "aws_s3_object" "nodeupconfig-nodes-fr-par-1" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_nodeupconfig-nodes-fr-par-1_content")
key = "tests/scw-minimal.k8s.local/igconfig/node/nodes-fr-par-1/nodeupconfig.yaml"
provider = aws.files
server_side_encryption = "AES256"
}

resource "aws_s3_object" "scw-minimal-k8s-local-addons-bootstrap" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_scw-minimal.k8s.local-addons-bootstrap_content")
Expand All @@ -91,18 +108,10 @@ resource "aws_s3_object" "scw-minimal-k8s-local-addons-coredns-addons-k8s-io-k8s
server_side_encryption = "AES256"
}

resource "aws_s3_object" "scw-minimal-k8s-local-addons-scaleway-cloud-controller-addons-k8s-io-k8s-1-22" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_scw-minimal.k8s.local-addons-scaleway-cloud-controller.addons.k8s.io-k8s-1.22_content")
key = "tests/scw-minimal.k8s.local/addons/scaleway-cloud-controller.addons.k8s.io/k8s-1.22.yaml"
provider = aws.files
server_side_encryption = "AES256"
}

resource "aws_s3_object" "scw-minimal-k8s-local-addons-scaleway-csi-driver-addons-k8s-io-k8s-1-22" {
resource "aws_s3_object" "scw-minimal-k8s-local-addons-dns-controller-addons-k8s-io-k8s-1-12" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_scw-minimal.k8s.local-addons-scaleway-csi-driver.addons.k8s.io-k8s-1.22_content")
key = "tests/scw-minimal.k8s.local/addons/scaleway-csi-driver.addons.k8s.io/k8s-1.22.yaml"
content = file("${path.module}/data/aws_s3_object_scw-minimal.k8s.local-addons-dns-controller.addons.k8s.io-k8s-1.12_content")
key = "tests/scw-minimal.k8s.local/addons/dns-controller.addons.k8s.io/k8s-1.12.yaml"
provider = aws.files
server_side_encryption = "AES256"
}
Expand Down Expand Up @@ -131,143 +140,108 @@ resource "aws_s3_object" "scw-minimal-k8s-local-addons-limit-range-addons-k8s-io
server_side_encryption = "AES256"
}

resource "aws_s3_object" "nodeupconfig-control-plane-fr-par-1" {
resource "aws_s3_object" "scw-minimal-k8s-local-addons-networking-cilium-io-k8s-1-16" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_nodeupconfig-control-plane-fr-par-1_content")
key = "tests/scw-minimal.k8s.local/igconfig/control-plane/control-plane-fr-par-1/nodeupconfig.yaml"
content = file("${path.module}/data/aws_s3_object_scw-minimal.k8s.local-addons-networking.cilium.io-k8s-1.16_content")
key = "tests/scw-minimal.k8s.local/addons/networking.cilium.io/k8s-1.16-v1.12.yaml"
provider = aws.files
server_side_encryption = "AES256"
}

resource "aws_s3_object" "nodeupconfig-nodes-fr-par-1" {
resource "aws_s3_object" "scw-minimal-k8s-local-addons-rbac-addons-k8s-io-k8s-1-8" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_nodeupconfig-nodes-fr-par-1_content")
key = "tests/scw-minimal.k8s.local/igconfig/node/nodes-fr-par-1/nodeupconfig.yaml"
content = file("${path.module}/data/aws_s3_object_scw-minimal.k8s.local-addons-rbac.addons.k8s.io-k8s-1.8_content")
key = "tests/scw-minimal.k8s.local/addons/rbac.addons.k8s.io/k8s-1.8.yaml"
provider = aws.files
server_side_encryption = "AES256"
}

###############################
### LOAD - BALANCER ###
###############################

resource "scaleway_lb_ip" "api-scw-minimal-k8s-local" {
# zone = "fr-par-1"
resource "aws_s3_object" "scw-minimal-k8s-local-addons-scaleway-cloud-controller-addons-k8s-io-k8s-1-24" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_scw-minimal.k8s.local-addons-scaleway-cloud-controller.addons.k8s.io-k8s-1.24_content")
key = "tests/scw-minimal.k8s.local/addons/scaleway-cloud-controller.addons.k8s.io/k8s-1.24.yaml"
provider = aws.files
server_side_encryption = "AES256"
}

resource "scaleway_lb" "api-scw-minimal-k8s-local" {
ip_id = scaleway_lb_ip.api-scw-minimal-k8s-local.id
# zone = scaleway_lb_ip.api-scw-minimal-k8s-local.zone
type = "LB-S"
name = "api.scw-minimal.k8s.local"
tags = [
"kops.k8s.io/cluster=scw-minimal.k8s.local",
"kops.k8s.io/role=load-balancer"
]
resource "aws_s3_object" "scw-minimal-k8s-local-addons-scaleway-csi-driver-addons-k8s-io-k8s-1-24" {
bucket = "testingBucket"
content = file("${path.module}/data/aws_s3_object_scw-minimal.k8s.local-addons-scaleway-csi-driver.addons.k8s.io-k8s-1.24_content")
key = "tests/scw-minimal.k8s.local/addons/scaleway-csi-driver.addons.k8s.io/k8s-1.24.yaml"
provider = aws.files
server_side_encryption = "AES256"
}

resource "scaleway_lb_backend" "api-scw-minimal-k8s-local" {
lb_id = scaleway_lb.api-scw-minimal-k8s-local.id
name = "lb-backend"
forward_protocol = "tcp"
forward_port = "443"
resource "scaleway_iam_ssh_key" "kubernetes-scw-minimal-k8s-local-be_9e_c3_eb_cb_0c_c0_50_ea_bd_b4_5a_15_e3_40_2a" {
name = "kubernetes-scw-minimal-k8s.local-be:9e:c3:eb:cb:0c:c0:50:ea:bd:b4:5a:15:e3:40:2a"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDKqbVEozfAqng0gx8HTUu69EppcE5SWet6MpwrGShqMVUC4wkoiuVtJDPhMmWmdt7B7Ttc5pvnAZAZaQ6TKMguyBoAyS7qOTLU9/hM803XtSiwQUftOXiJfmsqAXEc8yDyb7UnrF8X7aA3gQJsnQBGJGdp+C88dPHNZenw4PnQc8BNYTCXG9d8F5vJ3xQ5qbiG4HVNoQ2CZh2ht+GedZJ3hl9lMJ24kE/cbMCLKxabMP4ROetECG6PU251jnm84NA8rm0Av/JMmn/c9CFAe0D0D1dGDlHWPsk4mbhGKJ0yU0YliatmPfmgSasismbYzIFf7VPq91ARzRUbavd1fYMBmkMsce0YR/5FdtrpzRhqDzuvwQgQRsoTcttdvp0puFcrtNefMfk8NCbBedIlkzOFxfGiBbe6jde4wqsqEnSrNHwZ2b+Er8z7vjcDPBqYk3gubmMBCrYxg6o1lOS6tTN0kJDUlyKO2AN1ZDr3mpkbhkvZV/N7gLglcClM0X5X7iM= leila@leila-ThinkPad-T14s-Gen-2i"
}

resource "scaleway_lb_frontend" "api-scw-minimal-k8s-local" {
lb_id = scaleway_lb.api-scw-minimal-k8s-local.id
backend_id = scaleway_lb_backend.api-scw-minimal-k8s-local.id
name = "lb-frontend"
inbound_port = "443"
resource "scaleway_instance_ip" "control-plane-fr-par-1" {
}

###############################
### INSTANCES ###
###############################

## CONTROL - PLANE

resource "scaleway_instance_ip" "control-plane-fr-par-1" {}
resource "scaleway_instance_ip" "nodes-fr-par-1" {
}

resource "scaleway_instance_server" "control-plane-fr-par-1" {
# zone = "fr-par-1"
type = "DEV1-M"
count = 1
image = "ubuntu_jammy"
image = "ubuntu_focal"
ip_id = scaleway_instance_ip.control-plane-fr-par-1.id
tags = [
"kops.k8s.io/cluster=scw-minimal.k8s.local",
"kops.k8s.io/instance-group=control-plane-fr-par-1",
"kops.k8s.io/role=ControlPlane",
]
name = "control-plane-fr-par-1-${count.index}"
# ssh_keys = [scaleway_ssh_key.scw-minimal-k8s-local-c4_a6_ed_9a_a8_89_b9_e2_c3_9c_d6_63_eb_9c_71_57.id]
user_data = {
cloud-init = filebase64("${path.module}/data/scaleway_server_control-plane-fr-par-1_user_data")
name = "control-plane-fr-par-1"
tags = ["kops.k8s.io/instance-group=control-plane-fr-par-1", "kops.k8s.io/cluster=scw-minimal.k8s.local", "kops.k8s.io/role=ControlPlane"]
type = "DEV1-M"
user_data = {
"cloud-init" = filebase64("${path.module}/data/scaleway_instance_server_control-plane-fr-par-1_user_data")
}
}

## NODE

resource "scaleway_instance_ip" "nodes-fr-par-1" {}

resource "scaleway_instance_server" "nodes-fr-par-1" {
# zone = "fr-par-1"
type = "DEV1-M"
count = 1
image = "ubuntu_jammy"
image = "ubuntu_focal"
ip_id = scaleway_instance_ip.nodes-fr-par-1.id
tags = [
"kops.k8s.io/cluster=scw-minimal.k8s.local",
"kops.k8s.io/instance-group=control-plane-fr-par-1",
"kops.k8s.io/role=ControlPlane",
]
name = "nodes-fr-par-1-${count.index}"
# ssh_keys = [scaleway_ssh_key.scw-minimal-k8s-local-c4_a6_ed_9a_a8_89_b9_e2_c3_9c_d6_63_eb_9c_71_57.id]
user_data = {
cloud-init = filebase64("${path.module}/data/scaleway_server_control-plane-fr-par-1_user_data")
name = "nodes-fr-par-1"
tags = ["kops.k8s.io/instance-group=nodes-fr-par-1", "kops.k8s.io/cluster=scw-minimal.k8s.local"]
type = "DEV1-M"
user_data = {
"cloud-init" = filebase64("${path.module}/data/scaleway_instance_server_nodes-fr-par-1_user_data")
}
}

###############################
### SSH - KEY ###
###############################
resource "scaleway_instance_volume" "etcd-1-etcd-events-scw-minimal-k8s-local" {
name = "etcd-1.etcd-events.scw-minimal.k8s.local"
size_in_gb = 20
tags = ["kops.k8s.io/cluster=scw-minimal.k8s.local", "kops.k8s.io/etcd=events", "kops.k8s.io/role=ControlPlane", "kops.k8s.io/instance-group=control-plane-fr-par-1"]
type = "b_ssd"
}

resource "scaleway_iam_ssh_key" "scw-minimal-k8s-local" {
name = "main"
public_key = "kubernetes.scw-minimal-k8s-local-be:9e:c3:eb:cb:0c:c0:50:ea:bd:b4:5a:15:e3:40:2a"
resource "scaleway_instance_volume" "etcd-1-etcd-main-scw-minimal-k8s-local" {
name = "etcd-1.etcd-main.scw-minimal.k8s.local"
size_in_gb = 20
tags = ["kops.k8s.io/cluster=scw-minimal.k8s.local", "kops.k8s.io/etcd=main", "kops.k8s.io/role=ControlPlane", "kops.k8s.io/instance-group=control-plane-fr-par-1"]
type = "b_ssd"
}

###############################
### VOLUMES ###
###############################
resource "scaleway_lb" "api-scw-minimal-k8s-local" {
ip_id = scaleway_lb_ip.api-scw-minimal-k8s-local.id
name = "api.scw-minimal.k8s.local"
tags = ["kops.k8s.io/cluster=scw-minimal.k8s.local", "kops.k8s.io/role=ControlPlane"]
type = "LB-S"
}

resource "scaleway_volume" "etcd-1-etcd-events-scw-minimal-k8s-local" {
type = "b_ssd"
name = "etcd-1.etcd-events.scw-minimal.k8s.local"
size_in_gb = 20
tags = [
"kops.k8s.io/cluster=scw-minimal.k8s.local",
"kops.k8s.io/etcd=events",
"kops.k8s.io/role=ControlPlane",
"kops.k8s.io/instance-group=control-plane-fr-par-1",
]
resource "scaleway_lb_backend" "api-scw-minimal-k8s-local" {
forward_port = 443
forward_protocol = "tcp"
lb_id = scaleway_lb.api-scw-minimal-k8s-local.id
name = "lb-backend"
}

resource "scaleway_volume" "etcd-1-etcd-main-scw-minimal-k8s-local" {
type = "b_ssd"
name = "etcd-1.etcd-main.scw-minimal.k8s.local"
size_in_gb = 20
tags = [
"kops.k8s.io/cluster=scw-minimal.k8s.local",
"kops.k8s.io/etcd=main",
"kops.k8s.io/role=ControlPlane",
"kops.k8s.io/instance-group=control-plane-fr-par-1",
]
resource "scaleway_lb_frontend" "api-scw-minimal-k8s-local" {
backend_id = scaleway_lb_backend.api-scw-minimal-k8s-local.id
inbound_port = 443
lb_id = scaleway_lb.api-scw-minimal-k8s-local.id
name = "lb-frontend"
}

###############################
### PROVIDER ###
###############################
resource "scaleway_lb_ip" "api-scw-minimal-k8s-local" {
}

terraform {
required_version = ">= 0.15.0"
Expand All @@ -280,7 +254,6 @@ terraform {
scaleway = {
"source" = "scaleway/scaleway"
"version" = ">= 2.2.1"
"zone" = "fr-par-1"
}
}
}
64 changes: 62 additions & 2 deletions upup/pkg/fi/cloudup/scalewaytasks/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import (
"github.com/scaleway/scaleway-sdk-go/scw"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/scaleway"
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
)

// +kops:fitask
Expand Down Expand Up @@ -146,8 +148,8 @@ func (_ *Instance) CheckChanges(actual, expected, changes *Instance) error {
return nil
}

func (_ *Instance) RenderScw(c *fi.CloudupContext, actual, expected, changes *Instance) error {
cloud := c.T.Cloud.(scaleway.ScwCloud)
func (_ *Instance) RenderScw(t *scaleway.ScwAPITarget, actual, expected, changes *Instance) error {
cloud := t.Cloud.(scaleway.ScwCloud)
instanceService := cloud.InstanceService()
zone := scw.Zone(fi.ValueOf(expected.Zone))
controlPlanePrivateIPs := []string(nil)
Expand Down Expand Up @@ -413,3 +415,61 @@ func (_ *Instance) RenderScw(c *fi.CloudupContext, actual, expected, changes *In

return nil
}

type terraformInstanceIP struct{}

type terraformUserData struct {
CloudInit *terraformWriter.Literal `cty:"cloud-init"`
}

type terraformInstance struct {
Name *string `cty:"name"`
IPID *terraformWriter.Literal `cty:"ip_id"`
Type *string `cty:"type"`
Tags []string `cty:"tags"`
Image *string `cty:"image"`
UserData map[string]*terraformWriter.Literal `cty:"user_data"`
}

func (_ *Instance) RenderTerraform(t *terraform.TerraformTarget, actual, expected, changes *Instance) error {
tfName := strings.Replace(fi.ValueOf(expected.Name), ".", "-", -1)
{
tf := terraformInstanceIP{}
err := t.RenderResource("scaleway_instance_ip", tfName, tf)
if err != nil {
return err
}
}
{
tf := terraformInstance{
Name: expected.Name,
IPID: expected.TerraformLinkIPID(tfName),
Type: expected.CommercialType,
Tags: expected.Tags,
Image: expected.Image,
//UserData: expected.UserData,
}
if expected.UserData != nil {
userDataBytes, err := fi.ResourceAsBytes(fi.ValueOf(expected.UserData))
if err != nil {
return err
}
if userDataBytes != nil {
tfUserData, err := t.AddFileBytes("scaleway_instance_server", tfName, "user_data", userDataBytes, true)
if err != nil {
return err
}
tf.UserData = map[string]*terraformWriter.Literal{
"cloud-init": tfUserData,
}
//tf.UserData, err =
}
}

return t.RenderResource("scaleway_instance_server", tfName, tf)
}
}

func (i *Instance) TerraformLinkIPID(tfName string) *terraformWriter.Literal {
return terraformWriter.LiteralProperty("scaleway_instance_ip", tfName, "id")
}
27 changes: 27 additions & 0 deletions upup/pkg/fi/cloudup/scalewaytasks/lb_backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@ package scalewaytasks

import (
"fmt"
"strings"

"github.com/scaleway/scaleway-sdk-go/api/lb/v1"
"github.com/scaleway/scaleway-sdk-go/scw"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/scaleway"
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
)

// +kops:fitask
Expand Down Expand Up @@ -163,3 +166,27 @@ func (l *LBBackend) RenderScw(t *scaleway.ScwAPITarget, actual, expected, change

return nil
}

type terraformLBBackend struct {
LBID *terraformWriter.Literal `cty:"lb_id"`
Name *string `cty:"name"`
ForwardProtocol *string `cty:"forward_protocol"`
ForwardPort *int32 `cty:"forward_port"`
//LBName *string
}

func (l *LBBackend) RenderTerraform(t *terraform.TerraformTarget, actual, expected, changes *LBBackend) error {
//clusterName := t.Cloud.(scaleway.ScwCloud).ClusterName()
tfName := strings.Replace(fi.ValueOf(expected.LoadBalancer.Name), ".", "-", -1)
tf := terraformLBBackend{
LBID: expected.TerraformLinkLBID(tfName),
Name: expected.Name,
ForwardProtocol: expected.ForwardProtocol,
ForwardPort: expected.ForwardPort,
}
return t.RenderResource("scaleway_lb_backend", tfName, tf)
}

func (l *LBBackend) TerraformLinkLBID(tfName string) *terraformWriter.Literal {
return terraformWriter.LiteralProperty("scaleway_lb", tfName, "id")
}
Loading

0 comments on commit 1a3adda

Please sign in to comment.