kronos-openstack 0.1.0__tar.gz → 0.1.1__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 (108) hide show
  1. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/.github/workflows/release.yml +12 -1
  2. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/PKG-INFO +4 -15
  3. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/README.md +2 -13
  4. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos_openstack.egg-info/PKG-INFO +4 -15
  5. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/pyproject.toml +1 -1
  6. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/.dockerignore +0 -0
  7. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/.github/workflows/ci.yml +0 -0
  8. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/.github/workflows/container.yml +0 -0
  9. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/.gitignore +0 -0
  10. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/.python-version +0 -0
  11. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/.readthedocs.yaml +0 -0
  12. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/CLAUDE.md +0 -0
  13. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/LICENSE +0 -0
  14. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docker/Dockerfile +0 -0
  15. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docs/conf.py +0 -0
  16. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docs/configuration/index.rst +0 -0
  17. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docs/configuration/kronos.conf.sample +0 -0
  18. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docs/deployment/container.rst +0 -0
  19. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docs/deployment/systemd.rst +0 -0
  20. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docs/index.rst +0 -0
  21. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docs/installation.rst +0 -0
  22. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/docs/operations/runbook.rst +0 -0
  23. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/etc/kolla/kronos-engine.json.example +0 -0
  24. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/etc/kolla/kronos-executor.json.example +0 -0
  25. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/etc/kronos/kronos.conf.sample +0 -0
  26. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/etc/kronos/policies.yaml.sample +0 -0
  27. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/etc/oslo-config-generator/kronos.conf +0 -0
  28. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/etc/systemd/kronos-engine@.service +0 -0
  29. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/etc/systemd/kronos-executor@.service +0 -0
  30. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/__init__.py +0 -0
  31. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/clients/__init__.py +0 -0
  32. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/clients/nova.py +0 -0
  33. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/clients/placement.py +0 -0
  34. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/clients/prometheus.py +0 -0
  35. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/cmd/__init__.py +0 -0
  36. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/cmd/engine.py +0 -0
  37. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/cmd/executor.py +0 -0
  38. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/cmd/record.py +0 -0
  39. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/cmd/replay.py +0 -0
  40. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/cmd/test_config.py +0 -0
  41. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/common/__init__.py +0 -0
  42. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/common/config.py +0 -0
  43. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/common/exceptions.py +0 -0
  44. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/common/messaging.py +0 -0
  45. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/common/snapshot.py +0 -0
  46. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/__init__.py +0 -0
  47. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/_sim.py +0 -0
  48. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/affinity_enforcer.py +0 -0
  49. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/constraints.py +0 -0
  50. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/cooldown.py +0 -0
  51. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/evacuator.py +0 -0
  52. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/loop.py +0 -0
  53. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/placement.py +0 -0
  54. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/planner.py +0 -0
  55. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/profiler.py +0 -0
  56. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/result_listener.py +0 -0
  57. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/scorer.py +0 -0
  58. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/engine/types.py +0 -0
  59. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/executor/__init__.py +0 -0
  60. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/executor/migrate.py +0 -0
  61. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/executor/scheduler.py +0 -0
  62. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/executor/worker.py +0 -0
  63. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/policies/__init__.py +0 -0
  64. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/policies/loader.py +0 -0
  65. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/policies/models.py +0 -0
  66. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos/version.py +0 -0
  67. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos_openstack.egg-info/SOURCES.txt +0 -0
  68. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos_openstack.egg-info/dependency_links.txt +0 -0
  69. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos_openstack.egg-info/entry_points.txt +0 -0
  70. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos_openstack.egg-info/requires.txt +0 -0
  71. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/kronos_openstack.egg-info/top_level.txt +0 -0
  72. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/setup.cfg +0 -0
  73. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/__init__.py +0 -0
  74. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/conftest.py +0 -0
  75. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/fixtures/policies_invalid.yaml +0 -0
  76. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/fixtures/policies_valid.yaml +0 -0
  77. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/fixtures/prometheus_responses/healthy.json +0 -0
  78. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/fixtures/prometheus_responses/partial.json +0 -0
  79. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/fixtures/prometheus_responses/stale.json +0 -0
  80. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/__init__.py +0 -0
  81. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/clients/__init__.py +0 -0
  82. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/clients/test_nova.py +0 -0
  83. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/clients/test_prometheus.py +0 -0
  84. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/cmd/__init__.py +0 -0
  85. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/cmd/test_executor.py +0 -0
  86. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/cmd/test_replay.py +0 -0
  87. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/common/__init__.py +0 -0
  88. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/common/test_snapshot.py +0 -0
  89. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/__init__.py +0 -0
  90. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_affinity_enforcer.py +0 -0
  91. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_constraints.py +0 -0
  92. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_cooldown.py +0 -0
  93. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_evacuator.py +0 -0
  94. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_loop.py +0 -0
  95. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_placement.py +0 -0
  96. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_planner.py +0 -0
  97. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_profiler.py +0 -0
  98. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_result_listener.py +0 -0
  99. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/engine/test_scorer.py +0 -0
  100. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/executor/__init__.py +0 -0
  101. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/executor/test_migrate.py +0 -0
  102. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/executor/test_scheduler.py +0 -0
  103. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/executor/test_worker.py +0 -0
  104. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/policies/__init__.py +0 -0
  105. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/policies/test_loader.py +0 -0
  106. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tests/unit/policies/test_models.py +0 -0
  107. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tools/generate_fake_snapshot.py +0 -0
  108. {kronos_openstack-0.1.0 → kronos_openstack-0.1.1}/tox.ini +0 -0
