osism 0.20250312.0__tar.gz → 0.20250314.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.
Files changed (100) hide show
  1. osism-0.20250314.0/ChangeLog +7 -0
  2. {osism-0.20250312.0 → osism-0.20250314.0}/Containerfile +5 -32
  3. {osism-0.20250312.0 → osism-0.20250314.0}/Dockerfile +5 -32
  4. {osism-0.20250312.0/osism.egg-info → osism-0.20250314.0}/PKG-INFO +4 -4
  5. {osism-0.20250312.0 → osism-0.20250314.0}/Pipfile +2 -2
  6. {osism-0.20250312.0 → osism-0.20250314.0}/Pipfile.lock +65 -65
  7. osism-0.20250314.0/files/netbox-manager/settings.toml +3 -0
  8. osism-0.20250314.0/osism/actions/manage_device.py +120 -0
  9. osism-0.20250314.0/osism/commands/netbox.py +164 -0
  10. {osism-0.20250312.0 → osism-0.20250314.0}/osism/services/listener.py +0 -40
  11. {osism-0.20250312.0 → osism-0.20250314.0}/osism/settings.py +0 -3
  12. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/__init__.py +44 -14
  13. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/netbox.py +22 -98
  14. {osism-0.20250312.0 → osism-0.20250314.0/osism.egg-info}/PKG-INFO +4 -4
  15. {osism-0.20250312.0 → osism-0.20250314.0}/osism.egg-info/SOURCES.txt +2 -5
  16. {osism-0.20250312.0 → osism-0.20250314.0}/osism.egg-info/entry_points.txt +1 -9
  17. osism-0.20250314.0/osism.egg-info/pbr.json +1 -0
  18. {osism-0.20250312.0 → osism-0.20250314.0}/osism.egg-info/requires.txt +3 -3
  19. {osism-0.20250312.0 → osism-0.20250314.0}/playbooks/build.yml +0 -16
  20. osism-0.20250314.0/requirements.netbox-manager.txt +1 -0
  21. osism-0.20250314.0/requirements.openstack-flavor-manager.txt +1 -0
  22. osism-0.20250314.0/requirements.openstack-image-manager.txt +1 -0
  23. {osism-0.20250312.0 → osism-0.20250314.0}/requirements.txt +2 -2
  24. {osism-0.20250312.0 → osism-0.20250314.0}/setup.cfg +1 -9
  25. osism-0.20250312.0/ChangeLog +0 -7
  26. osism-0.20250312.0/files/import/main.py +0 -473
  27. osism-0.20250312.0/osism/actions/check_configuration.py +0 -49
  28. osism-0.20250312.0/osism/actions/deploy_configuration.py +0 -92
  29. osism-0.20250312.0/osism/actions/diff_configuration.py +0 -59
  30. osism-0.20250312.0/osism/actions/generate_configuration.py +0 -137
  31. osism-0.20250312.0/osism/actions/manage_device.py +0 -979
  32. osism-0.20250312.0/osism/commands/netbox.py +0 -453
  33. osism-0.20250312.0/osism.egg-info/pbr.json +0 -1
  34. osism-0.20250312.0/requirements.openstack-flavor-manager.txt +0 -1
  35. osism-0.20250312.0/requirements.openstack-image-manager.txt +0 -1
  36. {osism-0.20250312.0 → osism-0.20250314.0}/.flake8 +0 -0
  37. {osism-0.20250312.0 → osism-0.20250314.0}/.github/renovate.json +0 -0
  38. {osism-0.20250312.0 → osism-0.20250314.0}/.github/workflows/publish.yml +0 -0
  39. {osism-0.20250312.0 → osism-0.20250314.0}/.hadolint.yaml +0 -0
  40. {osism-0.20250312.0 → osism-0.20250314.0}/.zuul.yaml +0 -0
  41. {osism-0.20250312.0 → osism-0.20250314.0}/AUTHORS +0 -0
  42. {osism-0.20250312.0 → osism-0.20250314.0}/LICENSE +0 -0
  43. {osism-0.20250312.0 → osism-0.20250314.0}/README.md +0 -0
  44. {osism-0.20250312.0 → osism-0.20250314.0}/files/change.sh +0 -0
  45. {osism-0.20250312.0 → osism-0.20250314.0}/files/cleanup-ansible-collections.sh +0 -0
  46. {osism-0.20250312.0 → osism-0.20250314.0}/files/clustershell/clush.conf +0 -0
  47. {osism-0.20250312.0 → osism-0.20250314.0}/files/clustershell/groups.conf +0 -0
  48. {osism-0.20250312.0 → osism-0.20250314.0}/files/data/SCS-Spec.MandatoryFlavors.verbose.yaml +0 -0
  49. {osism-0.20250312.0 → osism-0.20250314.0}/files/run-ansible-console.sh +0 -0
  50. {osism-0.20250312.0 → osism-0.20250314.0}/osism/__init__.py +0 -0
  51. {osism-0.20250312.0 → osism-0.20250314.0}/osism/__main__.py +0 -0
  52. {osism-0.20250312.0 → osism-0.20250314.0}/osism/actions/__init__.py +0 -0
  53. {osism-0.20250312.0 → osism-0.20250314.0}/osism/actions/manage_interface.py +0 -0
  54. {osism-0.20250312.0 → osism-0.20250314.0}/osism/api.py +0 -0
  55. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/__init__.py +0 -0
  56. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/apply.py +0 -0
  57. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/compose.py +0 -0
  58. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/compute.py +0 -0
  59. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/configuration.py +0 -0
  60. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/console.py +0 -0
  61. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/container.py +0 -0
  62. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/get.py +0 -0
  63. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/log.py +0 -0
  64. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/manage.py +0 -0
  65. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/noset.py +0 -0
  66. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/reconciler.py +0 -0
  67. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/server.py +0 -0
  68. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/service.py +0 -0
  69. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/set.py +0 -0
  70. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/status.py +0 -0
  71. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/sync.py +0 -0
  72. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/task.py +0 -0
  73. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/validate.py +0 -0
  74. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/vault.py +0 -0
  75. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/volume.py +0 -0
  76. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/wait.py +0 -0
  77. {osism-0.20250312.0 → osism-0.20250314.0}/osism/commands/worker.py +0 -0
  78. {osism-0.20250312.0 → osism-0.20250314.0}/osism/core/__init__.py +0 -0
  79. {osism-0.20250312.0 → osism-0.20250314.0}/osism/core/enums.py +0 -0
  80. {osism-0.20250312.0 → osism-0.20250314.0}/osism/core/playbooks.py +0 -0
  81. {osism-0.20250312.0 → osism-0.20250314.0}/osism/data/__init__.py +0 -0
  82. {osism-0.20250312.0 → osism-0.20250314.0}/osism/main.py +0 -0
  83. {osism-0.20250312.0 → osism-0.20250314.0}/osism/plugins/__init__.py +0 -0
  84. {osism-0.20250312.0 → osism-0.20250314.0}/osism/services/__init__.py +0 -0
  85. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/ansible.py +0 -0
  86. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/ceph.py +0 -0
  87. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/conductor.py +0 -0
  88. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/kolla.py +0 -0
  89. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/kubernetes.py +0 -0
  90. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/openstack.py +0 -0
  91. {osism-0.20250312.0 → osism-0.20250314.0}/osism/tasks/reconciler.py +0 -0
  92. {osism-0.20250312.0 → osism-0.20250314.0}/osism/utils/__init__.py +0 -0
  93. {osism-0.20250312.0 → osism-0.20250314.0}/osism.egg-info/dependency_links.txt +0 -0
  94. {osism-0.20250312.0 → osism-0.20250314.0}/osism.egg-info/not-zip-safe +0 -0
  95. {osism-0.20250312.0 → osism-0.20250314.0}/osism.egg-info/top_level.txt +0 -0
  96. {osism-0.20250312.0 → osism-0.20250314.0}/playbooks/pre.yml +0 -0
  97. {osism-0.20250312.0 → osism-0.20250314.0}/playbooks/test-setup.yml +0 -0
  98. {osism-0.20250312.0 → osism-0.20250314.0}/requirements.ansible.txt +0 -0
  99. {osism-0.20250312.0 → osism-0.20250314.0}/requirements.yml +0 -0
  100. {osism-0.20250312.0 → osism-0.20250314.0}/setup.py +0 -0
