exordos-core 0.0.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. exordos_core-0.0.7/.github/dependabot.yml +12 -0
  2. exordos_core-0.0.7/.github/workflows/build.yml +48 -0
  3. exordos_core-0.0.7/.github/workflows/docs.yml +55 -0
  4. exordos_core-0.0.7/.github/workflows/inventory.yml +21 -0
  5. exordos_core-0.0.7/.github/workflows/markdownlint.yml +26 -0
  6. exordos_core-0.0.7/.github/workflows/publish-to-pypi.yml +97 -0
  7. exordos_core-0.0.7/.github/workflows/tests.yml +102 -0
  8. exordos_core-0.0.7/.gitignore +138 -0
  9. exordos_core-0.0.7/.markdownlint.yaml +150 -0
  10. exordos_core-0.0.7/.vscode/launch.json +82 -0
  11. exordos_core-0.0.7/.vscode/settings.json +7 -0
  12. exordos_core-0.0.7/.vscode/tests.env +5 -0
  13. exordos_core-0.0.7/CODEOWNERS +5 -0
  14. exordos_core-0.0.7/Makefile +17 -0
  15. exordos_core-0.0.7/PKG-INFO +113 -0
  16. exordos_core-0.0.7/README.md +51 -0
  17. exordos_core-0.0.7/docker-compose-test.yml +13 -0
  18. exordos_core-0.0.7/docs/app-developer-guide/build.md +270 -0
  19. exordos_core-0.0.7/docs/app-developer-guide/build.ru.md +270 -0
  20. exordos_core-0.0.7/docs/app-developer-guide/deploy.md +82 -0
  21. exordos_core-0.0.7/docs/app-developer-guide/deploy.ru.md +82 -0
  22. exordos_core-0.0.7/docs/app-developer-guide/index.md +164 -0
  23. exordos_core-0.0.7/docs/app-developer-guide/index.ru.md +164 -0
  24. exordos_core-0.0.7/docs/app-developer-guide/init.md +88 -0
  25. exordos_core-0.0.7/docs/app-developer-guide/init.ru.md +88 -0
  26. exordos_core-0.0.7/docs/app-developer-guide/push.md +128 -0
  27. exordos_core-0.0.7/docs/app-developer-guide/push.ru.md +128 -0
  28. exordos_core-0.0.7/docs/em/cli.md +23 -0
  29. exordos_core-0.0.7/docs/em/cli.ru.md +22 -0
  30. exordos_core-0.0.7/docs/em/manifest.md +114 -0
  31. exordos_core-0.0.7/docs/em/manifest.ru.md +114 -0
  32. exordos_core-0.0.7/docs/em/service.md +400 -0
  33. exordos_core-0.0.7/docs/em/service.ru.md +400 -0
  34. exordos_core-0.0.7/docs/iam/permissions_overview.md +377 -0
  35. exordos_core-0.0.7/docs/iam/permissions_overview.ru.md +377 -0
  36. exordos_core-0.0.7/docs/index.md +55 -0
  37. exordos_core-0.0.7/docs/index.ru.md +55 -0
  38. exordos_core-0.0.7/docs/network/load_balancer.md +338 -0
  39. exordos_core-0.0.7/docs/network/load_balancer.ru.md +323 -0
  40. exordos_core-0.0.7/docs/openapi/openapi.ru.md +5 -0
  41. exordos_core-0.0.7/docs/openapi/openapi_boot.md +5 -0
  42. exordos_core-0.0.7/docs/openapi/openapi_boot.yaml +1363 -0
  43. exordos_core-0.0.7/docs/openapi/openapi_orch.md +5 -0
  44. exordos_core-0.0.7/docs/openapi/openapi_orch.yaml +357 -0
  45. exordos_core-0.0.7/docs/openapi/openapi_status.md +5 -0
  46. exordos_core-0.0.7/docs/openapi/openapi_status.yaml +992 -0
  47. exordos_core-0.0.7/docs/openapi/openapi_user.md +5 -0
  48. exordos_core-0.0.7/docs/openapi/openapi_user.yaml +26294 -0
  49. exordos_core-0.0.7/docs/secret/certificates.md +69 -0
  50. exordos_core-0.0.7/docs/secret/certificates.ru.md +68 -0
  51. exordos_core-0.0.7/docs/usage/local_deployment.md +132 -0
  52. exordos_core-0.0.7/docs/usage/local_deployment.ru.md +132 -0
  53. exordos_core-0.0.7/etc/90-exordos-dummy-config.yaml +6 -0
  54. exordos_core-0.0.7/etc/90-exordos-net-config.yaml.j2 +21 -0
  55. exordos_core-0.0.7/etc/dnsdist/dnsdist-private.conf.j2 +14 -0
  56. exordos_core-0.0.7/etc/dnsdist/dnsdist-public.conf +15 -0
  57. exordos_core-0.0.7/etc/exordos_core/core_agent.conf +64 -0
  58. exordos_core-0.0.7/etc/exordos_core/event_type_mapping.yaml +3 -0
  59. exordos_core-0.0.7/etc/exordos_core/exordos_core.conf.j2 +46 -0
  60. exordos_core-0.0.7/etc/exordos_core/exordos_core.conf.local.example +22 -0
  61. exordos_core-0.0.7/etc/exordos_core/exordos_core.d/.empty +0 -0
  62. exordos_core-0.0.7/etc/exordos_core/logging.yaml +33 -0
  63. exordos_core-0.0.7/etc/genesis_universal_agent/genesis_universal_agent.conf.j2 +41 -0
  64. exordos_core-0.0.7/etc/genesis_universal_agent/logging.yaml +38 -0
  65. exordos_core-0.0.7/etc/nginx/sites-available/default +11 -0
  66. exordos_core-0.0.7/etc/nginx/sites-available/exordos.conf +25 -0
  67. exordos_core-0.0.7/etc/powerdns/exordos.conf +9 -0
  68. exordos_core-0.0.7/etc/systemd/ec-boot-api.service +14 -0
  69. exordos_core-0.0.7/etc/systemd/ec-core-agent.service +12 -0
  70. exordos_core-0.0.7/etc/systemd/ec-gservice.service +12 -0
  71. exordos_core-0.0.7/etc/systemd/ec-orch-api.service +14 -0
  72. exordos_core-0.0.7/etc/systemd/ec-status-api.service +14 -0
  73. exordos_core-0.0.7/etc/systemd/ec-user-api.service +14 -0
  74. exordos_core-0.0.7/etc/systemd/genesis-universal-agent.service +12 -0
  75. exordos_core-0.0.7/etc/systemd/genesis-universal-scheduler.service +12 -0
  76. exordos_core-0.0.7/etc/systemd/resolved.conf.j2 +37 -0
  77. exordos_core-0.0.7/exordos_core/__init__.py +0 -0
  78. exordos_core-0.0.7/exordos_core/agent/__init__.py +0 -0
  79. exordos_core-0.0.7/exordos_core/agent/universal/__init__.py +0 -0
  80. exordos_core-0.0.7/exordos_core/agent/universal/clients/__init__.py +0 -0
  81. exordos_core-0.0.7/exordos_core/agent/universal/clients/exceptions.py +23 -0
  82. exordos_core-0.0.7/exordos_core/agent/universal/clients/rest.py +66 -0
  83. exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/__init__.py +0 -0
  84. exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/backend/__init__.py +0 -0
  85. exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/backend/cert.py +159 -0
  86. exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/backend/db.py +132 -0
  87. exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/cert.py +51 -0
  88. exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/dm/__init__.py +0 -0
  89. exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/dm/models.py +121 -0
  90. exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/password.py +43 -0
  91. exordos_core-0.0.7/exordos_core/boot_api/__init__.py +0 -0
  92. exordos_core-0.0.7/exordos_core/boot_api/api/__init__.py +0 -0
  93. exordos_core-0.0.7/exordos_core/boot_api/api/app.py +81 -0
  94. exordos_core-0.0.7/exordos_core/boot_api/api/controllers.py +71 -0
  95. exordos_core-0.0.7/exordos_core/boot_api/api/packers.py +52 -0
  96. exordos_core-0.0.7/exordos_core/boot_api/api/routes.py +51 -0
  97. exordos_core-0.0.7/exordos_core/boot_api/api/versions.py +17 -0
  98. exordos_core-0.0.7/exordos_core/boot_api/dm/__init__.py +0 -0
  99. exordos_core-0.0.7/exordos_core/boot_api/dm/models.py +77 -0
  100. exordos_core-0.0.7/exordos_core/bootstrap/__init__.py +0 -0
  101. exordos_core-0.0.7/exordos_core/bootstrap/defaults.py +596 -0
  102. exordos_core-0.0.7/exordos_core/cmd/__init__.py +0 -0
  103. exordos_core-0.0.7/exordos_core/cmd/boot_api.py +109 -0
  104. exordos_core-0.0.7/exordos_core/cmd/bootstrap.py +376 -0
  105. exordos_core-0.0.7/exordos_core/cmd/bootstrap_templates.py +224 -0
  106. exordos_core-0.0.7/exordos_core/cmd/elements_inventory.py +89 -0
  107. exordos_core-0.0.7/exordos_core/cmd/gservice.py +65 -0
  108. exordos_core-0.0.7/exordos_core/cmd/orch_api.py +89 -0
  109. exordos_core-0.0.7/exordos_core/cmd/status_api.py +97 -0
  110. exordos_core-0.0.7/exordos_core/cmd/user_api.py +130 -0
  111. exordos_core-0.0.7/exordos_core/common/__init__.py +0 -0
  112. exordos_core-0.0.7/exordos_core/common/api/__init__.py +0 -0
  113. exordos_core-0.0.7/exordos_core/common/api/middlewares/__init__.py +0 -0
  114. exordos_core-0.0.7/exordos_core/common/api/middlewares/errors.py +44 -0
  115. exordos_core-0.0.7/exordos_core/common/config.py +49 -0
  116. exordos_core-0.0.7/exordos_core/common/constants.py +86 -0
  117. exordos_core-0.0.7/exordos_core/common/contexts.py +66 -0
  118. exordos_core-0.0.7/exordos_core/common/dm/__init__.py +0 -0
  119. exordos_core-0.0.7/exordos_core/common/dm/models.py +52 -0
  120. exordos_core-0.0.7/exordos_core/common/dm/targets.py +102 -0
  121. exordos_core-0.0.7/exordos_core/common/exceptions.py +48 -0
  122. exordos_core-0.0.7/exordos_core/common/log.py +84 -0
  123. exordos_core-0.0.7/exordos_core/common/system.py +90 -0
  124. exordos_core-0.0.7/exordos_core/common/utils.py +109 -0
  125. exordos_core-0.0.7/exordos_core/compute/__init__.py +0 -0
  126. exordos_core-0.0.7/exordos_core/compute/agents/__init__.py +0 -0
  127. exordos_core-0.0.7/exordos_core/compute/agents/universal/__init__.py +0 -0
  128. exordos_core-0.0.7/exordos_core/compute/agents/universal/drivers/pool.py +788 -0
  129. exordos_core-0.0.7/exordos_core/compute/builders/__init__.py +0 -0
  130. exordos_core-0.0.7/exordos_core/compute/builders/node.py +231 -0
  131. exordos_core-0.0.7/exordos_core/compute/builders/node_set.py +169 -0
  132. exordos_core-0.0.7/exordos_core/compute/builders/pool.py +712 -0
  133. exordos_core-0.0.7/exordos_core/compute/builders/volume.py +159 -0
  134. exordos_core-0.0.7/exordos_core/compute/constants.py +127 -0
  135. exordos_core-0.0.7/exordos_core/compute/dm/__init__.py +0 -0
  136. exordos_core-0.0.7/exordos_core/compute/dm/models.py +889 -0
  137. exordos_core-0.0.7/exordos_core/compute/node_set/__init__.py +0 -0
  138. exordos_core-0.0.7/exordos_core/compute/node_set/dm/__init__.py +0 -0
  139. exordos_core-0.0.7/exordos_core/compute/node_set/dm/models.py +87 -0
  140. exordos_core-0.0.7/exordos_core/compute/pool/__init__.py +0 -0
  141. exordos_core-0.0.7/exordos_core/compute/pool/dm/__init__.py +0 -0
  142. exordos_core-0.0.7/exordos_core/compute/pool/dm/models.py +295 -0
  143. exordos_core-0.0.7/exordos_core/compute/pool/drivers/__init__.py +0 -0
  144. exordos_core-0.0.7/exordos_core/compute/pool/drivers/base.py +259 -0
  145. exordos_core-0.0.7/exordos_core/compute/pool/drivers/exceptions.py +63 -0
  146. exordos_core-0.0.7/exordos_core/compute/pool/drivers/libvirt.py +1400 -0
  147. exordos_core-0.0.7/exordos_core/compute/scheduler/__init__.py +0 -0
  148. exordos_core-0.0.7/exordos_core/compute/scheduler/driver/__init__.py +0 -0
  149. exordos_core-0.0.7/exordos_core/compute/scheduler/driver/base.py +83 -0
  150. exordos_core-0.0.7/exordos_core/compute/scheduler/driver/filters/__init__.py +0 -0
  151. exordos_core-0.0.7/exordos_core/compute/scheduler/driver/filters/affinity.py +69 -0
  152. exordos_core-0.0.7/exordos_core/compute/scheduler/driver/filters/available.py +52 -0
  153. exordos_core-0.0.7/exordos_core/compute/scheduler/driver/weighter/__init__.py +0 -0
  154. exordos_core-0.0.7/exordos_core/compute/scheduler/driver/weighter/relative.py +92 -0
  155. exordos_core-0.0.7/exordos_core/compute/scheduler/service.py +605 -0
  156. exordos_core-0.0.7/exordos_core/config/__init__.py +0 -0
  157. exordos_core-0.0.7/exordos_core/config/constants.py +34 -0
  158. exordos_core-0.0.7/exordos_core/config/dm/__init__.py +0 -0
  159. exordos_core-0.0.7/exordos_core/config/dm/models.py +201 -0
  160. exordos_core-0.0.7/exordos_core/config/service.py +354 -0
  161. exordos_core-0.0.7/exordos_core/dns_sync/__init__.py +1 -0
  162. exordos_core-0.0.7/exordos_core/dns_sync/service.py +489 -0
  163. exordos_core-0.0.7/exordos_core/elements/__init__.py +0 -0
  164. exordos_core-0.0.7/exordos_core/elements/builders/__init__.py +0 -0
  165. exordos_core-0.0.7/exordos_core/elements/builders/service.py +99 -0
  166. exordos_core-0.0.7/exordos_core/elements/constants.py +24 -0
  167. exordos_core-0.0.7/exordos_core/elements/dm/__init__.py +0 -0
  168. exordos_core-0.0.7/exordos_core/elements/dm/models.py +1277 -0
  169. exordos_core-0.0.7/exordos_core/elements/dm/res_models.py +82 -0
  170. exordos_core-0.0.7/exordos_core/elements/dm/utils.py +371 -0
  171. exordos_core-0.0.7/exordos_core/elements/services/__init__.py +0 -0
  172. exordos_core-0.0.7/exordos_core/elements/services/builders.py +79 -0
  173. exordos_core-0.0.7/exordos_core/events/__init__.py +0 -0
  174. exordos_core-0.0.7/exordos_core/events/constants.py +18 -0
  175. exordos_core-0.0.7/exordos_core/events/payloads.py +59 -0
  176. exordos_core-0.0.7/exordos_core/gservice/__init__.py +0 -0
  177. exordos_core-0.0.7/exordos_core/gservice/service.py +238 -0
  178. exordos_core-0.0.7/exordos_core/janitor/__init__.py +0 -0
  179. exordos_core-0.0.7/exordos_core/janitor/service.py +56 -0
  180. exordos_core-0.0.7/exordos_core/network/__init__.py +0 -0
  181. exordos_core-0.0.7/exordos_core/network/dhcp/__init__.py +0 -0
  182. exordos_core-0.0.7/exordos_core/network/dhcp/isc.py +172 -0
  183. exordos_core-0.0.7/exordos_core/network/dm/__init__.py +0 -0
  184. exordos_core-0.0.7/exordos_core/network/dm/models.py +40 -0
  185. exordos_core-0.0.7/exordos_core/network/driver/__init__.py +0 -0
  186. exordos_core-0.0.7/exordos_core/network/driver/base.py +108 -0
  187. exordos_core-0.0.7/exordos_core/network/driver/flat.py +397 -0
  188. exordos_core-0.0.7/exordos_core/network/exceptions.py +25 -0
  189. exordos_core-0.0.7/exordos_core/network/ipam.py +200 -0
  190. exordos_core-0.0.7/exordos_core/network/lb/__init__.py +0 -0
  191. exordos_core-0.0.7/exordos_core/network/lb/builders/__init__.py +0 -0
  192. exordos_core-0.0.7/exordos_core/network/lb/builders/iaas.py +103 -0
  193. exordos_core-0.0.7/exordos_core/network/lb/builders/paas.py +107 -0
  194. exordos_core-0.0.7/exordos_core/network/lb/dm/__init__.py +0 -0
  195. exordos_core-0.0.7/exordos_core/network/lb/dm/models.py +177 -0
  196. exordos_core-0.0.7/exordos_core/network/service.py +336 -0
  197. exordos_core-0.0.7/exordos_core/orch_api/__init__.py +0 -0
  198. exordos_core-0.0.7/exordos_core/orch_api/api/__init__.py +0 -0
  199. exordos_core-0.0.7/exordos_core/orch_api/api/app.py +71 -0
  200. exordos_core-0.0.7/exordos_core/orch_api/api/controllers.py +22 -0
  201. exordos_core-0.0.7/exordos_core/orch_api/api/routes.py +29 -0
  202. exordos_core-0.0.7/exordos_core/orch_api/api/versions.py +17 -0
  203. exordos_core-0.0.7/exordos_core/secret/__init__.py +0 -0
  204. exordos_core-0.0.7/exordos_core/secret/constants.py +42 -0
  205. exordos_core-0.0.7/exordos_core/secret/dm/__init__.py +0 -0
  206. exordos_core-0.0.7/exordos_core/secret/dm/models.py +408 -0
  207. exordos_core-0.0.7/exordos_core/secret/service.py +659 -0
  208. exordos_core-0.0.7/exordos_core/secret/utils.py +94 -0
  209. exordos_core-0.0.7/exordos_core/status_api/__init__.py +0 -0
  210. exordos_core-0.0.7/exordos_core/status_api/api/__init__.py +0 -0
  211. exordos_core-0.0.7/exordos_core/status_api/api/app.py +71 -0
  212. exordos_core-0.0.7/exordos_core/status_api/api/controllers.py +22 -0
  213. exordos_core-0.0.7/exordos_core/status_api/api/routes.py +30 -0
  214. exordos_core-0.0.7/exordos_core/status_api/api/versions.py +17 -0
  215. exordos_core-0.0.7/exordos_core/telemetry/__init__.py +0 -0
  216. exordos_core-0.0.7/exordos_core/telemetry/service.py +296 -0
  217. exordos_core-0.0.7/exordos_core/tests/__init__.py +0 -0
  218. exordos_core-0.0.7/exordos_core/tests/functional/__init__.py +0 -0
  219. exordos_core-0.0.7/exordos_core/tests/functional/conftest.py +933 -0
  220. exordos_core-0.0.7/exordos_core/tests/functional/consts.py +29 -0
  221. exordos_core-0.0.7/exordos_core/tests/functional/manifests/__init__.py +0 -0
  222. exordos_core-0.0.7/exordos_core/tests/functional/manifests/examples/invalid_exports.yaml +27 -0
  223. exordos_core-0.0.7/exordos_core/tests/functional/manifests/examples/invalid_imports.yaml +32 -0
  224. exordos_core-0.0.7/exordos_core/tests/functional/manifests/examples/invalid_resource.yaml +22 -0
  225. exordos_core-0.0.7/exordos_core/tests/functional/manifests/test_validate.py +111 -0
  226. exordos_core-0.0.7/exordos_core/tests/functional/restapi/__init__.py +0 -0
  227. exordos_core-0.0.7/exordos_core/tests/functional/restapi/compute/__init__.py +0 -0
  228. exordos_core-0.0.7/exordos_core/tests/functional/restapi/compute/test_compute_boot_api.py +125 -0
  229. exordos_core-0.0.7/exordos_core/tests/functional/restapi/compute/test_node_set_api.py +263 -0
  230. exordos_core-0.0.7/exordos_core/tests/functional/restapi/compute/test_node_user_api.py +357 -0
  231. exordos_core-0.0.7/exordos_core/tests/functional/restapi/config/__init__.py +0 -0
  232. exordos_core-0.0.7/exordos_core/tests/functional/restapi/config/test_configs.py +241 -0
  233. exordos_core-0.0.7/exordos_core/tests/functional/restapi/em/__init__.py +0 -0
  234. exordos_core-0.0.7/exordos_core/tests/functional/restapi/em/test_em.py +150 -0
  235. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/__init__.py +0 -0
  236. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/base.py +23 -0
  237. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_clients.py +821 -0
  238. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_idp.py +259 -0
  239. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_organizations.py +332 -0
  240. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_permission_bindings.py +143 -0
  241. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_permissions.py +99 -0
  242. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_projects.py +288 -0
  243. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_reset_password.py +351 -0
  244. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_role_bindings.py +178 -0
  245. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_roles.py +100 -0
  246. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_security_rules.py +364 -0
  247. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_user_creation_security.py +195 -0
  248. exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_users.py +1109 -0
  249. exordos_core-0.0.7/exordos_core/tests/functional/restapi/secret/__init__.py +0 -0
  250. exordos_core-0.0.7/exordos_core/tests/functional/restapi/secret/test_certificates.py +208 -0
  251. exordos_core-0.0.7/exordos_core/tests/functional/restapi/secret/test_passwords.py +206 -0
  252. exordos_core-0.0.7/exordos_core/tests/functional/restapi/secret/test_ssh_keys.py +261 -0
  253. exordos_core-0.0.7/exordos_core/tests/functional/restapi/vs/__init__.py +0 -0
  254. exordos_core-0.0.7/exordos_core/tests/functional/restapi/vs/test_user_api.py +470 -0
  255. exordos_core-0.0.7/exordos_core/tests/functional/service/__init__.py +0 -0
  256. exordos_core-0.0.7/exordos_core/tests/functional/service/dns/__init__.py +0 -0
  257. exordos_core-0.0.7/exordos_core/tests/functional/service/dns/conftest.py +91 -0
  258. exordos_core-0.0.7/exordos_core/tests/functional/service/dns/test_pdns.py +223 -0
  259. exordos_core-0.0.7/exordos_core/tests/functional/service/test_config.py +323 -0
  260. exordos_core-0.0.7/exordos_core/tests/functional/service/test_elements.py +32 -0
  261. exordos_core-0.0.7/exordos_core/tests/functional/service/test_janitor.py +70 -0
  262. exordos_core-0.0.7/exordos_core/tests/functional/service/test_network.py +515 -0
  263. exordos_core-0.0.7/exordos_core/tests/functional/service/test_scheduler.py +406 -0
  264. exordos_core-0.0.7/exordos_core/tests/functional/service/test_secrets.py +742 -0
  265. exordos_core-0.0.7/exordos_core/tests/functional/service/test_vs_builder.py +235 -0
  266. exordos_core-0.0.7/exordos_core/tests/functional/stubs.py +60 -0
  267. exordos_core-0.0.7/exordos_core/tests/functional/utils.py +174 -0
  268. exordos_core-0.0.7/exordos_core/tests/manual/__init__.py +0 -0
  269. exordos_core-0.0.7/exordos_core/tests/manual/conftest.py +1019 -0
  270. exordos_core-0.0.7/exordos_core/tests/manual/consts.py +29 -0
  271. exordos_core-0.0.7/exordos_core/tests/manual/openapi/__init__.py +0 -0
  272. exordos_core-0.0.7/exordos_core/tests/manual/openapi/test_openapi.py +104 -0
  273. exordos_core-0.0.7/exordos_core/tests/manual/utils.py +174 -0
  274. exordos_core-0.0.7/exordos_core/tests/unit/__init__.py +0 -0
  275. exordos_core-0.0.7/exordos_core/tests/unit/compute/__init__.py +0 -0
  276. exordos_core-0.0.7/exordos_core/tests/unit/compute/test_ipam.py +112 -0
  277. exordos_core-0.0.7/exordos_core/tests/unit/compute/test_weighter.py +102 -0
  278. exordos_core-0.0.7/exordos_core/tests/unit/conftest.py +34 -0
  279. exordos_core-0.0.7/exordos_core/tests/unit/em/__init__.py +0 -0
  280. exordos_core-0.0.7/exordos_core/tests/unit/em/test_utils.py +205 -0
  281. exordos_core-0.0.7/exordos_core/tests/unit/user_api/__init__.py +0 -0
  282. exordos_core-0.0.7/exordos_core/tests/unit/user_api/iam/__init__.py +0 -0
  283. exordos_core-0.0.7/exordos_core/tests/unit/user_api/iam/dm/__init__.py +0 -0
  284. exordos_core-0.0.7/exordos_core/tests/unit/user_api/iam/dm/test_types.py +126 -0
  285. exordos_core-0.0.7/exordos_core/user_api/__init__.py +0 -0
  286. exordos_core-0.0.7/exordos_core/user_api/api/__init__.py +0 -0
  287. exordos_core-0.0.7/exordos_core/user_api/api/app.py +85 -0
  288. exordos_core-0.0.7/exordos_core/user_api/api/controllers.py +30 -0
  289. exordos_core-0.0.7/exordos_core/user_api/api/middlewares.py +88 -0
  290. exordos_core-0.0.7/exordos_core/user_api/api/routes.py +54 -0
  291. exordos_core-0.0.7/exordos_core/user_api/api/versions.py +17 -0
  292. exordos_core-0.0.7/exordos_core/user_api/compute/__init__.py +0 -0
  293. exordos_core-0.0.7/exordos_core/user_api/compute/api/__init__.py +0 -0
  294. exordos_core-0.0.7/exordos_core/user_api/compute/api/controllers.py +203 -0
  295. exordos_core-0.0.7/exordos_core/user_api/compute/api/routes.py +86 -0
  296. exordos_core-0.0.7/exordos_core/user_api/compute/dm/__init__.py +0 -0
  297. exordos_core-0.0.7/exordos_core/user_api/compute/dm/models.py +30 -0
  298. exordos_core-0.0.7/exordos_core/user_api/config/__init__.py +0 -0
  299. exordos_core-0.0.7/exordos_core/user_api/config/api/__init__.py +0 -0
  300. exordos_core-0.0.7/exordos_core/user_api/config/api/controllers.py +46 -0
  301. exordos_core-0.0.7/exordos_core/user_api/config/api/routes.py +34 -0
  302. exordos_core-0.0.7/exordos_core/user_api/dns/__init__.py +0 -0
  303. exordos_core-0.0.7/exordos_core/user_api/dns/api/__init__.py +0 -0
  304. exordos_core-0.0.7/exordos_core/user_api/dns/api/controllers.py +71 -0
  305. exordos_core-0.0.7/exordos_core/user_api/dns/api/routes.py +42 -0
  306. exordos_core-0.0.7/exordos_core/user_api/dns/dm/__init__.py +0 -0
  307. exordos_core-0.0.7/exordos_core/user_api/dns/dm/models.py +240 -0
  308. exordos_core-0.0.7/exordos_core/user_api/em/__init__.py +0 -0
  309. exordos_core-0.0.7/exordos_core/user_api/em/api/__init__.py +0 -0
  310. exordos_core-0.0.7/exordos_core/user_api/em/api/controllers.py +228 -0
  311. exordos_core-0.0.7/exordos_core/user_api/em/api/routes.py +146 -0
  312. exordos_core-0.0.7/exordos_core/user_api/iam/api/__init__.py +0 -0
  313. exordos_core-0.0.7/exordos_core/user_api/iam/api/controllers.py +1027 -0
  314. exordos_core-0.0.7/exordos_core/user_api/iam/api/openapi_specs.py +326 -0
  315. exordos_core-0.0.7/exordos_core/user_api/iam/api/routes.py +293 -0
  316. exordos_core-0.0.7/exordos_core/user_api/iam/clients/__init__.py +0 -0
  317. exordos_core-0.0.7/exordos_core/user_api/iam/clients/idp.py +35 -0
  318. exordos_core-0.0.7/exordos_core/user_api/iam/clients/keycloak.py +49 -0
  319. exordos_core-0.0.7/exordos_core/user_api/iam/constants.py +268 -0
  320. exordos_core-0.0.7/exordos_core/user_api/iam/dm/models.py +1959 -0
  321. exordos_core-0.0.7/exordos_core/user_api/iam/dm/types.py +77 -0
  322. exordos_core-0.0.7/exordos_core/user_api/iam/drivers.py +59 -0
  323. exordos_core-0.0.7/exordos_core/user_api/iam/exceptions.py +292 -0
  324. exordos_core-0.0.7/exordos_core/user_api/network/__init__.py +0 -0
  325. exordos_core-0.0.7/exordos_core/user_api/network/api/__init__.py +0 -0
  326. exordos_core-0.0.7/exordos_core/user_api/network/api/controllers.py +113 -0
  327. exordos_core-0.0.7/exordos_core/user_api/network/api/routes.py +57 -0
  328. exordos_core-0.0.7/exordos_core/user_api/network/dm/__init__.py +0 -0
  329. exordos_core-0.0.7/exordos_core/user_api/network/dm/models.py +592 -0
  330. exordos_core-0.0.7/exordos_core/user_api/secret/__init__.py +0 -0
  331. exordos_core-0.0.7/exordos_core/user_api/secret/api/__init__.py +0 -0
  332. exordos_core-0.0.7/exordos_core/user_api/secret/api/controllers.py +151 -0
  333. exordos_core-0.0.7/exordos_core/user_api/secret/api/routes.py +55 -0
  334. exordos_core-0.0.7/exordos_core/user_api/security/__init__.py +0 -0
  335. exordos_core-0.0.7/exordos_core/user_api/security/api/__init__.py +0 -0
  336. exordos_core-0.0.7/exordos_core/user_api/security/api/controllers.py +38 -0
  337. exordos_core-0.0.7/exordos_core/user_api/security/api/routes.py +34 -0
  338. exordos_core-0.0.7/exordos_core/user_api/security/dm/__init__.py +0 -0
  339. exordos_core-0.0.7/exordos_core/user_api/security/dm/models.py +314 -0
  340. exordos_core-0.0.7/exordos_core/user_api/security/exceptions.py +21 -0
  341. exordos_core-0.0.7/exordos_core/user_api/vs/__init__.py +0 -0
  342. exordos_core-0.0.7/exordos_core/user_api/vs/api/__init__.py +0 -0
  343. exordos_core-0.0.7/exordos_core/user_api/vs/api/controllers.py +141 -0
  344. exordos_core-0.0.7/exordos_core/user_api/vs/api/routes.py +71 -0
  345. exordos_core-0.0.7/exordos_core/version.py +23 -0
  346. exordos_core-0.0.7/exordos_core/vs/builders/__init__.py +0 -0
  347. exordos_core-0.0.7/exordos_core/vs/builders/service.py +150 -0
  348. exordos_core-0.0.7/exordos_core/vs/dm/__init__.py +0 -0
  349. exordos_core-0.0.7/exordos_core/vs/dm/models.py +345 -0
  350. exordos_core-0.0.7/exordos_core.egg-info/PKG-INFO +113 -0
  351. exordos_core-0.0.7/exordos_core.egg-info/SOURCES.txt +445 -0
  352. exordos_core-0.0.7/exordos_core.egg-info/dependency_links.txt +1 -0
  353. exordos_core-0.0.7/exordos_core.egg-info/entry_points.txt +25 -0
  354. exordos_core-0.0.7/exordos_core.egg-info/requires.txt +48 -0
  355. exordos_core-0.0.7/exordos_core.egg-info/top_level.txt +7 -0
  356. exordos_core-0.0.7/genesis/genesis.yaml +71 -0
  357. exordos_core-0.0.7/genesis/images/bootstrap.sh +362 -0
  358. exordos_core-0.0.7/genesis/images/install.sh +253 -0
  359. exordos_core-0.0.7/genesis/manifests/core-node-set-example.yaml.j2 +35 -0
  360. exordos_core-0.0.7/genesis/manifests/core-service-example.yaml.j2 +37 -0
  361. exordos_core-0.0.7/genesis/manifests/core.yaml.j2 +253 -0
  362. exordos_core-0.0.7/genesis/manifests/ecosystem_realm.yaml.j2 +65 -0
  363. exordos_core-0.0.7/genesis/manifests/examples/core.element.yaml +166 -0
  364. exordos_core-0.0.7/genesis/manifests/examples/load_balancer.yaml +193 -0
  365. exordos_core-0.0.7/genesis/manifests/examples/values-store-base.yaml +62 -0
  366. exordos_core-0.0.7/genesis/manifests/specification/base_spec.yaml +75 -0
  367. exordos_core-0.0.7/genesis/manifests/specification/full_spec.yaml +4232 -0
  368. exordos_core-0.0.7/logo_black.svg +5 -0
  369. exordos_core-0.0.7/logo_white.svg +5 -0
  370. exordos_core-0.0.7/migrations/0000-init-compute-tables-0234eb.py +139 -0
  371. exordos_core-0.0.7/migrations/0000-init-config-tables-9a7b58.py +42 -0
  372. exordos_core-0.0.7/migrations/0000-init-discovery-tables-907a68.py +42 -0
  373. exordos_core-0.0.7/migrations/0000-init-elements-tables-fe8bdb.py +42 -0
  374. exordos_core-0.0.7/migrations/0000-init-iam-tables-9c9153.py +443 -0
  375. exordos_core-0.0.7/migrations/0000-init-values-and-profiles-tables-0a61dc.py +42 -0
  376. exordos_core-0.0.7/migrations/0000-root-d34de1.py +39 -0
  377. exordos_core-0.0.7/migrations/0001-init-all-tables-f47bad.py +47 -0
  378. exordos_core-0.0.7/migrations/0002-add-volumes-tables-a6972c.py +114 -0
  379. exordos_core-0.0.7/migrations/0003-Organization-Roles-4b584d.py +114 -0
  380. exordos_core-0.0.7/migrations/0004-fix_typoes-31d9b2.py +64 -0
  381. exordos_core-0.0.7/migrations/0005-add-organization-info-4fac91.py +55 -0
  382. exordos_core-0.0.7/migrations/0006-add-gc-organization-678510.py +63 -0
  383. exordos_core-0.0.7/migrations/0007-add-default-roles-73f4c4.py +86 -0
  384. exordos_core-0.0.7/migrations/0008-add-iam-permissions-d81bba.py +169 -0
  385. exordos_core-0.0.7/migrations/0009-node-builder-entities-0d8f66.py +127 -0
  386. exordos_core-0.0.7/migrations/0010-image-for-machine-31471a.py +56 -0
  387. exordos_core-0.0.7/migrations/0011-add-surname-and-phone-ea974b.py +54 -0
  388. exordos_core-0.0.7/migrations/0012-compute-permissions-aac851.py +123 -0
  389. exordos_core-0.0.7/migrations/0013-add-ttl-to-token-2b8e3e.py +51 -0
  390. exordos_core-0.0.7/migrations/0014-network-ipam-067981.py +209 -0
  391. exordos_core-0.0.7/migrations/0015-add-email-confirmation-info-8b38d3.py +62 -0
  392. exordos_core-0.0.7/migrations/0016-add-permissions-to-all-iam-resources-3b82c6.py +199 -0
  393. exordos_core-0.0.7/migrations/0017-init-configs-c3bbc6.py +186 -0
  394. exordos_core-0.0.7/migrations/0018-add-elements-76bca4.py +248 -0
  395. exordos_core-0.0.7/migrations/0019-init-dns-40a307.py +135 -0
  396. exordos_core-0.0.7/migrations/0020-init-secret-a643b1.py +97 -0
  397. exordos_core-0.0.7/migrations/0021-dns-permissions-7adac7.py +127 -0
  398. exordos_core-0.0.7/migrations/0022-secret-certs-d340e8.py +90 -0
  399. exordos_core-0.0.7/migrations/0023-nullable_fio-c9cb3a.py +53 -0
  400. exordos_core-0.0.7/migrations/0024-user_confirmation_code_made_at-added-435e66.py +45 -0
  401. exordos_core-0.0.7/migrations/0025-secret-ssh-keys-ad3fad.py +73 -0
  402. exordos_core-0.0.7/migrations/0026-case-insensitive-users-name-index-41f4b9.py +49 -0
  403. exordos_core-0.0.7/migrations/0027-email-lowercase-unique-constraint-98a7bb.py +49 -0
  404. exordos_core-0.0.7/migrations/0028-add-api-version-to-manifest-8de907.py +63 -0
  405. exordos_core-0.0.7/migrations/0029-sdk-0-7-0-migration-c2c52a.py +79 -0
  406. exordos_core-0.0.7/migrations/0030-compute-node-sets-b1869c.py +130 -0
  407. exordos_core-0.0.7/migrations/0031-node-set-permissions-2de46e.py +102 -0
  408. exordos_core-0.0.7/migrations/0032-project-id-dns-records-1ca60d.py +70 -0
  409. exordos_core-0.0.7/migrations/0033-em-ua-status-check-5be89c.py +133 -0
  410. exordos_core-0.0.7/migrations/0034-add-export-adn-import-resources-a12854.py +108 -0
  411. exordos_core-0.0.7/migrations/0035-dummy-placement-e6d5dc.py +181 -0
  412. exordos_core-0.0.7/migrations/0036-init-services-741b72.py +114 -0
  413. exordos_core-0.0.7/migrations/0037-manifest-indexes-815825.py +94 -0
  414. exordos_core-0.0.7/migrations/0038-init-lb-e88603.py +126 -0
  415. exordos_core-0.0.7/migrations/0039-add-oidc-structures-e5d2a8.py +196 -0
  416. exordos_core-0.0.7/migrations/0040-secret-rsa-keys-2f3c1a.py +71 -0
  417. exordos_core-0.0.7/migrations/0041-remove-idp-clientid-secret-18d7c4.py +83 -0
  418. exordos_core-0.0.7/migrations/0042-compute-ua-integration-4bd866.py +456 -0
  419. exordos_core-0.0.7/migrations/0043-add-user-source-4f5e1f.py +58 -0
  420. exordos_core-0.0.7/migrations/0044-add-lb-ext-source-ca08ef.py +57 -0
  421. exordos_core-0.0.7/migrations/0045-add-security-rules-7c2f6d.py +74 -0
  422. exordos_core-0.0.7/migrations/0046-init-vs-f5aaa2.py +149 -0
  423. exordos_core-0.0.7/migrations/0047-sdk-1-3-0-migration-33fdc9.py +55 -0
  424. exordos_core-0.0.7/migrations/0048-iam-nonce-optional-c6e9f6.py +58 -0
  425. exordos_core-0.0.7/migrations/0049-lb-add-proxy-protocol-from-ef8f58.py +57 -0
  426. exordos_core-0.0.7/migrations/0050-subnet-source-6c071d.py +58 -0
  427. exordos_core-0.0.7/migrations/0051-sdk-1-5-0-migration-eea262.py +55 -0
  428. exordos_core-0.0.7/migrations/0052-iam-user-custom-props-bc80b5.py +57 -0
  429. exordos_core-0.0.7/migrations/0053-lb-node-secret-set-permissions-11c9a8.py +129 -0
  430. exordos_core-0.0.7/migrations/0054-iam-idp-callback-kind-3a6c1b.py +90 -0
  431. exordos_core-0.0.7/migrations/0055-iam-user-type-8d7f2a.py +132 -0
  432. exordos_core-0.0.7/migrations/0056-iam-user-create-perm-3e0dc5.py +83 -0
  433. exordos_core-0.0.7/migrations/0057-add-project-id-requirements-to-element-3bc138.py +61 -0
  434. exordos_core-0.0.7/migrations/0058-copy-iam-users-target-to-actual-resources-a1b2c3.py +83 -0
  435. exordos_core-0.0.7/migrations/0059-dns-sync-to-ecosystem-secret-len-a7b3c1.py +74 -0
  436. exordos_core-0.0.7/migrations/0060-openapi-spec_e-m-link-02ef0a.py +74 -0
  437. exordos_core-0.0.7/migrations/MANUAL-boot-network-40b1ae.py +170 -0
  438. exordos_core-0.0.7/migrations/MANUAL-computeV2-e26427.py +339 -0
  439. exordos_core-0.0.7/migrations/MANUAL-fix-usernames-6b042b.py +51 -0
  440. exordos_core-0.0.7/mkdocs.yml +102 -0
  441. exordos_core-0.0.7/pyproject.toml +237 -0
  442. exordos_core-0.0.7/setup.cfg +4 -0
  443. exordos_core-0.0.7/tools/convert_multiline_to_oneline.py +23 -0
  444. exordos_core-0.0.7/tools/fetch_keycloak_users.py +208 -0
  445. exordos_core-0.0.7/tools/import_keycloak_users_to_iam.py +373 -0
  446. exordos_core-0.0.7/tox.ini +99 -0
  447. exordos_core-0.0.7/uv.lock +3456 -0
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "uv"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ open-pull-requests-limit: 10
8
+ - package-ecosystem: "github-actions"
9
+ directory: "/"
10
+ schedule:
11
+ interval: "weekly"
12
+ open-pull-requests-limit: 10
@@ -0,0 +1,48 @@
1
+ name: build
2
+
3
+ on:
4
+ push:
5
+
6
+ env:
7
+ ARTIFACTS_PATH: artifacts
8
+ PROJECT_NAME: exordos_core
9
+ REPO_ENDPOINT_PUT: http://10.20.0.1:8082
10
+
11
+ jobs:
12
+ Build:
13
+ runs-on: self-hosted
14
+ if : ${{ github.actor != 'dependabot[bot]' }}
15
+ strategy:
16
+ fail-fast: true
17
+ steps:
18
+ - uses: actions/checkout@v6
19
+ - name: Build Exordos Core
20
+ env:
21
+ PUSH_CFG: ${{ secrets.PUSH_CFG }}
22
+ run: |
23
+ set -eux
24
+ mkdir -p ${ARTIFACTS_PATH}
25
+
26
+ source ~/.profile
27
+ VERSION="$(genesis get-version .)"
28
+
29
+ # Build Exordos Core
30
+ genesis build $(pwd) --inventory
31
+
32
+ # Decode and write the push configuration
33
+ echo "$PUSH_CFG" | base64 -d > genesis/genesis.push.yaml
34
+ genesis push -c genesis/genesis.push.yaml -t local -f --latest
35
+
36
+ # Upload the VM image
37
+ gzip -k output/exordos-core.raw -c | \
38
+ curl -X PUT -T - "$REPO_ENDPOINT_PUT/${PROJECT_NAME}/${VERSION}/exordos-core.raw.gz"
39
+
40
+ # Temporary upload step is done in the build script
41
+ echo "${VERSION}" > "${ARTIFACTS_PATH}/version.txt"
42
+
43
+ - name: Upload the build artifacts
44
+ uses: actions/upload-artifact@v7
45
+ with:
46
+ name: build_artifacts
47
+ path: artifacts/
48
+
@@ -0,0 +1,55 @@
1
+ name: Build GitHub Pages
2
+ on:
3
+ push:
4
+ branches:
5
+ - master
6
+ paths:
7
+ - 'docs/**'
8
+ - mkdocs.yml
9
+ workflow_dispatch:
10
+ permissions:
11
+ contents: write
12
+ pages: write
13
+ id-token: write
14
+
15
+ jobs:
16
+ build_mkdocs:
17
+ runs-on: ubuntu-latest
18
+
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@v6
22
+ with:
23
+ fetch-depth: 0
24
+ - uses: actions/setup-python@v6
25
+ with:
26
+ python-version: 3.12
27
+ - name: Install requirements
28
+ run: sudo apt update && sudo apt install --yes libev-dev libvirt-dev
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v7
31
+ - name: Install tox-uv
32
+ run: uv tool install tox --with tox-uv
33
+ - name: Deploy docs to GitHub Pages
34
+ run: tox -e docs-deploy
35
+
36
+ deploy_mkdocs:
37
+ needs: build_mkdocs
38
+ environment:
39
+ name: github-pages
40
+ url: ${{ steps.deployment.outputs.page_url }}
41
+ runs-on: ubuntu-latest
42
+ steps:
43
+ - name: Checkout
44
+ uses: actions/checkout@v6
45
+ with:
46
+ ref: gh-pages
47
+ - name: Setup Pages
48
+ uses: actions/configure-pages@v6
49
+ - name: Upload artifact
50
+ uses: actions/upload-pages-artifact@v5
51
+ with:
52
+ path: '.'
53
+ - name: Deploy to GitHub Pages
54
+ id: deployment
55
+ uses: actions/deploy-pages@v5
@@ -0,0 +1,21 @@
1
+ name: Build elements inventory
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '5 * * * *'
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ Build:
13
+ runs-on: self-hosted
14
+ strategy:
15
+ fail-fast: true
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+ with:
19
+ fetch-depth: 30
20
+ - name: Build elements inventory
21
+ run: python3 exordos_core/cmd/elements_inventory.py
@@ -0,0 +1,26 @@
1
+ name: Markdown Lint
2
+ description: Lint Markdown files
3
+
4
+ on:
5
+ push:
6
+ paths:
7
+ - 'docs/**'
8
+ - mkdocs.yml
9
+
10
+ jobs:
11
+ lint:
12
+ runs-on: ubuntu-24.04
13
+ steps:
14
+ - uses: actions/checkout@v6
15
+ with:
16
+ fetch-depth: 0
17
+ - uses: tj-actions/changed-files@v47
18
+ id: changed-files
19
+ with:
20
+ files: '**/*.md'
21
+ separator: ","
22
+ - uses: DavidAnson/markdownlint-cli2-action@v23
23
+ if: steps.changed-files.outputs.any_changed == 'true'
24
+ with:
25
+ globs: ${{ steps.changed-files.outputs.all_changed_files }}
26
+ separator: ","
@@ -0,0 +1,97 @@
1
+ name: Publish Python 🐍 distribution 📦 to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - '*'
7
+
8
+ jobs:
9
+ build:
10
+ name: Build distribution 📦
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v6
15
+ with:
16
+ persist-credentials: false
17
+ - name: Set up Python
18
+ uses: actions/setup-python@v6
19
+ with:
20
+ python-version: "3.12"
21
+ - name: Install pypa/build
22
+ run: >-
23
+ python3 -m
24
+ pip install
25
+ build
26
+ --user
27
+ - name: Build a binary wheel and a source tarball
28
+ run: python3 -m build
29
+ - name: Store the distribution packages
30
+ uses: actions/upload-artifact@v7
31
+ with:
32
+ name: python-package-distributions
33
+ path: dist/
34
+
35
+ publish-to-pypi:
36
+ name: >-
37
+ Publish Python 🐍 distribution 📦 to PyPI
38
+ needs:
39
+ - build
40
+ runs-on: ubuntu-latest
41
+ environment:
42
+ name: pypi
43
+ url: https://pypi.org/p/exordos-core
44
+ permissions:
45
+ id-token: write # IMPORTANT: mandatory for trusted publishing
46
+
47
+ steps:
48
+ - name: Download all the dists
49
+ uses: actions/download-artifact@v8
50
+ with:
51
+ name: python-package-distributions
52
+ path: dist/
53
+ - name: Publish distribution 📦 to PyPI
54
+ uses: pypa/gh-action-pypi-publish@release/v1
55
+
56
+ github-release:
57
+ name: >-
58
+ Sign the Python 🐍 distribution 📦 with Sigstore
59
+ and upload them to GitHub Release
60
+ needs:
61
+ - publish-to-pypi
62
+ runs-on: ubuntu-latest
63
+
64
+ permissions:
65
+ contents: write # IMPORTANT: mandatory for making GitHub Releases
66
+ id-token: write # IMPORTANT: mandatory for sigstore
67
+
68
+ steps:
69
+ - name: Download all the dists
70
+ uses: actions/download-artifact@v8
71
+ with:
72
+ name: python-package-distributions
73
+ path: dist/
74
+ - name: Sign the dists with Sigstore
75
+ uses: sigstore/gh-action-sigstore-python@v3.3.0
76
+ with:
77
+ inputs: >-
78
+ ./dist/*.tar.gz
79
+ ./dist/*.whl
80
+ - name: Create GitHub Release
81
+ env:
82
+ GITHUB_TOKEN: ${{ github.token }}
83
+ run: >-
84
+ gh release create
85
+ "$GITHUB_REF_NAME"
86
+ --repo "$GITHUB_REPOSITORY"
87
+ --notes ""
88
+ - name: Upload artifact signatures to GitHub Release
89
+ env:
90
+ GITHUB_TOKEN: ${{ github.token }}
91
+ # Upload to GitHub Release using the `gh` CLI.
92
+ # `dist/` contains the built packages, and the
93
+ # sigstore-produced signatures and certificates.
94
+ run: >-
95
+ gh release upload
96
+ "$GITHUB_REF_NAME" dist/**
97
+ --repo "$GITHUB_REPOSITORY"
@@ -0,0 +1,102 @@
1
+ name: tests
2
+
3
+ on:
4
+ push:
5
+ paths-ignore:
6
+ - 'docs/**'
7
+ - 'mkdocs.yml'
8
+ - '.markdownlint.yaml'
9
+ pull_request:
10
+ paths-ignore:
11
+ - 'docs/**'
12
+ - 'mkdocs.yml'
13
+ - '.markdownlint.yaml'
14
+
15
+ jobs:
16
+ Lint:
17
+ runs-on: ubuntu-24.04
18
+ strategy:
19
+ fail-fast: true
20
+ matrix:
21
+ python-version: [ "3.12" ]
22
+ steps:
23
+ - uses: actions/checkout@v6
24
+ - name: Set up Python ${{ matrix.python-version }}
25
+ uses: actions/setup-python@v6
26
+ with:
27
+ python-version: ${{ matrix.python-version }}
28
+ - name: Install requirements
29
+ run: sudo apt update && sudo apt install --yes libev-dev libvirt-dev
30
+ - name: Install uv
31
+ uses: astral-sh/setup-uv@v7
32
+ - name: Install tox-uv
33
+ run: uv tool install tox --with tox-uv
34
+ - name: ruff
35
+ run: |
36
+ tox -e ruff-check
37
+ Tests:
38
+ runs-on: ubuntu-24.04
39
+ strategy:
40
+ fail-fast: true
41
+ matrix:
42
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
43
+ services:
44
+ postgresql:
45
+ image: postgres:latest
46
+ # Provide the password for postgres
47
+ env:
48
+ POSTGRES_DB: exordos_core
49
+ POSTGRES_HOST_AUTH_METHOD: trust
50
+ POSTGRES_USER: exordos_core
51
+ POSTGRES_PASSWORD: exordos_core
52
+ POSTGRES_INITDB_ARGS: "-c max_connections=100"
53
+ # Set health checks to wait until postgres has started
54
+ options: >-
55
+ --health-cmd pg_isready
56
+ --health-interval 10s
57
+ --health-timeout 5s
58
+ --health-retries 5
59
+ ports:
60
+ # Maps tcp port 5432 on service container to the host
61
+ - 5432:5432
62
+ steps:
63
+ - uses: actions/checkout@v6
64
+ - name: Set up Python ${{ matrix.python-version }}
65
+ uses: actions/setup-python@v6
66
+ with:
67
+ python-version: ${{ matrix.python-version }}
68
+ - name: Install dependencies
69
+ run: sudo apt update && sudo apt install --yes libev-dev libvirt-dev pdns-server pdns-backend-pgsql
70
+ - name: Install uv
71
+ uses: astral-sh/setup-uv@v7
72
+ - name: Install tox-uv
73
+ run: uv tool install tox --with tox-uv
74
+ - name: Unit tests
75
+ run: |
76
+ tox -e ${{ matrix.python-version }}
77
+ - name: Functional tests
78
+ env:
79
+ DATABASE_URI: "postgresql://exordos_core:exordos_core@localhost:5432/exordos_core"
80
+ run: |
81
+ tox -e ${{ matrix.python-version }}-functional
82
+ Coverage:
83
+ runs-on: ubuntu-24.04
84
+ strategy:
85
+ fail-fast: true
86
+ matrix:
87
+ python-version: ["3.12"]
88
+ steps:
89
+ - uses: actions/checkout@v6
90
+ - name: Set up Python ${{ matrix.python-version }}
91
+ uses: actions/setup-python@v6
92
+ with:
93
+ python-version: ${{ matrix.python-version }}
94
+ - name: Install dependencies
95
+ run: sudo apt update && sudo apt install --yes libev-dev libvirt-dev
96
+ - name: Install uv
97
+ uses: astral-sh/setup-uv@v7
98
+ - name: Install tox-uv
99
+ run: uv tool install tox --with tox-uv
100
+ - name: Coverage
101
+ run: |
102
+ tox -e begin,${{ matrix.python-version }},end
@@ -0,0 +1,138 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # editors
10
+ *~
11
+
12
+ # IDE
13
+ .idea/
14
+ .vscode
15
+ .kilocode/
16
+ .kilocodemodes
17
+ .roo/
18
+
19
+ # Distribution / packaging
20
+ .Python
21
+ build/
22
+ output/
23
+ develop-eggs/
24
+ dist/
25
+ deps/
26
+ docker/common/bin
27
+ downloads/
28
+ eggs/
29
+ .eggs/
30
+ lib/
31
+ lib64/
32
+ parts/
33
+ sdist/
34
+ var/
35
+ wheels/
36
+ *.egg-info/
37
+ .installed.cfg
38
+ *.egg
39
+ MANIFEST
40
+ AUTHORS
41
+ ChangeLog
42
+ cover/
43
+ version.txt
44
+ etc/exordos_core/exordos_core.d/*.conf
45
+ etc/*/*.local
46
+
47
+ # OS
48
+ .DS_Store
49
+
50
+ # PyInstaller
51
+ # Usually these files are written by a python script from a template
52
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
53
+ *.manifest
54
+ *.spec
55
+
56
+ # Installer logs
57
+ pip-log.txt
58
+ pip-delete-this-directory.txt
59
+
60
+ # Unit test / coverage reports
61
+ htmlcov/
62
+ .tox/
63
+ .tox
64
+ .coverage
65
+ .coverage.*
66
+ .cache
67
+ nosetests.xml
68
+ coverage.xml
69
+ *.cover
70
+ .hypothesis/
71
+ .pytest_cache/
72
+ .testrepository/
73
+
74
+ # Translations
75
+ *.mo
76
+ *.pot
77
+
78
+ # Django stuff:
79
+ *.log
80
+ local_settings.py
81
+ db.sqlite3
82
+
83
+ # Flask stuff:
84
+ instance/
85
+ .webassets-cache
86
+
87
+ # Scrapy stuff:
88
+ .scrapy
89
+
90
+ # Sphinx documentation
91
+ docs/_build/
92
+
93
+ # PyBuilder
94
+ target/
95
+
96
+ # Jupyter Notebook
97
+ .ipynb_checkpoints
98
+
99
+ # pyenv
100
+ .python-version
101
+
102
+ # celery beat schedule file
103
+ celerybeat-schedule
104
+
105
+ # SageMath parsed files
106
+ *.sage.py
107
+
108
+ # Environments
109
+ .env
110
+ .venv
111
+ env/
112
+ venv/
113
+ ENV/
114
+ env.bak/
115
+ venv.bak/
116
+
117
+ # Spyder project settings
118
+ .spyderproject
119
+ .spyproject
120
+
121
+ # Rope project settings
122
+ .ropeproject
123
+
124
+ # mkdocs documentation
125
+ /site
126
+
127
+ # mypy
128
+ .mypy_cache/
129
+
130
+ # Documentation
131
+ docs/build
132
+ docs/source/*.png
133
+
134
+ # Vagrant
135
+ .vagrant/
136
+
137
+ # postgres
138
+ pgdata/
@@ -0,0 +1,150 @@
1
+ default: false
2
+
3
+ # MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md001.md
4
+ MD001: true
5
+
6
+ # MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md003.md
7
+ MD003:
8
+ style: "consistent"
9
+
10
+ # MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md004.md
11
+ MD004:
12
+ style: "consistent"
13
+
14
+ # MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md005.md
15
+ MD005: true
16
+
17
+ # MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md007.md
18
+ MD007:
19
+ indent: 4
20
+
21
+ # MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md009.md
22
+ MD009: true
23
+
24
+ # MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md010.md
25
+ MD010: true
26
+
27
+ # MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md011.md
28
+ MD011: true
29
+
30
+ # MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md012.md
31
+ MD012: true
32
+
33
+ # MD013/line-length Line length https://github.com/DavidAnson/markdownlint/blob/v0.40.0/doc/md013.md
34
+ MD013: false
35
+
36
+ # MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md014.md
37
+ MD014: true
38
+
39
+ # MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md018.md
40
+ MD018: true
41
+
42
+ # MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md019.md
43
+ MD019: true
44
+
45
+ # MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md020.md
46
+ MD020: true
47
+
48
+ # MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md021.md
49
+ MD021: true
50
+
51
+ # MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md022.md
52
+ MD022: true
53
+
54
+ # MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md023.md
55
+ MD023: true
56
+
57
+ # MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md024.md
58
+ MD024:
59
+ siblings_only: true
60
+
61
+ # MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md025.md
62
+ MD025: true
63
+
64
+ # MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md026.md
65
+ MD026: true
66
+
67
+ # MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md027.md
68
+ MD027: true
69
+
70
+ # MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md028.md
71
+ MD028: true
72
+
73
+ # MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md
74
+ MD029:
75
+ style: "ordered"
76
+
77
+ # MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md030.md
78
+ MD030:
79
+ ul_single: 1
80
+ ol_single: 1
81
+ ul_multi: 1
82
+ ol_multi: 1
83
+
84
+ # MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md031.md
85
+ MD031: true
86
+
87
+ # MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md032.md
88
+ MD032: true
89
+
90
+ # MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md034.md
91
+ MD034: true
92
+
93
+ # MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md035.md
94
+ MD035: true
95
+
96
+ # MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md036.md
97
+ MD036: true
98
+
99
+ # MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md037.md
100
+ MD037: true
101
+
102
+ # MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md038.md
103
+ MD038: true
104
+
105
+ # MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md039.md
106
+ MD039: true
107
+
108
+ # MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md040.md
109
+ MD040: true
110
+
111
+ # MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md042.md
112
+ MD042: true
113
+
114
+ # MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md045.md
115
+ MD045: true
116
+
117
+ # MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md046.md
118
+ MD046:
119
+ style: "fenced"
120
+
121
+ # MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md047.md
122
+ MD047: true
123
+
124
+ # MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md048.md
125
+ MD048:
126
+ style: "backtick"
127
+
128
+ # MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md049.md
129
+ MD049:
130
+ style: "asterisk"
131
+
132
+ # MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md050.md
133
+ MD050:
134
+ style: "consistent"
135
+
136
+ # MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md051.md
137
+ MD051: true
138
+
139
+ # MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md053.md
140
+ MD053: true
141
+
142
+ # MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md054.md
143
+ MD054: true
144
+
145
+ # MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md055.md
146
+ MD055:
147
+ style: "consistent"
148
+
149
+ # MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md056.md
150
+ MD056: true