@@ -60,4 +60,15 @@ jobs:
60
60
  with:
61
61
  inputs: dist/*.tar.gz dist/*.whl
62
62
  upload-signing-artifacts: true
63
- release-signing-artifacts: true
63
+ # The sigstore action only attaches files to a release that
64
+ # already exists, so create the release here with the dist files
65
+ # and the .sigstore.json bundles the previous step wrote.
66
+ - name: Create GitHub release
67
+ env:
68
+ GH_TOKEN: ${{ github.token }}
69
+ run: |
70
+ gh release create "$GITHUB_REF_NAME" \
71
+ --repo "$GITHUB_REPOSITORY" \
72
+ --title "Kronos ${GITHUB_REF_NAME#v}" \
73
+ --generate-notes \
74
+ dist/*.tar.gz dist/*.whl dist/*.sigstore.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kronos-openstack
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: PromQL-driven VM placement engine for OpenStack
5
5
  Author-email: Luca Del Monte <luca.delmonte5@gmail.com>, Michele Palazzi <sysdadmin@m1k.cloud>
6
6
  License: Apache-2.0
@@ -9,7 +9,7 @@ Project-URL: Repository, https://github.com/kronos-openstack/kronos
9
9
  Project-URL: Issues, https://github.com/kronos-openstack/kronos/issues
10
10
  Project-URL: Documentation, https://kronos-openstack.readthedocs.io
11
11
  Keywords: openstack,nova,prometheus,live-migration,scheduler,placement,rebalancing
12
- Classifier: Development Status :: 2 - Pre-Alpha
12
+ Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Environment :: OpenStack
14
14
  Classifier: Intended Audience :: System Administrators
15
15
  Classifier: License :: OSI Approved :: Apache Software License
@@ -59,8 +59,6 @@ When dry-run is disabled, the engine casts migration tasks to a per-aggregate RP
59
59
  topic via oslo.messaging. A dedicated executor daemon consumes the tasks and carries
60
60
  them out through the Nova live-migrate API.
61
61
 
62
- > **Status:** Pre-alpha. Not yet ready for production.
63
-
64
62
  ## Features
65
63
 
66
64
  - **Combined multi-policy scoring** - every policy contributes a
@@ -532,17 +530,8 @@ enforcer, planner) so you can see where cycles are spent.
532
530
 
533
531
  ## Roadmap
534
532
 
535
- Planned work, in rough priority order:
536
-
537
- - **Pack mode rework** - the current First Fit Decreasing drain order
538
- is mechanically correct but the drain decisions need rethinking.
539
- Once the semantics are right: put fully drained hosts into
540
- maintenance, refuse to drain below a configurable spare-host
541
- reserve, and bring drained hosts back when load grows.
542
- - **Soft affinity as planner penalties** - soft server-group rules
543
- currently veto moves just like hard ones; they should become
544
- weighted penalties so a mild soft-rule violation can still win when
545
- it resolves a much larger imbalance.
533
+ Planned work:
534
+
546
535
  - **Richer constraints** - NUMA topology, CPU feature flags, and
547
536
  flavor extra specs as additional move filters.
548
537
 
@@ -11,8 +11,6 @@ When dry-run is disabled, the engine casts migration tasks to a per-aggregate RP
11
11
  topic via oslo.messaging. A dedicated executor daemon consumes the tasks and carries
12
12
  them out through the Nova live-migrate API.
13
13
 
14
- > **Status:** Pre-alpha. Not yet ready for production.
15
-
16
14
  ## Features
17
15
 
18
16
  - **Combined multi-policy scoring** - every policy contributes a
@@ -484,17 +482,8 @@ enforcer, planner) so you can see where cycles are spent.
484
482
 
485
483
  ## Roadmap
486
484
 
487
- Planned work, in rough priority order:
488
-
489
- - **Pack mode rework** - the current First Fit Decreasing drain order
490
- is mechanically correct but the drain decisions need rethinking.
491
- Once the semantics are right: put fully drained hosts into
492
- maintenance, refuse to drain below a configurable spare-host
493
- reserve, and bring drained hosts back when load grows.
494
- - **Soft affinity as planner penalties** - soft server-group rules
495
- currently veto moves just like hard ones; they should become
496
- weighted penalties so a mild soft-rule violation can still win when
497
- it resolves a much larger imbalance.
485
+ Planned work:
486
+
498
487
  - **Richer constraints** - NUMA topology, CPU feature flags, and
499
488
  flavor extra specs as additional move filters.
500
489
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kronos-openstack
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: PromQL-driven VM placement engine for OpenStack
5
5
  Author-email: Luca Del Monte <luca.delmonte5@gmail.com>, Michele Palazzi <sysdadmin@m1k.cloud>
6
6
  License: Apache-2.0
@@ -9,7 +9,7 @@ Project-URL: Repository, https://github.com/kronos-openstack/kronos
9
9
  Project-URL: Issues, https://github.com/kronos-openstack/kronos/issues
10
10
  Project-URL: Documentation, https://kronos-openstack.readthedocs.io
11
11
  Keywords: openstack,nova,prometheus,live-migration,scheduler,placement,rebalancing
12
- Classifier: Development Status :: 2 - Pre-Alpha
12
+ Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Environment :: OpenStack
14
14
  Classifier: Intended Audience :: System Administrators
15
15
  Classifier: License :: OSI Approved :: Apache Software License
@@ -59,8 +59,6 @@ When dry-run is disabled, the engine casts migration tasks to a per-aggregate RP
59
59
  topic via oslo.messaging. A dedicated executor daemon consumes the tasks and carries
60
60
  them out through the Nova live-migrate API.
61
61
 
62
- > **Status:** Pre-alpha. Not yet ready for production.
63
-
64
62
  ## Features
65
63
 
66
64
  - **Combined multi-policy scoring** - every policy contributes a
@@ -532,17 +530,8 @@ enforcer, planner) so you can see where cycles are spent.
532
530
 
533
531
  ## Roadmap
534
532
 
535
- Planned work, in rough priority order:
536
-
537
- - **Pack mode rework** - the current First Fit Decreasing drain order
538
- is mechanically correct but the drain decisions need rethinking.
539
- Once the semantics are right: put fully drained hosts into
540
- maintenance, refuse to drain below a configurable spare-host
541
- reserve, and bring drained hosts back when load grows.
542
- - **Soft affinity as planner penalties** - soft server-group rules
543
- currently veto moves just like hard ones; they should become
544
- weighted penalties so a mild soft-rule violation can still win when
545
- it resolves a much larger imbalance.
533
+ Planned work:
534
+
546
535
  - **Richer constraints** - NUMA topology, CPU feature flags, and
547
536
  flavor extra specs as additional move filters.
548
537
 
@@ -23,7 +23,7 @@ keywords = [
23
23
  "rebalancing",
24
24
  ]
25
25
  classifiers = [
26
- "Development Status :: 2 - Pre-Alpha",
26
+ "Development Status :: 4 - Beta",
27
27
  "Environment :: OpenStack",
28
28
  "Intended Audience :: System Administrators",
29
29
  "License :: OSI Approved :: Apache Software License",