genesis-devtools 0.2.3__tar.gz → 0.2.4__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 (65) hide show
  1. genesis_devtools-0.2.4/ChangeLog +7 -0
  2. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/PKG-INFO +1 -1
  3. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/builder/base.py +4 -1
  4. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/builder/builder.py +53 -12
  5. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/builder/packer.py +5 -7
  6. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/cmd/cli.py +2 -4
  7. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools.egg-info/PKG-INFO +1 -1
  8. genesis_devtools-0.2.4/genesis_devtools.egg-info/pbr.json +1 -0
  9. genesis_devtools-0.2.3/ChangeLog +0 -7
  10. genesis_devtools-0.2.3/genesis_devtools.egg-info/pbr.json +0 -1
  11. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/.github/workflows/publish-to-pypi.yml +0 -0
  12. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/.github/workflows/tests.yml +0 -0
  13. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/AUTHORS +0 -0
  14. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/LICENSE +0 -0
  15. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/README.md +0 -0
  16. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/data/stands/stand-small.yaml +0 -0
  17. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis/genesis.yaml +0 -0
  18. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis/images/genesis_base/bootstrap.sh +0 -0
  19. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis/images/genesis_base/genesis-bootstrap.service +0 -0
  20. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis/images/genesis_base/genesis-root-autoresize.service +0 -0
  21. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis/images/genesis_base/install_genesis_base.sh +0 -0
  22. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis/images/genesis_base/root_autoresize.sh +0 -0
  23. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/__init__.py +0 -0
  24. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/backup.py +0 -0
  25. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/builder/__init__.py +0 -0
  26. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/builder/dependency.py +0 -0
  27. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/cmd/__init__.py +0 -0
  28. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/constants.py +0 -0
  29. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/infra/driver/base.py +0 -0
  30. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/infra/driver/libvirt.py +0 -0
  31. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/infra/libvirt/__init__.py +0 -0
  32. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/infra/libvirt/constants.py +0 -0
  33. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/infra/libvirt/libvirt.py +0 -0
  34. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/logger.py +0 -0
  35. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/debian_12/debian-12.pkr.hcl +0 -0
  36. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/debian_12/plugins.pkr.hcl +0 -0
  37. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/genesis_base/genesis-base.pkr.hcl +0 -0
  38. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/genesis_base/plugins.pkr.hcl +0 -0
  39. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/genesis_core/genesis-core.pkr.hcl +0 -0
  40. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/genesis_core/plugins.pkr.hcl +0 -0
  41. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/genesis_custom/genesis-custom.pkr.hcl +0 -0
  42. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/genesis_custom/plugins.pkr.hcl +0 -0
  43. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/ubuntu_24/plugins.pkr.hcl +0 -0
  44. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/packer/ubuntu_24/ubuntu-24.pkr.hcl +0 -0
  45. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/stand/__init__.py +0 -0
  46. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/stand/models.py +0 -0
  47. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/tests/__init__.py +0 -0
  48. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/tests/unit/__init__.py +0 -0
  49. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/tests/unit/conftest.py +0 -0
  50. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/tests/unit/test_basic.py +0 -0
  51. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/tests/unit/test_builder.py +0 -0
  52. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/tests/unit/test_dependency.py +0 -0
  53. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/tests/unit/test_packer.py +0 -0
  54. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools/utils.py +0 -0
  55. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools.egg-info/SOURCES.txt +0 -0
  56. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools.egg-info/dependency_links.txt +0 -0
  57. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools.egg-info/entry_points.txt +0 -0
  58. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools.egg-info/not-zip-safe +0 -0
  59. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools.egg-info/requires.txt +0 -0
  60. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/genesis_devtools.egg-info/top_level.txt +0 -0
  61. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/requirements.txt +0 -0
  62. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/setup.cfg +0 -0
  63. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/setup.py +0 -0
  64. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/test-requirements.txt +0 -0
  65. {genesis_devtools-0.2.3 → genesis_devtools-0.2.4}/tox.ini +0 -0
@@ -0,0 +1,7 @@
1
+ CHANGES
2
+ =======
3
+
4
+ 0.2.4
5
+ -----
6
+
7
+ * Bugfix: Building several images for one element (#47)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: genesis-devtools
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: Tools to manager life cycle of Genesis projects.
5
5
  Home-page: https://github.com/infraguys/genesis_devtools
6
6
  Author: Genesis Corporation
@@ -131,6 +131,7 @@ class AbstractImageBuilder(abc.ABC):
131
131
  image: Image,
132
132
  deps: tp.List[AbstractDependency],
133
133
  developer_keys: tp.Optional[str] = None,
134
+ output_dir: str = c.DEF_GEN_OUTPUT_DIR_NAME,
134
135
  ) -> None:
