12
"github.com/siderolabs/talos/pkg/provision"
13
"github.com/siderolabs/talos/pkg/provision/providers/vm"
19
func (p *provisioner) Destroy(ctx context.Context, cluster provision.Cluster, opts ...provision.Option) error {
20
options := provision.DefaultOptions()
22
for _, opt := range opts {
23
if err := opt(&options); err != nil {
29
deleteStateDirectory := func(shouldDelete bool) error {
30
if complete || !shouldDelete {
36
stateDirectoryPath, err := cluster.StatePath()
41
return os.RemoveAll(stateDirectoryPath)
44
defer deleteStateDirectory(options.DeleteStateOnErr)
46
fmt.Fprintln(options.LogWriter, "stopping VMs")
48
if err := p.DestroyNodes(cluster.Info(), &options); err != nil {
52
if err := p.destroyVirtualTPM2s(cluster.Info()); err != nil {
56
state, ok := cluster.(*vm.State)
58
return fmt.Errorf("error inspecting QEMU state, %#+v", cluster)
61
fmt.Fprintln(options.LogWriter, "removing dhcpd")
63
if err := p.DestroyDHCPd(state); err != nil {
64
return fmt.Errorf("error stopping dhcpd: %w", err)
67
fmt.Fprintln(options.LogWriter, "removing load balancer")
69
if err := p.DestroyLoadBalancer(state); err != nil {
70
return fmt.Errorf("error stopping loadbalancer: %w", err)
73
fmt.Fprintln(options.LogWriter, "removing kms")
75
if err := p.DestroyKMS(state); err != nil {
79
fmt.Fprintln(options.LogWriter, "removing network")
81
if err := p.DestroyNetwork(state); err != nil {
85
fmt.Fprintln(options.LogWriter, "removing siderolink agent")
87
if err := p.DestroySiderolinkAgent(state); err != nil {
91
fmt.Fprintln(options.LogWriter, "removing state directory")
93
return deleteStateDirectory(true)