Skip to content

Commit

Permalink
Only clean up containerd hosts dirs managed by k3s
Browse files Browse the repository at this point in the history
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
(cherry picked from commit ce0de68)
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
  • Loading branch information
brandond committed Sep 5, 2024
1 parent 83ffe1d commit 23fa38d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 3 deletions.
42 changes: 39 additions & 3 deletions pkg/agent/containerd/config.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package containerd

import (
"bufio"
"fmt"
"net"
"net/url"
Expand Down Expand Up @@ -42,12 +43,14 @@ func writeContainerdConfig(cfg *config.Node, containerdConfig templates.Containe

// writeContainerdHosts merges registry mirrors/configs, and renders and saves hosts.toml from the filled template
func writeContainerdHosts(cfg *config.Node, containerdConfig templates.ContainerdConfig) error {
// Clean up previous configuration templates
if err := cleanContainerdHosts(cfg.Containerd.Registry); err != nil {
return err
}

mirrorAddr := net.JoinHostPort(spegel.DefaultRegistry.InternalAddress, spegel.DefaultRegistry.RegistryPort)
hosts := getHostConfigs(containerdConfig.PrivateRegistryConfig, containerdConfig.NoDefaultEndpoint, mirrorAddr)

// Clean up previous configuration templates
os.RemoveAll(cfg.Containerd.Registry)

// Write out new templates
for host, config := range hosts {
hostDir := filepath.Join(cfg.Containerd.Registry, host)
Expand All @@ -67,6 +70,39 @@ func writeContainerdHosts(cfg *config.Node, containerdConfig templates.Container
return nil
}

// cleanContainerdHosts removes any registry host config dirs containing a hosts.toml
// file with a header that indicates it was created by k3s. Directories not
// containing this file, or containing a file without the header, are left alone.
func cleanContainerdHosts(dir string) error {
ents, err := os.ReadDir(dir)
if err != nil && !os.IsNotExist(err) {
return err
}

for _, ent := range ents {
if !ent.IsDir() {
continue
}
hostsFile := filepath.Join(dir, ent.Name(), "hosts.toml")
file, err := os.Open(hostsFile)
if err != nil {
if os.IsNotExist(err) {
continue
}
return err
}
line, err := bufio.NewReader(file).ReadString('\n')
if err != nil {
continue
}
if line == templates.HostsTomlHeader {
hostsDir := filepath.Join(dir, ent.Name())
os.RemoveAll(hostsDir)
}
}
return nil
}

// getHostConfigs merges the registry mirrors/configs into HostConfig template structs
func getHostConfigs(registry *registries.Registry, noDefaultEndpoint bool, mirrorAddr string) HostConfigs {
hosts := map[string]templates.HostConfig{}
Expand Down
3 changes: 3 additions & 0 deletions pkg/agent/templates/templates.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/rancher/wharfie/pkg/registries"

"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/version"
)

type ContainerdRuntimeConfig struct {
Expand Down Expand Up @@ -40,6 +41,8 @@ type HostConfig struct {
Endpoints []RegistryEndpoint
}

var HostsTomlHeader = "# File generated by " + version.Program + ". DO NOT EDIT."

const HostsTomlTemplate = `
{{- /* */ -}}
# File generated by {{ .Program }}. DO NOT EDIT.
Expand Down

0 comments on commit 23fa38d

Please sign in to comment.