mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix: use agent manageruri instance of endpoint to visit agents
This commit is contained in:
@@ -28,4 +28,25 @@ func init() {
|
||||
printList(result, modules.Baremetalagents.GetColumns(s))
|
||||
return nil
|
||||
})
|
||||
|
||||
type BaremetalAgentOpsOperations struct {
|
||||
ID string `help:"ID or name of agent"`
|
||||
}
|
||||
R(&BaremetalAgentOpsOperations{}, "baremetal-agent-enable", "Enable baremetal agent", func(s *mcclient.ClientSession, args *BaremetalAgentOpsOperations) error {
|
||||
result, err := modules.Baremetalagents.PerformAction(s, args.ID, "enable", nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
printObject(result)
|
||||
return nil
|
||||
})
|
||||
|
||||
R(&BaremetalAgentOpsOperations{}, "baremetal-agent-disable", "Disable baremetal agent", func(s *mcclient.ClientSession, args *BaremetalAgentOpsOperations) error {
|
||||
result, err := modules.Baremetalagents.PerformAction(s, args.ID, "disable", nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
printObject(result)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import (
|
||||
"yunion.io/x/onecloud/pkg/httperrors"
|
||||
"yunion.io/x/onecloud/pkg/mcclient"
|
||||
"yunion.io/x/pkg/util/regutils"
|
||||
"yunion.io/x/log"
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -17,9 +19,11 @@ const (
|
||||
BAREMETAL_AGENT_OFFLINE = "offline"
|
||||
)
|
||||
|
||||
type TAgentType string
|
||||
|
||||
const (
|
||||
AgentTypeBaremetal = "baremetal"
|
||||
AgentTypeEsxi = "esxiagent"
|
||||
AgentTypeBaremetal = TAgentType("baremetal")
|
||||
AgentTypeEsxi = TAgentType("esxiagent")
|
||||
AgentTypeDefault = AgentTypeBaremetal
|
||||
)
|
||||
|
||||
@@ -175,3 +179,24 @@ func (self *SBaremetalagent) GetExtraDetails(ctx context.Context, userCred mccli
|
||||
}
|
||||
return extra, nil
|
||||
}
|
||||
|
||||
func (manager *SBaremetalagentManager) GetAgent(agentType TAgentType, zoneId string) *SBaremetalagent {
|
||||
q := manager.Query().Equals("agent_type", agentType).Equals("zone_id", zoneId).Asc("created_at")
|
||||
agents := make([]SBaremetalagent, 0)
|
||||
err := db.FetchModelObjects(manager, q, &agents)
|
||||
if err != nil {
|
||||
if err != sql.ErrNoRows {
|
||||
log.Errorf("GetAgent query fail %s", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
if len(agents) == 0 {
|
||||
return nil
|
||||
}
|
||||
for i := range agents {
|
||||
if agents[i].Status == BAREMETAL_AGENT_ENABLED {
|
||||
return &agents[i]
|
||||
}
|
||||
}
|
||||
return &agents[0]
|
||||
}
|
||||
+29
-30
@@ -2629,26 +2629,6 @@ func (self *SHost) StartBaremetalUnmaintenanceTask(ctx context.Context, userCred
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SHost) IsBaremetalAgentReady() bool {
|
||||
url, err := auth.GetServiceURL("baremetal", options.Options.Region, self.GetZone().GetName(), "")
|
||||
if err != nil {
|
||||
log.Errorln("is baremetal agent ready: false")
|
||||
return false
|
||||
}
|
||||
log.Infof("baremetal url:%s", url)
|
||||
return true
|
||||
}
|
||||
|
||||
func (self *SHost) BaremetalSyncRequest(ctx context.Context, method httputils.THttpMethod, url string, headers http.Header, body *jsonutils.JSONDict) (jsonutils.JSONObject, error) {
|
||||
serviceUrl, err := auth.GetServiceURL("baremetal", options.Options.Region, self.GetZone().GetName(), "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
url = serviceUrl + url
|
||||
_, data, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, method, url, headers, body, false)
|
||||
return data, err
|
||||
}
|
||||
|
||||
func (self *SHost) StartSyncstatus(ctx context.Context, userCred mcclient.TokenCredential, parentTaskId string) error {
|
||||
guest := self.GetBaremetalServer()
|
||||
if guest != nil {
|
||||
@@ -3599,20 +3579,39 @@ func (host *SHost) SyncHostExternalNics(ctx context.Context, userCred mcclient.T
|
||||
// return HostManager.GetEsxiAgentHost(host.Id)
|
||||
// }
|
||||
|
||||
func (self *SHost) IsBaremetalAgentReady() bool {
|
||||
return self.isAgentReady(AgentTypeBaremetal)
|
||||
}
|
||||
|
||||
func (self *SHost) BaremetalSyncRequest(ctx context.Context, method httputils.THttpMethod, url string, headers http.Header, body *jsonutils.JSONDict) (jsonutils.JSONObject, error) {
|
||||
return self.doAgentRequest(AgentTypeBaremetal, ctx, method, url, headers, body)
|
||||
}
|
||||
|
||||
func (self *SHost) IsEsxiAgentReady() bool {
|
||||
url, err := auth.GetServiceURL("esxiagent", options.Options.Region, self.GetZone().GetName(), "")
|
||||
if err != nil {
|
||||
log.Errorln("is esxi agent ready: false")
|
||||
return false
|
||||
}
|
||||
log.Infof("esxi agent url:%s", url)
|
||||
return true
|
||||
return self.isAgentReady(AgentTypeEsxi)
|
||||
}
|
||||
|
||||
func (self *SHost) EsxiRequest(ctx context.Context, method httputils.THttpMethod, url string, headers http.Header, body *jsonutils.JSONDict) (jsonutils.JSONObject, error) {
|
||||
serviceUrl, err := auth.GetServiceURL("esxiagent", options.Options.Region, self.GetZone().GetName(), "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return self.doAgentRequest(AgentTypeEsxi, ctx, method, url, headers, body)
|
||||
}
|
||||
|
||||
func (self *SHost) isAgentReady(agentType TAgentType) bool {
|
||||
agent := BaremetalagentManager.GetAgent(agentType, self.ZoneId)
|
||||
if agent == nil {
|
||||
log.Errorf("%s ready: false", agentType)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (self *SHost) doAgentRequest(agentType TAgentType, ctx context.Context, method httputils.THttpMethod, url string, headers http.Header, body *jsonutils.JSONDict) (jsonutils.JSONObject, error) {
|
||||
agent := BaremetalagentManager.GetAgent(agentType, self.ZoneId)
|
||||
if agent == nil {
|
||||
return nil, fmt.Errorf("no valid %s", agentType)
|
||||
}
|
||||
serviceUrl := agent.ManagerUri
|
||||
if url[0] != '/' && serviceUrl[len(serviceUrl)-1] != '/' {
|
||||
serviceUrl += "/"
|
||||
}
|
||||
url = serviceUrl + url
|
||||
_, data, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, method, url, headers, body, false)
|
||||
|
||||
Reference in New Issue
Block a user