Unverified Commit 3b650c97 authored by Derek Nola's avatar Derek Nola Committed by GitHub

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

* Unit test for MustFindString (#8013) * Consolidate CopyFile functions (#8079) * Remove unnecessary E2E envs Signed-off-by: 's avatarDerek Nola <derek.nola@suse.com>
parent 3efc14ea
...@@ -161,7 +161,7 @@ func createCNIConf(dir string, nodeConfig *config.Node) error { ...@@ -161,7 +161,7 @@ func createCNIConf(dir string, nodeConfig *config.Node) error {
if nodeConfig.AgentConfig.FlannelCniConfFile != "" { if nodeConfig.AgentConfig.FlannelCniConfFile != "" {
logrus.Debugf("Using %s as the flannel CNI conf", 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) return util.WriteFile(p, cniConf)
} }
......
...@@ -16,10 +16,12 @@ func WriteFile(name string, content string) error { ...@@ -16,10 +16,12 @@ func WriteFile(name string, content string) error {
return nil return nil
} }
func CopyFile(sourceFile string, destinationFile string) error { func CopyFile(sourceFile string, destinationFile string, ignoreNotExist bool) error {
os.MkdirAll(filepath.Dir(destinationFile), 0755) os.MkdirAll(filepath.Dir(destinationFile), 0755)
input, err := os.ReadFile(sourceFile) 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) return errors.Wrapf(err, "copying %s to %s", sourceFile, destinationFile)
} }
err = os.WriteFile(destinationFile, input, 0644) err = os.WriteFile(destinationFile, input, 0644)
......
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
"time" "time"
"github.com/erikdubbelboer/gspt" "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/bootstrap"
"github.com/k3s-io/k3s/pkg/cli/cmds" "github.com/k3s-io/k3s/pkg/cli/cmds"
"github.com/k3s-io/k3s/pkg/clientaccess" "github.com/k3s-io/k3s/pkg/clientaccess"
...@@ -210,20 +211,6 @@ func rotate(app *cli.Context, cfg *cmds.Server) error { ...@@ -210,20 +211,6 @@ func rotate(app *cli.Context, cfg *cmds.Server) error {
return nil 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) { func backupCertificates(serverDataDir, agentDataDir string) (string, error) {
serverTLSDir := filepath.Join(serverDataDir, "tls") serverTLSDir := filepath.Join(serverDataDir, "tls")
tlsBackupDir := filepath.Join(serverDataDir, "tls-"+strconv.Itoa(int(time.Now().Unix()))) tlsBackupDir := filepath.Join(serverDataDir, "tls-"+strconv.Itoa(int(time.Now().Unix())))
...@@ -234,18 +221,20 @@ func backupCertificates(serverDataDir, agentDataDir string) (string, error) { ...@@ -234,18 +221,20 @@ func backupCertificates(serverDataDir, agentDataDir string) (string, error) {
if err := copy.Copy(serverTLSDir, tlsBackupDir); err != nil { if err := copy.Copy(serverTLSDir, tlsBackupDir); err != nil {
return "", err return "", err
} }
agentCerts := []string{ certs := []string{
filepath.Join(agentDataDir, "client-"+version.Program+"-controller.crt"), "client-" + version.Program + "-controller.crt",
filepath.Join(agentDataDir, "client-"+version.Program+"-controller.key"), "client-" + version.Program + "-controller.key",
filepath.Join(agentDataDir, "client-kubelet.crt"), "client-kubelet.crt",
filepath.Join(agentDataDir, "client-kubelet.key"), "client-kubelet.key",
filepath.Join(agentDataDir, "serving-kubelet.crt"), "serving-kubelet.crt",
filepath.Join(agentDataDir, "serving-kubelet.key"), "serving-kubelet.key",
filepath.Join(agentDataDir, "client-kube-proxy.crt"), "client-kube-proxy.crt",
filepath.Join(agentDataDir, "client-kube-proxy.key"), "client-kube-proxy.key",
} }
for _, cert := range agentCerts { for _, cert := range certs {
if err := copyFile(cert, tlsBackupDir); err != nil { agentCert := filepath.Join(agentDataDir, cert)
tlsBackupCert := filepath.Join(tlsBackupDir, cert)
if err := util.CopyFile(agentCert, tlsBackupCert, true); err != nil {
return "", err return "", err
} }
} }
......
package configfilearg package configfilearg
import ( import (
"os"
"reflect" "reflect"
"testing" "testing"
) )
...@@ -72,3 +73,57 @@ func Test_UnitMustParse(t *testing.T) { ...@@ -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)
}
})
}
}
...@@ -11,9 +11,9 @@ NETWORK4_PREFIX = "10.10.10" ...@@ -11,9 +11,9 @@ NETWORK4_PREFIX = "10.10.10"
NETWORK6_PREFIX = "fd11:decf:c0ff:ee" NETWORK6_PREFIX = "fd11:decf:c0ff:ee"
install_type = "" 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.box = NODE_BOXES[node_num]
vm.hostname = "#{roles[0]}-#{role_num}" vm.hostname = role
node_ip4 = "#{NETWORK4_PREFIX}.#{100+node_num}" node_ip4 = "#{NETWORK4_PREFIX}.#{100+node_num}"
node_ip6 = "#{NETWORK6_PREFIX}::#{10+node_num}" node_ip6 = "#{NETWORK6_PREFIX}::#{10+node_num}"
node_ip6_gw = "#{NETWORK6_PREFIX}::1" node_ip6_gw = "#{NETWORK6_PREFIX}::1"
...@@ -36,7 +36,7 @@ def provision(vm, roles, role_num, node_num) ...@@ -36,7 +36,7 @@ def provision(vm, roles, role_num, node_num)
vm.provision "Ping Check", type: "shell", inline: "ping -c 2 k3s.io" 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| vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "server " k3s.args = "server "
...@@ -53,7 +53,7 @@ def provision(vm, roles, role_num, node_num) ...@@ -53,7 +53,7 @@ def provision(vm, roles, role_num, node_num)
YAML YAML
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type] k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end end
elsif roles.include?("server") && role_num != 0 elsif role.include?("server") && role_num != 0
vm.provision :k3s, run: 'once' do |k3s| vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "server " k3s.args = "server "
...@@ -70,7 +70,7 @@ def provision(vm, roles, role_num, node_num) ...@@ -70,7 +70,7 @@ def provision(vm, roles, role_num, node_num)
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type] k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end end
end end
if roles.include?("agent") if role.include?("agent")
vm.provision :k3s, run: 'once' do |k3s| vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "agent " k3s.args = "agent "
...@@ -105,10 +105,9 @@ Vagrant.configure("2") do |config| ...@@ -105,10 +105,9 @@ Vagrant.configure("2") do |config|
# over the node roles themselves # over the node roles themselves
NODE_ROLES.length.times do |i| NODE_ROLES.length.times do |i|
name = NODE_ROLES[i] name = NODE_ROLES[i]
role_num = name.split("-", -1).pop.to_i
config.vm.define name do |node| config.vm.define name do |node|
roles = name.split("-", -1) provision(node.vm, name, role_num, i)
role_num = roles.pop.to_i
provision(node.vm, roles, role_num, i)
end end
end end
end end
...@@ -11,9 +11,9 @@ NETWORK4_PREFIX = "10.10.10" ...@@ -11,9 +11,9 @@ NETWORK4_PREFIX = "10.10.10"
PUBLIC_NETWORK4_PREFIX = "10.100.100" PUBLIC_NETWORK4_PREFIX = "10.100.100"
install_type = "" 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.box = NODE_BOXES[node_num]
vm.hostname = "#{roles[0]}-#{role_num}" vm.hostname = role
node_ip4 = "#{NETWORK4_PREFIX}.#{100+node_num}" node_ip4 = "#{NETWORK4_PREFIX}.#{100+node_num}"
node_ip4_public = "#{PUBLIC_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" vm.network "private_network", :ip => node_ip4, :netmask => "255.255.255.0"
...@@ -27,7 +27,7 @@ def provision(vm, roles, role_num, node_num) ...@@ -27,7 +27,7 @@ def provision(vm, roles, role_num, node_num)
install_type = getInstallType(vm, RELEASE_VERSION, GITHUB_BRANCH) 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| vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "server " k3s.args = "server "
...@@ -41,7 +41,7 @@ def provision(vm, roles, role_num, node_num) ...@@ -41,7 +41,7 @@ def provision(vm, roles, role_num, node_num)
k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type] k3s.env = ["K3S_KUBECONFIG_MODE=0644", install_type]
end end
end end
if roles.include?("agent") if role.include?("agent")
vm.provision :k3s, run: 'once' do |k3s| vm.provision :k3s, run: 'once' do |k3s|
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321
k3s.args = "agent " k3s.args = "agent "
...@@ -77,10 +77,9 @@ Vagrant.configure("2") do |config| ...@@ -77,10 +77,9 @@ Vagrant.configure("2") do |config|
# over the node roles themselves # over the node roles themselves
NODE_ROLES.length.times do |i| NODE_ROLES.length.times do |i|
name = NODE_ROLES[i] name = NODE_ROLES[i]
role_num = name.split("-", -1).pop.to_i
config.vm.define name do |node| config.vm.define name do |node|
roles = name.split("-", -1) provision(node.vm, name, role_num, i)
role_num = roles.pop.to_i
provision(node.vm, roles, role_num, i)
end end
end end
end end
...@@ -5,7 +5,6 @@ NODE_BOXES = (ENV['E2E_NODE_BOXES'] || ...@@ -5,7 +5,6 @@ NODE_BOXES = (ENV['E2E_NODE_BOXES'] ||
['generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004']) ['generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004', 'generic/ubuntu2004'])
GITHUB_BRANCH = (ENV['E2E_GITHUB_BRANCH'] || "master") GITHUB_BRANCH = (ENV['E2E_GITHUB_BRANCH'] || "master")
RELEASE_VERSION = (ENV['E2E_RELEASE_VERSION'] || "") RELEASE_VERSION = (ENV['E2E_RELEASE_VERSION'] || "")
EXTERNAL_DB = (ENV['E2E_EXTERNAL_DB'] || "etcd")
NODE_CPUS = (ENV['E2E_NODE_CPUS'] || 2).to_i NODE_CPUS = (ENV['E2E_NODE_CPUS'] || 2).to_i
NODE_MEMORY = (ENV['E2E_NODE_MEMORY'] || 1024).to_i NODE_MEMORY = (ENV['E2E_NODE_MEMORY'] || 1024).to_i
# Virtualbox >= 6.1.28 require `/etc/vbox/network.conf` for expanded private networks # 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) ...@@ -35,10 +34,10 @@ def provision(vm, role, role_num, node_num)
k3s.args = "server " k3s.args = "server "
k3s.config = <<~YAML k3s.config = <<~YAML
token: vagrant token: vagrant
cluster-init: true
node-external-ip: #{NETWORK_PREFIX}.100 node-external-ip: #{NETWORK_PREFIX}.100
flannel-iface: eth1 flannel-iface: eth1
tls-san: #{NETWORK_PREFIX}.100.nip.io tls-san: #{NETWORK_PREFIX}.100.nip.io
#{db_type}
YAML YAML
k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type}] k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type}]
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 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) ...@@ -52,7 +51,6 @@ def provision(vm, role, role_num, node_num)
token: vagrant token: vagrant
node-external-ip: #{node_ip} node-external-ip: #{node_ip}
flannel-iface: eth1 flannel-iface: eth1
#{db_type}
YAML YAML
k3s.env = %W[K3S_KUBECONFIG_MODE=0644 K3S_TOKEN=vagrant #{install_type}] 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 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) ...@@ -67,7 +65,6 @@ def provision(vm, role, role_num, node_num)
token: vagrant token: vagrant
node-external-ip: #{node_ip} node-external-ip: #{node_ip}
flannel-iface: eth1 flannel-iface: eth1
#{db_type}
YAML YAML
k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type}] k3s.env = %W[K3S_KUBECONFIG_MODE=0644 #{install_type}]
k3s.config_mode = '0644' # side-step https://github.com/k3s-io/k3s/issues/4321 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) ...@@ -75,24 +72,10 @@ def provision(vm, role, role_num, node_num)
end end
if vm.box.to_s.include?("microos") if vm.box.to_s.include?("microos")
vm.provision 'k3s-reload', type: 'reload', run: 'once' vm.provision 'k3s-reload', type: 'reload', run: 'once'
if !EXTERNAL_DB.empty?
vm.provision "shell", inline: "docker start #{EXTERNAL_DB}"
end
end end
# This step does not run by default and is designed to be called by higher level tools # This step does not run by default and is designed to be called by higher level tools
end 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| Vagrant.configure("2") do |config|
config.vagrant.plugins = ["vagrant-k3s", "vagrant-reload"] config.vagrant.plugins = ["vagrant-k3s", "vagrant-reload"]
......
...@@ -25,7 +25,6 @@ var ci = flag.Bool("ci", false, "running on CI") ...@@ -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") var local = flag.Bool("local", false, "deploy a locally built K3s binary")
// Environment Variables Info: // Environment Variables Info:
// E2E_EXTERNAL_DB: mysql, postgres, etcd (default: etcd)
// E2E_RELEASE_VERSION=v1.23.1+k3s2 (default: latest commit from master) // E2E_RELEASE_VERSION=v1.23.1+k3s2 (default: latest commit from master)
func Test_E2ESnapshotRestore(t *testing.T) { func Test_E2ESnapshotRestore(t *testing.T) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment