From dfc16801768e6513bcb6488f2c0751cde1fa6458 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Tue, 13 Apr 2021 19:27:30 +0800 Subject: [PATCH] regions: lbagents: move pb update/create as mcclient module method --- .../models/loadbalanceragents_deploy.go | 46 ++------------ pkg/mcclient/modules/mod_ansibleplaybooks.go | 62 ++++++++++++++++++- 2 files changed, 65 insertions(+), 43 deletions(-) diff --git a/pkg/compute/models/loadbalanceragents_deploy.go b/pkg/compute/models/loadbalanceragents_deploy.go index ea8baa262e..27a9860247 100644 --- a/pkg/compute/models/loadbalanceragents_deploy.go +++ b/pkg/compute/models/loadbalanceragents_deploy.go @@ -27,7 +27,6 @@ import ( "yunion.io/x/pkg/util/regutils" "yunion.io/x/pkg/utils" - ansible_apis "yunion.io/x/onecloud/pkg/apis/ansible" compute_apis "yunion.io/x/onecloud/pkg/apis/compute" identity_apis "yunion.io/x/onecloud/pkg/apis/identity" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -372,47 +371,10 @@ func (lbagent *SLoadbalancerAgent) updateOrCreatePbModel(ctx context.Context, pb *ansible.Playbook, ) (*mcclient_models.AnsiblePlaybook, error) { cliSess := auth.GetSession(ctx, userCred, "", "") - - if pbId == "" { - pbJson, err := mcclient_modules.AnsiblePlaybooks.Get(cliSess, pbName, nil) - if err == nil { - pbModel := &mcclient_models.AnsiblePlaybook{} - if err := pbJson.Unmarshal(pbModel); err == nil { - pbId = pbModel.Id - } - } - } - - var pbJson jsonutils.JSONObject - if pbId != "" { - var err error - ansiblePbInput := &ansible_apis.AnsiblePlaybookUpdateInput{ - Name: pbName, - Playbook: *pb, - } - params := ansiblePbInput.JSON(ansiblePbInput) - pbJson, err = mcclient_modules.AnsiblePlaybooks.Update(cliSess, pbId, params) - if err != nil { - return nil, errors.WithMessage(err, "update ansibleplaybook") - } - } else { - var err error - ansiblePbInput := &ansible_apis.AnsiblePlaybookCreateInput{ - Name: pbName, - Playbook: *pb, - } - params := ansiblePbInput.JSON(ansiblePbInput) - pbJson, err = mcclient_modules.AnsiblePlaybooks.Create(cliSess, params) - if err != nil { - return nil, errors.WithMessage(err, "create ansibleplaybook") - } - } - - pbModel := &mcclient_models.AnsiblePlaybook{} - if err := pbJson.Unmarshal(pbModel); err != nil { - return nil, errors.WithMessage(err, "unmarshal ansibleplaybook") - } - return pbModel, nil + pbModel, err := mcclient_modules.AnsiblePlaybooks.UpdateOrCreatePbModel( + ctx, cliSess, pbId, pbName, pb, + ) + return pbModel, err } func (lbagent *SLoadbalancerAgent) PerformUndeploy(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { diff --git a/pkg/mcclient/modules/mod_ansibleplaybooks.go b/pkg/mcclient/modules/mod_ansibleplaybooks.go index 187cfcb25c..4221ab6c70 100644 --- a/pkg/mcclient/modules/mod_ansibleplaybooks.go +++ b/pkg/mcclient/modules/mod_ansibleplaybooks.go @@ -14,7 +14,18 @@ package modules -import "yunion.io/x/onecloud/pkg/mcclient/modulebase" +import ( + "context" + + "yunion.io/x/jsonutils" + "yunion.io/x/pkg/errors" + + ansible_apis "yunion.io/x/onecloud/pkg/apis/ansible" + "yunion.io/x/onecloud/pkg/mcclient" + mcclient_models "yunion.io/x/onecloud/pkg/mcclient/models" + "yunion.io/x/onecloud/pkg/mcclient/modulebase" + "yunion.io/x/onecloud/pkg/util/ansible" +) type AnsiblePlaybookManager struct { modulebase.ResourceManager @@ -41,3 +52,52 @@ func init() { } registerV2(&AnsiblePlaybooks) } + +func (man *AnsiblePlaybookManager) UpdateOrCreatePbModel( + ctx context.Context, + cliSess *mcclient.ClientSession, + pbId string, + pbName string, + pb *ansible.Playbook, +) (*mcclient_models.AnsiblePlaybook, error) { + if pbId == "" { + pbJson, err := man.Get(cliSess, pbName, nil) + if err == nil { + pbModel := &mcclient_models.AnsiblePlaybook{} + if err := pbJson.Unmarshal(pbModel); err == nil { + pbId = pbModel.Id + } + } + } + + var pbJson jsonutils.JSONObject + if pbId != "" { + var err error + ansiblePbInput := &ansible_apis.AnsiblePlaybookUpdateInput{ + Name: pbName, + Playbook: *pb, + } + params := ansiblePbInput.JSON(ansiblePbInput) + pbJson, err = man.Update(cliSess, pbId, params) + if err != nil { + return nil, errors.Wrap(err, "update ansibleplaybook") + } + } else { + var err error + ansiblePbInput := &ansible_apis.AnsiblePlaybookCreateInput{ + Name: pbName, + Playbook: *pb, + } + params := ansiblePbInput.JSON(ansiblePbInput) + pbJson, err = man.Create(cliSess, params) + if err != nil { + return nil, errors.Wrap(err, "create ansibleplaybook") + } + } + + pbModel := &mcclient_models.AnsiblePlaybook{} + if err := pbJson.Unmarshal(pbModel); err != nil { + return nil, errors.Wrap(err, "unmarshal ansibleplaybook") + } + return pbModel, nil +}