internal/cleanup/cleanup.go (46 lines of code) (raw):

package cleanup import ( "fmt" "os" "path/filepath" "strings" "go.uber.org/zap" ) // Directories to clean up when force flag is enabled var cleanupDirs = []string{ "/var/lib/kubelet", "/var/lib/cni", "/etc/cni/net.d", } // Force handles the cleanup of leftover directories. type Force struct { logger *zap.Logger rootDir string } // Option is a function that configures a Force instance. type Option func(*Force) // WithRootDir sets a custom root directory for testing purposes. func WithRootDir(rootDir string) Option { return func(f *Force) { f.rootDir = rootDir } } // New creates a new Force. func New(logger *zap.Logger, opts ...Option) *Force { f := &Force{ logger: logger, rootDir: "/", // Default root directory } for _, opt := range opts { opt(f) } return f } // Cleanup removes all configured directories. func (c *Force) Cleanup() error { for _, dir := range cleanupDirs { fullPath := filepath.Join(c.rootDir, strings.TrimPrefix(dir, "/")) if err := c.removeDir(fullPath); err != nil { return fmt.Errorf("removing directory %s: %w", dir, err) } } return nil } func (c *Force) removeDir(dir string) error { c.logger.Info("Removing directory", zap.String("path", dir)) return os.RemoveAll(dir) }