Skip to content

Commit f590a6f

Browse files
authored
Merge pull request #21 from sp-yduck/develop
Develop
2 parents e52bd3c + 8ca0f58 commit f590a6f

File tree

7 files changed

+80
-19
lines changed

7 files changed

+80
-19
lines changed

cloud/services/compute/instance/cloudinit.go

+42-11
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,55 @@ import (
1111
"github.com/sp-yduck/cluster-api-provider-proxmox/cloud/scope"
1212
)
1313

14-
// reconcileCloudInit
15-
func reconcileCloudInit(s *Service, vmid int, bootstrap string) error {
16-
vmName := s.scope.Name()
17-
storageName := s.scope.GetStorage().Name
18-
cloudInit := s.scope.GetCloudInit()
14+
const (
15+
userSnippetPathFormat = "snippets/%s-user.yml"
16+
)
1917

18+
// reconcileCloudInit
19+
func (s *Service) reconcileCloudInit(bootstrap string) error {
2020
// user
21-
if err := reconcileCloudInitUser(vmid, vmName, storageName, bootstrap, *cloudInit.User, s.remote); err != nil {
21+
if err := s.reconcileCloudInitUser(bootstrap); err != nil {
2222
return err
2323
}
2424
return nil
2525
}
2626

27-
func reconcileCloudInitUser(vmid int, vmName, storageName, bootstrap string, config infrav1.User, ssh scope.SSHClient) error {
28-
base := baseUserData(vmName)
27+
// delete CloudConfig
28+
func (s *Service) deleteCloudConfig() error {
29+
storageName := s.scope.GetStorage().Name
30+
path := userSnippetPath(s.scope.Name())
31+
volumeID := fmt.Sprintf("%s:%s", storageName, path)
32+
33+
node, err := s.client.Node(s.scope.NodeName())
34+
if err != nil {
35+
return err
36+
}
37+
storage, err := node.Storage(storageName)
38+
if err != nil {
39+
return err
40+
}
41+
content, err := storage.GetContent(volumeID)
42+
if IsNotFound(err) { // return nil if it's already deleted
43+
return nil
44+
}
45+
if err != nil {
46+
return err
47+
}
48+
49+
return content.DeleteVolume()
50+
}
51+
52+
func (s *Service) reconcileCloudInitUser(bootstrap string) error {
53+
vmName := s.scope.Name()
54+
storagePath := s.scope.GetStorage().Path
55+
config := s.scope.GetCloudInit().User
2956

3057
bootstrapConfig, err := cloudinit.ParseUser(bootstrap)
3158
if err != nil {
3259
return err
3360
}
34-
additional, err := cloudinit.MergeUsers(config, base)
61+
base := baseUserData(vmName)
62+
additional, err := cloudinit.MergeUsers(*config, base)
3563
if err != nil {
3664
return err
3765
}
@@ -47,15 +75,18 @@ func reconcileCloudInitUser(vmid int, vmName, storageName, bootstrap string, con
4775
klog.Info(configYaml)
4876

4977
// to do: should be set via API
50-
// to do: storage path
51-
out, err := ssh.RunWithStdin(fmt.Sprintf("tee /var/lib/vz/%s/snippets/%s-user.yml", storageName, vmName), configYaml)
78+
out, err := s.remote.RunWithStdin(fmt.Sprintf("tee %s/%s", storagePath, userSnippetPath(vmName)), configYaml)
5279
if err != nil {
5380
return errors.Errorf("ssh command error : %s : %v", out, err)
5481
}
5582

5683
return nil
5784
}
5885

86+
func userSnippetPath(vmName string) string {
87+
return fmt.Sprintf(userSnippetPathFormat, vmName)
88+
}
89+
5990
// DEPRECATED : cicustom should be set via API
6091
func ApplyCICustom(vmid int, vmName, storageName, ciType string, ssh scope.SSHClient) error {
6192
if !cloudinit.IsValidType(ciType) {

cloud/services/compute/instance/qemu.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func generateVMOptions(vmName, storageName string, network infrav1.Network, hard
129129
NameServer: network.NameServer,
130130
Boot: "order=scsi0",
131131
Ide: vm.Ide{Ide2: fmt.Sprintf("file=%s:cloudinit,media=cdrom", storageName)},
132-
CiCustom: fmt.Sprintf("user=%s:snippets/%s-user.yml", storageName, vmName),
132+
CiCustom: fmt.Sprintf("user=%s:%s", storageName, userSnippetPath(vmName)),
133133
IPConfig: vm.IPConfig{IPConfig0: network.IPConfig.String()},
134134
OSType: vm.L26,
135135
Net: vm.Net{Net0: "model=virtio,bridge=vmbr0,firewall=1"},

cloud/services/compute/instance/reconcile.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ func (s *Service) Delete(ctx context.Context) error {
6161
if err := EnsureStoppedOrPaused(*instance); err != nil {
6262
return err
6363
}
64+
65+
// delete cloud-config file
66+
if err := s.deleteCloudConfig(); err != nil {
67+
return err
68+
}
69+
70+
// delete qemu
6471
return instance.Delete()
6572
}
6673

@@ -200,7 +207,7 @@ func (s *Service) CreateInstance(ctx context.Context, bootstrap string) (*vm.Vir
200207
log.Info(fmt.Sprintf("reconciled qemu: node=%s,vmid=%d", vm.Node.Name(), vmid))
201208

202209
// cloud init
203-
if err := reconcileCloudInit(s, vmid, bootstrap); err != nil {
210+
if err := s.reconcileCloudInit(bootstrap); err != nil {
204211
return nil, err
205212
}
206213

cloud/services/compute/storage/reconcile.go

+24-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ func (s *Service) Reconcile(ctx context.Context) error {
2828
}
2929

3030
func (s *Service) Delete(ctx context.Context) error {
31-
// to do
31+
// return s.deleteStorage(ctx)
32+
// not worthy to delete Storage
33+
// since deleting Storage will block vm deletion
34+
// and does not delete actual content in the node
3235
return nil
3336
}
3437

@@ -62,6 +65,26 @@ func (s *Service) createStorage(options storage.StorageCreateOptions) error {
6265
return nil
6366
}
6467

68+
func (s *Service) deleteStorage(ctx context.Context) error {
69+
log := log.FromContext(ctx)
70+
nodes, err := s.client.Nodes()
71+
if err != nil {
72+
return err
73+
}
74+
for _, node := range nodes {
75+
storage, err := node.Storage(s.scope.Storage().Name)
76+
if err != nil {
77+
log.Info(err.Error())
78+
continue
79+
}
80+
if _, err := storage.Delete(); err != nil {
81+
log.Info(err.Error())
82+
return err
83+
}
84+
}
85+
return nil
86+
}
87+
6588
func generateVMStorageOptions(scope Scope) storage.StorageCreateOptions {
6689
storageSpec := scope.Storage()
6790
options := storage.StorageCreateOptions{

controllers/proxmoxcluster_controller.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func (r *ProxmoxClusterReconciler) reconcileDelete(ctx context.Context, clusterS
144144
log.Info("Reconciling Delete ProxmoxCluster")
145145

146146
reconcilers := []cloud.Reconciler{
147-
// to do
147+
storage.NewService(clusterScope),
148148
}
149149

150150
for _, r := range reconcilers {

go.mod

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ require (
77
github.com/onsi/ginkgo/v2 v2.9.2
88
github.com/onsi/gomega v1.27.5
99
github.com/pkg/errors v0.9.1
10-
github.com/sp-yduck/proxmox v0.0.0-20230627144956-64b565d07db7
10+
github.com/sp-yduck/proxmox v0.0.0-20230702124708-d086ca37fd8f
1111
golang.org/x/crypto v0.9.0
1212
gopkg.in/yaml.v3 v3.0.1
1313
k8s.io/api v0.26.1
1414
k8s.io/apimachinery v0.26.1
1515
k8s.io/client-go v0.26.1
16+
k8s.io/klog/v2 v2.80.1
1617
k8s.io/utils v0.0.0-20221128185143-99ec85e7a448
1718
sigs.k8s.io/cluster-api v1.4.1
1819
sigs.k8s.io/controller-runtime v0.14.5
@@ -72,7 +73,6 @@ require (
7273
gopkg.in/yaml.v2 v2.4.0 // indirect
7374
k8s.io/apiextensions-apiserver v0.26.1 // indirect
7475
k8s.io/component-base v0.26.1 // indirect
75-
k8s.io/klog/v2 v2.80.1 // indirect
7676
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect
7777
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
7878
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -288,8 +288,8 @@ github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5g
288288
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
289289
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
290290
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
291-
github.com/sp-yduck/proxmox v0.0.0-20230627144956-64b565d07db7 h1:y2VI0xIOh35Dl3vKdbns6TVwe6ReSw4Akyr5qUVyUWU=
292-
github.com/sp-yduck/proxmox v0.0.0-20230627144956-64b565d07db7/go.mod h1:VIKtGZXlx0nO9Y+K2vJ4z3rJLkZ3v0OvTnKbO22EnL4=
291+
github.com/sp-yduck/proxmox v0.0.0-20230702124708-d086ca37fd8f h1:n32eSWqWLtjk+jb4B1Ok+W5KoAxuYuouEkXjumqySXI=
292+
github.com/sp-yduck/proxmox v0.0.0-20230702124708-d086ca37fd8f/go.mod h1:VIKtGZXlx0nO9Y+K2vJ4z3rJLkZ3v0OvTnKbO22EnL4=
293293
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
294294
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
295295
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=

0 commit comments

Comments
 (0)