v0.5.0: 3 стенда — изоляция состояния, WSGI middleware, OpenAPI server selector, POLYGON_STANDS env

- loader.py: STANDS dict, get_services/get_ops_index per stand, POLYGON_STANDS env
- mock_state.py: get_state(stand_id) — ленивая инициализация
- app.py: StandMiddleware — перезапись PATH_INFO до Flask-роутинга
- Все роуты: LocalProxy(state), LocalProxy(SERVICES/OPS_INDEX) через g.stand_id
- openapi.py: _build_servers() — по одному серверу на стенд
- services/stand{1,2,3}/ — 37 YAML на стенд из STANDS/dev и STANDS/test
- tests/test_api.py: +4 multi-stand теста (изоляция, fail-next, OpenAPI servers)
- Обратная совместимость: /api/v1/svc/... → стенд по умолчанию
This commit is contained in:
2026-08-01 20:10:19 +04:00
parent 11f98738d0
commit 58d54f2a95
122 changed files with 25223 additions and 76 deletions
+199
View File
@@ -0,0 +1,199 @@
name: template
service_id: 2
service_display_name: Темплейт k8s
service_short_name: template
lifecycle:
suspendOnDestroyDefault: true
adoptExistingOnCreateDefault: false
operations:
- svcOperationId: 74
operation: create
kind: instance
action: create
- svcOperationId: 75
operation: delete
kind: instance
action: delete
- svcOperationId: 76
operation: modify
kind: instance
action: modify
- svcOperationId: 298
operation: reconcile
kind: action
action: reconcile
- svcOperationId: 98
operation: resume
kind: instance
action: resume
- svcOperationId: 97
operation: suspend
kind: instance
action: suspend
stateOut: {}
cfsParams:
- svcOperationCfsParamId: 813
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
memory:
dataType: integer > 0
defaultValue: '128'
isRequired: true
isModifiable: false
replicas:
dataType: integer > 0
defaultValue: '1'
isRequired: true
isModifiable: false
cpu:
dataType: integer > 0
defaultValue: '100'
isRequired: true
isModifiable: false
disk:
dataType: integer > 0
defaultValue: '5'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 814
svcOperationCfsParam: startupConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: false
dataDescriptor:
resourceRealm:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- k8s-3-sandbox-nubes-ru
- k8s-4-sandbox-nubes-ru
- svcOperationCfsParamId: 815
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
type:
dataType: string
defaultValue: ingress
isRequired: true
isModifiable: false
valueList:
- ingress
- service
domain:
dataType: string
defaultValue: abracadabra-l9gtqv1m
isRequired: true
isModifiable: false
masterIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
masterAccessList:
dataType: json
defaultValue: '[]'
isRequired: true
isModifiable: false
slaveIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
slaveAccessList:
dataType: json
defaultValue: '[]'
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 816
svcOperationCfsParam: clusterConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
memory:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
replicas:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
cpu:
dataType: integer > 0
defaultValue: ''
isRequired: true
isModifiable: false
disk:
dataType: integer >= 0
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 817
svcOperationCfsParam: accessConfiguration
dataType: map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
slaveIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
slaveAccessList:
dataType: json
defaultValue: ''
isRequired: true
isModifiable: false
type:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
valueList:
- ingress
- service
domain:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
masterIpSpace:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
masterAccessList:
dataType: json
defaultValue: ''
isRequired: true
isModifiable: false
cfsParamsByOp:
74:
- 813
- 814
- 815
75: []
76:
- 816
- 817
298: []
98: []
97: []
stateParams:
clusterConfiguration: '{"memory": 128, "replicas": 1, "cpu": 100, "disk": 5}'
startupConfiguration: '{"resourceRealm": ""}'
accessConfiguration: '{"type": "ingress", "domain": "abracadabra-l9gtqv1m", "masterIpSpace": "", "masterAccessList": "[]", "slaveIpSpace": "", "slaveAccessList": "[]"}'