135
136
  """Actions to prepare the environment for building the image."""
136
137
 
@@ -157,9 +158,10 @@ class AbstractImageBuilder(abc.ABC):
157
158
  image: Image,
158
159
  deps: tp.List[AbstractDependency],
159
160
  developer_keys: tp.Optional[str] = None,
161
+ output_dir: str = c.DEF_GEN_OUTPUT_DIR_NAME,
160
162
  ) -> None:
161
163
  """Run the image builder."""
162
- self.pre_build(image_dir, image, deps, developer_keys)
164
+ self.pre_build(image_dir, image, deps, developer_keys, output_dir)
163
165
  self.build(image_dir, image, developer_keys)
164
166
  self.post_build(image_dir, image)
165
167
 
@@ -176,6 +178,7 @@ class DummyImageBuilder(AbstractImageBuilder):
176
178
  image: Image,
177
179
  deps: tp.List[AbstractDependency],
178
180
  developer_keys: tp.Optional[str] = None,
181
+ output_dir: str = c.DEF_GEN_OUTPUT_DIR_NAME,
179
182
  ) -> None:
180
183
  """Actions to prepare the environment for building the image."""
181
184
  return None
@@ -17,9 +17,12 @@ from __future__ import annotations
17
17
 
18
18
  import typing as tp
19
19
  import tempfile
20
+ import shutil
21
+ import os
20
22
 
21
23
  from genesis_devtools.builder import base
22
24
  from genesis_devtools.logger import AbstractLogger, DummyLogger
25
+ from genesis_devtools import constants as c
23
26
 
24
27
 
25
28
  class SimpleBuilder:
@@ -35,6 +38,7 @@ class SimpleBuilder:
35
38
  elements: tp.List[base.Element],
36
39
  image_builder: base.AbstractImageBuilder,
37
40
  logger: tp.Optional[AbstractLogger] = None,
41
+ images_output_dir: str = c.DEF_GEN_OUTPUT_DIR_NAME,
38
42
  ) -> None:
39
43
  super().__init__()
40
44
  self._deps = deps
@@ -42,6 +46,44 @@ class SimpleBuilder:
42
46
  self._image_builder = image_builder
43
47
  self._work_dir = work_dir
44
48
  self._logger = logger or DummyLogger()
49
+ self._images_output_dir = images_output_dir
50
+
51
+ def _build_image(
52
+ self,
53
+ img: base.Image,
54
+ build_dir: str | None,
55
+ output_dir: str,
56
+ developer_keys: str,
57
+ ) -> None:
58
+ # The build_dir is used only for debugging purposes to observe
59
+ # the content of the image. In production, the image is built
60
+ # in a temporary directory.
61
+ if build_dir is not None:
62
+ self._image_builder.run(
63
+ build_dir,
64
+ img,
65
+ self._deps,
66
+ developer_keys,
67
+ output_dir,
68
+ )
69
+ else:
70
+ with tempfile.TemporaryDirectory() as temp_dir:
71
+ self._image_builder.run(
72
+ temp_dir,
73
+ img,
74
+ self._deps,
75
+ developer_keys,
76
+ output_dir,
77
+ )
78
+
79
+ # Move the image to the final location
80
+ if not os.path.exists(self._images_output_dir):
81
+ os.makedirs(self._images_output_dir)
82
+
83
+ shutil.move(
84
+ os.path.join(output_dir, f"{img.name}.{img.format}"),
85
+ self._images_output_dir,
86
+ )
45
87
 
46
88
  def fetch_dependency(self, deps_dir: str) -> None:
47
89
  """Fetch common dependencies for elements."""
@@ -63,19 +105,15 @@ class SimpleBuilder:
63
105
  for img in e.images:
64
106
  if build_suffix:
65
107
  img.name = f"{img.name}.{build_suffix}"
108
+ tmp_img_output = f"_tmp_{img.name}-output"
66
109
 
