Fix: 2-step create + run, paginated get_instances, v1.0.22

This commit is contained in:
2026-07-24 09:34:18 +04:00
parent 2ae1f5dd66
commit 2acb6aa8c9
3 changed files with 31 additions and 12 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ from routes.main import bp as main_bp
from routes.api import bp as api_bp from routes.api import bp as api_bp
from routes.api_test import bp as api_test_bp from routes.api_test import bp as api_test_bp
VERSION = "1.0.21" VERSION = "1.0.22"
app = Flask(__name__, template_folder="templates", static_folder="static") app = Flask(__name__, template_folder="templates", static_folder="static")
app.config["NUBES_API_ENDPOINT"] = os.getenv("NUBES_API_ENDPOINT", "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc") app.config["NUBES_API_ENDPOINT"] = os.getenv("NUBES_API_ENDPOINT", "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc")
+9 -2
View File
@@ -2,8 +2,15 @@ from api.http_client import HttpClient
def get_instances(client): def get_instances(client):
data = client.get("/instances", params={"pageSize": 200}) results = []
return data.get("results", []) page = 1
while True:
data = client.get("/instances", params={"pageSize": 200, "page": page})
results.extend(data.get("results", []))
if len(results) >= data.get("total", 0):
break
page += 1
return results
def get_organization(client): def get_organization(client):
+21 -9
View File
@@ -93,12 +93,15 @@ def api_test():
payload = {"serviceId": svc_id, "displayName": display_name, "descr": "autotest"} payload = {"serviceId": svc_id, "displayName": display_name, "descr": "autotest"}
# cfsParams — отдельным шагом, не в POST /instances # cfsParams — отдельным шагом, не в POST /instances
resp = client.post("/instances", payload) resp = client.post("/instances", payload)
instance_uid = resp.get("instanceUid") or _find_uid(resp) instance_uid = resp.get("instanceUid") or _find_uid(resp) or _uid_from_location(resp.get("_location", ""))
# Location header: /instances/{uid}
loc = resp.get("_location", "") # Шаг 2: запустить операцию create
if not instance_uid and loc: if instance_uid:
parts = loc.rstrip("/").split("/") op_resp = client.post("/instanceOperations", {"instanceUid": instance_uid, "operation": "create"})
instance_uid = parts[-1] if len(parts[-1]) == 36 else None # run
op_uid = _find_uid(op_resp) or _uid_from_location(op_resp.get("_location", ""))
if op_uid:
client.post(f"/instanceOperations/{op_uid}/run")
# wait # wait
deadline = time.time() + 300 deadline = time.time() + 300
@@ -116,10 +119,11 @@ def api_test():
else: else:
if not instance_uid: if not instance_uid:
return jsonify({"status": "FAIL", "error": "Нет instanceUid"}), 400 return jsonify({"status": "FAIL", "error": "Нет instanceUid"}), 400
payload = {"instanceUid": instance_uid, "svcOperationId": svc_op_id} # все операции: {instanceUid, operation}
op_payload = {"instanceUid": instance_uid, "operation": op_name}
if params: if params:
payload["cfsParams"] = [{"svcOperationCfsParamId": int(k), "paramValue": str(v)} for k, v in params.items()] op_payload["cfsParams"] = [{"svcOperationCfsParamId": int(k), "paramValue": str(v)} for k, v in params.items()]
client.post("/instanceOperations", payload) client.post("/instanceOperations", op_payload)
deadline = time.time() + 300 deadline = time.time() + 300
while time.time() < deadline: while time.time() < deadline:
@@ -149,3 +153,11 @@ def _find_uid(resp):
if isinstance(v, str) and len(v) == 36 and v.count("-") == 4: if isinstance(v, str) and len(v) == 36 and v.count("-") == 4:
return v return v
return None return None
def _uid_from_location(loc):
if loc:
parts = loc.rstrip("/").split("/")
if len(parts[-1]) == 36:
return parts[-1]
return None