/
node.go
42 lines (30 loc) · 1.07 KB
/
node.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package vm
import (
"fmt"
multierror "github.com/hashicorp/go-multierror"
"github.com/siderolabs/talos/pkg/provision"
)
// DestroyNodes destroys all VMs.
func (p *Provisioner) DestroyNodes(cluster provision.ClusterInfo, options *provision.Options) error {
errCh := make(chan error)
nodes := append([]provision.NodeInfo{}, cluster.Nodes...)
nodes = append(nodes, cluster.ExtraNodes...)
for _, node := range nodes {
go func(node provision.NodeInfo) {
fmt.Fprintln(options.LogWriter, "stopping VM", node.Name)
errCh <- p.DestroyNode(node)
}(node)
}
var multiErr *multierror.Error
for range nodes {
multiErr = multierror.Append(multiErr, <-errCh)
}
return multiErr.ErrorOrNil()
}
// DestroyNode destroys VM.
func (p *Provisioner) DestroyNode(node provision.NodeInfo) error {
return StopProcessByPidfile(node.ID) // node.ID stores PID path for control process
}