openstack-image-manager 0.20240812.0__tar.gz → 0.20240829.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.
- {openstack_image_manager-0.20240812.0/openstack_image_manager.egg-info → openstack_image_manager-0.20240829.0}/PKG-INFO +4 -4
- openstack_image_manager-0.20240829.0/etc/__init__.py +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/gardenlinux.yml +10 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/schema.yaml +1 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/openstack_image_manager/main.py +46 -19
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0/openstack_image_manager.egg-info}/PKG-INFO +4 -4
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/openstack_image_manager.egg-info/SOURCES.txt +1 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/openstack_image_manager.egg-info/requires.txt +3 -3
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/pyproject.toml +6 -3
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/requirements.txt +3 -3
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/LICENSE +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/MANIFEST.in +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/README.md +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/almalinux.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/centos.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/cirros.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/clearlinux.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/debian.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/fedora.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/flatcar.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/kubernetes.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/opensuse.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/opnsense.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/osism.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/rockylinux.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/talos.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/ubuntu.yml +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/openstack_image_manager/__init__.py +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/openstack_image_manager.egg-info/dependency_links.txt +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/openstack_image_manager.egg-info/entry_points.txt +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/openstack_image_manager.egg-info/top_level.txt +0 -0
- {openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: openstack-image-manager
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.20240829.0
|
4
4
|
Summary: OpenStack image manager
|
5
5
|
Author-email: OSISM community <info@osism.tech>
|
6
6
|
License: Apache License
|
@@ -223,16 +223,16 @@ Requires-Python: >=3.8
|
|
223
223
|
Description-Content-Type: text/markdown
|
224
224
|
License-File: LICENSE
|
225
225
|
Requires-Dist: loguru==0.7.2
|
226
|
-
Requires-Dist: minio==7.2.
|
226
|
+
Requires-Dist: minio==7.2.8
|
227
227
|
Requires-Dist: munch==4.0.0
|
228
228
|
Requires-Dist: natsort==8.4.0
|
229
229
|
Requires-Dist: openstacksdk==3.3.0
|
230
230
|
Requires-Dist: paramiko==3.4.1
|
231
|
-
Requires-Dist: patool==2.
|
231
|
+
Requires-Dist: patool==2.4.0
|
232
232
|
Requires-Dist: requests==2.32.3
|
233
233
|
Requires-Dist: ruamel.yaml==0.18.6
|
234
234
|
Requires-Dist: tabulate==0.9.0
|
235
|
-
Requires-Dist: typer[all]==0.12.
|
235
|
+
Requires-Dist: typer[all]==0.12.5
|
236
236
|
Requires-Dist: yamale==5.2.1
|
237
237
|
|
238
238
|
# openstack-image-manager
|
File without changes
|
@@ -33,3 +33,13 @@ images:
|
|
33
33
|
mirror_url: https://swift.services.a.regiocloud.tech/swift/v1/AUTH_b182637428444b9aa302bb8d5a5a418c/openstack-images/gardenlinux/1443.10/openstack-gardener_prod-amd64-1443.10-8d098305.qcow2
|
34
34
|
checksum: "sha256:fb85ca67608638167b876df2988f927815c00c4a4b3e6d11d20565aa55b0f268"
|
35
35
|
build_date: 2024-07-23
|
36
|
+
- version: '1592.0'
|
37
|
+
url: https://github.com/gardenlinux/gardenlinux/releases/download/1592.0/openstack-gardener_prod-amd64-1592.0-0cc2b85d.tar.xz
|
38
|
+
mirror_url: https://swift.services.a.regiocloud.tech/swift/v1/AUTH_b182637428444b9aa302bb8d5a5a418c/openstack-images/gardenlinux/1592.0/openstack-gardener_prod-amd64-1592.0-0cc2b85d.qcow2
|
39
|
+
checksum: "sha256:43fbd3af61b6c531bb32fb4b74a09371c538839e3afab6ca7fe023e854c40e67"
|
40
|
+
build_date: 2024-08-12
|
41
|
+
- version: '1592.1'
|
42
|
+
url: https://github.com/gardenlinux/gardenlinux/releases/download/1592.1/openstack-gardener_prod-amd64-1592.1-ec945aa9.tar.xz
|
43
|
+
mirror_url: https://swift.services.a.regiocloud.tech/swift/v1/AUTH_b182637428444b9aa302bb8d5a5a418c/openstack-images/gardenlinux/1592.1/openstack-gardener_prod-amd64-1592.1-ec945aa9.qcow2
|
44
|
+
checksum: "sha256:990f4843f4bb08dd5972710fb8909d4b3d34d53d1adecbec477f8c2e6bbc0db4"
|
45
|
+
build_date: 2024-08-22
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/schema.yaml
RENAMED
@@ -17,6 +17,7 @@ image:
|
|
17
17
|
password: str(required=False)
|
18
18
|
shortname: str(required=False)
|
19
19
|
status: enum('active', 'deactivated')
|
20
|
+
separator: str(required=False)
|
20
21
|
tags: list(str())
|
21
22
|
versions: list(include('versions'))
|
22
23
|
visibility: enum('public', 'private', 'community', 'shared')
|
@@ -12,6 +12,7 @@ import typing
|
|
12
12
|
from typing import Dict, Set
|
13
13
|
import yamale
|
14
14
|
import urllib.parse
|
15
|
+
import pkgutil
|
15
16
|
|
16
17
|
from datetime import datetime, date
|
17
18
|
from decimal import Decimal, ROUND_UP
|
@@ -92,9 +93,14 @@ class ImageManager:
|
|
92
93
|
"project", "--share-type", help="Share - Type: 'project' or 'domain'"
|
93
94
|
),
|
94
95
|
check: bool = typer.Option(
|
96
|
+
True,
|
97
|
+
"--check/--no-check",
|
98
|
+
help="Check the local image definitions against the SCS Image Metadata Standard (and process the images)",
|
99
|
+
),
|
100
|
+
check_only: bool = typer.Option(
|
95
101
|
False,
|
96
|
-
"--check",
|
97
|
-
help="
|
102
|
+
"--check-only",
|
103
|
+
help="Quit after checking the image definitions against the SCS Image Metadata Standard",
|
98
104
|
),
|
99
105
|
):
|
100
106
|
self.CONF = Munch.fromDict(locals())
|
@@ -209,11 +215,14 @@ class ImageManager:
|
|
209
215
|
)
|
210
216
|
|
211
217
|
# check local image definitions with yamale
|
212
|
-
if self.CONF.check:
|
218
|
+
if self.CONF.check or self.CONF.check_only:
|
213
219
|
self.validate_yaml_schema()
|
214
220
|
|
221
|
+
if self.CONF.check_only:
|
222
|
+
return
|
223
|
+
|
215
224
|
# share image (previously share.py)
|
216
|
-
|
225
|
+
if self.CONF.share_image:
|
217
226
|
self.create_connection()
|
218
227
|
image = self.conn.get_image(self.CONF.share_image)
|
219
228
|
|
@@ -355,6 +364,9 @@ class ImageManager:
|
|
355
364
|
if "image_description" not in image["meta"]:
|
356
365
|
image["meta"]["image_description"] = image["name"]
|
357
366
|
|
367
|
+
if "image_name" not in image["meta"]:
|
368
|
+
image["meta"]["image_name"] = image["name"]
|
369
|
+
|
358
370
|
existing_images, imported_image, previous_image = self.process_image(
|
359
371
|
image, versions, sorted_versions, image["meta"].copy()
|
360
372
|
)
|
@@ -362,7 +374,7 @@ class ImageManager:
|
|
362
374
|
|
363
375
|
if imported_image and image["multi"]:
|
364
376
|
self.rename_images(
|
365
|
-
image
|
377
|
+
image, sorted_versions, imported_image, previous_image
|
366
378
|
)
|
367
379
|
|
368
380
|
return managed_images
|
@@ -511,11 +523,14 @@ class ImageManager:
|
|
511
523
|
previous_image = None
|
512
524
|
upstream_checksum = ""
|
513
525
|
|
526
|
+
separator = image.get("separator", " ")
|
527
|
+
image_name = image["name"]
|
528
|
+
|
514
529
|
for version in sorted_versions:
|
515
530
|
if image["multi"]:
|
516
|
-
name = f"{
|
531
|
+
name = f"{image_name}{separator}({version})"
|
517
532
|
else:
|
518
|
-
name = f"{
|
533
|
+
name = f"{image_name}{separator}{version}"
|
519
534
|
|
520
535
|
logger.info(f"Processing image '{name}'")
|
521
536
|
logger.debug(f"Checking existence of '{name}'")
|
@@ -550,7 +565,7 @@ class ImageManager:
|
|
550
565
|
and version == sorted_versions[-1]
|
551
566
|
and not existence
|
552
567
|
):
|
553
|
-
previous = f"{image['name']}
|
568
|
+
previous = f"{image['name']}{separator}({sorted_versions[-2]})"
|
554
569
|
existence = previous in cloud_images and image["name"] in cloud_images
|
555
570
|
|
556
571
|
elif (
|
@@ -825,7 +840,7 @@ class ImageManager:
|
|
825
840
|
|
826
841
|
def rename_images(
|
827
842
|
self,
|
828
|
-
|
843
|
+
image: dict,
|
829
844
|
sorted_versions: list,
|
830
845
|
imported_image: Image,
|
831
846
|
previous_image: Image,
|
@@ -834,16 +849,18 @@ class ImageManager:
|
|
834
849
|
Rename outdated images in Glance (only applies to images of type multi)
|
835
850
|
|
836
851
|
Params:
|
837
|
-
|
852
|
+
image: image dict from images.yml
|
838
853
|
sorted_versions: list with all sorted image versions
|
839
854
|
imported_image: the newly imported image
|
840
855
|
previous_image: the previous latest image
|
841
856
|
"""
|
857
|
+
name = image["name"]
|
858
|
+
separator = image.get("separator", " ")
|
842
859
|
cloud_images = self.get_images()
|
843
860
|
|
844
861
|
if len(sorted_versions) > 1:
|
845
|
-
latest = f"{name}
|
846
|
-
previous_latest = f"{name}
|
862
|
+
latest = f"{name}{separator}({sorted_versions[-1]})"
|
863
|
+
previous_latest = f"{name}{separator}({sorted_versions[-2]})"
|
847
864
|
|
848
865
|
if name in cloud_images and previous_latest not in cloud_images:
|
849
866
|
logger.info(f"Renaming {name} to {previous_latest}")
|
@@ -865,7 +882,7 @@ class ImageManager:
|
|
865
882
|
)
|
866
883
|
create_date = create_date.replace("-", "")
|
867
884
|
|
868
|
-
previous_latest = f"{name}
|
885
|
+
previous_latest = f"{name}{separator}({create_date})"
|
869
886
|
|
870
887
|
logger.info(
|
871
888
|
f"Setting internal_version: {create_date} for {previous_latest}"
|
@@ -874,9 +891,7 @@ class ImageManager:
|
|
874
891
|
previous_image.id, **{"internal_version": create_date}
|
875
892
|
)
|
876
893
|
else:
|
877
|
-
previous_latest = (
|
878
|
-
f"{name} ({previous_image['properties']['internal_version']})"
|
879
|
-
)
|
894
|
+
previous_latest = f"{name}{separator}({previous_image['properties']['internal_version']})"
|
880
895
|
|
881
896
|
logger.info(f"Renaming old latest '{name}' to '{previous_latest}'")
|
882
897
|
self.conn.image.update_image(previous_image.id, name=previous_latest)
|
@@ -885,7 +900,7 @@ class ImageManager:
|
|
885
900
|
self.conn.image.update_image(imported_image.id, name=name)
|
886
901
|
|
887
902
|
elif len(sorted_versions) == 1:
|
888
|
-
latest = f"{name}
|
903
|
+
latest = f"{name}{separator}({sorted_versions[-1]})"
|
889
904
|
|
890
905
|
if latest in cloud_images:
|
891
906
|
logger.info(f"Renaming {latest} to {name}")
|
@@ -1100,25 +1115,37 @@ class ImageManager:
|
|
1100
1115
|
|
1101
1116
|
def validate_yaml_schema(self):
|
1102
1117
|
"""Validate all image.yaml files against the SCS Metadata spec"""
|
1103
|
-
schema = yamale.make_schema("etc/schema.yaml")
|
1104
1118
|
try:
|
1119
|
+
# We are a pip package
|
1120
|
+
schema_data = pkgutil.get_data(__name__, "etc/schema.yaml").decode("utf-8")
|
1121
|
+
schema = yamale.make_schema(content=schema_data)
|
1122
|
+
except Exception:
|
1123
|
+
# We are a cloned repo
|
1124
|
+
schema = yamale.make_schema("etc/schema.yaml")
|
1125
|
+
try:
|
1126
|
+
validation_error_log = []
|
1105
1127
|
for file in os.listdir(self.CONF.images):
|
1106
1128
|
try:
|
1107
1129
|
data = yamale.make_data(self.CONF.images + file)
|
1108
1130
|
yamale.validate(schema, data)
|
1109
1131
|
except YamaleError as e:
|
1110
|
-
self.exit_with_error = True
|
1111
1132
|
for result in e.results:
|
1112
1133
|
logger.error(
|
1113
1134
|
f"Error validating data '{result.data}' with '{result.schema}'"
|
1114
1135
|
)
|
1115
1136
|
for error in result.errors:
|
1116
1137
|
logger.error(f"\t{error}")
|
1138
|
+
validation_error_log.append((file, error))
|
1117
1139
|
else:
|
1118
1140
|
logger.debug(f"Image file {file} is valid")
|
1119
1141
|
except FileNotFoundError:
|
1120
1142
|
logger.error(f"Invalid path '{self.CONF.images}'")
|
1121
1143
|
|
1144
|
+
if len(validation_error_log) > 0:
|
1145
|
+
sys.exit(
|
1146
|
+
f"Image definition validation failed with these error(s): {validation_error_log}"
|
1147
|
+
)
|
1148
|
+
|
1122
1149
|
def share_image_with_project(self, image, project):
|
1123
1150
|
member = self.conn.image.find_member(project.id, image.id)
|
1124
1151
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: openstack-image-manager
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.20240829.0
|
4
4
|
Summary: OpenStack image manager
|
5
5
|
Author-email: OSISM community <info@osism.tech>
|
6
6
|
License: Apache License
|
@@ -223,16 +223,16 @@ Requires-Python: >=3.8
|
|
223
223
|
Description-Content-Type: text/markdown
|
224
224
|
License-File: LICENSE
|
225
225
|
Requires-Dist: loguru==0.7.2
|
226
|
-
Requires-Dist: minio==7.2.
|
226
|
+
Requires-Dist: minio==7.2.8
|
227
227
|
Requires-Dist: munch==4.0.0
|
228
228
|
Requires-Dist: natsort==8.4.0
|
229
229
|
Requires-Dist: openstacksdk==3.3.0
|
230
230
|
Requires-Dist: paramiko==3.4.1
|
231
|
-
Requires-Dist: patool==2.
|
231
|
+
Requires-Dist: patool==2.4.0
|
232
232
|
Requires-Dist: requests==2.32.3
|
233
233
|
Requires-Dist: ruamel.yaml==0.18.6
|
234
234
|
Requires-Dist: tabulate==0.9.0
|
235
|
-
Requires-Dist: typer[all]==0.12.
|
235
|
+
Requires-Dist: typer[all]==0.12.5
|
236
236
|
Requires-Dist: yamale==5.2.1
|
237
237
|
|
238
238
|
# openstack-image-manager
|
@@ -1,12 +1,12 @@
|
|
1
1
|
loguru==0.7.2
|
2
|
-
minio==7.2.
|
2
|
+
minio==7.2.8
|
3
3
|
munch==4.0.0
|
4
4
|
natsort==8.4.0
|
5
5
|
openstacksdk==3.3.0
|
6
6
|
paramiko==3.4.1
|
7
|
-
patool==2.
|
7
|
+
patool==2.4.0
|
8
8
|
requests==2.32.3
|
9
9
|
ruamel.yaml==0.18.6
|
10
10
|
tabulate==0.9.0
|
11
|
-
typer[all]==0.12.
|
11
|
+
typer[all]==0.12.5
|
12
12
|
yamale==5.2.1
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/pyproject.toml
RENAMED
@@ -30,12 +30,15 @@ dynamic = ["dependencies", "version"]
|
|
30
30
|
[tool.mypy]
|
31
31
|
exclude = ["doc"]
|
32
32
|
|
33
|
+
[tool.setuptools]
|
34
|
+
packages = ["openstack_image_manager", "openstack_image_manager.etc"]
|
35
|
+
package-dir = {"openstack_image_manager.etc" = "etc"}
|
36
|
+
|
33
37
|
[tool.setuptools.dynamic]
|
34
38
|
dependencies = {file = ["requirements.txt"]}
|
35
39
|
|
36
|
-
[tool.setuptools.
|
37
|
-
|
38
|
-
include = ["openstack_image_manager"]
|
40
|
+
[tool.setuptools.package-data]
|
41
|
+
"openstack_image_manager.etc" = ["**/*"]
|
39
42
|
|
40
43
|
[tool.setuptools-git-versioning]
|
41
44
|
enabled = true
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/requirements.txt
RENAMED
@@ -1,12 +1,12 @@
|
|
1
1
|
loguru==0.7.2
|
2
|
-
minio==7.2.
|
2
|
+
minio==7.2.8
|
3
3
|
munch==4.0.0
|
4
4
|
natsort==8.4.0
|
5
5
|
openstacksdk==3.3.0
|
6
6
|
paramiko==3.4.1
|
7
|
-
patool==2.
|
7
|
+
patool==2.4.0
|
8
8
|
requests==2.32.3
|
9
9
|
ruamel.yaml==0.18.6
|
10
10
|
tabulate==0.9.0
|
11
|
-
typer[all]==0.12.
|
11
|
+
typer[all]==0.12.5
|
12
12
|
yamale==5.2.1
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/centos.yml
RENAMED
File without changes
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/cirros.yml
RENAMED
File without changes
|
File without changes
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/debian.yml
RENAMED
File without changes
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/fedora.yml
RENAMED
File without changes
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/flatcar.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/osism.yml
RENAMED
File without changes
|
File without changes
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/talos.yml
RENAMED
File without changes
|
{openstack_image_manager-0.20240812.0 → openstack_image_manager-0.20240829.0}/etc/images/ubuntu.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|