[Release-1.24] August Test Backports (#8128)

* Unit test for MustFindString (#8013)
* Consolidate CopyFile functions (#8079)
* Remove unnecessary E2E envs

Signed-off-by: Derek Nola <derek.nola@suse.com>
pull/8146/head
Derek Nola 2023-08-04 11:40:14 -07:00 committed by GitHub
parent 3efc14ea6a
commit 3b650c974d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 88 additions and 62 deletions

View File

@ -161,7 +161,7 @@ func createCNIConf(dir string, nodeConfig *config.Node) error {
if nodeConfig.AgentConfig.FlannelCniConfFile != "" {
logrus.Debugf("Using %s as the flannel CNI conf", nodeConfig.AgentConfig.FlannelCniConfFile)
return util.CopyFile(nodeConfig.AgentConfig.FlannelCniConfFile, p)
return util.CopyFile(nodeConfig.AgentConfig.FlannelCniConfFile, p, false)
}
return util.WriteFile(p, cniConf)
}

View File

@ -16,10 +16,12 @@ func WriteFile(name string, content string) error {
return nil
}
func CopyFile(sourceFile string, destinationFile string) error {
func CopyFile(sourceFile string, destinationFile string, ignoreNotExist bool) error {
os.MkdirAll(filepath.Dir(destinationFile), 0755)
input, err := os.ReadFile(sourceFile)
if err != nil {
if errors.Is(err, os.ErrNotExist) && ignoreNotExist {
return nil
} else if err != nil {
return errors.Wrapf(err, "copying %s to %s", sourceFile, destinationFile)
}
err = os.WriteFile(destinationFile, input, 0644)

View File

@ -9,6 +9,7 @@ import (
"time"
"github.com/erikdubbelboer/gspt"
"github.com/k3s-io/k3s/pkg/agent/util"
"github.com/k3s-io/k3s/pkg/bootstrap"
"github.com/k3s-io/k3s/pkg/cli/cmds"
"github.com/k3s-io/k3s/pkg/clientaccess"
@ -210,20 +211,6 @@ func rotate(app *cli.Context, cfg *cmds.Server) error {
return nil
}
func copyFile(src, destDir string) error {
_, err := os.Stat(src)
if err == nil {
input, err := os.ReadFile(src)
if err != nil {
return err
}
return os.WriteFile(filepath.Join(destDir, filepath.Base(src)), input, 0644)
} else if errors.Is(err, os.ErrNotExist) {
return nil
}
return err
}
func backupCertificates(serverDataDir, agentDataDir string) (string, error) {
serverTLSDir := filepath.Join(serverDataDir, "tls")
tlsBackupDir := filepath.Join(serverDataDir, "tls-"+strconv.Itoa(int(time.Now().Unix())))
@ -234,18 +221,20 @@ func backupCertificates(serverDataDir, agentDataDir string) (string, error) {
if err := copy.Copy(serverTLSDir, tlsBackupDir); err != nil {
return "", err
}
agentCerts := []string{
filepath.Join(agentDataDir, "client-"+version.Program+"-controller.crt"),
filepath.Join(agentDataDir, "client-"+version.Program+"-controller.key"),
filepath.Join(agentDataDir, "client-kubelet.crt"),
filepath.Join(agentDataDir, "client-kubelet.key"),
filepath.Join(agentDataDir, "serving-kubelet.crt"),
filepath.Join(agentDataDir, "serving-kubelet.key"),
filepath.Join(agentDataDir, "client-kube-proxy.crt"),
filepath.Join(agentDataDir, "client-kube-proxy.key"),
certs := []string{
"client-" + version.Program + "-controller.crt",
"client-" + version.Program + "-controller.key",
"client-kubelet.crt",
"client-kubelet.key",
"serving-kubelet.crt",
"serving-kubelet.key",
"client-kube-proxy.crt",
"client-kube-proxy.key",
}
for _, cert := range agentCerts {
if err := copyFile(cert, tlsBackupDir); err != nil {
for _, cert := range certs {
agentCert := filepath.Join(agentDataDir, cert)
tlsBackupCert := filepath.Join(tlsBackupDir, cert)
if err := util.CopyFile(agentCert, tlsBackupCert, true); err != nil {
return "", err
}
}

View File

@ -1,6 +1,7 @@
package configfilearg
import (
"os"
"reflect"
"testing"
)
@ -72,3 +73,57 @@ func Test_UnitMustParse(t *testing.T) {
})
}
}
func Test_UnitMustFindString(t *testing.T) {
tests := []struct {
name string
args []string
target string
setup func() error // Optional, delete if unused
teardown func() error // Optional, delete if unused
want string
}{
{
name: "Target not found in config file",
args: []string{"--foo", "bar"},
target: "token",
want: "",
setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/data.yaml") },
teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") },
},
{
name: "Target found in config file",
args: []string{"--foo", "bar"},
target: "token",
want: "12345",
setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") },
teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") },
},
{
name: "Override flag found, function is short-circuited",
args: []string{"--foo", "bar", "-h"},
target: "token",
want: "-h",
setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") },
teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") },
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
defer tt.teardown()
if err := tt.setup(); err != nil {
t.Errorf("Setup for MustFindString() failed = %v", err)
return
}
if got := MustFindString(tt.args, tt.target); got != tt.want {
t.Errorf("MustFindString() = %+v\nWant = %+v", got, tt.want)
}
})
}
}

View File

@ -11,9 +11,9 @@ NETWORK4_PREFIX = "10.10.10"
NETWORK6_PREFIX = "fd11:decf:c0ff:ee"
install_type = ""
def provision(vm, roles, role_num, node_num)
def provision(vm, role, role_num, node_num)
vm.box = NODE_BOXES[node_num]
vm.hostname = "#{roles[0]}-#{role_num}"
vm.hostname = role
node_ip4 = "#{NETWORK4_PREFIX}.#{100+node_num}"
node_ip6 = "#{NETWORK6_PREFIX}::#{10+node_num}"
node_ip6_gw = "#{NETWORK6_PREFIX}::1"
@ -36,7 +36,7 @@ def provision(vm, roles, role_num, node_num)
vm.provision "Ping Check", type: "shell", inline: "ping -c 2 k3s.io"
if roles.include?("server") && role_num == 0
if role.include?("server") && role_num == 0
vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "server "
@ -53,7 +53,7 @@ def provision(vm, roles, role_num, node_num)
YAML
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end
elsif roles.include?("server") && role_num != 0
elsif role.include?("server") && role_num != 0
vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "server "
@ -70,7 +70,7 @@ def provision(vm, roles, role_num, node_num)
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end
end
if roles.include?("agent")
if role.include?("agent")
vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "agent "
@ -105,10 +105,9 @@ Vagrant.configure("2") do |config|
# over the node roles themselves
NODE_ROLES.length.times do |i|
name = NODE_ROLES[i]
role_num = name.split("-", -1).pop.to_i
config.vm.define name do |node|
roles = name.split("-", -1)
role_num = roles.pop.to_i
provision(node.vm, roles, role_num, i)
provision(node.vm, name, role_num, i)
end
end
end

View File

@ -11,9 +11,9 @@ NETWORK4_PREFIX = "10.10.10"
PUBLIC_NETWORK4_PREFIX = "10.100.100"
install_type = ""
def provision(vm, roles, role_num, node_num)
def provision(vm, role, role_num, node_num)
vm.box = NODE_BOXES[node_num]
vm.hostname = "#{roles[0]}-#{role_num}"
vm.hostname = role
node_ip4 = "#{NETWORK4_PREFIX}.#{100+node_num}"
node_ip4_public = "#{PUBLIC_NETWORK4_PREFIX}.#{100+node_num}"
vm.network "private_network", :ip => node_ip4, :netmask => "255.255.255.0"
@ -27,7 +27,7 @@ def provision(vm, roles, role_num, node_num)
install_type = getInstallType(vm, RELEASE_VERSION, GITHUB_BRANCH)
if roles.include?("server") && role_num == 0
if role.include?("server") && role_num == 0
vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "server "
@ -41,7 +41,7 @@ def provision(vm, roles, role_num, node_num)
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end
end
if roles.include?("agent")
if role.include?("agent")
vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "agent "
@ -77,10 +77,9 @@ Vagrant.configure("2") do |config|
# over the node roles themselves
NODE_ROLES.length.times do |i|
name = NODE_ROLES[i]
role_num = name.split("-", -1).pop.to_i
config.vm.define name do |node|
roles = name.split("-", -1)
role_num = roles.pop.to_i
provision(node.vm, roles, role_num, i)
provision(node.vm, name, role_num, i)
end
end
end

View File

@ -5,7 +5,6 @@ NODE_BOXES = (ENV['E2E_NODE_BOXES'] ||
['generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004'])
GITHUB_BRANCH = (ENV['E2E_GITHUB_BRANCH'] || "master")
RELEASE_VERSION = (ENV['E2E_RELEASE_VERSION'] || "")
EXTERNAL_DB = (ENV['E2E_EXTERNAL_DB'] || "etcd")
NODE_CPUS = (ENV['E2E_NODE_CPUS'] || 2).to_i
NODE_MEMORY = (ENV['E2E_NODE_MEMORY'] || 1024).to_i
# Virtualbox >= 6.1.28 require `/etc/vbox/network.conf` for expanded private networks
@ -35,10 +34,10 @@ def provision(vm, role, role_num, node_num)
k3s.args = "server "
k3s.config = <<~YAML
token: vagrant
cluster-init: true
node-external-ip: #{NETWORK_PREFIX}.100
flannel-iface: eth1
tls-san: #{NETWORK_PREFIX}.100.nip.io
#{db_type}
YAML
k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type}]
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
@ -52,7 +51,6 @@ def provision(vm, role, role_num, node_num)
token: vagrant
node-external-ip: #{node_ip}
flannel-iface: eth1
#{db_type}
YAML
k3s.env = %W[K3S_KUBECONFIG_MODE=0644 K3S_TOKEN=vagrant #{install_type}]
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
@ -67,7 +65,6 @@ def provision(vm, role, role_num, node_num)
token: vagrant
node-external-ip: #{node_ip}
flannel-iface: eth1
#{db_type}
YAML
k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type}]
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
@ -75,24 +72,10 @@ def provision(vm, role, role_num, node_num)
end
if vm.box.to_s.include?("microos")
vm.provision 'k3s-reload', type: 'reload', run: 'once'
if !EXTERNAL_DB.empty?
vm.provision "shell", inline: "docker start #{EXTERNAL_DB}"
end
end
# This step does not run by default and is designed to be called by higher level tools
end
def getDBType(role, role_num, vm)
if ( EXTERNAL_DB == "" || EXTERNAL_DB == "etcd" )
if role.include?("server") && role_num == 0
return "cluster-init: true"
end
else
puts "Unknown EXTERNAL_DB: " + EXTERNAL_DB
abort
end
return ""
end
Vagrant.configure("2") do |config|
config.vagrant.plugins = ["vagrant-k3s", "vagrant-reload"]

View File

@ -25,7 +25,6 @@ var ci = flag.Bool("ci", false, "running on CI")
var local = flag.Bool("local", false, "deploy a locally built K3s binary")
// Environment Variables Info:
// E2E_EXTERNAL_DB: mysql, postgres, etcd (default: etcd)
// E2E_RELEASE_VERSION=v1.23.1+k3s2 (default: latest commit from master)
func Test_E2ESnapshotRestore(t *testing.T) {