mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
Merge pull request #6361 from ioito/automated-cherry-pick-of-#6346-upstream-release-3.2
Automated cherry pick of #6346: fix: 优化windows powershell userdata
This commit is contained in:
@@ -37,6 +37,8 @@ const (
|
||||
CLOUD_SHELL = "cloud-shell"
|
||||
CLOUD_SHELL_WITHOUT_ENCRYPT = "cloud-shell-without-encrypt"
|
||||
CLOUD_CONFIG = "cloud-config"
|
||||
CLOUD_POWER_SHELL = "powershell"
|
||||
CLOUD_EC2 = "ec2"
|
||||
)
|
||||
|
||||
type SManagedVMCreateConfig struct {
|
||||
|
||||
@@ -78,6 +78,14 @@ func (self *SAwsGuestDriver) IsNeedInjectPasswordByCloudInit(desc *cloudprovider
|
||||
return true
|
||||
}
|
||||
|
||||
func (self *SAwsGuestDriver) IsWindowsUserDataTypeNeedEncode() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (self *SAwsGuestDriver) GetWindowsUserDataType() string {
|
||||
return cloudprovider.CLOUD_EC2
|
||||
}
|
||||
|
||||
func (self *SAwsGuestDriver) GetLinuxDefaultAccount(desc cloudprovider.SManagedVMCreateConfig) string {
|
||||
// return fetchAwsUserName(desc)
|
||||
if desc.OsType == "Windows" {
|
||||
|
||||
@@ -298,6 +298,14 @@ func (self *SBaseGuestDriver) IsNeedInjectPasswordByCloudInit(desc *cloudprovide
|
||||
return false
|
||||
}
|
||||
|
||||
func (self *SBaseGuestDriver) GetWindowsUserDataType() string {
|
||||
return cloudprovider.CLOUD_POWER_SHELL
|
||||
}
|
||||
|
||||
func (self *SBaseGuestDriver) IsWindowsUserDataTypeNeedEncode() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (self *SBaseGuestDriver) GetUserDataType() string {
|
||||
return cloudprovider.CLOUD_CONFIG
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ package guestdrivers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
@@ -347,7 +348,15 @@ func (self *SManagedVirtualizedGuestDriver) RequestDeployGuestOnHost(ctx context
|
||||
desc.UserData = oUserData.UserDataBase64()
|
||||
}
|
||||
if strings.ToLower(desc.OsType) == strings.ToLower(osprofile.OS_TYPE_WINDOWS) {
|
||||
desc.UserData = oUserData.UserDataPowerShell()
|
||||
switch guest.GetDriver().GetWindowsUserDataType() {
|
||||
case cloudprovider.CLOUD_EC2:
|
||||
desc.UserData = oUserData.UserDataEc2()
|
||||
default:
|
||||
desc.UserData = oUserData.UserDataPowerShell()
|
||||
}
|
||||
if guest.GetDriver().IsWindowsUserDataTypeNeedEncode() {
|
||||
desc.UserData = base64.StdEncoding.EncodeToString([]byte(desc.UserData))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -178,6 +178,8 @@ type IGuestDriver interface {
|
||||
|
||||
IsNeedInjectPasswordByCloudInit(desc *cloudprovider.SManagedVMCreateConfig) bool
|
||||
GetUserDataType() string
|
||||
GetWindowsUserDataType() string
|
||||
IsWindowsUserDataTypeNeedEncode() bool
|
||||
CancelExpireTime(ctx context.Context, userCred mcclient.TokenCredential, guest *SGuest) error
|
||||
|
||||
IsSupportCdrom(guest *SGuest) (bool, error)
|
||||
|
||||
@@ -15,13 +15,10 @@
|
||||
package aws
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
"yunion.io/x/pkg/util/osprofile"
|
||||
|
||||
api "yunion.io/x/onecloud/pkg/apis/compute"
|
||||
"yunion.io/x/onecloud/pkg/cloudprovider"
|
||||
@@ -176,12 +173,6 @@ func (self *SHost) GetInstanceById(instanceId string) (*SInstance, error) {
|
||||
}
|
||||
|
||||
func (self *SHost) CreateVM(desc *cloudprovider.SManagedVMCreateConfig) (cloudprovider.ICloudVM, error) {
|
||||
if strings.ToLower(desc.OsType) == strings.ToLower(osprofile.OS_TYPE_WINDOWS) {
|
||||
// powershell scripts
|
||||
data := fmt.Sprintf("<powershell>%s</powershell>", desc.UserData)
|
||||
desc.UserData = base64.StdEncoding.EncodeToString([]byte(data))
|
||||
}
|
||||
|
||||
vmId, err := self._createVM(desc.Name, desc.ExternalImageId, desc.SysDisk, desc.InstanceType, desc.ExternalNetworkId, desc.IpAddr, desc.Description, desc.Password, desc.DataDisks, desc.PublicKey, desc.ExternalSecgroupId, desc.UserData)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -37,8 +37,9 @@ type TSudoPolicy string
|
||||
type TSshPwauth string
|
||||
|
||||
const (
|
||||
CLOUD_CONFIG_HEADER = "#cloud-config\n"
|
||||
CLOUD_SHELL_HEADER = "#!/usr/bin/env bash\n"
|
||||
CLOUD_CONFIG_HEADER = "#cloud-config\n"
|
||||
CLOUD_SHELL_HEADER = "#!/usr/bin/env bash\n"
|
||||
CLOUD_POWER_SHELL_HEADER = "#ps1\n"
|
||||
|
||||
USER_SUDO_NOPASSWD = TSudoPolicy("sudo_nopasswd")
|
||||
USER_SUDO = TSudoPolicy("sudo")
|
||||
@@ -255,7 +256,16 @@ func (conf *SCloudConfig) UserDataPowerShell() string {
|
||||
}
|
||||
shells = append(shells, conf.Runcmd...)
|
||||
|
||||
return strings.Join(shells, "\n")
|
||||
return CLOUD_POWER_SHELL_HEADER + strings.Join(shells, "\n")
|
||||
}
|
||||
|
||||
func (conf *SCloudConfig) UserDataEc2() string {
|
||||
shells := []string{}
|
||||
for _, u := range conf.Users {
|
||||
shells = append(shells, u.PowerShellScripts()...)
|
||||
}
|
||||
shells = append(shells, conf.Runcmd...)
|
||||
return "<powershell>\n" + strings.Join(shells, "\n") + "\n</powershell>"
|
||||
}
|
||||
|
||||
func (conf *SCloudConfig) UserDataBase64() string {
|
||||
|
||||
Reference in New Issue
Block a user