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
+258
View File
@@ -0,0 +1,258 @@
name: zones_v2
service_id: 109
service_display_name: Управление DNS
service_short_name: zonesV2
service_man: '# Управление DNS<br/><br/>## Что делает сервис<br/><br/>Управляет DNS-зоной вашего домена в инфраструктуре `ngcloud.ru`.<br/>Сервис помогает:<br/><br/>- создать DNS-зону;<br/>- поддерживать
записи в зоне (добавлять, удалять, массово менять);<br/>- удалять зону;<br/>- синхронизировать данные зоны с фактическим состоянием на DNS-серверах.<br/><br/>Сервис работает с авторитетными DNS-серверами
зоны:<br/><br/>- `ns3.ngcloud.ru`<br/> - `185.247.187.83`<br/> - `2a10:aa80:0:5::3`<br/>- `ns4.ngcloud.ru`<br/> - `81.22.46.43`<br/> - `2a10:aa80:0:6::3`<br/><br/>## Очень важно: что сделать у регистратора
домена<br/><br/>Чтобы зона действительно начала обслуживаться, **нужно делегировать домен** у регистратора на авторитетные DNS-серверы:<br/><br/>- `ns3.ngcloud.ru`<br/>- `ns4.ngcloud.ru`<br/><br/>В панели
регистратора нужно заменить NS-серверы домена на значения выше.<br/>Без этого записи в зоне могут быть созданы, но интернет не будет использовать их для вашего домена.<br/><br/>## Проверка после настройки<br/><br/>Проверить
ответы от серверов зоны:<br/><br/>```bash<br/>dig <ваш_домен> @ns3.ngcloud.ru<br/>dig <ваш_домен> @ns4.ngcloud.ru<br/>```<br/><br/>Проверить, что делегирование у регистратора применилось:<br/><br/>```bash<br/>dig
<ваш_домен> NS<br/>```<br/><br/>В ответе должны быть `ns3.ngcloud.ru` и `ns4.ngcloud.ru`.<br/>'
lifecycle:
suspendOnDestroyDefault: false
adoptExistingOnCreateDefault: false
operations:
- svcOperationId: 254
operation: create
kind: instance
action: create
- svcOperationId: 260
operation: create_record
kind: subresource
action: create
- svcOperationId: 255
operation: delete
kind: instance
action: delete
- svcOperationId: 261
operation: delete_record
kind: subresource
action: delete
- svcOperationId: 256
operation: modify
kind: instance
action: modify
- svcOperationId: 262
operation: modify_record
kind: subresource
action: modify
- svcOperationId: 259
operation: reconcile
kind: action
action: reconcile
stateOut:
records: {}
cfsParams:
- svcOperationCfsParamId: 761
svcOperationCfsParam: zoneName
dataType: string
isRequired: true
defaultValue: ''
isModifiable: false
- svcOperationCfsParamId: 762
svcOperationCfsParam: zoneKind
dataType: string
isRequired: true
defaultValue: NATIVE
isModifiable: false
valueList:
- NATIVE
- SLAVE
- svcOperationCfsParamId: 763
svcOperationCfsParam: zoneMastersForSlave
dataType: string
isRequired: false
defaultValue: ''
isModifiable: false
- svcOperationCfsParamId: 764
svcOperationCfsParam: zoneRefresh
dataType: integer > 0
isRequired: true
defaultValue: '86400'
isModifiable: false
- svcOperationCfsParamId: 765
svcOperationCfsParam: zoneRetry
dataType: integer > 0
isRequired: true
defaultValue: '7200'
isModifiable: false
- svcOperationCfsParamId: 766
svcOperationCfsParam: zoneExpire
dataType: integer > 0
isRequired: true
defaultValue: '3600000'
isModifiable: false
- svcOperationCfsParamId: 767
svcOperationCfsParam: zoneTTL
dataType: integer > 0
isRequired: true
defaultValue: '86400'
isModifiable: false
- svcOperationCfsParamId: 768
svcOperationCfsParam: resourceRealm
dataType: string
isRequired: true
defaultValue: powerdns
isModifiable: false
valueList:
- powerdns
- svcOperationCfsParamId: 777
svcOperationCfsParam: recordName
dataType: string
isRequired: true
defaultValue: ''
isModifiable: false
- svcOperationCfsParamId: 778
svcOperationCfsParam: recordTTL
dataType: integer > 0
isRequired: true
defaultValue: '3600'
isModifiable: false
- svcOperationCfsParamId: 779
svcOperationCfsParam: recordType
dataType: string
isRequired: true
defaultValue: A
isModifiable: false
valueList:
- A
- AAAA
- CNAME
- MX
- SRV
- TXT
- LUA
- NS
- SSHFP
- svcOperationCfsParamId: 780
svcOperationCfsParam: recordInput
dataType: array-map-fixed
isRequired: true
defaultValue: '[{}]'
isModifiable: false
dataDescriptor:
record:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 781
svcOperationCfsParam: recordName
dataType: string
isRequired: true
defaultValue: ''
isModifiable: true
- svcOperationCfsParamId: 769
svcOperationCfsParam: records
dataType: array-map-fixed
isRequired: true
defaultValue: ''
isModifiable: true
dataDescriptor:
recordName:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
recordTTL:
dataType: integer > 0
defaultValue: '3600'
isRequired: true
isModifiable: false
recordType:
dataType: string
defaultValue: A
isRequired: true
isModifiable: false
valueList:
- A
- AAAA
- CNAME
- MX
- SRV
- TXT
- LUA
- NS
- SSHFP
- CAA
recordInput:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
- svcOperationCfsParamId: 783
svcOperationCfsParam: recordName
dataType: string
isRequired: true
defaultValue: ''
isModifiable: true
- svcOperationCfsParamId: 784
svcOperationCfsParam: recordTTL
dataType: integer > 0
isRequired: true
defaultValue: ''
isModifiable: true
- svcOperationCfsParamId: 785
svcOperationCfsParam: recordType
dataType: string
isRequired: true
defaultValue: ''
isModifiable: true
valueList:
- A
- AAAA
- CNAME
- MX
- SRV
- TXT
- LUA
- NS
- SSHFP
- svcOperationCfsParamId: 786
svcOperationCfsParam: recordInput
dataType: array-map-fixed
isRequired: true
defaultValue: '[{}]'
isModifiable: true
dataDescriptor:
record:
dataType: string
defaultValue: ''
isRequired: true
isModifiable: false
cfsParamsByOp:
254:
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
260:
- 777
- 778
- 779
- 780
255: []
261:
- 781
256:
- 769
262:
- 783
- 784
- 785
- 786
259: []
stateParams:
zoneName: ''
zoneKind: NATIVE
zoneMastersForSlave: ''
zoneRefresh: '86400'
zoneRetry: '7200'
zoneExpire: '3600000'
zoneTTL: '86400'
resourceRealm: powerdns