github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/providers/static/machine.go (about) 1 package static 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/caos/orbos/internal/operator/orbiter/kinds/clusters/core/infra" 8 "github.com/caos/orbos/internal/operator/orbiter/kinds/loadbalancers" 9 "github.com/caos/orbos/internal/operator/orbiter/kinds/providers/core" 10 "github.com/caos/orbos/internal/operator/orbiter/kinds/providers/ssh" 11 "github.com/caos/orbos/mntr" 12 "github.com/caos/orbos/pkg/tree" 13 ) 14 15 var _ infra.Machine = (*machine)(nil) 16 17 type machine struct { 18 poolFile string 19 rebootRequired bool 20 requireReboot func() 21 unrequireReboot func() 22 replacementRequired bool 23 requireReplacement func() 24 unrequireReplacement func() 25 *ssh.Machine 26 X_ID *string `header:"id"` 27 X_IP string `header:"ip"` 28 X_active bool `header:"active"` 29 } 30 31 func newMachine( 32 monitor mntr.Monitor, 33 poolFile string, 34 remoteUser string, 35 id *string, 36 ip string, 37 rebootRequired bool, 38 requireReboot func(), 39 unrequireReboot func(), 40 replacementRequired bool, 41 requireReplacement func(), 42 unrequireReplacement func(), 43 ) *machine { 44 return &machine{ 45 X_active: false, 46 poolFile: poolFile, 47 X_ID: id, 48 X_IP: ip, 49 Machine: ssh.NewMachine(monitor, remoteUser, ip), 50 rebootRequired: rebootRequired, 51 requireReboot: requireReboot, 52 unrequireReboot: unrequireReboot, 53 replacementRequired: replacementRequired, 54 requireReplacement: requireReplacement, 55 unrequireReplacement: unrequireReplacement, 56 } 57 } 58 59 func (c *machine) ID() string { 60 return *c.X_ID 61 } 62 63 func (c *machine) IP() string { 64 return c.X_IP 65 } 66 67 func (c *machine) Destroy() (func() error, error) { 68 c.Execute(nil, "sudo systemctl stop node-agentd keepalived nginx") 69 c.Execute(nil, "sudo systemctl disable node-agentd keepalived nginx") 70 c.X_active = false 71 return func() error { 72 c.Execute(nil, "sudo kubeadm reset -f") 73 c.Execute(nil, "sudo rm -rf /var/lib/etcd") 74 return nil 75 }, c.Machine.WriteFile(c.poolFile, strings.NewReader(""), 600) 76 } 77 78 func (c *machine) RebootRequired() (bool, func(), func()) { 79 return c.rebootRequired, c.requireReboot, c.unrequireReboot 80 } 81 82 func (c *machine) ReplacementRequired() (bool, func(), func()) { 83 return c.replacementRequired, c.requireReplacement, c.unrequireReplacement 84 } 85 86 func ListMachines(monitor mntr.Monitor, desiredTree *tree.Tree, providerID string) (map[string]infra.Machine, error) { 87 desired, err := parseDesiredV0(desiredTree) 88 if err != nil { 89 return nil, fmt.Errorf("parsing desired state failed: %w", err) 90 } 91 desiredTree.Parsed = desired 92 93 _, _, _, _, _, err = loadbalancers.GetQueryAndDestroyFunc(monitor, nil, desired.Loadbalancing, &tree.Tree{}, nil) 94 if err != nil { 95 return nil, err 96 } 97 98 machinesSvc := NewMachinesService(monitor, 99 desired, 100 providerID) 101 102 if err := machinesSvc.updateKeys(); err != nil { 103 return nil, err 104 } 105 106 return core.ListMachines(machinesSvc) 107 }