k3d icon indicating copy to clipboard operation
k3d copied to clipboard

[BUG] k3d config migrate $in [$out], options.kubeconfig shenanigans

Open christian-elsee opened this issue 6 months ago • 0 comments

What did you do

Given the following config

$ cat config.yaml | sed '/^$/d'
apiVersion: k3d.io/v1alpha5
kind: Simple
metadata: 
  name: lab1
servers: 3
agents:  3
options:
  kubeconfig:
    updateDefaultKubeconfig: false 
    switchCurrentContext: false

And using k3d config migrate ./config.yaml, in order to validate, sanity-check, etc, config during orchestration workflow

$ dist/bin/k3d config migrate config.yaml --trace
DEBU[0000] DOCKER_SOCK=/var/run/docker.sock             
DEBU[0000] Runtime Info:
&{Name:docker Endpoint:/var/run/docker.sock Version:27.1.1 OSType:linux OS:Ubuntu 24.04 LTS Arch:x86_64 CgroupVersion:2 CgroupDriver:systemd Filesystem:extfs InfoName:lab1} 
DEBU[0000] Validating file config.yaml against default JSONSchema... 
DEBU[0000] JSON Schema Validation Result: &{errors:[] score:44} 
INFO[0000] Using config file config.yaml (k3d.io/v1alpha5#simple) 
TRAC[0000] Trying to read config apiVersion='k3d.io/v1alpha5', kind='simple' 
agents: 3
apiVersion: k3d.io/v1alpha5
kind: Simple
kubeAPI: {}
metadata:
  name: lab1
options:
  k3d:
    disableImageVolume: false
    disableLoadbalancer: false
    disableRollback: false
    loadbalancer: {}
    wait: false
  k3s: {}
  kubeconfig: {}
  runtime:
    HostPidMode: false
registries: {}
servers: 3

What did you expect to happen

I expected options.kubeconfig.updateDefaultKubeconfig and options.kubeconfig.switchCurrentContext to be declared and defined in resulting json object payload, regardless of boolean value.

Interestingly, when either field is defined as true

$ cat config.yaml | sed '/^$/d'
apiVersion: k3d.io/v1alpha5
kind: Simple
metadata: 
  name: lab1
servers: 3
agents:  3
options:
  kubeconfig:
    updateDefaultKubeconfig: true 
    switchCurrentContext: false

They make the cut

$ dist/bin/k3d config migrate config.yaml 
INFO[0000] Using config file config.yaml (k3d.io/v1alpha5#simple) 
agents: 3
apiVersion: k3d.io/v1alpha5
kind: Simple
kubeAPI: {}
metadata:
  name: lab1
options:
  k3d:
    disableImageVolume: false
    disableLoadbalancer: false
    disableRollback: false
    loadbalancer: {}
    wait: false
  k3s: {}
  kubeconfig:
    updateDefaultKubeconfig: true
  runtime:
    HostPidMode: false
registries: {}
servers: 3

Which OS & Architecture

Running k3d binary on old dev imac with DOCKER_HOST pointing to dedicated host on lan.

$ echo $DOCKER_HOST 
tcp://lab1:2375
$ uname -a
Darwin imac.lan 17.7.0 Darwin Kernel Version 17.7.0: Fri Oct 30 13:34:27 PDT 2020; root:xnu-4570.71.82.8~1/RELEASE_X86_64 x86_64 i386 Darwin

Dedicated host runtime

$ dist/bin/k3d runtime-info
arch: x86_64
cgroupdriver: systemd
cgroupversion: "2"
endpoint: /var/run/docker.sock
filesystem: extfs
infoname: lab1
name: docker
os: Ubuntu 24.04 LTS
ostype: linux
version: 27.1.1

Which version of k3d

 $ dist/bin/k3d version
k3d version v5.7.2
k3s version v1.29.6-k3s2 (default)

Which version of docker

$ docker info 
Client:
 Debug Mode: false
 Plugins:
  compose: Docker Compose (Docker Inc., v2.27.1)

Server:
 Containers: 8
  Running: 7
  Paused: 0
  Stopped: 1
 Images: 4
 Server Version: 27.1.1
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
 runc version: v1.1.13-0-g58aa920
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
  WARNING: You're not using the default seccomp profile
   Profile: builtin
  cgroupns
 Kernel Version: 6.8.0-31-generic
 Operating System: Ubuntu 24.04 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 3.264GiB
 Name: lab1
 ID: 686df534-27a4-469a-898d-6825c8597d58
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

[DEPRECATION NOTICE]: API is accessible on http://0.0.0.0:2375 without encryption.
         Access to the remote API is equivalent to root access on the host. Refer
         to the 'Docker daemon attack surface' section in the documentation for
         more information: https://docs.docker.com/go/attack-surface/
In future versions this will be a hard failure preventing the daemon from starting! Learn more at: https://docs.docker.com/go/api-security/
$ docker version
Client: Docker Engine - Community
 Azure integration  0.1.15
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:41:33 2020
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          27.1.1
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.12
  Git commit:       cc13f95
  Built:            Tue Jul 23 19:57:14 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.19
  GitCommit:        2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
 runc:
  Version:          1.7.19
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Outside of the above, I've had no issues to speak of, which is to say good product guys and thank you for your efforts.

christian-elsee avatar Aug 01 '24 10:08 christian-elsee