forked from sig_core/toolkit
add EC2, Vagrant, Azure, OCP; upload step
This commit is contained in:
parent
43e723ef2b
commit
d349dff365
@ -149,8 +149,7 @@ class ImageFactoryBackend(BackendInterface):
|
|||||||
if (res := all(ret > 0 for ret in returns) > 0):
|
if (res := all(ret > 0 for ret in returns) > 0):
|
||||||
raise Exception(res)
|
raise Exception(res)
|
||||||
|
|
||||||
ret = self.copy()
|
return 0
|
||||||
return ret
|
|
||||||
|
|
||||||
def checkout_kickstarts(self) -> int:
|
def checkout_kickstarts(self) -> int:
|
||||||
cmd = ["git", "clone", "--branch", f"r{self.ctx.architecture.major}",
|
cmd = ["git", "clone", "--branch", f"r{self.ctx.architecture.major}",
|
||||||
@ -291,3 +290,29 @@ class ImageFactoryBackend(BackendInterface):
|
|||||||
|
|
||||||
if self.stage_commands:
|
if self.stage_commands:
|
||||||
self.stage_commands.append(["cp", "-v", lambda: f"{STORAGE_DIR}/{self.target_uuid}.meta", f"{self.ctx.outdir}/build.meta"])
|
self.stage_commands.append(["cp", "-v", lambda: f"{STORAGE_DIR}/{self.target_uuid}.meta", f"{self.ctx.outdir}/build.meta"])
|
||||||
|
|
||||||
|
def prepare_vagrant(self, options):
|
||||||
|
"""Setup the output directory for the Vagrant type variant, dropping templates as required"""
|
||||||
|
|
||||||
|
templates = {}
|
||||||
|
templates['Vagrantfile'] = self.ctx.tmplenv.get_template(f"vagrant/Vagrantfile.{self.ctx.variant}")
|
||||||
|
templates['metadata.json'] = self.ctx.tmplenv.get_template('vagrant/metadata.tmpl.json')
|
||||||
|
templates['info.json'] = self.ctx.tmplenv.get_template('vagrant/info.tmpl.json')
|
||||||
|
|
||||||
|
if self.ctx.variant == "VMware":
|
||||||
|
templates[f"{self.ctx.outname}.vmx"] = self.ctx.tmplenv.get_template('vagrant/vmx.tmpl')
|
||||||
|
|
||||||
|
if self.ctx.variant == "Vbox":
|
||||||
|
templates['box.ovf'] = self.ctx.tmplenv.get_template('vagrant/box.tmpl.ovf')
|
||||||
|
|
||||||
|
if self.ctx.variant == "Libvirt":
|
||||||
|
# Libvirt vagrant driver expects the qcow2 file to be called box.img.
|
||||||
|
qemu_command_index = [i for i, d in enumerate(self.stage_commands) if d[0] == "qemu-img"][0]
|
||||||
|
self.stage_commands.insert(qemu_command_index+1, ["mv", f"{self.ctx.outdir}/{self.ctx.outname}.qcow2", f"{self.ctx.outdir}/box.img"])
|
||||||
|
|
||||||
|
for name, template in templates.items():
|
||||||
|
utils.render_template(f"{self.ctx.outdir}/{name}", template,
|
||||||
|
name=self.ctx.outname,
|
||||||
|
arch=self.ctx.architecture.name,
|
||||||
|
options=options
|
||||||
|
)
|
||||||
|
@ -20,11 +20,35 @@ import sys
|
|||||||
# TODO(neil): this should be part of the config, somewhere
|
# TODO(neil): this should be part of the config, somewhere
|
||||||
temp = AttributeDict(
|
temp = AttributeDict(
|
||||||
{
|
{
|
||||||
|
"Azure": {
|
||||||
|
"kiwiType": "oem",
|
||||||
|
"kiwiProfile": "Cloud-Azure",
|
||||||
|
"fileType": "qcow2",
|
||||||
|
"outputKey": "disk_format_image",
|
||||||
|
},
|
||||||
|
"OCP": {
|
||||||
|
"kiwiType": "oem",
|
||||||
|
"kiwiProfile": "Cloud-OCP",
|
||||||
|
"fileType": "qcow2",
|
||||||
|
"outputKey": "disk_format_image",
|
||||||
|
},
|
||||||
"GenericCloud": {
|
"GenericCloud": {
|
||||||
"kiwiType": "oem",
|
"kiwiType": "oem",
|
||||||
"kiwiProfile": "Cloud-GenericCloud",
|
"kiwiProfile": "Cloud-GenericCloud",
|
||||||
"fileType": "qcow2",
|
"fileType": "qcow2",
|
||||||
"outputKey": "disk_format_image"
|
"outputKey": "disk_format_image",
|
||||||
|
},
|
||||||
|
"EC2": {
|
||||||
|
"kiwiType": "oem",
|
||||||
|
"kiwiProfile": "Cloud-EC2",
|
||||||
|
"fileType": "qcow2",
|
||||||
|
"outputKey": "disk_format_image",
|
||||||
|
},
|
||||||
|
"Vagrant": {
|
||||||
|
"kiwiType": "oem",
|
||||||
|
"kiwiProfile": "Vagrant",
|
||||||
|
"fileType": "box",
|
||||||
|
"outputKey": "disk_format_image",
|
||||||
},
|
},
|
||||||
"Container": {
|
"Container": {
|
||||||
"kiwiType": "oci",
|
"kiwiType": "oci",
|
||||||
@ -117,7 +141,7 @@ class KiwiBackend(BackendInterface):
|
|||||||
|
|
||||||
def run_mock_command(self, mock_command: List[str]):
|
def run_mock_command(self, mock_command: List[str]):
|
||||||
mock_args = ["--configdir", "/workdir/mock-rocky-configs/etc/mock", "-r", f"rl-9-{self.ctx.architecture.name}-core-infra"]
|
mock_args = ["--configdir", "/workdir/mock-rocky-configs/etc/mock", "-r", f"rl-9-{self.ctx.architecture.name}-core-infra"]
|
||||||
if self.ctx.image_type == 'GenericCloud':
|
if self.ctx.image_type != 'Container':
|
||||||
mock_args.append("--isolation=simple")
|
mock_args.append("--isolation=simple")
|
||||||
command = [
|
command = [
|
||||||
"mock",
|
"mock",
|
||||||
|
@ -105,7 +105,7 @@ class ImageBuild: # pylint: disable=too-few-public-methods
|
|||||||
)
|
)
|
||||||
return template
|
return template
|
||||||
|
|
||||||
def copy(self, skip=False) -> int:
|
def upload(self, skip=False) -> int:
|
||||||
if not skip:
|
if not skip:
|
||||||
self.log.info("Copying files to output directory")
|
self.log.info("Copying files to output directory")
|
||||||
copy_command = ["aws", "s3", "cp", "--recursive", f"{self.outdir}/",
|
copy_command = ["aws", "s3", "cp", "--recursive", f"{self.outdir}/",
|
||||||
|
@ -11,33 +11,6 @@ BYTES_NONE_T = Union[bytes, None]
|
|||||||
CMD_RESULT_T = Tuple[int, BYTES_NONE_T, BYTES_NONE_T, STR_NONE_T]
|
CMD_RESULT_T = Tuple[int, BYTES_NONE_T, BYTES_NONE_T, STR_NONE_T]
|
||||||
|
|
||||||
|
|
||||||
# def prepare_vagrant(options):
|
|
||||||
# """Setup the output directory for the Vagrant type variant, dropping templates as required"""
|
|
||||||
# file_loader = FileSystemLoader(f"{_rootdir}/templates")
|
|
||||||
# tmplenv = Environment(loader=file_loader)
|
|
||||||
#
|
|
||||||
# templates = {}
|
|
||||||
# templates['Vagrantfile'] = tmplenv.get_template(f"vagrant/Vagrantfile.{self.variant}")
|
|
||||||
# templates['metadata.json'] = tmplenv.get_template('vagrant/metadata.tmpl.json')
|
|
||||||
# templates['info.json'] = tmplenv.get_template('vagrant/info.tmpl.json')
|
|
||||||
#
|
|
||||||
# if self.variant == "VMware":
|
|
||||||
# templates[f"{self.outname}.vmx"] = tmplenv.get_template('vagrant/vmx.tmpl')
|
|
||||||
#
|
|
||||||
# if self.variant == "Vbox":
|
|
||||||
# templates['box.ovf'] = tmplenv.get_template('vagrant/box.tmpl.ovf')
|
|
||||||
#
|
|
||||||
# if self.variant == "Libvirt":
|
|
||||||
# # Libvirt vagrant driver expects the qcow2 file to be called box.img.
|
|
||||||
# qemu_command_index = [i for i, d in enumerate(self.stage_commands) if d[0] == "qemu-img"][0]
|
|
||||||
# self.stage_commands.insert(qemu_command_index+1, ["mv", f"{self.outdir}/{self.outname}.qcow2", f"{self.outdir}/box.img"])
|
|
||||||
#
|
|
||||||
# for name, template in templates.items():
|
|
||||||
# self.render_template(f"{self.outdir}/{name}", template,
|
|
||||||
# name=self.outname,
|
|
||||||
# arch=self.architecture.name,
|
|
||||||
# options=options
|
|
||||||
# )
|
|
||||||
|
|
||||||
|
|
||||||
def render_template(path, template, **kwargs) -> pathlib.Path:
|
def render_template(path, template, **kwargs) -> pathlib.Path:
|
||||||
|
@ -35,6 +35,9 @@ parser.add_argument('--kube', action='store_true',
|
|||||||
parser.add_argument('--timeout', type=str,
|
parser.add_argument('--timeout', type=str,
|
||||||
help="change timeout for imagefactory build process",
|
help="change timeout for imagefactory build process",
|
||||||
required=False, default='3600')
|
required=False, default='3600')
|
||||||
|
parser.add_argument('--backend', type=str,
|
||||||
|
help="which backend to use (kiwi|imagefactory)",
|
||||||
|
required=False, default='kiwi')
|
||||||
|
|
||||||
|
|
||||||
results = parser.parse_args()
|
results = parser.parse_args()
|
||||||
@ -65,9 +68,8 @@ def run():
|
|||||||
arches = rlvars['allowed_arches'] if results.kube else [platform.uname().machine]
|
arches = rlvars['allowed_arches'] if results.kube else [platform.uname().machine]
|
||||||
|
|
||||||
for architecture in arches:
|
for architecture in arches:
|
||||||
if results.type in ["Container", "GenericCloud"]:
|
if results.backend == "kiwi":
|
||||||
backend = KiwiBackend(
|
backend = KiwiBackend()
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
backend = ImageFactoryBackend(
|
backend = ImageFactoryBackend(
|
||||||
kickstart_dir="kickstart" if results.kickstartdir else "os",
|
kickstart_dir="kickstart" if results.kickstartdir else "os",
|
||||||
@ -104,3 +106,10 @@ def run():
|
|||||||
method()
|
method()
|
||||||
else:
|
else:
|
||||||
log.fatal(f"Unable to execute {stage}")
|
log.fatal(f"Unable to execute {stage}")
|
||||||
|
|
||||||
|
if 'upload' in skip_stages:
|
||||||
|
return
|
||||||
|
|
||||||
|
log.info("Final stage - Upload")
|
||||||
|
|
||||||
|
IB.upload(skip='upload' in skip_stages)
|
||||||
|
Loading…
Reference in New Issue
Block a user