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.
@@ -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
  ):
@@ -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 = logging.DEBUG
41
- logging.getLogger("paramiko").setLevel(logging.DEBUG)
42
+ level = "DEBUG"
42
43
  else:
43
- level = logging.INFO
44
- logging.getLogger("paramiko").setLevel(logging.WARNING)
45
- logging.basicConfig(
46
- format="%(asctime)s - %(message)s", level=level, datefmt="%Y-%m-%d %H:%M:%S"
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
- logging.debug(f"Adding {f} to the list of files")
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
- logging.debug(f"Adding {image['name']} to the list of images")
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
- logging.debug(f"source: {source}")
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
- logging.debug(f"dirname: {dirname}")
99
- logging.debug(f"filename: {filename}")
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
- logging.info(f"'{filename}' available in '{dirname}'")
113
+ logger.info(f"File {filename} available in bucket {dirname}")
104
114
  except S3Error:
105
- logging.info(f"'{filename}' not yet available in '{dirname}'")
115
+ logger.info(f"File {filename} not yet available in bucket {dirname}")
106
116
 
107
- logging.info(f"Downloading {version['source']}")
108
- response = requests.get(
109
- version["source"], stream=True, allow_redirects=True
110
- )
111
- with open(os.path.basename(path.path), "wb") as fp:
112
- shutil.copyfileobj(response.raw, fp)
113
- del response
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
- logging.info(f"Decompressing '{os.path.basename(path.path)}'")
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
- logging.info(f"Uploading '{filename}' to '{dirname}'")
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
- logging.info(
127
- f"Not uploading '{filename}' to '{dirname}' (dry-run enabled)"
137
+ logger.info(
138
+ f"Not uploading {filename} to bucket {dirname} (dry-run enabled)"
128
139
  )
129
140
 
130
141
  os.remove(filename)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openstack-image-manager
3
- Version: 0.6.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.1.17
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.3.1
231
- Requires-Dist: patool ==1.12
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.1
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
  [![PyPi version](https://badgen.net/pypi/v/openstack-image-manager/)](https://pypi.org/project/openstack-image-manager/)
241
241
  [![PyPi license](https://badgen.net/pypi/license/openstack-image-manager/)](https://pypi.org/project/openstack-image-manager/)
242
+ [![Documentation](https://img.shields.io/static/v1?label=&message=documentation&color=blue)](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,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.2)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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,,