Skip to content

Commit e6573b5

Browse files
committed
rebuild metadata when reinstall
Signed-off-by: Jack <[email protected]>
1 parent 49324f1 commit e6573b5

File tree

1 file changed

+28
-20
lines changed

1 file changed

+28
-20
lines changed

web/src/routes/instance.go

+28-20
Original file line numberDiff line numberDiff line change
@@ -425,21 +425,23 @@ func (a *InstanceAdmin) Reinstall(ctx context.Context, instance *model.Instance,
425425
}
426426

427427
// rebuild metadata
428-
metadata, err := a.getMetadata(instance)
429-
if err != nil {
430-
logger.Error("Failed to get instance metadata", err)
431-
return
428+
instancePasswd := rootPasswd
429+
if rootPasswd != "" && image.OSCode != "windows" {
430+
instancePasswd, err = encrpt.Mkpasswd(rootPasswd, "sha512")
431+
if err != nil {
432+
logger.Errorf("Failed to encrypt admin password, %v", err)
433+
return
434+
}
432435
}
433-
metadata.RootPasswd = rootPasswd
434-
jsonData, err := json.Marshal(metadata)
436+
metadata, err := a.getMetadata(instance, instancePasswd)
435437
if err != nil {
436-
logger.Errorf("Failed to marshal instance json data, %v", err)
438+
logger.Error("Failed to get instance metadata", err)
437439
return
438440
}
439441

440442
snapshot := total/MaxmumSnapshot + 1 // Same snapshot reference can not be over 128, so use 96 here
441443
control := fmt.Sprintf("inter=%d", instance.Hyper)
442-
command := fmt.Sprintf("/opt/cloudland/scripts/backend/reinstall_vm.sh '%d' '%s.%s' '%d' '%d' '%s' '%d' '%d' '%d' '%s'<<EOF\n%s\nEOF", instance.ID, imagePrefix, image.Format, snapshot, bootVolume.ID, bootVolume.GetOriginVolumeID(), flavor.Cpu, flavor.Memory, flavor.Disk, instance.Hostname, base64.StdEncoding.EncodeToString(jsonData))
444+
command := fmt.Sprintf("/opt/cloudland/scripts/backend/reinstall_vm.sh '%d' '%s.%s' '%d' '%d' '%s' '%d' '%d' '%d' '%s'<<EOF\n%s\nEOF", instance.ID, imagePrefix, image.Format, snapshot, bootVolume.ID, bootVolume.GetOriginVolumeID(), flavor.Cpu, flavor.Memory, flavor.Disk, instance.Hostname, base64.StdEncoding.EncodeToString([]byte(metadata)))
443445
err = HyperExecute(ctx, control, command)
444446
if err != nil {
445447
logger.Error("Reinstall remote exec failed", err)
@@ -642,7 +644,7 @@ func (a *InstanceAdmin) buildMetadata(ctx context.Context, primaryIface *Interfa
642644
return interfaces, string(jsonData), nil
643645
}
644646

645-
func (a *InstanceAdmin) getMetadata(instance *model.Instance) (metadata *InstanceData, err error) {
647+
func (a *InstanceAdmin) getMetadata(instance *model.Instance, rootPasswd string) (metadata string, err error) {
646648
vlans := []*VlanInfo{}
647649
instNetworks := []*InstanceNetwork{}
648650
instLinks := []*NetworkLink{}
@@ -677,17 +679,23 @@ func (a *InstanceAdmin) getMetadata(instance *model.Instance) (metadata *Instanc
677679
vlans = append(vlans, &VlanInfo{Device: iface.Name, Vlan: subnet.Vlan, Inbound: iface.Inbound, Outbound: iface.Outbound, AllowSpoofing: iface.AllowSpoofing, Gateway: subnet.Gateway, Router: subnet.RouterID, IpAddr: iface.Address.Address, MacAddr: iface.MacAddr})
678680
}
679681
instData := &InstanceData{
680-
Userdata: instance.Userdata,
681-
VirtType: virtType,
682-
DNS: dns,
683-
Vlans: vlans,
684-
Networks: instNetworks,
685-
Links: instLinks,
686-
Keys: instKeys,
687-
LoginPort: int(instance.LoginPort),
688-
OSCode: instance.Image.OSCode,
689-
}
690-
return instData, nil
682+
Userdata: instance.Userdata,
683+
VirtType: virtType,
684+
DNS: dns,
685+
Vlans: vlans,
686+
Networks: instNetworks,
687+
Links: instLinks,
688+
Keys: instKeys,
689+
RootPasswd: rootPasswd,
690+
LoginPort: int(instance.LoginPort),
691+
OSCode: instance.Image.OSCode,
692+
}
693+
jsonData, err := json.Marshal(instData)
694+
if err != nil {
695+
logger.Errorf("Failed to marshal instance json data, %v", err)
696+
return
697+
}
698+
return string(jsonData), nil
691699
}
692700

693701
func (a *InstanceAdmin) Delete(ctx context.Context, instance *model.Instance) (err error) {

0 commit comments

Comments
 (0)