67
- # The build_dir is used only for debugging purposes to observe
68
- # the content of the image. In production, the image is built
69
- # in a temporary directory.
70
- if build_dir is not None:
71
- self._image_builder.run(
72
- build_dir, img, self._deps, developer_keys
110
+ try:
111
+ self._build_image(
112
+ img, build_dir, tmp_img_output, developer_keys
73
113
  )
74
- else:
75
- with tempfile.TemporaryDirectory() as temp_dir:
76
- self._image_builder.run(
77
- temp_dir, img, self._deps, developer_keys
78
- )
114
+ finally:
115
+ if os.path.exists(tmp_img_output):
116
+ shutil.rmtree(tmp_img_output)
79
117
 
80
118
  @classmethod
81
119
  def from_config(
@@ -84,6 +122,7 @@ class SimpleBuilder:
84
122
  build_config: tp.Dict[str, tp.Any],
85
123
  image_builder: base.AbstractImageBuilder,
86
124
  logger: tp.Optional[AbstractLogger] = None,
125
+ images_output_dir: str = c.DEF_GEN_OUTPUT_DIR_NAME,
87
126
  ) -> "SimpleBuilder":
88
127
  """Create a builder from configuration."""
89
128
  # Prepare dependencies entries but do not fetch them
@@ -107,4 +146,6 @@ class SimpleBuilder:
107
146
  if not elements:
108
147
  raise ValueError("No elements found in configuration")
109
148
 
110
- return cls(work_dir, deps, elements, image_builder, logger)
149
+ return cls(
150
+ work_dir, deps, elements, image_builder, logger, images_output_dir
151
+ )
@@ -90,7 +90,7 @@ class PackerVariable(tp.NamedTuple):
90
90
  return self.var_tmpl.format(**data)
91
91
 
92
92
  @classmethod
93
- def variable_file_content(cls, overrides: tp.Dict[str, tp.Any]) -> str:
93
+ def variable_file_content(cls, overrides: dict[str, tp.Any]) -> str:
94
94
  if not overrides:
95
95
  return ""
96
96
 
@@ -116,12 +116,9 @@ class PackerBuilder(base.DummyImageBuilder):
116
116
  Packer image builder that uses Packer tools to build images.
117
117
  """
118
118
 
119
- def __init__(
120
- self, output_dir: str, logger: AbstractLogger | None = None
121
- ) -> None:
119
+ def __init__(self, logger: AbstractLogger | None = None) -> None:
122
120
  super().__init__()
123
121
  self._logger = logger or DummyLogger()
124
- self._output_dir = output_dir
125
122
 
126
123
  def _resolve_envs(self, envs: list[str]) -> str:
127
124
  if len(envs) == 0:
@@ -144,8 +141,9 @@ class PackerBuilder(base.DummyImageBuilder):
144
141
  self,
145
142
  image_dir: str,
146
143
  image: base.Image,
147
- deps: tp.List[base.AbstractDependency],
144
+ deps: list[base.AbstractDependency],
148
145
  developer_keys: str | None = None,
146
+ output_dir: str = c.DEF_GEN_OUTPUT_DIR_NAME,
149
147
  ) -> None:
150
148
  """Actions to prepare the environment for building the image."""
151
149
 
@@ -195,7 +193,7 @@ class PackerBuilder(base.DummyImageBuilder):
195
193
  file_provisioners="\n".join(provisioners),
196
194
  script=image.script,
197
195
  developer_keys=developer_keys_prov,
198
- output_directory=self._output_dir,
196
+ output_directory=output_dir,
199
197
  envs=envs,
200
198
  )
201
199
 
@@ -133,7 +133,7 @@ def build_cmd(
133
133
  return
134
134
 
135
135
  logger = ClickLogger()
136
- packer_image_builder = PackerBuilder(output_dir, logger)
136
+ packer_image_builder = PackerBuilder(logger)
137
137
 
138
138
  # Path where genesis.yaml configuration file is located
139
139
  work_dir = os.path.abspath(
@@ -147,7 +147,7 @@ def build_cmd(
147
147
 
148
148
  for _, build in builds.items():
149
149
  builder = SimpleBuilder.from_config(
150
- work_dir, build, packer_image_builder, logger
150
+ work_dir, build, packer_image_builder, logger, output_dir
151
151
  )
152
152
  with tempfile.TemporaryDirectory() as temp_dir:
153
153
  builder.fetch_dependency(deps_dir or temp_dir)
@@ -210,8 +210,6 @@ def build_cmd(
210
210
  @click.option(
211
211
  "-f",
212
212
  "--force",
213
- default=False,
214
- type=bool,
215
213
  show_default=True,
216
214
  is_flag=True,
217
215
  help="Rebuild if the output already exists",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: genesis-devtools
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: Tools to manager life cycle of Genesis projects.
5
5
  Home-page: https://github.com/infraguys/genesis_devtools
6
6
  Author: Genesis Corporation
@@ -0,0 +1 @@
1
+ {"git_version": "5308a95", "is_release": false}
@@ -1,7 +0,0 @@
1
- CHANGES
2
- =======
3
-
4
- 0.2.3
5
- -----
6
-
7
- * Added ability to set default value for envs (#46)
@@ -1 +0,0 @@
1
- {"git_version": "5ae17c1", "is_release": false}