in cmd/nodeadm/uninstall/uninstall.go [63:144]
func (c *command) Run(log *zap.Logger, opts *cli.GlobalOptions) error {
ctx := context.Background()
ctx = logger.NewContext(ctx, log)
root, err := cli.IsRunningAsRoot()
if err != nil {
return err
}
if !root {
return cli.ErrMustRunAsRoot
}
log.Info("Loading installed components")
installed, err := tracker.GetInstalledArtifacts()
if err != nil && os.IsNotExist(err) {
log.Info("Nodeadm components are already uninstalled")
return nil
} else if err != nil {
return err
}
log.Info("Creating daemon manager..")
daemonManager, err := daemon.NewDaemonManager()
if err != nil {
return err
}
defer daemonManager.Close()
if installed.Artifacts.Kubelet {
kubeletStatus, err := daemonManager.GetDaemonStatus(kubelet.KubeletDaemonName)
if err != nil {
return err
}
if kubeletStatus == daemon.DaemonStatusRunning {
if !slices.Contains(c.skipPhases, skipPodPreflightCheck) {
log.Info("Validating if node has been drained...")
if drained, err := node.IsDrained(ctx); err != nil {
return fmt.Errorf("validating if node has been drained: %w", err)
} else if !drained {
return fmt.Errorf("only static pods and pods controlled by daemon-sets can be running on the node. Please move pods " +
"to different node or use --skip pod-validation")
}
}
if !slices.Contains(c.skipPhases, skipNodePreflightCheck) {
log.Info("Validating if node has been marked unschedulable...")
if err := node.IsUnscheduled(ctx); err != nil {
return fmt.Errorf("please drain or cordon node to mark it unschedulable or use --skip node-validation: %w", err)
}
}
}
}
log.Info("Creating package manager...")
containerdSource := containerd.GetContainerdSource(installed.Artifacts.Containerd)
log.Info("Configuring package manager with", zap.Reflect("containerd source", string(containerdSource)))
packageManager, err := packagemanager.New(containerdSource, log)
if err != nil {
return err
}
uninstaller := &flows.Uninstaller{
Artifacts: installed.Artifacts,
DaemonManager: daemonManager,
PackageManager: packageManager,
Logger: log,
CNIUninstall: cni.Uninstall,
}
if err := uninstaller.Run(ctx); err != nil {
return err
}
if c.force {
log.Info("Force mode enabled, cleaning up additional directories...")
cleanupManager := cleanup.New(log)
if err := cleanupManager.Cleanup(); err != nil {
return fmt.Errorf("cleaning up additional directories: %w", err)
}
}
return nil
}