mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix: desinate ip addresses when batch creating guests (#17859)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
@@ -239,6 +239,17 @@ func ParseNetworkConfig(desc string, idx int) (*compute.NetworkConfig, error) {
|
||||
netConfig.Mac = netutils.MacUnpackHex(p)
|
||||
} else if strings.HasPrefix(p, "wire=") {
|
||||
netConfig.Wire = p[len("wire="):]
|
||||
} else if strings.HasPrefix(p, "macs=") {
|
||||
macSegs := strings.Split(p[len("macs="):], ",")
|
||||
macs := make([]string, len(macSegs))
|
||||
for i := range macSegs {
|
||||
macs[i] = netutils.MacUnpackHex(macSegs[i])
|
||||
}
|
||||
netConfig.Macs = macs
|
||||
} else if strings.HasPrefix(p, "ips=") {
|
||||
netConfig.Addresses = strings.Split(p[len("ips="):], ",")
|
||||
} else if strings.HasPrefix(p, "ip6s=") {
|
||||
netConfig.Addresses6 = strings.Split(p[len("ip6s="):], ",")
|
||||
} else if p == "[require_designated_ip]" {
|
||||
netConfig.RequireDesignatedIP = true
|
||||
} else if p == "[random_exit]" {
|
||||
|
||||
@@ -253,6 +253,22 @@ func ValidateCreateData(funcName string, manager IModelManager, ctx context.Cont
|
||||
return mergeInputOutputData(data, resVal), nil
|
||||
}
|
||||
|
||||
func ExpandBatchCreateData(manager IModelManager, ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict, index int) (*jsonutils.JSONDict, error) {
|
||||
funcName := "ExpandBatchCreateData"
|
||||
ret, err := call(manager, funcName, ctx, userCred, ownerId, query, data, index)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "call %s", funcName)
|
||||
}
|
||||
if len(ret) != 2 {
|
||||
return nil, httperrors.NewInternalServerError("Invald %s return value", funcName)
|
||||
}
|
||||
resVal := ret[0]
|
||||
if err := ValueToError(ret[1]); err != nil {
|
||||
return nil, errors.Wrap(err, "ValueToError")
|
||||
}
|
||||
return mergeInputOutputData(data, resVal), nil
|
||||
}
|
||||
|
||||
func ListItemFilter(manager IModelManager, ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error) {
|
||||
return _callListQueryFilter(manager, "ListItemFilter", ctx, q, userCred, query)
|
||||
}
|
||||
|
||||
@@ -1428,11 +1428,18 @@ func (dispatcher *DBModelDispatcher) Create(ctx context.Context, query jsonutils
|
||||
OpsLog.LogEvent(model, ACT_CREATE, notes, userCred)
|
||||
logclient.AddActionLogWithContext(ctx, model, logclient.ACT_CREATE, notes, userCred, true)
|
||||
}
|
||||
manager.OnCreateComplete(ctx, []IModel{model}, userCred, ownerId, query, data)
|
||||
manager.OnCreateComplete(ctx, []IModel{model}, userCred, ownerId, query, []jsonutils.JSONObject{data})
|
||||
return getItemDetails(manager, model, ctx, userCred, query)
|
||||
}
|
||||
|
||||
func expandMultiCreateParams(manager IModelManager, data jsonutils.JSONObject, count int) ([]jsonutils.JSONObject, error) {
|
||||
func expandMultiCreateParams(manager IModelManager,
|
||||
ctx context.Context,
|
||||
userCred mcclient.TokenCredential,
|
||||
ownerId mcclient.IIdentityProvider,
|
||||
query jsonutils.JSONObject,
|
||||
data jsonutils.JSONObject,
|
||||
count int,
|
||||
) ([]jsonutils.JSONObject, error) {
|
||||
jsonDict, ok := data.(*jsonutils.JSONDict)
|
||||
if !ok {
|
||||
return nil, httperrors.NewInputParameterError("body is not a json?")
|
||||
@@ -1450,7 +1457,16 @@ func expandMultiCreateParams(manager IModelManager, data jsonutils.JSONObject, c
|
||||
}
|
||||
ret := make([]jsonutils.JSONObject, count)
|
||||
for i := 0; i < count; i += 1 {
|
||||
ret[i] = jsonDict.Copy()
|
||||
input, err := ExpandBatchCreateData(manager, ctx, userCred, ownerId, query, jsonDict.Copy(), i)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == MethodNotFoundError {
|
||||
ret[i] = jsonDict.Copy()
|
||||
} else {
|
||||
return nil, errors.Wrap(err, "ExpandBatchCreateData")
|
||||
}
|
||||
} else {
|
||||
ret[i] = input
|
||||
}
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
@@ -1508,7 +1524,7 @@ func (dispatcher *DBModelDispatcher) BatchCreate(ctx context.Context, query json
|
||||
return nil, errors.Wrap(err, "manager.BatchPreValidate")
|
||||
}
|
||||
|
||||
multiData, err = expandMultiCreateParams(manager, data, count)
|
||||
multiData, err = expandMultiCreateParams(manager, ctx, userCred, ownerId, query, data, count)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "expandMultiCreateParams")
|
||||
}
|
||||
@@ -1517,6 +1533,7 @@ func (dispatcher *DBModelDispatcher) BatchCreate(ctx context.Context, query json
|
||||
ret := make([]sCreateResult, len(multiData))
|
||||
for i := range multiData {
|
||||
var model IModel
|
||||
log.Debugf("batchCreateDoCreateItem %d %s", i, multiData[i].String())
|
||||
model, err = batchCreateDoCreateItem(manager, ctx, userCred, ownerId, query, multiData[i], i+1)
|
||||
if err == nil {
|
||||
ret[i] = sCreateResult{model: model, err: nil}
|
||||
@@ -1576,7 +1593,7 @@ func (dispatcher *DBModelDispatcher) BatchCreate(ctx context.Context, query json
|
||||
lockman.LockClass(ctx, manager, GetLockClassKey(manager, ownerId))
|
||||
defer lockman.ReleaseClass(ctx, manager, GetLockClassKey(manager, ownerId))
|
||||
|
||||
manager.OnCreateComplete(ctx, models, userCred, ownerId, query, multiData[0])
|
||||
manager.OnCreateComplete(ctx, models, userCred, ownerId, query, multiData)
|
||||
}
|
||||
return results, nil
|
||||
}
|
||||
|
||||
@@ -190,7 +190,7 @@ func attachItems(
|
||||
}
|
||||
item.PostCreate(ctx, userCred, nil, query, data)
|
||||
OpsLog.LogAttachEvent(ctx, master, slave, userCred, jsonutils.Marshal(item))
|
||||
dispatcher.manager.OnCreateComplete(ctx, []IModel{item}, userCred, nil, query, data)
|
||||
dispatcher.manager.OnCreateComplete(ctx, []IModel{item}, userCred, nil, query, []jsonutils.JSONObject{data})
|
||||
return getItemDetails(dispatcher.JointModelManager(), item, ctx, userCred, query)
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ type IModelManager interface {
|
||||
// BatchCreateValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error)
|
||||
// ValidateCreateData dynamic called by dispatcher
|
||||
// ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error)
|
||||
OnCreateComplete(ctx context.Context, items []IModel, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject)
|
||||
OnCreateComplete(ctx context.Context, items []IModel, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data []jsonutils.JSONObject)
|
||||
BatchPreValidate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider,
|
||||
query jsonutils.JSONObject, data *jsonutils.JSONDict, count int) error
|
||||
|
||||
|
||||
@@ -271,7 +271,7 @@ func (manager *SModelBaseManager) ValidateCreateData(ctx context.Context, userCr
|
||||
return input, nil
|
||||
}
|
||||
|
||||
func (manager *SModelBaseManager) OnCreateComplete(ctx context.Context, items []IModel, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) {
|
||||
func (manager *SModelBaseManager) OnCreateComplete(ctx context.Context, items []IModel, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data []jsonutils.JSONObject) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user