mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix: host jnlp request fail for idrac9
This commit is contained in:
@@ -21,6 +21,7 @@ import (
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
"yunion.io/x/pkg/errors"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/appsrv"
|
||||
"yunion.io/x/onecloud/pkg/baremetal"
|
||||
@@ -71,6 +72,7 @@ func initBaremetalsHandler(app *appsrv.Application) {
|
||||
AddHandler(app, "POST", bmActionPrefix("reset-bmc"), bmObjMiddleware(handleBaremetalResetBMC))
|
||||
AddHandler(app, "POST", bmActionPrefix("ipmi-probe"), bmObjMiddleware(handleBaremetalIpmiProbe))
|
||||
AddHandler(app, "POST", bmActionPrefix("cdrom"), bmObjMiddleware(handleBaremetalCdromTask))
|
||||
AddHandler(app, "POST", bmActionPrefix("jnlp"), bmObjMiddleware(handleBaremetalJnlpTask))
|
||||
|
||||
// server actions handler
|
||||
AddHandler(app, "POST", srvActionPrefix("create"), srvClassMiddleware(handleServerCreate))
|
||||
@@ -160,6 +162,22 @@ func handleBaremetalCdromTask(ctx *Context, bm *baremetal.SBaremetalInstance) {
|
||||
ctx.ResponseOk()
|
||||
}
|
||||
|
||||
func handleBaremetalJnlpTask(ctx *Context, bm *baremetal.SBaremetalInstance) {
|
||||
cli := bm.GetRedfishCli(ctx)
|
||||
if cli == nil {
|
||||
ctx.ResponseError(httperrors.NewNotSupportedError("Redfish API"))
|
||||
return
|
||||
}
|
||||
jnlp, err := cli.GetConsoleJNLP(ctx)
|
||||
if err != nil {
|
||||
ctx.ResponseError(errors.Wrap(err, "GetConsoleJNLP"))
|
||||
return
|
||||
}
|
||||
result := jsonutils.NewDict()
|
||||
result.Add(jsonutils.NewString(jnlp), "jnlp")
|
||||
ctx.ResponseJson(result)
|
||||
}
|
||||
|
||||
func handleServerCreate(ctx *Context, bm *baremetal.SBaremetalInstance) {
|
||||
err := bm.StartServerCreateTask(ctx.UserCred(), ctx.TaskId(), ctx.Data())
|
||||
if err != nil {
|
||||
|
||||
@@ -53,7 +53,6 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/mcclient/modules"
|
||||
"yunion.io/x/onecloud/pkg/util/httputils"
|
||||
"yunion.io/x/onecloud/pkg/util/logclient"
|
||||
"yunion.io/x/onecloud/pkg/util/redfish/bmconsole"
|
||||
)
|
||||
|
||||
type SHostManager struct {
|
||||
@@ -4615,39 +4614,13 @@ func (self *SHost) AllowGetDetailsJnlp(ctx context.Context, userCred mcclient.To
|
||||
}
|
||||
|
||||
func (self *SHost) GetDetailsJnlp(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) {
|
||||
ipmi, err := self.GetIpmiInfo()
|
||||
url := fmt.Sprintf("/baremetals/%s/jnlp", self.Id)
|
||||
header := mcclient.GetTokenHeaders(userCred)
|
||||
resp, err := self.BaremetalSyncRequest(ctx, "POST", url, header, nil)
|
||||
if err != nil {
|
||||
return nil, httperrors.NewInvalidStatusError("no valid ipmi_info")
|
||||
return nil, errors.Wrap(err, "BaremetalSyncRequest")
|
||||
}
|
||||
if !ipmi.Verified {
|
||||
return nil, httperrors.NewInvalidStatusError("no veried ipmi_info")
|
||||
}
|
||||
if self.SysInfo == nil {
|
||||
return nil, httperrors.NewInvalidStatusError("no valid sys_info")
|
||||
}
|
||||
ipmiPass, err := utils.DescryptAESBase64(self.Id, ipmi.Password)
|
||||
if err != nil {
|
||||
return nil, httperrors.NewInternalServerError("decrypt ipmi password fail: %s", err)
|
||||
}
|
||||
bmc := bmconsole.NewBMCConsole(ipmi.IpAddr, ipmi.Username, ipmiPass, false)
|
||||
manufacture, _ := self.SysInfo.GetString("manufacture")
|
||||
var jnlp string
|
||||
switch strings.ToLower(manufacture) {
|
||||
case "hp", "hpe":
|
||||
jnlp, err = bmc.GetIloConsoleJNLP(ctx)
|
||||
case "dell", "dell inc.":
|
||||
sku, _ := self.SysInfo.GetString("sku")
|
||||
model, _ := self.SysInfo.GetString("model")
|
||||
jnlp, err = bmc.GetIdracConsoleJNLP(ctx, sku, model)
|
||||
default:
|
||||
return nil, httperrors.NewNotImplementedError("Unsupported manufacture %s", manufacture)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
ret := jsonutils.NewDict()
|
||||
ret.Add(jsonutils.NewString(jnlp), "jnlp")
|
||||
return ret, nil
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func (self *SHost) AllowPerformInsertIso(ctx context.Context,
|
||||
|
||||
Reference in New Issue
Block a user