v5.0.59: redeploy as git_revision, no separate action resources, gen_v2 follows ARCHITECTURE.md
This commit is contained in:
@@ -476,6 +476,57 @@ func (c *UniversalClient) RunInstanceOperationUniversalWithDefaults(ctx context.
|
||||
return c.waitForOperationFinish(ctx, opUid, c.operationTimeoutForContext(ctx, state.ServiceId, action))
|
||||
}
|
||||
|
||||
// RunRedeployOperation запускает redeploy для сервисов, поддерживающих пересборку из git.
|
||||
// В отличие от modify, redeploy не требует CFS-параметров — операция запускается без них.
|
||||
// Используется генератором (gen_v2) согласно ARCHITECTURE.md.
|
||||
func (c *UniversalClient) RunRedeployOperation(ctx context.Context, instanceUid string, timeoutOverride string) error {
|
||||
state, err := c.GetInstanceState(ctx, instanceUid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if state.OperationIsPending || state.OperationIsInProgress {
|
||||
if err := c.waitForInstanceIdle(ctx, instanceUid, c.idleTimeoutFor(state.ServiceId)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
opId := 0
|
||||
for _, op := range state.AvailableOperations {
|
||||
if strings.EqualFold(op.Operation, "redeploy") {
|
||||
opId = op.SvcOperationId
|
||||
break
|
||||
}
|
||||
}
|
||||
if opId == 0 {
|
||||
return fmt.Errorf("операция redeploy недоступна для экземпляра %s", instanceUid)
|
||||
}
|
||||
|
||||
payload := map[string]interface{}{
|
||||
"instanceUid": instanceUid,
|
||||
"svcOperationId": opId,
|
||||
"operation": "redeploy",
|
||||
}
|
||||
opUid, err := c.postIgnoreResponse(ctx, "/instanceOperations", payload, true)
|
||||
if err != nil {
|
||||
return fmt.Errorf("не удалось создать операцию redeploy: %w", err)
|
||||
}
|
||||
if opUid == "" {
|
||||
return fmt.Errorf("не удалось получить UID операции redeploy")
|
||||
}
|
||||
|
||||
if _, _, err := c.doRequest(ctx, "POST", fmt.Sprintf("/instanceOperations/%s/run", opUid), map[string]interface{}{}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
timeout := c.operationTimeoutForContext(ctx, state.ServiceId, "redeploy")
|
||||
if timeoutOverride != "" {
|
||||
if d, parseErr := time.ParseDuration(timeoutOverride); parseErr == nil {
|
||||
timeout = d
|
||||
}
|
||||
}
|
||||
return c.waitForOperationFinish(ctx, opUid, timeout)
|
||||
}
|
||||
|
||||
// Instance state structures
|
||||
|
||||
type ApiOperation struct {
|
||||
|
||||
Reference in New Issue
Block a user