openstack-image-manager 0.20231212.0__py3-none-any.whl → 0.20240211.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.
@@ -335,9 +335,9 @@ class ImageManager:
335
335
  versions[version["version"]]["meta"]["image_source"] = url
336
336
 
337
337
  if "build_date" in version:
338
- versions[version["version"]]["meta"][
339
- "image_build_date"
340
- ] = date.isoformat(version["build_date"])
338
+ versions[version["version"]]["meta"]["image_build_date"] = (
339
+ date.isoformat(version["build_date"])
340
+ )
341
341
 
342
342
  if "id" in version:
343
343
  versions[version["version"]]["id"] = version["id"]
@@ -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 self.CONF.hide and not self.CONF.dry_run:
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
  ):
@@ -37,7 +37,6 @@ def main(
37
37
  ),
38
38
  minio_bucket: str = typer.Option("openstack-images", help="Minio bucket"),
39
39
  ):
40
-
41
40
  if debug:
42
41
  level = "DEBUG"
43
42
  else:
@@ -51,6 +50,18 @@ def main(
51
50
  logger.remove()
52
51
  logger.add(sys.stderr, format=log_fmt, level=level, colorize=True)
53
52
 
53
+ client = Minio(
54
+ minio_server,
55
+ access_key=minio_access_key,
56
+ secret_key=minio_secret_key,
57
+ )
58
+
59
+ result = client.bucket_exists(minio_bucket)
60
+ if not result:
61
+ logger.error(f"Create bucket '{minio_bucket}' first")
62
+ if not dry_run:
63
+ sys.exit(1)
64
+
54
65
  onlyfiles = []
55
66
  for f in listdir(images):
56
67
  if isfile(join(images, f)):
@@ -58,24 +69,17 @@ def main(
58
69
  onlyfiles.append(f)
59
70
 
60
71
  all_images = []
61
- for file in onlyfiles:
72
+ for file in [x for x in onlyfiles if x.endswith(".yml")]:
73
+ logger.info(f"Processing file {file}")
62
74
  with open(join(images, file)) as fp:
63
75
  data = yaml.load(fp, Loader=yaml.SafeLoader)
64
76
  for image in data.get("images"):
65
77
  logger.debug(f"Adding {image['name']} to the list of images")
66
78
  all_images.append(image)
67
79
 
68
- client = Minio(
69
- minio_server,
70
- access_key=minio_access_key,
71
- secret_key=minio_secret_key,
72
- )
73
-
74
- result = client.bucket_exists(minio_bucket)
75
- if not result:
76
- logger.error(f"Create bucket '{minio_bucket}' first")
77
-
78
80
  for image in all_images:
81
+ logger.info(f"Processing image {image['name']}")
82
+
79
83
  if "versions" not in image:
80
84
  continue
81
85
 
@@ -105,31 +109,32 @@ def main(
105
109
 
106
110
  try:
107
111
  client.stat_object(minio_bucket, os.path.join(dirname, filename))
108
- logger.info(f"'{filename}' available in '{dirname}'")
112
+ logger.info(f"File {filename} available in bucket {dirname}")
109
113
  except S3Error:
110
- logger.info(f"'{filename}' not yet available in '{dirname}'")
114
+ logger.info(f"File {filename} not yet available in bucket {dirname}")
111
115
 
112
- logger.info(f"Downloading {version['source']}")
113
- response = requests.get(
114
- version["source"], stream=True, allow_redirects=True
115
- )
116
- with open(os.path.basename(path.path), "wb") as fp:
117
- shutil.copyfileobj(response.raw, fp)
118
- del response
116
+ if not isfile(os.path.basename(path.path)):
117
+ logger.info(f"Downloading {version['source']}")
118
+ response = requests.get(
119
+ version["source"], stream=True, allow_redirects=True
120
+ )
121
+ with open(os.path.basename(path.path), "wb") as fp:
122
+ shutil.copyfileobj(response.raw, fp)
123
+ del response
119
124
 
120
125
  if fileextension in [".bz2", ".zip", ".xz", ".gz"]:
121
- logger.info(f"Decompressing '{os.path.basename(path.path)}'")
126
+ logger.info(f"Decompressing {os.path.basename(path.path)}")
122
127
  patoolib.extract_archive(os.path.basename(path.path), outdir=".")
123
128
  os.remove(os.path.basename(path.path))
124
129
 
125
130
  if not dry_run:
126
- logger.info(f"Uploading '{filename}' to '{dirname}'")
131
+ logger.info(f"Uploading {filename} to bucket {dirname}")
127
132
  client.fput_object(
128
133
  minio_bucket, os.path.join(dirname, filename), filename
129
134
  )
130
135
  else:
131
136
  logger.info(
132
- f"Not uploading '{filename}' to '{dirname}' (dry-run enabled)"
137
+ f"Not uploading {filename} to bucket {dirname} (dry-run enabled)"
133
138
  )
134
139
 
135
140
  os.remove(filename)
@@ -281,7 +281,6 @@ def main(
281
281
  envvar="SWIFT_PREFIX",
282
282
  ),
283
283
  ):
284
-
285
284
  if debug:
286
285
  level = "DEBUG"
287
286
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openstack-image-manager
3
- Version: 0.20231212.0
3
+ Version: 0.20240211.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.2.0
226
+ Requires-Dist: minio ==7.2.3
227
227
  Requires-Dist: munch ==4.0.0
228
228
  Requires-Dist: natsort ==8.4.0
229
- Requires-Dist: openstacksdk ==2.0.0
230
- Requires-Dist: paramiko ==3.3.1
229
+ Requires-Dist: openstacksdk ==2.1.0
230
+ Requires-Dist: paramiko ==3.4.0
231
231
  Requires-Dist: patool ==1.15.0
232
232
  Requires-Dist: requests ==2.31.0
233
- Requires-Dist: ruamel.yaml ==0.18.5
233
+ Requires-Dist: ruamel.yaml ==0.18.6
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
@@ -0,0 +1,11 @@
1
+ openstack_image_manager/__init__.py,sha256=z6lQHDMfCV8IkUz5pM1QYfQ37O2Rdy82jYovN8N9DIU,240
2
+ openstack_image_manager/manage.py,sha256=biCPWdV5-_4rI_6DtieOWe_HXrcnWP67hs1RzwnOdts,47688
3
+ openstack_image_manager/mirror.py,sha256=_84-vAFfF1a3IuDBzluwTJWo20cyJEJaNIcxn3X87QI,4737
4
+ openstack_image_manager/table.py,sha256=cZ6Xuqp8uh2V5_uzT4KwWoiLAUdvsPZkrPjOXdxFeU4,1080
5
+ openstack_image_manager/update.py,sha256=RBH47LjWsWVKaYVwBxlDviSSZY6RxUyUQdrwtKG5bKs,10545
6
+ openstack_image_manager-0.20240211.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
7
+ openstack_image_manager-0.20240211.0.dist-info/METADATA,sha256=aTZ0rpPWgsWJYlhdQd8JCfIV5wKn2hMClixCSjfm49U,14876
8
+ openstack_image_manager-0.20240211.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
9
+ openstack_image_manager-0.20240211.0.dist-info/entry_points.txt,sha256=AEHPHHHZ3jAZfpvaI5ZzLi3DHb9vGQwL7TJcw_G_5nc,80
10
+ openstack_image_manager-0.20240211.0.dist-info/top_level.txt,sha256=iLfREddId51T97Dr9IGRQtJXKJgVy1PB6uHCaQk1j44,24
11
+ openstack_image_manager-0.20240211.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=rscIJO5c1ZDL5ejHKfHKJKOVSE_xTzxNBk006ytZyZk,4442
4
- openstack_image_manager/table.py,sha256=cZ6Xuqp8uh2V5_uzT4KwWoiLAUdvsPZkrPjOXdxFeU4,1080
5
- openstack_image_manager/update.py,sha256=QCWbubWLao0UcADZnmM7rcNlWo02PLezwQbE1Tr8j0c,10546
6
- openstack_image_manager-0.20231212.0.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
7
- openstack_image_manager-0.20231212.0.dist-info/METADATA,sha256=VBYcpHP6uF435ryY58smiOhIlEDUHBSPDOm_uTCHidU,14876
8
- openstack_image_manager-0.20231212.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
9
- openstack_image_manager-0.20231212.0.dist-info/entry_points.txt,sha256=AEHPHHHZ3jAZfpvaI5ZzLi3DHb9vGQwL7TJcw_G_5nc,80
10
- openstack_image_manager-0.20231212.0.dist-info/top_level.txt,sha256=iLfREddId51T97Dr9IGRQtJXKJgVy1PB6uHCaQk1j44,24
11
- openstack_image_manager-0.20231212.0.dist-info/RECORD,,