openstack-image-manager 0.6.0__py3-none-any.whl → 0.20231219.0__py3-none-any.whl
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/manage.py +16 -1
- openstack_image_manager/mirror.py +47 -36
- {openstack_image_manager-0.6.0.dist-info → openstack_image_manager-0.20231219.0.dist-info}/METADATA +6 -7
- openstack_image_manager-0.20231219.0.dist-info/RECORD +11 -0
- {openstack_image_manager-0.6.0.dist-info → openstack_image_manager-0.20231219.0.dist-info}/WHEEL +1 -1
- openstack_image_manager-0.6.0.dist-info/RECORD +0 -11
- {openstack_image_manager-0.6.0.dist-info → openstack_image_manager-0.20231219.0.dist-info}/LICENSE +0 -0
- {openstack_image_manager-0.6.0.dist-info → openstack_image_manager-0.20231219.0.dist-info}/entry_points.txt +0 -0
- {openstack_image_manager-0.6.0.dist-info → openstack_image_manager-0.20231219.0.dist-info}/top_level.txt +0 -0
@@ -1097,7 +1097,11 @@ class ImageManager:
|
|
1097
1097
|
logger.info("Deactivating image '%s'" % image)
|
1098
1098
|
self.conn.image.deactivate_image(cloud_image.id)
|
1099
1099
|
|
1100
|
-
if
|
1100
|
+
if (
|
1101
|
+
self.CONF.hide
|
1102
|
+
and not self.CONF.dry_run
|
1103
|
+
and cloud_image.visibility != "community"
|
1104
|
+
):
|
1101
1105
|
logger.info(
|
1102
1106
|
"Setting visibility of '%s' to 'community'" % image
|
1103
1107
|
)
|
@@ -1107,6 +1111,17 @@ class ImageManager:
|
|
1107
1111
|
except Exception as e:
|
1108
1112
|
logger.error("An Exception occurred: \n%s" % e)
|
1109
1113
|
self.exit_with_error = True
|
1114
|
+
elif counter[image_name] <= last:
|
1115
|
+
logger.info(
|
1116
|
+
f"Image '{image}' will not be deleted, {counter[image_name]} <= {last}"
|
1117
|
+
)
|
1118
|
+
if (
|
1119
|
+
self.CONF.hide
|
1120
|
+
and not self.CONF.dry_run
|
1121
|
+
and cloud_image.visibility != "community"
|
1122
|
+
):
|
1123
|
+
logger.info("Setting visibility of '%s' to 'community'" % image)
|
1124
|
+
self.conn.image.update_image(cloud_image.id, visibility="community")
|
1110
1125
|
elif (
|
1111
1126
|
counter[image_name] < last and self.CONF.hide and not self.CONF.dry_run
|
1112
1127
|
):
|
@@ -1,13 +1,14 @@
|
|
1
1
|
# SPDX-License-Identifier: Apache-2.0
|
2
2
|
|
3
|
-
import logging
|
4
3
|
import os
|
5
4
|
import patoolib
|
6
5
|
import requests
|
7
6
|
import shutil
|
7
|
+
import sys
|
8
8
|
import typer
|
9
9
|
import yaml
|
10
10
|
|
11
|
+
from loguru import logger
|
11
12
|
from minio import Minio
|
12
13
|
from minio.error import S3Error
|
13
14
|
from os import listdir
|
@@ -36,41 +37,50 @@ def main(
|
|
36
37
|
),
|
37
38
|
minio_bucket: str = typer.Option("openstack-images", help="Minio bucket"),
|
38
39
|
):
|
40
|
+
|
39
41
|
if debug:
|
40
|
-
level =
|
41
|
-
logging.getLogger("paramiko").setLevel(logging.DEBUG)
|
42
|
+
level = "DEBUG"
|
42
43
|
else:
|
43
|
-
level =
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
level = "INFO"
|
45
|
+
|
46
|
+
log_fmt = (
|
47
|
+
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | "
|
48
|
+
"<level>{message}</level>"
|
49
|
+
)
|
50
|
+
|
51
|
+
logger.remove()
|
52
|
+
logger.add(sys.stderr, format=log_fmt, level=level, colorize=True)
|
53
|
+
|
54
|
+
client = Minio(
|
55
|
+
minio_server,
|
56
|
+
access_key=minio_access_key,
|
57
|
+
secret_key=minio_secret_key,
|
47
58
|
)
|
48
59
|
|
60
|
+
result = client.bucket_exists(minio_bucket)
|
61
|
+
if not result:
|
62
|
+
logger.error(f"Create bucket '{minio_bucket}' first")
|
63
|
+
if not dry_run:
|
64
|
+
sys.exit(1)
|
65
|
+
|
49
66
|
onlyfiles = []
|
50
67
|
for f in listdir(images):
|
51
68
|
if isfile(join(images, f)):
|
52
|
-
|
69
|
+
logger.debug(f"Adding {f} to the list of files")
|
53
70
|
onlyfiles.append(f)
|
54
71
|
|
55
72
|
all_images = []
|
56
|
-
for file in onlyfiles:
|
73
|
+
for file in [x for x in onlyfiles if x.endswith(".yml")]:
|
74
|
+
logger.info(f"Processing file {file}")
|
57
75
|
with open(join(images, file)) as fp:
|
58
76
|
data = yaml.load(fp, Loader=yaml.SafeLoader)
|
59
77
|
for image in data.get("images"):
|
60
|
-
|
78
|
+
logger.debug(f"Adding {image['name']} to the list of images")
|
61
79
|
all_images.append(image)
|
62
80
|
|
63
|
-
client = Minio(
|
64
|
-
minio_server,
|
65
|
-
access_key=minio_access_key,
|
66
|
-
secret_key=minio_secret_key,
|
67
|
-
)
|
68
|
-
|
69
|
-
result = client.bucket_exists(minio_bucket)
|
70
|
-
if not result:
|
71
|
-
logging.error(f"Create bucket '{minio_bucket}' first")
|
72
|
-
|
73
81
|
for image in all_images:
|
82
|
+
logger.info(f"Processing image {image['name']}")
|
83
|
+
|
74
84
|
if "versions" not in image:
|
75
85
|
continue
|
76
86
|
|
@@ -80,7 +90,7 @@ def main(
|
|
80
90
|
else:
|
81
91
|
source = version["source"]
|
82
92
|
|
83
|
-
|
93
|
+
logger.debug(f"source: {source}")
|
84
94
|
|
85
95
|
path = urlparse(source)
|
86
96
|
url = urlparse(version["url"])
|
@@ -95,36 +105,37 @@ def main(
|
|
95
105
|
if fileextension2 == ".tar":
|
96
106
|
filename = os.path.basename(url.path)
|
97
107
|
|
98
|
-
|
99
|
-
|
108
|
+
logger.debug(f"dirname: {dirname}")
|
109
|
+
logger.debug(f"filename: {filename}")
|
100
110
|
|
101
111
|
try:
|
102
112
|
client.stat_object(minio_bucket, os.path.join(dirname, filename))
|
103
|
-
|
113
|
+
logger.info(f"File {filename} available in bucket {dirname}")
|
104
114
|
except S3Error:
|
105
|
-
|
115
|
+
logger.info(f"File {filename} not yet available in bucket {dirname}")
|
106
116
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
117
|
+
if not isfile(os.path.basename(path.path)):
|
118
|
+
logger.info(f"Downloading {version['source']}")
|
119
|
+
response = requests.get(
|
120
|
+
version["source"], stream=True, allow_redirects=True
|
121
|
+
)
|
122
|
+
with open(os.path.basename(path.path), "wb") as fp:
|
123
|
+
shutil.copyfileobj(response.raw, fp)
|
124
|
+
del response
|
114
125
|
|
115
126
|
if fileextension in [".bz2", ".zip", ".xz", ".gz"]:
|
116
|
-
|
127
|
+
logger.info(f"Decompressing {os.path.basename(path.path)}")
|
117
128
|
patoolib.extract_archive(os.path.basename(path.path), outdir=".")
|
118
129
|
os.remove(os.path.basename(path.path))
|
119
130
|
|
120
131
|
if not dry_run:
|
121
|
-
|
132
|
+
logger.info(f"Uploading {filename} to bucket {dirname}")
|
122
133
|
client.fput_object(
|
123
134
|
minio_bucket, os.path.join(dirname, filename), filename
|
124
135
|
)
|
125
136
|
else:
|
126
|
-
|
127
|
-
f"Not uploading
|
137
|
+
logger.info(
|
138
|
+
f"Not uploading {filename} to bucket {dirname} (dry-run enabled)"
|
128
139
|
)
|
129
140
|
|
130
141
|
os.remove(filename)
|
{openstack_image_manager-0.6.0.dist-info → openstack_image_manager-0.20231219.0.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: openstack-image-manager
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.20231219.0
|
4
4
|
Summary: OpenStack image manager
|
5
5
|
Author-email: OSISM community <info@osism.tech>
|
6
6
|
License: Apache License
|
@@ -223,14 +223,14 @@ 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.
|
226
|
+
Requires-Dist: minio ==7.2.0
|
227
227
|
Requires-Dist: munch ==4.0.0
|
228
228
|
Requires-Dist: natsort ==8.4.0
|
229
229
|
Requires-Dist: openstacksdk ==2.0.0
|
230
|
-
Requires-Dist: paramiko ==3.
|
231
|
-
Requires-Dist: patool ==1.
|
230
|
+
Requires-Dist: paramiko ==3.4.0
|
231
|
+
Requires-Dist: patool ==1.15.0
|
232
232
|
Requires-Dist: requests ==2.31.0
|
233
|
-
Requires-Dist: ruamel.yaml ==0.18.
|
233
|
+
Requires-Dist: ruamel.yaml ==0.18.5
|
234
234
|
Requires-Dist: tabulate ==0.9.0
|
235
235
|
Requires-Dist: typer[all] ==0.9.0
|
236
236
|
Requires-Dist: yamale ==4.0.4
|
@@ -239,7 +239,6 @@ Requires-Dist: yamale ==4.0.4
|
|
239
239
|
|
240
240
|
[](https://pypi.org/project/openstack-image-manager/)
|
241
241
|
[](https://pypi.org/project/openstack-image-manager/)
|
242
|
+
[](https://osism.github.io/docs/guides/operations-guide/openstack/day2-operations/image-manager)
|
242
243
|
|
243
244
|
Easily manage and keep up to date a large number of images on an OpenStack environment
|
244
|
-
|
245
|
-
Documentation: <https://osism.github.io/docs/guides/operations-guide/openstack/image-manager>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
openstack_image_manager/__init__.py,sha256=z6lQHDMfCV8IkUz5pM1QYfQ37O2Rdy82jYovN8N9DIU,240
|
2
|
+
openstack_image_manager/manage.py,sha256=-ESAYvzqxh3e_5B6JS6Ng7H-NdZ-9yMbMqPSM4mItso,47686
|
3
|
+
openstack_image_manager/mirror.py,sha256=jiR3OubMzGvCBd-ma_m6k2dDDsWYgwzhdefCBKvUQZs,4738
|
4
|
+
openstack_image_manager/table.py,sha256=cZ6Xuqp8uh2V5_uzT4KwWoiLAUdvsPZkrPjOXdxFeU4,1080
|
5
|
+
openstack_image_manager/update.py,sha256=QCWbubWLao0UcADZnmM7rcNlWo02PLezwQbE1Tr8j0c,10546
|
6
|
+
openstack_image_manager-0.20231219.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
7
|
+
openstack_image_manager-0.20231219.0.dist-info/METADATA,sha256=yAbf5SOdrIueV1WuHo-mc6BBnUO9k260GXYQnKGclNU,14876
|
8
|
+
openstack_image_manager-0.20231219.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
9
|
+
openstack_image_manager-0.20231219.0.dist-info/entry_points.txt,sha256=AEHPHHHZ3jAZfpvaI5ZzLi3DHb9vGQwL7TJcw_G_5nc,80
|
10
|
+
openstack_image_manager-0.20231219.0.dist-info/top_level.txt,sha256=iLfREddId51T97Dr9IGRQtJXKJgVy1PB6uHCaQk1j44,24
|
11
|
+
openstack_image_manager-0.20231219.0.dist-info/RECORD,,
|
@@ -1,11 +0,0 @@
|
|
1
|
-
openstack_image_manager/__init__.py,sha256=z6lQHDMfCV8IkUz5pM1QYfQ37O2Rdy82jYovN8N9DIU,240
|
2
|
-
openstack_image_manager/manage.py,sha256=MCJZH9cg9_Zx46ATjzWrPyPVGwN-lJTAh8lcLihybpw,46990
|
3
|
-
openstack_image_manager/mirror.py,sha256=myzwpRyPM0980Ng4piimvz4WzUQSAXnOOWBfJchPAvE,4451
|
4
|
-
openstack_image_manager/table.py,sha256=cZ6Xuqp8uh2V5_uzT4KwWoiLAUdvsPZkrPjOXdxFeU4,1080
|
5
|
-
openstack_image_manager/update.py,sha256=QCWbubWLao0UcADZnmM7rcNlWo02PLezwQbE1Tr8j0c,10546
|
6
|
-
openstack_image_manager-0.6.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
|
7
|
-
openstack_image_manager-0.6.0.dist-info/METADATA,sha256=uYHVgXEis6VVc4TZhR8vRbD1Bav6f-PJ8jQeaQUfQ0w,14776
|
8
|
-
openstack_image_manager-0.6.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
9
|
-
openstack_image_manager-0.6.0.dist-info/entry_points.txt,sha256=AEHPHHHZ3jAZfpvaI5ZzLi3DHb9vGQwL7TJcw_G_5nc,80
|
10
|
-
openstack_image_manager-0.6.0.dist-info/top_level.txt,sha256=iLfREddId51T97Dr9IGRQtJXKJgVy1PB6uHCaQk1j44,24
|
11
|
-
openstack_image_manager-0.6.0.dist-info/RECORD,,
|
{openstack_image_manager-0.6.0.dist-info → openstack_image_manager-0.20231219.0.dist-info}/LICENSE
RENAMED
File without changes
|
File without changes
|
File without changes
|