Container-Buildah
view release on metacpan or search on metacpan
lib/Container/Buildah/Subcommand.pm view on Meta::CPAN
$test_result = 1;
}
}
# cache the result in the config data and return it
my $config = $cb->get_config();
$config->{$config_key} = $test_result;
$cb->debug({level => 4}, "container_compat_check: test result $test_result");
return $test_result
}
# run buildah command with parameters
# public class method
sub buildah
{
my ($class_or_obj, @in_args) = @_;
my $cb = (ref $class_or_obj) ? $class_or_obj : $class_or_obj->instance();
# verify kernel compatibility
$cb->container_compat_check() or croak "buildah(): kernel is not container-compatible";
# collect options to pass along to cmd() method
my $opts = {};
if (ref $in_args[0] eq "HASH") {
$opts = shift @in_args;
}
$opts->{name} = "buildah";
Container::Buildah::disallow_undef(\@in_args);
$cb->debug({level => 3}, "buildah: args = ".join(" ", @in_args));
return $cb->cmd($opts, prog("buildah"), @in_args);
}
#
# buildah subcommand wrapper methods
# for subcommands which do not have a container name parameter (those are in Container::Buildah::Stage)
#
# front end to "buildah bud" (build under dockerfile) subcommand
# usage: $cb->bud({name => value, ...}, context)
# public class method
sub bud
{
my ($class_or_obj, @in_args) = @_;
my $cb = (ref $class_or_obj) ? $class_or_obj : $class_or_obj->instance();
my $params = {};
if (ref $in_args[0] eq "HASH") {
$params = shift @in_args;
}
# process parameters
my ($extract, @args) = process_params({name => 'bud',
extract => [qw(suppress_output suppress_error nonzero zero)],
arg_flag => [qw(compress disable-content-trust http-proxy log-rusage no-cache pull pull-always pull-never
quiet rm squash tls-verify)],
arg_flag_str => [qw(disable-compression force-rm layers)],
arg_str => [qw(arch authfile blob-cache cache-from cert-dir cgroup-parent cni-config-dir cni-plugin-path
cpu-period cpu-quota cpu-shares cpuset-cpus cpuset-mems creds decryption-key file format http-proxy
iidfile ipc isolation jobs logfile loglevel memory memory-swap network os override-arch override-os
platform runtime shm-size sign-by signature-policy tag target timestamp userns userns-uid-map
userns-gid-map userns-uid-map-user userns-gid-map-group uts)],
arg_array => [qw(add-host annotation build-arg cap-add cap-drop device dns dns-option dns-search
label runtime-flag security-opt ulimit volume)],
}, $params);
# run buildah-tag
$cb->buildah($extract, "bud", @args, @in_args);
return;
}
# front end to "buildah containers" subcommand
# usage: $str = $cb->containers({name => value, ...})
# public class method
sub containers
{
my ($class_or_obj, @in_args) = @_;
my $cb = (ref $class_or_obj) ? $class_or_obj : $class_or_obj->instance();
my $params = {};
if (ref $in_args[0] eq "HASH") {
$params = shift @in_args;
}
# process parameters
my ($extract, @args) = process_params({name => 'containers',
extract => [qw(suppress_error nonzero zero)],
arg_flag => [qw(all json noheading notruncate quiet)],
arg_str => [qw(filter format)],
}, $params);
# run command and return output
return $cb->buildah({capture_output => 1, %$extract}, "containers", @args);
}
# front-end to "buildah from" subcommand
# usage: $cb->from( [{[key => value], ...},] image )
# public instance method
sub from
{
my ($class_or_obj, @in_args) = @_;
my $cb = (ref $class_or_obj) ? $class_or_obj : $class_or_obj->instance();
my $params = {};
if (ref $in_args[0] eq "HASH") {
$params = shift @in_args;
}
# process parameters
my ($extract, @args) = process_params({name => 'from',
extract => [qw(suppress_output suppress_error nonzero zero)],
arg_flag => [qw(pull-always pull-never tls-verify quiet)],
arg_flag_str => [qw(http-proxy pull)],
arg_str => [qw(authfile blob-cache cert-dir cgroup-parent cidfile cni-config-dir cni-plugin-path cpu-period
cpu-quota cpu-shares cpuset-cpus cpuset-mems creds device format ipc isolation memory memory-swap name
network override-arch override-os pid shm-size ulimit userns userns-uid-map userns-gid-map
userns-uid-map-user userns-gid-map-group uts)],
arg_array => [qw(add-host cap-add cap-drop decryption-key device dns dns-option dns-search security-opt
ulimit volume)],
}, $params);
# get image parameter
my $image = shift @in_args;
if (not defined $image) {
croak "image parameter missing in call to 'from' method";
}
# run command
$cb->buildah($extract, "from", @args, $image);
return;
}
# front end to "buildah images" subcommand
# usage: $str = $cb->images({name => value, ...})
# public class method
sub images
{
my ($class_or_obj, @in_args) = @_;
my $cb = (ref $class_or_obj) ? $class_or_obj : $class_or_obj->instance();
my $params = {};
if (ref $in_args[0] eq "HASH") {
$params = shift @in_args;
}
# process parameters
my ($extract, @args) = process_params({name => 'images',
extract => [qw(suppress_error nonzero zero)],
arg_flag => [qw(all digests json history noheading no-trunc notruncate quiet)],
arg_str => [qw(filter format)],
}, $params);
# run command and return output
return $cb->buildah({capture_output => 1, %$extract}, "images", @args);
}
# front end to "buildah info" subcommand
# usage: $str = $cb->info([{debug => 1, format => format}])
# this uses YAML::XS with the assumption that buildah-info's JSON output is a proper subset of YAML
# public class method
sub info
{
my ($class_or_obj, @in_args) = @_;
my $cb = (ref $class_or_obj) ? $class_or_obj : $class_or_obj->instance();
my $params = {};
if (ref $in_args[0] eq "HASH") {
$params = shift @in_args;
}
# process parameters
my ($extract, @args) = process_params({name => 'info',
extract => [qw(suppress_error nonzero zero)],
arg_flag => [qw(debug)],
arg_str => [qw(format)],
}, $params);
# run command and return output
my $yaml = $cb->buildah({capture_output => 1, %$extract}, "info", @args);
( run in 1.138 second using v1.01-cache-2.11-cpan-5735350b133 )