talos

Форк
0
94 строки · 2.1 Кб
1
// This Source Code Form is subject to the terms of the Mozilla Public
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4

5
package qemu
6

7
import (
8
	"context"
9
	"fmt"
10
	"os"
11

12
	"github.com/siderolabs/talos/pkg/provision"
13
	"github.com/siderolabs/talos/pkg/provision/providers/vm"
14
)
15

16
// Destroy Talos cluster as set of qemu VMs.
17
//
18
//nolint:gocyclo
19
func (p *provisioner) Destroy(ctx context.Context, cluster provision.Cluster, opts ...provision.Option) error {
20
	options := provision.DefaultOptions()
21

22
	for _, opt := range opts {
23
		if err := opt(&options); err != nil {
24
			return err
25
		}
26
	}
27

28
	complete := false
29
	deleteStateDirectory := func(shouldDelete bool) error {
30
		if complete || !shouldDelete {
31
			return nil
32
		}
33

34
		complete = true
35

36
		stateDirectoryPath, err := cluster.StatePath()
37
		if err != nil {
38
			return err
39
		}
40

41
		return os.RemoveAll(stateDirectoryPath)
42
	}
43

44
	defer deleteStateDirectory(options.DeleteStateOnErr) //nolint:errcheck
45

46
	fmt.Fprintln(options.LogWriter, "stopping VMs")
47

48
	if err := p.DestroyNodes(cluster.Info(), &options); err != nil {
49
		return err
50
	}
51

52
	if err := p.destroyVirtualTPM2s(cluster.Info()); err != nil {
53
		return err
54
	}
55

56
	state, ok := cluster.(*vm.State)
57
	if !ok {
58
		return fmt.Errorf("error inspecting QEMU state, %#+v", cluster)
59
	}
60

61
	fmt.Fprintln(options.LogWriter, "removing dhcpd")
62

63
	if err := p.DestroyDHCPd(state); err != nil {
64
		return fmt.Errorf("error stopping dhcpd: %w", err)
65
	}
66

67
	fmt.Fprintln(options.LogWriter, "removing load balancer")
68

69
	if err := p.DestroyLoadBalancer(state); err != nil {
70
		return fmt.Errorf("error stopping loadbalancer: %w", err)
71
	}
72

73
	fmt.Fprintln(options.LogWriter, "removing kms")
74

75
	if err := p.DestroyKMS(state); err != nil {
76
		return err
77
	}
78

79
	fmt.Fprintln(options.LogWriter, "removing network")
80

81
	if err := p.DestroyNetwork(state); err != nil {
82
		return err
83
	}
84

85
	fmt.Fprintln(options.LogWriter, "removing siderolink agent")
86

87
	if err := p.DestroySiderolinkAgent(state); err != nil {
88
		return err
89
	}
90

91
	fmt.Fprintln(options.LogWriter, "removing state directory")
92

93
	return deleteStateDirectory(true)
94
}
95

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.