@@ -0,0 +1,7 @@
1
+ CHANGES
2
+ =======
3
+
4
+ v0.20250314.0
5
+ -------------
6
+
7
+ * Replace netbox subcommands with netbox-manager (#1214)
@@ -25,6 +25,7 @@ python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.txt
25
25
  python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.ansible.txt
26
26
  python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.openstack-image-manager.txt
27
27
  python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.openstack-flavor-manager.txt
28
+ python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.netbox-manager.txt
28
29
 
29
30
  # install openstack-project-manager
30
31
  git clone --depth 1 https://github.com/osism/openstack-project-manager.git /openstack-project-manager
@@ -54,6 +55,8 @@ ENV CLUSTERSHELL_CFGDIR=/etc/clustershell/
54
55
  COPY files/clustershell/clush.conf /etc/clustershell/clush.conf
55
56
  COPY files/clustershell/groups.conf /etc/clustershell/groups.conf
56
57
 
58
+ COPY files/netbox-manager/settings.toml /usr/local/config/settings.toml
59
+
57
60
  SHELL ["/bin/bash", "-o", "pipefail", "-c"]
58
61
 
59
62
  RUN <<EOF
@@ -75,6 +78,7 @@ python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/re
75
78
  python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/requirements.ansible.txt
76
79
  python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/requirements.openstack-image-manager.txt
77
80
  python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/requirements.openstack-flavor-manager.txt
81
+ python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/requirements.netbox-manager.txt
78
82
 
79
83
  # install python-osism
80
84
  python3 -m pip --no-cache-dir install --no-index /src
@@ -82,6 +86,7 @@ python3 -m pip --no-cache-dir install --no-index /src
82
86
  # install ansible collections
83
87
  mkdir -p /ansible/logs
84
88
  ansible-galaxy collection install -v -f -r /ansible/requirements.yml -p /usr/share/ansible/collections
89
+ ansible-galaxy collection install -v -f -r /usr/local/lib/python*/site-packages/netbox_manager/requirements.yml -p /usr/share/ansible/collections
85
90
  ln -s /usr/share/ansible/collections /ansible/collections
86
91
 
87
92
  # copy image definitions for the openstack-image-manager
@@ -128,35 +133,3 @@ pip3 uninstall -y pyclean
128
133
  EOF
129
134
 
130
135
  ENTRYPOINT ["/usr/bin/tini", "--"]
131
-
132
- FROM osism AS osism-netbox
133
-
134
- SHELL ["/bin/bash", "-o", "pipefail", "-c"]
135
-
136
- RUN <<EOF
137
- set -e
138
- set -x
139
-
140
- apt-get update
141
- apt-get install -y --no-install-recommends \
142
- git \
143
- tini
144
-
145
- mkdir -p /import
146
- git clone --depth 1 https://github.com/netbox-community/devicetype-library /devicetype-library
147
- rm -rf /devicetype-library/.git
148
- rm -rf /devicetype-library/elevation-images
149
-
150
- apt-get clean
151
- rm -rf \
152
- /tmp/* \
153
- /var/cache/apt \
154
- /var/lib/apt/lists/* \
155
- /var/tmp/*
156
-
157
- pip3 install --no-cache-dir pyclean==3.0.0
158
- pyclean /usr
159
- pip3 uninstall -y pyclean
160
- EOF
161
-
162
- COPY files/import/* /import
@@ -25,6 +25,7 @@ python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.txt
25
25
  python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.ansible.txt
26
26
  python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.openstack-image-manager.txt
27
27
  python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.openstack-flavor-manager.txt
28
+ python3 -m pip wheel --no-cache-dir --wheel-dir=/wheels -r /src/requirements.netbox-manager.txt
28
29
 
29
30
  # install openstack-project-manager
30
31
  git clone --depth 1 https://github.com/osism/openstack-project-manager.git /openstack-project-manager
@@ -54,6 +55,8 @@ ENV CLUSTERSHELL_CFGDIR=/etc/clustershell/
54
55
  COPY files/clustershell/clush.conf /etc/clustershell/clush.conf
55
56
  COPY files/clustershell/groups.conf /etc/clustershell/groups.conf
56
57
 
58
+ COPY files/netbox-manager/settings.toml /usr/local/config/settings.toml
59
+
57
60
  SHELL ["/bin/bash", "-o", "pipefail", "-c"]
58
61
 
59
62
  RUN <<EOF
@@ -75,6 +78,7 @@ python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/re
75
78
  python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/requirements.ansible.txt
76
79
  python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/requirements.openstack-image-manager.txt
77
80
  python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/requirements.openstack-flavor-manager.txt
81
+ python3 -m pip --no-cache-dir install --no-index --find-links=/wheels -r /src/requirements.netbox-manager.txt
78
82
 
79
83
  # install python-osism
80
84
  python3 -m pip --no-cache-dir install --no-index /src
@@ -82,6 +86,7 @@ python3 -m pip --no-cache-dir install --no-index /src
82
86
  # install ansible collections
83
87
  mkdir -p /ansible/logs
84
88
  ansible-galaxy collection install -v -f -r /ansible/requirements.yml -p /usr/share/ansible/collections
89
+ ansible-galaxy collection install -v -f -r /usr/local/lib/python*/site-packages/netbox_manager/requirements.yml -p /usr/share/ansible/collections
85
90
  ln -s /usr/share/ansible/collections /ansible/collections
86
91
 
87
92
  # copy image definitions for the openstack-image-manager
@@ -128,35 +133,3 @@ pip3 uninstall -y pyclean
128
133
  EOF
129
134
 
130
135
  ENTRYPOINT ["/usr/bin/tini", "--"]
131
-
132
- FROM osism AS osism-netbox
133
-
134
- SHELL ["/bin/bash", "-o", "pipefail", "-c"]
135
-
136
- RUN <<EOF
137
- set -e
138
- set -x
139
-
140
- apt-get update
141
- apt-get install -y --no-install-recommends \
142
- git \
143
- tini
144
-
145
- mkdir -p /import
146
- git clone --depth 1 https://github.com/netbox-community/devicetype-library /devicetype-library
147
- rm -rf /devicetype-library/.git
148
- rm -rf /devicetype-library/elevation-images
149
-
150
- apt-get clean
151
- rm -rf \
152
- /tmp/* \
153
- /var/cache/apt \
154
- /var/lib/apt/lists/* \
155
- /var/tmp/*
156
-
157
- pip3 install --no-cache-dir pyclean==3.0.0
158
- pyclean /usr
159
- pip3 uninstall -y pyclean
160
- EOF
161
-
162
- COPY files/import/* /import
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: osism
3
- Version: 0.20250312.0
3
+ Version: 0.20250314.0
4
4
  Summary: OSISM manager interface
5
5
  Home-page: https://github.com/osism/python-osism
6
6
  Author: OSISM GmbH
@@ -36,13 +36,13 @@ Requires-Dist: flower==2.0.1
36
36
  Requires-Dist: hiredis==3.1.0
37
37
  Requires-Dist: jc==1.25.4
38
38
  Requires-Dist: keystoneauth1==5.10.0
39
- Requires-Dist: kombu==5.4.2
39
+ Requires-Dist: kombu==5.5.0
40
40
  Requires-Dist: kubernetes==32.0.1
41
41
  Requires-Dist: loguru==0.7.3
42
42
  Requires-Dist: netmiko==4.5.0
43
43
  Requires-Dist: nornir-ansible==2023.12.28
44
44
  Requires-Dist: nornir==3.5.0
45
- Requires-Dist: openstacksdk==4.2.0
45
+ Requires-Dist: openstacksdk==4.4.0
46
46
  Requires-Dist: pottery==3.0.0
47
47
  Requires-Dist: prompt-toolkit==3.0.50
48
48
  Requires-Dist: pydantic==1.10.21
@@ -60,7 +60,7 @@ Provides-Extra: ansible
60
60
  Requires-Dist: ansible-runner==2.4.0; extra == "ansible"
61
61
  Requires-Dist: ansible-core==2.18.3; extra == "ansible"
62
62
  Provides-Extra: openstack-image-manager
63
- Requires-Dist: openstack-image-manager==0.20241216.0; extra == "openstack-image-manager"
63
+ Requires-Dist: openstack-image-manager==0.20250314.0; extra == "openstack-image-manager"
64
64
  Dynamic: author
65
65
  Dynamic: author-email
66
66
  Dynamic: classifier
@@ -20,13 +20,13 @@ hiredis = "==3.1.0"
20
20
  huey = "==2.5.2"
21
21
  jc = "==1.25.4"
22
22
  keystoneauth1 = "==5.10.0"
23
- kombu = "==5.4.2"
23
+ kombu = "==5.5.0"
24
24
  kubernetes = "==32.0.1"
25
25
  loguru = "==0.7.3"
26
26
  netmiko = "==4.5.0"
27
27
  nornir = "==3.5.0"
28
28
  nornir-ansible = "==2023.12.28"
29
- openstacksdk = "==4.2.0"
29
+ openstacksdk = "==4.4.0"
30
30
  pottery = "==3.0.0"
31
31
  prompt-toolkit = "==3.0.50"
32
32
  pydantic = "==1.10.21"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_meta": {
3
3
  "hash": {
4
- "sha256": "6676cd74bcbcca89e6549c64cd06d0bad28cb8c7a3e946c5d165fb0a16578cfe"
4
+ "sha256": "6bdb174bf4d6e43d11f5e5cef146584d0ec52704cd7bdf992904434cf48dd68b"
5
5
  },
6
6
  "pipfile-spec": 6,
7
7
  "requires": {},
@@ -786,12 +786,12 @@
786
786
  },
787
787
  "kombu": {
788
788
  "hashes": [
789
- "sha256:14212f5ccf022fc0a70453bb025a1dcc32782a588c49ea866884047d66e14763",
790
- "sha256:eef572dd2fd9fc614b37580e3caeafdd5af46c1eff31e7fba89138cdb406f2cf"
789
+ "sha256:526c6cf038c986b998639109a1eb762502f831e8da148cc928f1f95cd91eb874",
790
+ "sha256:72e65c062e903ee1b4e8b68d348f63c02afc172eda409e3aca85867752e79c0b"
791
791
  ],
792
792
  "index": "pypi",
793
793
  "markers": "python_version >= '3.8'",
794
- "version": "==5.4.2"
794
+ "version": "==5.5.0"
795
795
  },
796
796
  "kubernetes": {
797
797
  "hashes": [
@@ -1033,12 +1033,12 @@
1033
1033
  },
1034
1034
  "openstacksdk": {
1035
1035
  "hashes": [
1036
- "sha256:238be0fa5d9899872b00787ab38e84f92fd6dc87525fde0965dadcdc12196dc6",
1037
- "sha256:5cb9450dcce8054a2caf89d8be9e55057ddfa219a954e781032241eb29280445"
1036
+ "sha256:157437563d64f3f6feec1796fbd8552d56277332461778c4dbe76d1828fd31e0",
1037
+ "sha256:a0c8a0c2a1cd4589ce4a9bd812df4d48f538b4bb4b7c4b19ff7b0ef9423a28b0"
1038
1038
  ],
1039
1039
  "index": "pypi",
1040
1040
  "markers": "python_version >= '3.9'",
1041
- "version": "==4.2.0"
1041
+ "version": "==4.4.0"
1042
1042
  },
1043
1043
  "orderly-set": {
1044
1044
  "hashes": [
@@ -1481,66 +1481,66 @@
1481
1481
  },
1482
1482
  "sqlalchemy": {
1483
1483
  "hashes": [
1484
- "sha256:0398361acebb42975deb747a824b5188817d32b5c8f8aba767d51ad0cc7bb08d",
1485
- "sha256:0561832b04c6071bac3aad45b0d3bb6d2c4f46a8409f0a7a9c9fa6673b41bc03",
1486
- "sha256:07258341402a718f166618470cde0c34e4cec85a39767dce4e24f61ba5e667ea",
1487
- "sha256:0a826f21848632add58bef4f755a33d45105d25656a0c849f2dc2df1c71f6f50",
1488
- "sha256:1052723e6cd95312f6a6eff9a279fd41bbae67633415373fdac3c430eca3425d",
1489
- "sha256:12d5b06a1f3aeccf295a5843c86835033797fea292c60e72b07bcb5d820e6dd3",
1490
- "sha256:12f5c9ed53334c3ce719155424dc5407aaa4f6cadeb09c5b627e06abb93933a1",
1491
- "sha256:2a0ef3f98175d77180ffdc623d38e9f1736e8d86b6ba70bff182a7e68bed7727",
1492
- "sha256:2f2951dc4b4f990a4b394d6b382accb33141d4d3bd3ef4e2b27287135d6bdd68",
1493
- "sha256:3868acb639c136d98107c9096303d2d8e5da2880f7706f9f8c06a7f961961149",
1494
- "sha256:386b7d136919bb66ced64d2228b92d66140de5fefb3c7df6bd79069a269a7b06",
1495
- "sha256:3d3043375dd5bbcb2282894cbb12e6c559654c67b5fffb462fda815a55bf93f7",
1496
- "sha256:3e35d5565b35b66905b79ca4ae85840a8d40d31e0b3e2990f2e7692071b179ca",
1497
- "sha256:402c2316d95ed90d3d3c25ad0390afa52f4d2c56b348f212aa9c8d072a40eee5",
1498
- "sha256:40310db77a55512a18827488e592965d3dec6a3f1e3d8af3f8243134029daca3",
1499
- "sha256:40e9cdbd18c1f84631312b64993f7d755d85a3930252f6276a77432a2b25a2f3",
1500
- "sha256:49aa2cdd1e88adb1617c672a09bf4ebf2f05c9448c6dbeba096a3aeeb9d4d443",
1501
- "sha256:57dd41ba32430cbcc812041d4de8d2ca4651aeefad2626921ae2a23deb8cd6ff",
1502
- "sha256:5dba1cdb8f319084f5b00d41207b2079822aa8d6a4667c0f369fce85e34b0c86",
1503
- "sha256:5e1d9e429028ce04f187a9f522818386c8b076723cdbe9345708384f49ebcec6",
1504
- "sha256:63178c675d4c80def39f1febd625a6333f44c0ba269edd8a468b156394b27753",
1505
- "sha256:6493bc0eacdbb2c0f0d260d8988e943fee06089cd239bd7f3d0c45d1657a70e2",
1506
- "sha256:64aa8934200e222f72fcfd82ee71c0130a9c07d5725af6fe6e919017d095b297",
1507
- "sha256:665255e7aae5f38237b3a6eae49d2358d83a59f39ac21036413fab5d1e810578",
1508
- "sha256:6db316d6e340f862ec059dc12e395d71f39746a20503b124edc255973977b728",
1509
- "sha256:70065dfabf023b155a9c2a18f573e47e6ca709b9e8619b2e04c54d5bcf193178",
1510
- "sha256:8455aa60da49cb112df62b4721bd8ad3654a3a02b9452c783e651637a1f21fa2",
1511
- "sha256:8b0ac78898c50e2574e9f938d2e5caa8fe187d7a5b69b65faa1ea4648925b096",
1512
- "sha256:8bf312ed8ac096d674c6aa9131b249093c1b37c35db6a967daa4c84746bc1bc9",
1513
- "sha256:92f99f2623ff16bd4aaf786ccde759c1f676d39c7bf2855eb0b540e1ac4530c8",
1514
- "sha256:9c8bcad7fc12f0cc5896d8e10fdf703c45bd487294a986903fe032c72201596b",
1515
- "sha256:9cd136184dd5f58892f24001cdce986f5d7e96059d004118d5410671579834a4",
1516
- "sha256:9eb4fa13c8c7a2404b6a8e3772c17a55b1ba18bc711e25e4d6c0c9f5f541b02a",
1517
- "sha256:a2bc4e49e8329f3283d99840c136ff2cd1a29e49b5624a46a290f04dff48e079",
1518
- "sha256:a5645cd45f56895cfe3ca3459aed9ff2d3f9aaa29ff7edf557fa7a23515a3725",
1519
- "sha256:a9afbc3909d0274d6ac8ec891e30210563b2c8bdd52ebbda14146354e7a69373",
1520
- "sha256:aa498d1392216fae47eaf10c593e06c34476ced9549657fca713d0d1ba5f7248",
1521
- "sha256:afd776cf1ebfc7f9aa42a09cf19feadb40a26366802d86c1fba080d8e5e74bdd",
1522
- "sha256:b335a7c958bc945e10c522c069cd6e5804f4ff20f9a744dd38e748eb602cbbda",
1523
- "sha256:b3c4817dff8cef5697f5afe5fec6bc1783994d55a68391be24cb7d80d2dbc3a6",
1524
- "sha256:b79ee64d01d05a5476d5cceb3c27b5535e6bb84ee0f872ba60d9a8cd4d0e6579",
1525
- "sha256:b87a90f14c68c925817423b0424381f0e16d80fc9a1a1046ef202ab25b19a444",
1526
- "sha256:bf89e0e4a30714b357f5d46b6f20e0099d38b30d45fa68ea48589faf5f12f62d",
1527
- "sha256:c058b84c3b24812c859300f3b5abf300daa34df20d4d4f42e9652a4d1c48c8a4",
1528
- "sha256:c09a6ea87658695e527104cf857c70f79f14e9484605e205217aae0ec27b45fc",
1529
- "sha256:c57b8e0841f3fce7b703530ed70c7c36269c6d180ea2e02e36b34cb7288c50c7",
1530
- "sha256:c9cea5b756173bb86e2235f2f871b406a9b9d722417ae31e5391ccaef5348f2c",
1531
- "sha256:cb39ed598aaf102251483f3e4675c5dd6b289c8142210ef76ba24aae0a8f8aba",
1532
- "sha256:e036549ad14f2b414c725349cce0772ea34a7ab008e9cd67f9084e4f371d1f32",
1533
- "sha256:e185ea07a99ce8b8edfc788c586c538c4b1351007e614ceb708fd01b095ef33e",
1534
- "sha256:e5a4d82bdb4bf1ac1285a68eab02d253ab73355d9f0fe725a97e1e0fa689decb",
1535
- "sha256:eae27ad7580529a427cfdd52c87abb2dfb15ce2b7a3e0fc29fbb63e2ed6f8120",
1536
- "sha256:ecef029b69843b82048c5b347d8e6049356aa24ed644006c9a9d7098c3bd3bfd",
1537
- "sha256:ee3bee874cb1fadee2ff2b79fc9fc808aa638670f28b2145074538d4a6a5028e",
1538
- "sha256:f0d3de936b192980209d7b5149e3c98977c3810d401482d05fb6d668d53c1c63",
1539
- "sha256:f53c0d6a859b2db58332e0e6a921582a02c1677cc93d4cbb36fdf49709b327b2",
1540
- "sha256:f9d57f1b3061b3e21476b0ad5f0397b112b94ace21d1f439f2db472e568178ae"
1484
+ "sha256:018ee97c558b499b58935c5a152aeabf6d36b3d55d91656abeb6d93d663c0c4c",
1485
+ "sha256:01da15490c9df352fbc29859d3c7ba9cd1377791faeeb47c100832004c99472c",
1486
+ "sha256:04545042969833cb92e13b0a3019549d284fd2423f318b6ba10e7aa687690a3c",
1487
+ "sha256:06205eb98cb3dd52133ca6818bf5542397f1dd1b69f7ea28aa84413897380b06",
1488
+ "sha256:08cf721bbd4391a0e765fe0fe8816e81d9f43cece54fdb5ac465c56efafecb3d",
1489
+ "sha256:0d7e3866eb52d914aea50c9be74184a0feb86f9af8aaaa4daefe52b69378db0b",
1490
+ "sha256:125a7763b263218a80759ad9ae2f3610aaf2c2fbbd78fff088d584edf81f3782",
1491
+ "sha256:23c5aa33c01bd898f879db158537d7e7568b503b15aad60ea0c8da8109adf3e7",
1492
+ "sha256:2600a50d590c22d99c424c394236899ba72f849a02b10e65b4c70149606408b5",
1493
+ "sha256:2d7332868ce891eda48896131991f7f2be572d65b41a4050957242f8e935d5d7",
1494
+ "sha256:2ed107331d188a286611cea9022de0afc437dd2d3c168e368169f27aa0f61338",
1495
+ "sha256:3395e7ed89c6d264d38bea3bfb22ffe868f906a7985d03546ec7dc30221ea980",
1496
+ "sha256:344cd1ec2b3c6bdd5dfde7ba7e3b879e0f8dd44181f16b895940be9b842fd2b6",
1497
+ "sha256:34d5c49f18778a3665d707e6286545a30339ad545950773d43977e504815fa70",
1498
+ "sha256:35e72518615aa5384ef4fae828e3af1b43102458b74a8c481f69af8abf7e802a",
1499
+ "sha256:3eb14ba1a9d07c88669b7faf8f589be67871d6409305e73e036321d89f1d904e",
1500
+ "sha256:412c6c126369ddae171c13987b38df5122cb92015cba6f9ee1193b867f3f1530",
1501
+ "sha256:4600c7a659d381146e1160235918826c50c80994e07c5b26946a3e7ec6c99249",
1502
+ "sha256:463ecfb907b256e94bfe7bcb31a6d8c7bc96eca7cbe39803e448a58bb9fcad02",
1503
+ "sha256:4a06e6c8e31c98ddc770734c63903e39f1947c9e3e5e4bef515c5491b7737dde",
1504
+ "sha256:4b2de1523d46e7016afc7e42db239bd41f2163316935de7c84d0e19af7e69538",
1505
+ "sha256:4dabd775fd66cf17f31f8625fc0e4cfc5765f7982f94dc09b9e5868182cb71c0",
1506
+ "sha256:4eff9c270afd23e2746e921e80182872058a7a592017b2713f33f96cc5f82e32",
1507
+ "sha256:52607d0ebea43cf214e2ee84a6a76bc774176f97c5a774ce33277514875a718e",
1508
+ "sha256:533e0f66c32093a987a30df3ad6ed21170db9d581d0b38e71396c49718fbb1ca",
1509
+ "sha256:5493a8120d6fc185f60e7254fc056a6742f1db68c0f849cfc9ab46163c21df47",
1510
+ "sha256:5d2d1fe548def3267b4c70a8568f108d1fed7cbbeccb9cc166e05af2abc25c22",
1511
+ "sha256:5dfbc543578058c340360f851ddcecd7a1e26b0d9b5b69259b526da9edfa8875",
1512
+ "sha256:66a40003bc244e4ad86b72abb9965d304726d05a939e8c09ce844d27af9e6d37",
1513
+ "sha256:67de057fbcb04a066171bd9ee6bcb58738d89378ee3cabff0bffbf343ae1c787",
1514
+ "sha256:6827f8c1b2f13f1420545bd6d5b3f9e0b85fe750388425be53d23c760dcf176b",
1515
+ "sha256:6b35e07f1d57b79b86a7de8ecdcefb78485dab9851b9638c2c793c50203b2ae8",
1516
+ "sha256:7399d45b62d755e9ebba94eb89437f80512c08edde8c63716552a3aade61eb42",
1517
+ "sha256:788b6ff6728072b313802be13e88113c33696a9a1f2f6d634a97c20f7ef5ccce",
1518
+ "sha256:78f1b79132a69fe8bd6b5d91ef433c8eb40688ba782b26f8c9f3d2d9ca23626f",
1519
+ "sha256:79f4f502125a41b1b3b34449e747a6abfd52a709d539ea7769101696bdca6716",
1520
+ "sha256:7a8517b6d4005facdbd7eb4e8cf54797dbca100a7df459fdaff4c5123265c1cd",
1521
+ "sha256:7bd5c5ee1448b6408734eaa29c0d820d061ae18cb17232ce37848376dcfa3e92",
1522
+ "sha256:7f5243357e6da9a90c56282f64b50d29cba2ee1f745381174caacc50d501b109",
1523
+ "sha256:805cb481474e111ee3687c9047c5f3286e62496f09c0e82e8853338aaaa348f8",
1524
+ "sha256:871f55e478b5a648c08dd24af44345406d0e636ffe021d64c9b57a4a11518304",
1525
+ "sha256:87a1ce1f5e5dc4b6f4e0aac34e7bb535cb23bd4f5d9c799ed1633b65c2bcad8c",
1526
+ "sha256:8a10ca7f8a1ea0fd5630f02feb055b0f5cdfcd07bb3715fc1b6f8cb72bf114e4",
1527
+ "sha256:995c2bacdddcb640c2ca558e6760383dcdd68830160af92b5c6e6928ffd259b4",
1528
+ "sha256:9f03143f8f851dd8de6b0c10784363712058f38209e926723c80654c1b40327a",
1529
+ "sha256:a1c6b0a5e3e326a466d809b651c63f278b1256146a377a528b6938a279da334f",
1530
+ "sha256:a28f9c238f1e143ff42ab3ba27990dfb964e5d413c0eb001b88794c5c4a528a9",
1531
+ "sha256:b2cf5b5ddb69142511d5559c427ff00ec8c0919a1e6c09486e9c32636ea2b9dd",
1532
+ "sha256:b761a6847f96fdc2d002e29e9e9ac2439c13b919adfd64e8ef49e75f6355c548",
1533
+ "sha256:bf555f3e25ac3a70c67807b2949bfe15f377a40df84b71ab2c58d8593a1e036e",
1534
+ "sha256:c08a972cbac2a14810463aec3a47ff218bb00c1a607e6689b531a7c589c50723",
1535
+ "sha256:c457a38351fb6234781d054260c60e531047e4d07beca1889b558ff73dc2014b",
1536
+ "sha256:c4c433f78c2908ae352848f56589c02b982d0e741b7905228fad628999799de4",
1537
+ "sha256:d9f119e7736967c0ea03aff91ac7d04555ee038caf89bb855d93bbd04ae85b41",
1538
+ "sha256:e6b0a1c7ed54a5361aaebb910c1fa864bae34273662bb4ff788a527eafd6e14d",
1539
+ "sha256:f2bcb085faffcacf9319b1b1445a7e1cfdc6fb46c03f2dce7bc2d9a4b3c1cdc5",
1540
+ "sha256:fe193d3ae297c423e0e567e240b4324d6b6c280a048e64c77a3ea6886cc2aa87"
1541
1541
  ],
1542
1542
  "markers": "python_version >= '3.7'",
1543
- "version": "==2.0.38"
1543
+ "version": "==2.0.39"
1544
1544
  },
1545
1545
  "sqlmodel": {
1546
1546
  "hashes": [
@@ -0,0 +1,3 @@
1
+ DEVICETYPE_LIBRARY = "/netbox/devicetypes"
2
+ MODULETYPE_LIBRARY = "/netbox/moduletypes"
3
+ RESOURCES = "/netbox/resources"
@@ -0,0 +1,120 @@
1
+ # SPDX-License-Identifier: CC-BY-NC-4.0
2
+ # Copyright OSISM GmbH, 2022-2023
3
+
4
+ from loguru import logger
5
+ from pottery import Redlock
6
+
7
+ from osism import utils
8
+
9
+
10
+ def get_state(device):
11
+ """Gets the state (device_state) stored in the Netbox for a device."""
12
+
13
+ result = None
14
+ device_a = utils.nb.dcim.devices.get(name=device)
15
+ result = device_a.custom_fields["device_state"]
16
+
17
+ return result
18
+
19
+
20
+ def get_states(devices):
21
+ """Gets the state (device_state) stored in the Netbox for a list of devices."""
22
+
23
+ result = {}
24
+ for device in devices:
25
+ device_a = utils.nb.dcim.devices.get(name=device)
26
+ result[device] = device_a.custom_fields["device_state"]
27
+
28
+ return result
29
+
30
+
31
+ def set_maintenance(device, state):
32
+ """Set the maintenance state for a device in the Netbox."""
33
+
34
+ logger.info(f"Set maintenance state of device {device} = {state}")
35
+
36
+ device_a = utils.nb.dcim.devices.get(name=device)
37
+ device_a.custom_fields = {"maintenance": state}
38
+ device_a.save()
39
+
40
+
41
+ def set_ironic_state(device, state):
42
+ """Set the ironic state (ironic_state) for a device in the Netbox."""
43
+
44
+ logger.info(f"Set ironic state of device {device} = {state}")
45
+
46
+ device_a = utils.nb.dcim.devices.get(name=device)
47
+ device_a.custom_fields = {"ironic_state": state}
48
+ device_a.save()
49
+
50
+
51
+ def set_introspection_state(device, state):
52
+ """Set the introspection state (introspection_state) for a device in the Netbox."""
53
+
54
+ logger.info(f"Set introspection state of device {device} = {state}")
55
+
56
+ device_a = utils.nb.dcim.devices.get(name=device)
57
+ device_a.custom_fields = {"introspection_state": state}
58
+ device_a.save()
59
+
60
+
61
+ def set_deployment_state(device, state):
62
+ """Set the deployment state (deployment_state) for a device in the Netbox."""
63
+
64
+ logger.info(f"Set deployment state of device {device} = {state}")
65
+
66
+ device_a = utils.nb.dcim.devices.get(name=device)
67
+ device_a.custom_fields = {"deployment_state": state}
68
+ device_a.save()
69
+
70
+
71
+ def set_device_state(device, state):
72
+ """Set the state (device_state) for a device in the Netbox."""
73
+
74
+ logger.info(f"Set state of device {device} = {state}")
75
+
76
+ device_a = utils.nb.dcim.devices.get(name=device)
77
+ device_a.custom_fields = {"device_state": state}
78
+ device_a.save()
79
+
80
+
81
+ def set_state(device, state, state_type):
82
+ """Set the state for a device in the Netbox."""
83
+
84
+ lock = Redlock(key=f"lock_state_{device}", masters={utils.redis})
85
+ lock.acquire()
86
+
87
+ if state_type == "power":
88
+ set_power_state(device, state)
89
+ elif state_type == "provision":
90
+ set_provision_state(device, state)
91
+ elif state_type == "introspection":
92
+ set_introspection_state(device, state)
93
+ elif state_type == "ironic":
94
+ set_ironic_state(device, state)
95
+ elif state_type == "deployment":
96
+ set_deployment_state(device, state)
97
+ else:
98
+ set_device_state(device, state)
99
+
100
+ lock.release()
101
+
102
+
103
+ def set_provision_state(device, state):
104
+ """Set the provision state (provision_state) for a device in the Netbox."""
105
+
106
+ logger.info(f"Set provision state of device {device} = {state}")
107
+
108
+ device_a = utils.nb.dcim.devices.get(name=device)
109
+ device_a.custom_fields = {"provision_state": state}
110
+ device_a.save()
111
+
112
+
113
+ def set_power_state(device, state):
114
+ """Set the power state (power_state) for a device in the Netbox."""
115
+
116
+ logger.info(f"Set power state of device {device} = {state}")
117
+
118
+ device_a = utils.nb.dcim.devices.get(name=device)
119
+ device_a.custom_fields = {"power_state": state}
120
+ device_a.save()
@@ -0,0 +1,164 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+
3
+ import argparse
4
+
5
+ from cliff.command import Command
6
+ from loguru import logger
7
+ from redis import Redis
8
+
9
+ from osism import settings
10
+ from osism.tasks import conductor, netbox, reconciler, openstack, handle_task
11
+
12
+
13
+ redis = Redis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=settings.REDIS_DB)
14
+ redis.ping()
15
+
16
+
17
+ class Run(Command):
18
+ def get_parser(self, prog_name):
19
+ parser = super(Run, self).get_parser(prog_name)
20
+ parser.add_argument(
21
+ "arguments", nargs=argparse.REMAINDER, help="Other arguments for Ansible"
22
+ )
23
+ parser.add_argument(
24
+ "--no-wait",
25
+ default=False,
26
+ help="Do not wait until the role has been applied",
27
+ action="store_true",
28
+ )
29
+ return parser
30
+
31
+ def take_action(self, parsed_args):
32
+ pass
33
+
34
+
35
+ class Ironic(Command):
36
+ def get_parser(self, prog_name):
37
+ parser = super(Ironic, self).get_parser(prog_name)
38
+ return parser
39
+
40
+ def take_action(self, parsed_args):
41
+ # Get Ironic parameters from the conductor
42
+ task = conductor.get_ironic_parameters.delay()
43
+ task.wait(timeout=None, interval=0.5)
44
+ ironic_parameters = task.get()
45
+
46
+ # Add all unregistered systems from the Netbox in Ironic
47
+ netbox.get_devices_not_yet_registered_in_ironic.apply_async(
48
+ (), link=openstack.baremetal_create_nodes.s(ironic_parameters)
49
+ )
50
+
51
+ # Synchronize the current status in Ironic with the Netbox
52
+ # openstack.baremetal_node_list.apply_async((), link=netbox.synchronize_device_state.s())
53
+
54
+ # Remove systems from Ironic that are no longer present in the Netbox
55
+
56
+
57
+ class Sync(Command):
58
+ def get_parser(self, prog_name):
59
+ parser = super(Sync, self).get_parser(prog_name)
60
+ parser.add_argument(
61
+ "--no-wait",
62
+ default=False,
63
+ help="Do not wait until the sync has been completed",
64
+ action="store_true",
65
+ )
66
+ return parser
67
+
68
+ def take_action(self, parsed_args):
69
+ wait = not parsed_args.no_wait
70
+
71
+ task = reconciler.sync_inventory_with_netbox.delay()
72
+ if wait:
73
+ logger.info(f"Task {task.task_id} is running. Wait. No more output.")
74
+ task.wait(timeout=None, interval=0.5)
75
+
76
+
77
+ class Manage(Command):
78
+ def get_parser(self, prog_name):
79
+ parser = super(Manage, self).get_parser(prog_name)
80
+ parser.add_argument(
81
+ "--no-wait",
82
+ default=False,
83
+ help="Do not wait until the management of the netbox has been completed",
84
+ action="store_true",
85
+ )
86
+ parser.add_argument(
87
+ "--no-netbox-wait",
88
+ default=False,
89
+ help="Do not wait for the netbox API to be ready",
90
+ action="store_true",
91
+ )
92
+ parser.add_argument(
93
+ "--limit",
94
+ type=str,
95
+ default=None,
96
+ help="Limit files by prefix",
97
+ )
98
+ parser.add_argument(
99
+ "--skipdtl",
100
+ default=False,
101
+ help="Skip devicetype library",
102
+ action="store_true",
103
+ )
104
+ parser.add_argument(
105
+ "--skipmtl",
106
+ default=False,
107
+ help="Skip moduletype library",
108
+ action="store_true",
109
+ )
110
+ parser.add_argument(
111
+ "--skipres",
112
+ default=False,
113
+ help="Skip resources",
114
+ action="store_true",
115
+ )
116
+ return parser
117
+
118
+ def take_action(self, parsed_args):
119
+ wait = not parsed_args.no_wait
120
+ arguments = []
121
+
122
+ if parsed_args.no_netbox_wait:
123
+ arguments.append("--no-wait")
124
+ else:
125
+ arguments.append("--wait")
126
+
127
+ if parsed_args.limit:
128
+ arguments.append("--limit {parsed_args.limit}")
129
+
130
+ if parsed_args.skipdtl:
131
+ arguments.append("--skipdtl")
132
+ else:
133
+ arguments.append("--no-skipdtl")
134
+
135
+ if parsed_args.skipmtl:
136
+ arguments.append("--skipmtl")
137
+ else:
138
+ arguments.append("--no-skipmtl")
139
+
140
+ if parsed_args.skipres:
141
+ arguments.append("--skipres")
142
+ else:
143
+ arguments.append("--no-skipres")
144
+
145
+ task_signature = netbox.manage.si(*arguments)
146
+ task = task_signature.apply_async()
147
+ if wait:
148
+ logger.info(
149
+ f"It takes a moment until task {task.task_id} (netbox-manager) has been started and output is visible here."
150
+ )
151
+
152
+ return handle_task(task, wait, format="script", timeout=3600)
153
+
154
+
155
+ class Ping(Command):
156
+ def get_parser(self, prog_name):
157
+ parser = super(Ping, self).get_parser(prog_name)
158
+ return parser
159
+
160
+ def take_action(self, parsed_args):
161
+ task = netbox.ping.delay()
162
+ task.wait(timeout=None, interval=0.5)
163
+ result = task.get()
164
+ print(result)