2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-02-25 19:09:20 +00:00
Files
xcat-core/test/scripts/setuptesthost.pl
Daniel Hilst Selli 01f508da09 fix: Fix the help messages in all the scripts
Signed-off-by: Daniel Hilst Selli <392820+dhilst@users.noreply.github.com>
2025-12-05 17:59:32 -03:00

106 lines
2.0 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Getopt::Long qw(GetOptions);
use Cwd qw(cwd);
my $PWD = cwd();
sub sh {
my ($cmd) = @_;
say "Running: $cmd";
open my $fh, "-|", $cmd or die "cannot run $cmd: $!";
while (my $line = <$fh>) {
print $line;
}
close $fh;
return $? >> 8;
}
sub usage {
say STDERR "Usage: $0 --setup_container --target <target> [--force]";
exit -1;
}
sub parseopts {
my %opts = (
target => "",
setup_container => 0,
force => 0,
);
GetOptions(
"target=s" => \$opts{target},
"setup_container" => \$opts{setup_container},
"force" => \$opts{force},
) or usage();
usage()
if $opts{setup_container}
and not $opts{target};
return \%opts;
};
sub containerexists {
my ($name) = @_;
return sh("podman container exists $name") == 0;
}
sub imageexists {
my ($imagename) = @_;
return sh("podman image exists $imagename") == 0;
}
sub cleanupcontainerandimage {
my ($container, $image) = @_;
return sh(<<"EOF");
podman kill $container
podman rm -f $container
podman rmi -f $image
EOF
}
sub setup_container {
my ($opts) = @_;
my $target = $opts->{target};
my $releasever = int((split /-/, $target, 3)[1]);
my $name = "xcattest-el$releasever";
cleanupcontainerandimage($name, "$name-image")
if $opts->{force};
sh("podman build -t $name-image --build-arg RELEASEVER=$releasever test/")
unless imageexists("$name-image");
my $script = <<"EOF";
podman create --name $name \\
--privileged \\
--systemd=true \\
--cap-add=ALL \\
-v "$PWD/test/scripts:/workspace/scripts:Z" \\
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \\
--tmpfs /tmp \\
--tmpfs /run \\
$name-image
podman start $name
EOF
sh($script) unless containerexists($name);
}
sub main {
my $opts = parseopts();
return setup_container($opts) if $opts->{setup_container};
usage();
};
main();