osism 0.20250525.0__tar.gz → 0.20250530.0__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.
- osism-0.20250530.0/ChangeLog +7 -0
- {osism-0.20250525.0/osism.egg-info → osism-0.20250530.0}/PKG-INFO +2 -2
- {osism-0.20250525.0 → osism-0.20250530.0}/Pipfile +1 -1
- {osism-0.20250525.0 → osism-0.20250530.0}/Pipfile.lock +97 -45
- osism-0.20250530.0/osism/commands/baremetal.py +237 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/netbox.py +1 -1
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/conductor.py +22 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/netbox.py +5 -0
- {osism-0.20250525.0 → osism-0.20250530.0/osism.egg-info}/PKG-INFO +2 -2
- {osism-0.20250525.0 → osism-0.20250530.0}/osism.egg-info/SOURCES.txt +1 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism.egg-info/entry_points.txt +3 -0
- osism-0.20250530.0/osism.egg-info/pbr.json +1 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism.egg-info/requires.txt +1 -1
- osism-0.20250530.0/requirements.netbox-manager.txt +1 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/requirements.txt +1 -1
- {osism-0.20250525.0 → osism-0.20250530.0}/setup.cfg +3 -0
- osism-0.20250525.0/ChangeLog +0 -7
- osism-0.20250525.0/osism.egg-info/pbr.json +0 -1
- osism-0.20250525.0/requirements.netbox-manager.txt +0 -1
- {osism-0.20250525.0 → osism-0.20250530.0}/.flake8 +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/.github/renovate.json +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/.github/workflows/publish.yml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/.hadolint.yaml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/.zuul.yaml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/AUTHORS +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/Containerfile +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/Dockerfile +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/LICENSE +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/README.md +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/files/change.sh +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/files/cleanup-ansible-collections.sh +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/files/clustershell/clush.conf +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/files/clustershell/groups.conf +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/files/data/SCS-Spec.MandatoryFlavors.verbose.yaml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/files/netbox-manager/settings.toml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/files/run-ansible-console.sh +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/__main__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/actions/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/api.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/apply.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/compose.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/compute.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/configuration.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/console.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/container.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/get.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/log.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/manage.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/noset.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/reconciler.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/server.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/service.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/set.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/status.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/sync.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/task.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/validate.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/vault.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/volume.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/wait.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/commands/worker.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/core/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/core/enums.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/core/playbooks.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/data/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/main.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/plugins/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/services/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/services/listener.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/settings.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/ansible.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/ceph.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/kolla.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/kubernetes.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/openstack.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/tasks/reconciler.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism/utils/__init__.py +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism.egg-info/dependency_links.txt +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism.egg-info/not-zip-safe +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/osism.egg-info/top_level.txt +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/playbooks/build.yml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/playbooks/pre.yml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/playbooks/test-setup.yml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/requirements.ansible.txt +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/requirements.openstack-flavor-manager.txt +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/requirements.openstack-image-manager.txt +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/requirements.yml +0 -0
- {osism-0.20250525.0 → osism-0.20250530.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: osism
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.20250530.0
|
4
4
|
Summary: OSISM manager interface
|
5
5
|
Home-page: https://github.com/osism/python-osism
|
6
6
|
Author: OSISM GmbH
|
@@ -47,7 +47,7 @@ Requires-Dist: prompt-toolkit==3.0.51
|
|
47
47
|
Requires-Dist: pynetbox==7.5.0
|
48
48
|
Requires-Dist: pytest-testinfra==10.2.2
|
49
49
|
Requires-Dist: python-dateutil==2.9.0.post0
|
50
|
-
Requires-Dist: setuptools==80.
|
50
|
+
Requires-Dist: setuptools==80.9.0
|
51
51
|
Requires-Dist: sqlmodel==0.0.24
|
52
52
|
Requires-Dist: sushy==5.6.0
|
53
53
|
Requires-Dist: tabulate==0.9.0
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"_meta": {
|
3
3
|
"hash": {
|
4
|
-
"sha256": "
|
4
|
+
"sha256": "502a46cada14b55db06ae7c1b0c578400f1880cf539b7a7c59a79d14c9c240d8"
|
5
5
|
},
|
6
6
|
"pipfile-spec": 6,
|
7
7
|
"requires": {},
|
@@ -376,46 +376,46 @@
|
|
376
376
|
},
|
377
377
|
"cryptography": {
|
378
378
|
"hashes": [
|
379
|
-
"sha256:
|
380
|
-
"sha256:
|
381
|
-
"sha256:
|
382
|
-
"sha256:
|
383
|
-
"sha256:
|
384
|
-
"sha256:
|
385
|
-
"sha256:
|
386
|
-
"sha256:
|
387
|
-
"sha256:
|
388
|
-
"sha256:
|
389
|
-
"sha256:
|
390
|
-
"sha256:
|
391
|
-
"sha256:
|
392
|
-
"sha256:
|
393
|
-
"sha256:
|
394
|
-
"sha256:
|
395
|
-
"sha256:
|
396
|
-
"sha256:
|
397
|
-
"sha256:
|
398
|
-
"sha256:
|
399
|
-
"sha256:
|
400
|
-
"sha256:
|
401
|
-
"sha256:
|
402
|
-
"sha256:
|
403
|
-
"sha256:
|
404
|
-
"sha256:
|
405
|
-
"sha256:
|
406
|
-
"sha256:
|
407
|
-
"sha256:
|
408
|
-
"sha256:
|
409
|
-
"sha256:
|
410
|
-
"sha256:
|
411
|
-
"sha256:
|
412
|
-
"sha256:
|
413
|
-
"sha256:
|
414
|
-
"sha256:
|
415
|
-
"sha256:
|
379
|
+
"sha256:00094838ecc7c6594171e8c8a9166124c1197b074cfca23645cee573910d76bc",
|
380
|
+
"sha256:050ce5209d5072472971e6efbfc8ec5a8f9a841de5a4db0ebd9c2e392cb81972",
|
381
|
+
"sha256:232954730c362638544758a8160c4ee1b832dc011d2c41a306ad8f7cccc5bb0b",
|
382
|
+
"sha256:25286aacb947286620a31f78f2ed1a32cded7be5d8b729ba3fb2c988457639e4",
|
383
|
+
"sha256:2f8f8f0b73b885ddd7f3d8c2b2234a7d3ba49002b0223f58cfde1bedd9563c56",
|
384
|
+
"sha256:38deed72285c7ed699864f964a3f4cf11ab3fb38e8d39cfcd96710cd2b5bb716",
|
385
|
+
"sha256:3ad69eeb92a9de9421e1f6685e85a10fbcfb75c833b42cc9bc2ba9fb00da4710",
|
386
|
+
"sha256:5555365a50efe1f486eed6ac7062c33b97ccef409f5970a0b6f205a7cfab59c8",
|
387
|
+
"sha256:555e5e2d3a53b4fabeca32835878b2818b3f23966a4efb0d566689777c5a12c8",
|
388
|
+
"sha256:57a6500d459e8035e813bd8b51b671977fb149a8c95ed814989da682314d0782",
|
389
|
+
"sha256:5833bb4355cb377ebd880457663a972cd044e7f49585aee39245c0d592904578",
|
390
|
+
"sha256:71320fbefd05454ef2d457c481ba9a5b0e540f3753354fff6f780927c25d19b0",
|
391
|
+
"sha256:7573d9eebaeceeb55285205dbbb8753ac1e962af3d9640791d12b36864065e71",
|
392
|
+
"sha256:92d5f428c1a0439b2040435a1d6bc1b26ebf0af88b093c3628913dd464d13fa1",
|
393
|
+
"sha256:97787952246a77d77934d41b62fb1b6f3581d83f71b44796a4158d93b8f5c490",
|
394
|
+
"sha256:9bb5bf55dcb69f7067d80354d0a348368da907345a2c448b0babc4215ccd3497",
|
395
|
+
"sha256:9cc80ce69032ffa528b5e16d217fa4d8d4bb7d6ba8659c1b4d74a1b0f4235fca",
|
396
|
+
"sha256:9e4253ed8f5948a3589b3caee7ad9a5bf218ffd16869c516535325fece163dcc",
|
397
|
+
"sha256:9eda14f049d7f09c2e8fb411dda17dd6b16a3c76a1de5e249188a32aeb92de19",
|
398
|
+
"sha256:a2b56de3417fd5f48773ad8e91abaa700b678dc7fe1e0c757e1ae340779acf7b",
|
399
|
+
"sha256:af3f92b1dc25621f5fad065288a44ac790c5798e986a34d393ab27d2b27fcff9",
|
400
|
+
"sha256:c5edcb90da1843df85292ef3a313513766a78fbbb83f584a5a58fb001a5a9d57",
|
401
|
+
"sha256:c824c9281cb628015bfc3c59335163d4ca0540d49de4582d6c2637312907e4b1",
|
402
|
+
"sha256:c92519d242703b675ccefd0f0562eb45e74d438e001f8ab52d628e885751fb06",
|
403
|
+
"sha256:ca932e11218bcc9ef812aa497cdf669484870ecbcf2d99b765d6c27a86000942",
|
404
|
+
"sha256:cb6ab89421bc90e0422aca911c69044c2912fc3debb19bb3c1bfe28ee3dff6ab",
|
405
|
+
"sha256:cfd84777b4b6684955ce86156cfb5e08d75e80dc2585e10d69e47f014f0a5342",
|
406
|
+
"sha256:d377dde61c5d67eb4311eace661c3efda46c62113ff56bf05e2d679e02aebb5b",
|
407
|
+
"sha256:d54ae41e6bd70ea23707843021c778f151ca258081586f0cfa31d936ae43d1b2",
|
408
|
+
"sha256:dc10ec1e9f21f33420cc05214989544727e776286c1c16697178978327b95c9c",
|
409
|
+
"sha256:ec21313dd335c51d7877baf2972569f40a4291b76a0ce51391523ae358d05899",
|
410
|
+
"sha256:ec64ee375b5aaa354b2b273c921144a660a511f9df8785e6d1c942967106438e",
|
411
|
+
"sha256:ed43d396f42028c1f47b5fec012e9e12631266e3825e95c00e3cf94d472dac49",
|
412
|
+
"sha256:edd6d51869beb7f0d472e902ef231a9b7689508e83880ea16ca3311a00bf5ce7",
|
413
|
+
"sha256:f22af3c78abfbc7cbcdf2c55d23c3e022e1a462ee2481011d518c7fb9c9f3d65",
|
414
|
+
"sha256:fae1e637f527750811588e4582988932c222f8251f7b7ea93739acb624e1487f",
|
415
|
+
"sha256:fed5aaca1750e46db870874c9c273cd5182a9e9deb16f06f7bdffdb5c2bde4b9"
|
416
416
|
],
|
417
417
|
"markers": "python_version >= '3.7' and python_full_version not in '3.9.0, 3.9.1'",
|
418
|
-
"version": "==45.0.
|
418
|
+
"version": "==45.0.3"
|
419
419
|
},
|
420
420
|
"decorator": {
|
421
421
|
"hashes": [
|
@@ -1488,11 +1488,63 @@
|
|
1488
1488
|
},
|
1489
1489
|
"ruamel.yaml": {
|
1490
1490
|
"hashes": [
|
1491
|
-
"sha256:
|
1492
|
-
"sha256:
|
1491
|
+
"sha256:b586a3416676566ed45bf679a0909719f7ea7b58c03a9b6e03f905a1e2cd5076",
|
1492
|
+
"sha256:eca06c9fce6ee3220845c4c54e58376586e041a6127e4d1958e12a3142084897"
|
1493
1493
|
],
|
1494
1494
|
"markers": "python_version >= '3.7'",
|
1495
|
-
"version": "==0.18.
|
1495
|
+
"version": "==0.18.11"
|
1496
|
+
},
|
1497
|
+
"ruamel.yaml.clib": {
|
1498
|
+
"hashes": [
|
1499
|
+
"sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b",
|
1500
|
+
"sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4",
|
1501
|
+
"sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef",
|
1502
|
+
"sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5",
|
1503
|
+
"sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3",
|
1504
|
+
"sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632",
|
1505
|
+
"sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6",
|
1506
|
+
"sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7",
|
1507
|
+
"sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680",
|
1508
|
+
"sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf",
|
1509
|
+
"sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da",
|
1510
|
+
"sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6",
|
1511
|
+
"sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a",
|
1512
|
+
"sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01",
|
1513
|
+
"sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519",
|
1514
|
+
"sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6",
|
1515
|
+
"sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f",
|
1516
|
+
"sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd",
|
1517
|
+
"sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2",
|
1518
|
+
"sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52",
|
1519
|
+
"sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd",
|
1520
|
+
"sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d",
|
1521
|
+
"sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c",
|
1522
|
+
"sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6",
|
1523
|
+
"sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb",
|
1524
|
+
"sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a",
|
1525
|
+
"sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969",
|
1526
|
+
"sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28",
|
1527
|
+
"sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d",
|
1528
|
+
"sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e",
|
1529
|
+
"sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45",
|
1530
|
+
"sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4",
|
1531
|
+
"sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12",
|
1532
|
+
"sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31",
|
1533
|
+
"sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642",
|
1534
|
+
"sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e",
|
1535
|
+
"sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285",
|
1536
|
+
"sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed",
|
1537
|
+
"sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1",
|
1538
|
+
"sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7",
|
1539
|
+
"sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3",
|
1540
|
+
"sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475",
|
1541
|
+
"sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5",
|
1542
|
+
"sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76",
|
1543
|
+
"sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987",
|
1544
|
+
"sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df"
|
1545
|
+
],
|
1546
|
+
"markers": "python_version >= '3.9'",
|
1547
|
+
"version": "==0.2.12"
|
1496
1548
|
},
|
1497
1549
|
"scp": {
|
1498
1550
|
"hashes": [
|
@@ -1503,12 +1555,12 @@
|
|
1503
1555
|
},
|
1504
1556
|
"setuptools": {
|
1505
1557
|
"hashes": [
|
1506
|
-
"sha256:
|
1507
|
-
"sha256:
|
1558
|
+
"sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922",
|
1559
|
+
"sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"
|
1508
1560
|
],
|
1509
1561
|
"index": "pypi",
|
1510
1562
|
"markers": "python_version >= '3.9'",
|
1511
|
-
"version": "==80.
|
1563
|
+
"version": "==80.9.0"
|
1512
1564
|
},
|
1513
1565
|
"six": {
|
1514
1566
|
"hashes": [
|
@@ -0,0 +1,237 @@
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
2
|
+
|
3
|
+
from cliff.command import Command
|
4
|
+
|
5
|
+
from loguru import logger
|
6
|
+
import openstack
|
7
|
+
from tabulate import tabulate
|
8
|
+
import json
|
9
|
+
|
10
|
+
from osism.commands import get_cloud_connection
|
11
|
+
|
12
|
+
|
13
|
+
class BaremetalList(Command):
|
14
|
+
def get_parser(self, prog_name):
|
15
|
+
parser = super(BaremetalList, self).get_parser(prog_name)
|
16
|
+
parser.add_argument(
|
17
|
+
"--provision-state",
|
18
|
+
default=None,
|
19
|
+
choices=["enroll", "managable", "available", "active", "error"],
|
20
|
+
type=str,
|
21
|
+
help="Only list nodes with the given provision state",
|
22
|
+
)
|
23
|
+
parser.add_argument(
|
24
|
+
"--maintenance",
|
25
|
+
default=False,
|
26
|
+
action="store_true",
|
27
|
+
help="Only list baremetal nodes in maintenance mode",
|
28
|
+
)
|
29
|
+
return parser
|
30
|
+
|
31
|
+
def take_action(self, parsed_args):
|
32
|
+
provision_state = parsed_args.provision_state
|
33
|
+
maintenance = parsed_args.maintenance
|
34
|
+
|
35
|
+
conn = get_cloud_connection()
|
36
|
+
|
37
|
+
query = {}
|
38
|
+
if provision_state:
|
39
|
+
query.update(dict(provision_state=provision_state))
|
40
|
+
if maintenance:
|
41
|
+
query.update(dict(maintenance=maintenance))
|
42
|
+
|
43
|
+
baremetal = conn.baremetal.nodes(**query)
|
44
|
+
|
45
|
+
result = [
|
46
|
+
[
|
47
|
+
b["name"],
|
48
|
+
b["power_state"],
|
49
|
+
b["provision_state"],
|
50
|
+
b["maintenance"],
|
51
|
+
]
|
52
|
+
for b in baremetal
|
53
|
+
]
|
54
|
+
|
55
|
+
print(
|
56
|
+
tabulate(
|
57
|
+
result,
|
58
|
+
headers=[
|
59
|
+
"Name",
|
60
|
+
"Power State",
|
61
|
+
"Provision State",
|
62
|
+
"Maintenance",
|
63
|
+
],
|
64
|
+
tablefmt="psql",
|
65
|
+
)
|
66
|
+
)
|
67
|
+
|
68
|
+
|
69
|
+
class BaremetalDeploy(Command):
|
70
|
+
def get_parser(self, prog_name):
|
71
|
+
parser = super(BaremetalDeploy, self).get_parser(prog_name)
|
72
|
+
|
73
|
+
parser_exc_group = parser.add_mutually_exclusive_group(required=True)
|
74
|
+
parser_exc_group.add_argument(
|
75
|
+
"--all",
|
76
|
+
default=False,
|
77
|
+
help="Deploy all baremetal nodes in provision state available",
|
78
|
+
action="store_true",
|
79
|
+
)
|
80
|
+
parser_exc_group.add_argument(
|
81
|
+
"--name",
|
82
|
+
default=[],
|
83
|
+
help="Deploy given baremetal node when in provision state available. May be specified multiple times",
|
84
|
+
action="append",
|
85
|
+
)
|
86
|
+
parser.add_argument(
|
87
|
+
"--rebuild",
|
88
|
+
default=False,
|
89
|
+
help="Rebuild given nodes in active state",
|
90
|
+
action="store_true",
|
91
|
+
)
|
92
|
+
parser.add_argument(
|
93
|
+
"--yes-i-really-really-mean-it",
|
94
|
+
default=False,
|
95
|
+
help="Specify this in connection with '--rebuild --all' to actually rebuild all nodes",
|
96
|
+
action="store_true",
|
97
|
+
)
|
98
|
+
return parser
|
99
|
+
|
100
|
+
def take_action(self, parsed_args):
|
101
|
+
all_nodes = parsed_args.all
|
102
|
+
names = parsed_args.name
|
103
|
+
rebuild = parsed_args.rebuild
|
104
|
+
yes_i_really_really_mean_it = parsed_args.yes_i_really_really_mean_it
|
105
|
+
|
106
|
+
if all_nodes and rebuild and not yes_i_really_really_mean_it:
|
107
|
+
logger.error(
|
108
|
+
"Please confirm that you wish to rebuild all nodes by specifying '--yes-i-really-really-mean-it'"
|
109
|
+
)
|
110
|
+
return
|
111
|
+
|
112
|
+
conn = get_cloud_connection()
|
113
|
+
|
114
|
+
if all_nodes:
|
115
|
+
deploy_nodes = list(conn.baremetal.nodes(details=True))
|
116
|
+
else:
|
117
|
+
deploy_nodes = [
|
118
|
+
conn.baremetal.find_node(name, ignore_missing=True, details=True)
|
119
|
+
for name in names
|
120
|
+
]
|
121
|
+
|
122
|
+
for node_idx, node in enumerate(deploy_nodes):
|
123
|
+
if not node:
|
124
|
+
logger.warning(f"Could not find node {names[node_idx]}")
|
125
|
+
continue
|
126
|
+
|
127
|
+
if node.provision_state in ["available", "deploy failed"]:
|
128
|
+
provision_state = "active"
|
129
|
+
elif (
|
130
|
+
node.provision_state == "error"
|
131
|
+
or node.provision_state == "active"
|
132
|
+
and rebuild
|
133
|
+
):
|
134
|
+
provision_state = "rebuild"
|
135
|
+
else:
|
136
|
+
logger.warning(
|
137
|
+
f"Node {node.name} ({node.id}) not in supported provision state"
|
138
|
+
)
|
139
|
+
continue
|
140
|
+
|
141
|
+
try:
|
142
|
+
conn.baremetal.validate_node(
|
143
|
+
node.id, required=("boot", "deploy", "power")
|
144
|
+
)
|
145
|
+
except openstack.exceptions.ValidationException:
|
146
|
+
logger.warning(f"Node {node.name} ({node.id}) could not be validated")
|
147
|
+
continue
|
148
|
+
try:
|
149
|
+
config_drive = {"meta_data": {}}
|
150
|
+
if (
|
151
|
+
"netplan_parameters" in node.extra
|
152
|
+
and node.extra["netplan_parameters"]
|
153
|
+
):
|
154
|
+
config_drive["meta_data"].update(
|
155
|
+
{
|
156
|
+
"netplan_parameters": json.loads(
|
157
|
+
node.extra["netplan_parameters"]
|
158
|
+
)
|
159
|
+
}
|
160
|
+
)
|
161
|
+
if "frr_parameters" in node.extra and node.extra["frr_parameters"]:
|
162
|
+
config_drive["meta_data"].update(
|
163
|
+
{"frr_parameters": json.loads(node.extra["frr_parameters"])}
|
164
|
+
)
|
165
|
+
conn.baremetal.set_node_provision_state(
|
166
|
+
node.id, provision_state, config_drive=config_drive
|
167
|
+
)
|
168
|
+
except Exception as exc:
|
169
|
+
logger.warning(
|
170
|
+
f"Node {node.name} ({node.id}) could not be moved to active state: {exc}"
|
171
|
+
)
|
172
|
+
continue
|
173
|
+
|
174
|
+
|
175
|
+
class BaremetalUndeploy(Command):
|
176
|
+
def get_parser(self, prog_name):
|
177
|
+
parser = super(BaremetalUndeploy, self).get_parser(prog_name)
|
178
|
+
|
179
|
+
parser_exc_group = parser.add_mutually_exclusive_group(required=True)
|
180
|
+
parser_exc_group.add_argument(
|
181
|
+
"--all",
|
182
|
+
default=False,
|
183
|
+
help="Undeploy all baremetal nodes",
|
184
|
+
action="store_true",
|
185
|
+
)
|
186
|
+
parser_exc_group.add_argument(
|
187
|
+
"--name",
|
188
|
+
default=[],
|
189
|
+
help="Undeploy given baremetal node. May be specified multiple times",
|
190
|
+
action="append",
|
191
|
+
)
|
192
|
+
parser.add_argument(
|
193
|
+
"--yes-i-really-really-mean-it",
|
194
|
+
default=False,
|
195
|
+
help="Specify this to actually undeploy all nodes",
|
196
|
+
action="store_true",
|
197
|
+
)
|
198
|
+
return parser
|
199
|
+
|
200
|
+
def take_action(self, parsed_args):
|
201
|
+
all_nodes = parsed_args.all
|
202
|
+
names = parsed_args.name
|
203
|
+
yes_i_really_really_mean_it = parsed_args.yes_i_really_really_mean_it
|
204
|
+
|
205
|
+
if all_nodes and not yes_i_really_really_mean_it:
|
206
|
+
logger.error(
|
207
|
+
"Please confirm that you wish to undeploy all nodes by specifying '--yes-i-really-really-mean-it'"
|
208
|
+
)
|
209
|
+
return
|
210
|
+
|
211
|
+
conn = get_cloud_connection()
|
212
|
+
|
213
|
+
if all_nodes:
|
214
|
+
deploy_nodes = list(conn.baremetal.nodes())
|
215
|
+
else:
|
216
|
+
deploy_nodes = [
|
217
|
+
conn.baremetal.find_node(name, ignore_missing=True, details=False)
|
218
|
+
for name in names
|
219
|
+
]
|
220
|
+
|
221
|
+
for node_idx, node in enumerate(deploy_nodes):
|
222
|
+
if not node:
|
223
|
+
logger.warning(f"Could not find node {names[node_idx]}")
|
224
|
+
continue
|
225
|
+
|
226
|
+
if node.provision_state in ["active", "deploy failed", "error"]:
|
227
|
+
try:
|
228
|
+
conn.baremetal.set_node_provision_state(node.id, "undeploy")
|
229
|
+
except Exception as exc:
|
230
|
+
logger.warning(
|
231
|
+
f"Node {node.name} ({node.id}) could not be moved to available state: {exc}"
|
232
|
+
)
|
233
|
+
continue
|
234
|
+
else:
|
235
|
+
logger.warning(
|
236
|
+
f"Node {node.name} ({node.id}) not in supported provision state"
|
237
|
+
)
|
@@ -10,6 +10,7 @@ import jinja2
|
|
10
10
|
from loguru import logger
|
11
11
|
from pottery import Redlock
|
12
12
|
import yaml
|
13
|
+
import json
|
13
14
|
|
14
15
|
from osism import settings
|
15
16
|
from osism import utils
|
@@ -305,6 +306,27 @@ def sync_ironic(self, force_update=False):
|
|
305
306
|
)
|
306
307
|
)
|
307
308
|
node_attributes.update({"resource_class": device.name})
|
309
|
+
# NOTE: Write metadata used for provisioning into 'extra' field, so that it is available during node deploy without querying the netbox again
|
310
|
+
if "extra" not in node_attributes:
|
311
|
+
node_attributes["extra"] = {}
|
312
|
+
if (
|
313
|
+
"netplan_parameters" in device.custom_fields
|
314
|
+
and device.custom_fields["netplan_parameters"]
|
315
|
+
):
|
316
|
+
node_attributes["extra"].update(
|
317
|
+
{
|
318
|
+
"netplan_parameters": json.dumps(
|
319
|
+
device.custom_fields["netplan_parameters"]
|
320
|
+
)
|
321
|
+
}
|
322
|
+
)
|
323
|
+
if (
|
324
|
+
"frr_parameters" in device.custom_fields
|
325
|
+
and device.custom_fields["frr_parameters"]
|
326
|
+
):
|
327
|
+
node_attributes["extra"].update(
|
328
|
+
{"frr_parameters": json.dumps(device.custom_fields["frr_parameters"])}
|
329
|
+
)
|
308
330
|
ports_attributes = [
|
309
331
|
dict(address=interface.mac_address)
|
310
332
|
for interface in node_interfaces
|
@@ -151,6 +151,11 @@ def get_interfaces_by_device(self, device_name):
|
|
151
151
|
return utils.nb.dcim.interfaces.filter(device=device_name)
|
152
152
|
|
153
153
|
|
154
|
+
@app.task(bind=True, name="osism.tasks.netbox.get_addresses_by_device_and_interface")
|
155
|
+
def get_addresses_by_device_and_interface(self, device_name, interface_name):
|
156
|
+
return utils.nb.dcim.addresses.filter(device=device_name, interface=interface_name)
|
157
|
+
|
158
|
+
|
154
159
|
@app.task(bind=True, name="osism.tasks.netbox.manage")
|
155
160
|
def manage(self, *arguments, publish=True, locking=False, auto_release_time=3600):
|
156
161
|
netbox_manager_env = {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: osism
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.20250530.0
|
4
4
|
Summary: OSISM manager interface
|
5
5
|
Home-page: https://github.com/osism/python-osism
|
6
6
|
Author: OSISM GmbH
|
@@ -47,7 +47,7 @@ Requires-Dist: prompt-toolkit==3.0.51
|
|
47
47
|
Requires-Dist: pynetbox==7.5.0
|
48
48
|
Requires-Dist: pytest-testinfra==10.2.2
|
49
49
|
Requires-Dist: python-dateutil==2.9.0.post0
|
50
|
-
Requires-Dist: setuptools==80.
|
50
|
+
Requires-Dist: setuptools==80.9.0
|
51
51
|
Requires-Dist: sqlmodel==0.0.24
|
52
52
|
Requires-Dist: sushy==5.6.0
|
53
53
|
Requires-Dist: tabulate==0.9.0
|
@@ -26,6 +26,9 @@ log ansible = osism.commands.log:Ansible
|
|
26
26
|
log container = osism.commands.log:Container
|
27
27
|
log file = osism.commands.log:File
|
28
28
|
log opensearch = osism.commands.log:Opensearch
|
29
|
+
manage baremetal deploy = osism.commands.baremetal:BaremetalDeploy
|
30
|
+
manage baremetal list = osism.commands.baremetal:BaremetalList
|
31
|
+
manage baremetal undeploy = osism.commands.baremetal:BaremetalUndeploy
|
29
32
|
manage compute disable = osism.commands.compute:ComputeDisable
|
30
33
|
manage compute enable = osism.commands.compute:ComputeEnable
|
31
34
|
manage compute evacuate = osism.commands.compute:ComputeEvacuate
|
@@ -0,0 +1 @@
|
|
1
|
+
{"git_version": "424407f", "is_release": false}
|
@@ -0,0 +1 @@
|
|
1
|
+
netbox-manager==0.20250529.1
|
@@ -77,6 +77,9 @@ osism.commands =
|
|
77
77
|
manage server list = osism.commands.server:ServerList
|
78
78
|
manage server migrate = osism.commands.server:ServerMigrate
|
79
79
|
manage volume list = osism.commands.volume:VolumeList
|
80
|
+
manage baremetal list = osism.commands.baremetal:BaremetalList
|
81
|
+
manage baremetal deploy = osism.commands.baremetal:BaremetalDeploy
|
82
|
+
manage baremetal undeploy = osism.commands.baremetal:BaremetalUndeploy
|
80
83
|
netbox = osism.commands.netbox:Console
|
81
84
|
get versions netbox = osism.commands.netbox:Versions
|
82
85
|
noset bootstrap = osism.commands.noset:NoBootstrap
|
osism-0.20250525.0/ChangeLog
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"git_version": "3c67308", "is_release": false}
|
@@ -1 +0,0 @@
|
|
1
|
-
netbox-manager==0.20250525.0
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|