Compare commits

..

8 commits

Author SHA1 Message Date
Lokesh Mandvekar
27f935d6d6 Revert last 3 commits
Don't need gvforwarder split for f37.

This reverts commit d63582f1c4.
This reverts commit 71813a9862.
This reverts commit f22de8aa1e.
2023-09-13 15:05:35 -04:00
Lokesh Mandvekar
d63582f1c4 fix package requires
Signed-off-by: Lokesh Mandvekar <lsm5@fedoraproject.org>
2023-09-13 11:26:07 -04:00
Lokesh Mandvekar
71813a9862 adjust dependency for podman-gvproxy 2023-09-12 16:01:22 -04:00
Lokesh Mandvekar
f22de8aa1e podman has hard dependency on gvisor-tap-vsock-gvforwarder
(cherry picked from commit e937b31ec5)
2023-09-12 15:54:31 -04:00
Lokesh Mandvekar
90413ac508 tests: add passt to rpm -qa so we know what version is used in tests
(cherry picked from commit 01f53fd3b5)
2023-08-29 14:36:32 -04:00
Packit
48098151fb [packit] 4.6.2 upstream release
Upstream tag: v4.6.2
Upstream commit: 5db42e86

If you need to do any change in this pull request, you need to locally fetch the source branch of it and push it (with a fix) to your fork (as it is not possible to push to the branch created in the Packit’s fork):
```
git fetch https://src.fedoraproject.org/forks/packit/rpms/podman.git refs/heads/*:refs/remotes/packit/*
git checkout packit/4.6.2-f37-update-propose_downstream
```
2023-08-28 19:18:00 +00:00
Packit
ecae69579d [packit] 4.6.1 upstream release
Upstream tag: v4.6.1
Upstream commit: f3069b3f

If you need to do any change in this pull request, you need to locally fetch the source branch of it and push it (with a fix) to your fork (as it is not possible to push to the branch created in the Packit’s fork):
```
git fetch https://src.fedoraproject.org/forks/packit/rpms/podman.git refs/heads/*:refs/remotes/packit/*
git checkout packit/4.6.1-f37-update-propose_downstream
```
2023-08-10 20:57:33 +00:00
Packit
2f602c0d59 [packit] 4.6.0 upstream release
Upstream tag: v4.6.0
Upstream commit: 38e6fab9

If you need to do any change in this pull request, you need to locally fetch the source branch of it and push it (with a fix) to your fork (as it is not possible to push to the branch created in the Packit’s fork):
```
git fetch https://src.fedoraproject.org/forks/packit/rpms/podman.git refs/heads/*:refs/remotes/packit/*
git checkout packit/4.6.0-f37-update-propose_downstream
```
2023-07-20 22:10:14 +00:00
28 changed files with 652 additions and 567 deletions

View file

@ -1 +0,0 @@
1

60
.gitignore vendored
View file

@ -1834,63 +1834,3 @@
/v4.6.0.tar.gz
/v4.6.1.tar.gz
/v4.6.2.tar.gz
/v4.7.0-rc1.tar.gz
/v4.7.0.tar.gz
/v4.7.1.tar.gz
/v4.7.2.tar.gz
/v4.8.0-rc1.tar.gz
/v4.8.0.tar.gz
/v4.8.1.tar.gz
/v4.8.2.tar.gz
/v4.8.3.tar.gz
/v4.9.0.tar.gz
/v4.9.1.tar.gz
/v4.9.2.tar.gz
/v5.0.0-rc1.tar.gz
/v5.0.0-rc2.tar.gz
/v5.0.0-rc3.tar.gz
/v5.0.0-rc4.tar.gz
/v5.0.0-rc5.tar.gz
/v5.0.0-rc6.tar.gz
/v5.0.0-rc7.tar.gz
/v5.0.0.tar.gz
/v5.0.1.tar.gz
/v5.0.2.tar.gz
/v5.0.3.tar.gz
/v5.1.0-rc1.tar.gz
/v5.1.0.tar.gz
/v5.1.1.tar.gz
/v5.1.2.tar.gz
/v5.2.0-rc1.tar.gz
/v5.2.0-rc2.tar.gz
/v5.2.0.tar.gz
/v5.2.1.tar.gz
/v5.2.2.tar.gz
/v5.2.3.tar.gz
/v5.2.4.tar.gz
/v5.2.5.tar.gz
/v5.3.0-rc1.tar.gz
/v5.3.0-rc2.tar.gz
/v5.3.0-rc3.tar.gz
/v5.3.0.tar.gz
/v5.3.1.tar.gz
/v5.3.2.tar.gz
/v5.4.0-rc2.tar.gz
/v5.4.0-rc3.tar.gz
/v5.4.0.tar.gz
/v5.4.1.tar.gz
/v5.4.2.tar.gz
/v5.5.0-rc1.tar.gz
/v5.5.0-rc2.tar.gz
/v5.5.0.tar.gz
/v5.5.1.tar.gz
/v5.5.2.tar.gz
/v5.6.0-rc1.tar.gz
/v5.6.0-rc2.tar.gz
/v5.6.0.tar.gz
/v5.6.1.tar.gz
/v5.6.2.tar.gz
/v5.7.0-rc1.tar.gz
/v5.7.0-rc2.tar.gz
/v5.7.0.tar.gz
/v5.7.1.tar.gz

View file

@ -2,117 +2,38 @@
# See the documentation for more information:
# https://packit.dev/docs/configuration/
downstream_package_name: podman
specfile_path: rpm/podman.spec
upstream_tag_template: v{version}
# These files get synced from upstream to downstream (Fedora / CentOS Stream) on every
# propose-downstream job. This is done so tests maintained upstream can be run
# downstream in Zuul CI and Bodhi.
# Ref: https://packit.dev/docs/configuration#files_to_sync
files_to_sync:
- src: rpm/gating.yaml
dest: gating.yaml
delete: true
- src: plans/
dest: plans/
delete: true
mkpath: true
- src: test/tmt/
dest: test/tmt/
delete: true
mkpath: true
- src: .fmf/
dest: .fmf/
delete: true
- .packit.yaml
packages:
podman-fedora:
pkg_tool: fedpkg
specfile_path: rpm/podman.spec
podman-centos:
pkg_tool: centpkg
specfile_path: rpm/podman.spec
podman-eln:
specfile_path: rpm/podman.spec
# Disable automatic merging for Copr builds (and subsequent Testing Farm)
merge_pr_in_ci: false
srpm_build_deps:
- git-archive-all
- make
actions:
fix-spec-file: "bash .packit-copr-rpm.sh"
pre-sync: "bash .packit-rpm-git-commit.sh"
jobs:
- job: copr_build
trigger: pull_request
packages: [podman-fedora]
notifications: &packit_generic_failure_notification
failure_comment:
message: "[NON-BLOCKING] Packit jobs failed. @containers/packit-build please check. Everyone else, feel free to ignore."
enable_net: true
# keep in sync with https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman-next
targets:
- fedora-all-x86_64
- fedora-all-aarch64
# Re-enable these scans if OpenScanHub starts scanning go packages
# https://packit.dev/posts/openscanhub-prototype
osh_diff_scan_after_copr_build: false
# Ignore until golang is updated in distro buildroot to go 1.23.3+
- job: copr_build
trigger: ignore
packages: [podman-eln]
notifications: *packit_generic_failure_notification
enable_net: true
targets:
fedora-eln-x86_64:
additional_repos:
- "https://kojipkgs.fedoraproject.org/repos/eln-build/latest/x86_64/"
fedora-eln-aarch64:
additional_repos:
- "https://kojipkgs.fedoraproject.org/repos/eln-build/latest/aarch64/"
# Ignore until golang is updated in distro buildroot to go 1.23.3+
- job: copr_build
trigger: ignore
packages: [podman-centos]
notifications: *packit_generic_failure_notification
enable_net: true
targets:
- centos-stream-9-x86_64
- centos-stream-9-aarch64
- centos-stream-10-x86_64
- centos-stream-10-aarch64
- centos-stream+epel-next-8-x86_64
- centos-stream+epel-next-8-aarch64
- centos-stream+epel-next-9-x86_64
- centos-stream+epel-next-9-aarch64
additional_repos:
- "copr://rhcontainerbot/podman-next"
# Run on commit to main branch
- job: copr_build
trigger: commit
packages: [podman-fedora]
branch: main
owner: rhcontainerbot
project: podman-next
enable_net: true
# Tests on Fedora
- job: tests
trigger: pull_request
packages: [podman-fedora]
notifications: *packit_generic_failure_notification
targets:
- fedora-all
tmt_plan: "/plans/system/*"
- job: tests
identifier: cockpit-revdeps
trigger: pull_request
packages: [podman-fedora]
notifications:
failure_comment:
message: "Cockpit tests failed for commit {commit_sha}. @martinpitt, @jelly, @mvollmer please check."
targets:
- fedora-latest-stable
- fedora-development
@ -121,46 +42,24 @@ jobs:
- artifacts:
- type: repository-file
id: https://copr.fedorainfracloud.org/coprs/g/cockpit/main-builds/repo/fedora-$releasever/group_cockpit-main-builds-fedora-$releasever.repo
- type: repository-file
id: https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman-next/repo/fedora-$releasever/rhcontainerbot-podman-next-fedora-$releasever.repo
tmt:
context:
revdeps: "yes"
- job: tests
identifier: tmt-revdeps
trigger: pull_request
packages: [podman-fedora]
notifications:
failure_comment:
message: "tmt tests failed for commit {commit_sha}. @lsm5, @psss, @thrix please check."
targets:
- fedora-latest
fmf_url: https://github.com/teemtee/tmt
fmf_path: /plans/friends
fmf_ref: main
tmt_plan: "/podman"
- job: propose_downstream
trigger: release
update_release: false
packages: [podman-fedora]
dist_git_branches: &fedora_targets
dist_git_branches:
- fedora-all
- job: koji_build
trigger: commit
packages: [podman-fedora]
sidetag_group: podman-releases
dist_git_branches: *fedora_targets
dist_git_branches:
- fedora-all
- job: bodhi_update
trigger: koji_build
packages: [podman-fedora]
sidetag_group: podman-releases
# Dependencies are not rpm dependencies, but packages that should go in the
# same bodhi update
# Ref: https://packit.dev/docs/fedora-releases-guide/releasing-multiple-packages
dependencies:
- buildah
- containers-common
- skopeo
dist_git_branches: *fedora_targets
trigger: commit
dist_git_branches:
- fedora-branched # rawhide updates are created automatically

View file

@ -1,3 +1,3 @@
This repository is maintained by packit.
https://packit.dev/
The file was generated using packit 1.12.0.post1.dev22+gfe66fd850.
The file was generated using packit 0.79.0.post2+g93f33d9.

View file

@ -7,11 +7,3 @@ decision_contexts:
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
# recipients: jnovy, lsm5, santiago
--- !Policy
product_versions:
- rhel-*
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

View file

@ -1,37 +0,0 @@
# reverse dependency test for https://github.com/cockpit-project/cockpit-podman/
# packit should automatically notify the cockpit maintainers on failures.
# For questions, please contact @martinpitt, @jelly, @mvollmer
enabled: false
adjust+:
when: revdeps == yes
enabled: true
discover:
how: fmf
url: https://github.com/cockpit-project/cockpit-podman
ref: "main"
execute:
how: tmt
# not relevant for testing podman
environment:
TEST_AUDIT_NO_SELINUX: 1
TEST_ALLOW_JOURNAL_MESSAGES: ".*"
# This has to duplicate cockpit-podman's plan structure; see https://github.com/teemtee/tmt/issues/1770
/podman-system:
summary: Run cockpit-podman system tests
discover+:
test: /test/browser/system
/podman-user:
summary: Run cockpit-podman user tests
discover+:
test: /test/browser/user
/podman-misc:
summary: Run other cockpit-podman tests
discover+:
test: /test/browser/other

View file

@ -1,50 +0,0 @@
discover:
how: fmf
execute:
how: tmt
prepare:
- how: shell
script: modprobe null_blk nr_devices=1
order: 5
- when: distro == centos-stream or distro == rhel
how: shell
script: |
dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm --eval '%{?rhel}').noarch.rpm
dnf -y config-manager --set-enabled epel
order: 10
adjust+:
- enabled: false
when: revdeps == yes
provision:
how: artemis
hardware:
memory: ">= 16 GB"
cpu:
cores: ">= 4"
threads: ">=8"
disk:
- size: ">= 512 GB"
/local-root:
summary: Local rootful tests
discover+:
filter: 'tag:local & tag:root'
/local-rootless:
summary: Local rootless tests
discover+:
filter: 'tag:local & tag:rootless'
/remote-root:
summary: Remote rootful tests
discover+:
filter: 'tag:remote & tag:root'
/remote-rootless:
summary: Remote rootless tests
discover+:
filter: 'tag:remote & tag:rootless'

View file

@ -1,21 +0,0 @@
summary: Run tmt container provision test (downstream only)
enabled: false
adjust+:
- enabled: true
when: initiator != packit and distro != rhel
discover:
how: fmf
filter: 'tag:tmt & tag:downstream'
execute:
how: tmt
prepare:
- when: distro == centos-stream or distro == rhel
how: shell
script: |
dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm --eval '%{?rhel}').noarch.rpm
dnf -y config-manager --set-enabled epel
order: 10

View file

@ -1,29 +0,0 @@
summary: Run toolbox tests (downstream only)
enabled: false
adjust+:
- enabled: true
when: initiator != packit and distro == fedora
provision:
how: artemis
hardware:
memory: ">= 16 GB"
cpu:
cores: ">= 4"
threads: ">=8"
disk:
- size: ">= 512 GB"
prepare:
- name: packages
how: install
package: [toolbox-tests]
discover:
how: fmf
url: https://src.fedoraproject.org/rpms/toolbox
ref: "rawhide"
execute:
how: tmt

View file

@ -7,52 +7,65 @@
%global debug_package %{nil}
%endif
# RHEL's default %%gobuild macro doesn't account for the BUILDTAGS variable, so we
# set it separately here and do not depend on RHEL's go-[s]rpm-macros package
# until that's fixed.
# c9s bz: https://bugzilla.redhat.com/show_bug.cgi?id=2227328
# c8s bz: https://bugzilla.redhat.com/show_bug.cgi?id=2227331
%if %{defined rhel} && !%{defined eln}
%define gobuild(o:) go build -buildmode pie -compiler gc -tags="rpm_crashtraceback libtrust_openssl ${BUILDTAGS:-}" -ldflags "-linkmode=external -compressdwarf=false ${LDFLAGS:-} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags'" -a -v -x %{?**};
# python3 dep conditional for rhel8
%if %{?rhel} == 8
%define rhel8py3 1
%endif
%endif
%global gomodulesmode GO111MODULE=on
%if %{defined rhel}
# _user_tmpfiles.d currently undefined on rhel
%global _user_tmpfilesdir %{_datadir}/user-tmpfiles.d
%endif
%if %{defined fedora}
%define build_with_btrfs 1
# qemu-system* isn't packageed for CentOS Stream / RHEL
%define qemu 1
# bats is included in the default repos (No epel/copr etc.)
%define distro_bats 1
%if %{?fedora} >= 43
%define sequoia 1
%endif
%endif
%if %{defined copr_username}
%define copr_build 1
%if "%{copr_username}" == "rhcontainerbot" && "%{copr_projectname}" == "podman-next"
%define next_build 1
%endif
%endif
# Only RHEL and CentOS Stream rpms are built with fips-enabled go compiler
%if %{defined rhel}
%define fips_enabled 1
# gvproxy doesn't currently build on rawhide because of go1.21.
# It can be included as a standalone package on copr.
# It is currently open for review on bugzilla until which fedora releases can't
# include it. Official rawhide should be able to fetch the last active build of
# gvproxy, the min version requirement has been removed to allow it.
# Ref: https://bugzilla.redhat.com/show_bug.cgi?id=2224434
%if !%{defined copr_username} && 0%{?fedora} <= 37
%define gvproxy_subpackage 1
%endif
%global container_base_path github.com/containers
%global container_base_url https://%{container_base_path}
# For LDFLAGS
%global ld_project %{container_base_path}/%{name}/v5
%global ld_project %{container_base_path}/%{name}/v4
%global ld_libpod %{ld_project}/libpod
# %%{name}
%global git0 %{container_base_url}/%{name}
# podman-machine subpackage will be present only on these architectures
%global machine_arches x86_64 aarch64
# dnsname
%global repo_plugins dnsname
%global git_plugins %{container_base_url}/%{repo_plugins}
%global commit_plugins 18822f9a4fb35d1349eb256f4cd2bfd372474d84
%global import_path_plugins %{container_base_path}/%{repo_plugins}
%if %{defined copr_build}
%define build_origin Copr: %{?copr_username}/%{?copr_projectname}
%else
%define build_origin %{?packager}
%if %{defined gvproxy_subpackage}
# gvproxy
%global repo_gvproxy gvisor-tap-vsock
%global git_gvproxy %{container_base_url}/%{repo_gvproxy}
%global commit_gvproxy 407efb5dcdb0f4445935f7360535800b60447544
%endif
Name: podman
%if %{defined next_build}
%if %{defined copr_username}
Epoch: 102
%else
Epoch: 5
@ -63,21 +76,26 @@ Epoch: 5
# If that's what you're reading, Version must be 0, and will be updated by Packit for
# copr and koji builds.
# If you're reading this on dist-git, the version is automatically filled in by Packit.
Version: 5.7.1
Version: 4.6.2
# The `AND` needs to be uppercase in the License for SPDX compatibility
License: Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0
Release: %autorelease
%if %{defined golang_arches_future}
ExclusiveArch: %{golang_arches_future}
%else
ExclusiveArch: aarch64 ppc64le s390x x86_64 riscv64
ExclusiveArch: aarch64 ppc64le s390x x86_64
%endif
Summary: Manage Pods, Containers and Container Images
URL: https://%{name}.io/
# All SourceN files fetched from upstream
Source0: %{git0}/archive/v%{version_no_tilde}.tar.gz
Source0: %{git0}/archive/v%{version}.tar.gz
Source1: %{git_plugins}/archive/%{commit_plugins}/%{repo_plugins}-%{commit_plugins}.tar.gz
%if %{defined gvproxy_subpackage}
Source2: %{git_gvproxy}/archive/%{commit_gvproxy}/%{repo_gvproxy}-%{commit_gvproxy}.tar.gz
%endif
Provides: %{name}-manpages = %{epoch}:%{version}-%{release}
BuildRequires: %{_bindir}/envsubst
BuildRequires: %{_bindir}/go-md2man
%if %{defined build_with_btrfs}
BuildRequires: btrfs-progs-devel
%endif
@ -87,7 +105,7 @@ BuildRequires: glibc-devel
BuildRequires: glibc-static
BuildRequires: golang
BuildRequires: git-core
%if %{undefined rhel} || 0%{?rhel} >= 10
%if !%{defined gobuild}
BuildRequires: go-rpm-macros
%endif
BuildRequires: gpgme-devel
@ -99,23 +117,21 @@ BuildRequires: shadow-utils-subid-devel
BuildRequires: pkgconfig
BuildRequires: make
BuildRequires: man-db
BuildRequires: sqlite-devel
BuildRequires: ostree-devel
BuildRequires: systemd
BuildRequires: systemd-devel
%if %{defined rhel8py3}
BuildRequires: python3
%endif
Requires: catatonit
Requires: conmon >= 2:2.1.7-2
%if %{defined fedora} && 0%{?fedora} >= 40
# TODO: Remove the f40 conditional after a few releases to keep conditionals to
# a minimum
# Ref: https://bugzilla.redhat.com/show_bug.cgi?id=2269148
Requires: containers-common-extra >= 5:0.58.0-1
%else
Requires: containers-common-extra
%if %{defined gvproxy_subpackage}
Recommends: %{name}-gvproxy = %{epoch}:%{version}-%{release}
%else
Recommends: %{name}-gvproxy
%endif
%if %{defined sequoia}
Requires: podman-sequoia
%endif
Provides: %{name}-quadlet
Obsoletes: %{name}-quadlet <= 5:4.4.0-1
Provides: %{name}-quadlet = %{epoch}:%{version}-%{release}
@ -131,6 +147,8 @@ additional privileges.
Both tools share image (not container) storage, hence each can use or
manipulate images (but not containers) created by the other.
%{summary}
%{repo} Simple management tool for pods, containers and images
%package docker
Summary: Emulate Docker CLI using %{name}
@ -151,26 +169,20 @@ pages and %{name}.
Summary: Tests for %{name}
Requires: %{name} = %{epoch}:%{version}-%{release}
%if %{defined distro_bats}
Requires: bats
%endif
Requires: attr
Requires: jq
Requires: skopeo
Requires: nmap-ncat
Requires: httpd-tools
Requires: openssl
Requires: socat
Requires: slirp4netns
Requires: buildah
Requires: gnupg
Requires: xfsprogs
%description tests
%{summary}
This package contains system tests for %{name}. Only intended to be used for
gating tests. Not supported for end users / customers.
This package contains system tests for %{name}
%package remote
Summary: (Experimental) Remote client for managing %{name} containers
@ -185,6 +197,34 @@ run %{name}-remote in production.
manage pods, containers and container images. %{name}-remote supports ssh
connections as well.
%package plugins
Summary: Plugins for %{name}
Requires: dnsmasq
%if %{defined gvproxy_subpackage}
Recommends: %{name}-gvproxy = %{epoch}:%{version}-%{release}
%else
Recommends: %{name}-gvproxy
%endif
%description plugins
This plugin sets up the use of dnsmasq on a given CNI network so
that Pods can resolve each other by name. When configured,
the pod and its IP address are added to a network specific hosts file
that dnsmasq will read in. Similarly, when a pod
is removed from the network, it will remove the entry from the hosts
file. Each CNI network will have its own dnsmasq instance.
%if %{defined gvproxy_subpackage}
%package gvproxy
Summary: Go replacement for libslirp and VPNKit
%description gvproxy
A replacement for libslirp and VPNKit, written in pure Go.
It is based on the network stack of gVisor. Compared to libslirp,
gvisor-tap-vsock brings a configurable DNS server and
dynamic port forwarding.
%endif
%package -n %{name}sh
Summary: Confined login and user shell using %{name}
Requires: %{name} = %{epoch}:%{version}-%{release}
@ -196,39 +236,18 @@ Provides: %{name}-%{name}sh = %{epoch}:%{version}-%{release}
capabilities specified in user quadlets.
It is a symlink to %{_bindir}/%{name} and execs into the `%{name}sh` container
when `%{_bindir}/%{name}sh` is set as a login shell or set as os.Args[0].
%ifarch %{machine_arches}
%package machine
Summary: Metapackage for setting up %{name} machine
Requires: %{name} = %{epoch}:%{version}-%{release}
Requires: gvisor-tap-vsock
%if %{defined qemu}
%ifarch aarch64
Requires: qemu-system-aarch64-core
%endif
%ifarch x86_64
Requires: qemu-system-x86-core
%endif
%else
Requires: qemu-kvm
%endif
Requires: qemu-img
Requires: virtiofsd
ExclusiveArch: x86_64 aarch64
%description machine
This subpackage installs the dependencies for %{name} machine, for more see:
https://docs.podman.io/en/latest/markdown/podman-machine.1.html
%endif
when `%{_bindir}/%{name}sh is set as a login shell or set as os.Args[0].
%prep
%autosetup -Sgit -n %{name}-%{version_no_tilde}
%autosetup -Sgit -n %{name}-%{version}
sed -i 's;@@PODMAN@@\;$(BINDIR);@@PODMAN@@\;%{_bindir};' Makefile
# cgroups-v1 is supported on rhel9
%if 0%{?rhel} == 9
sed -i '/DELETE ON RHEL9/,/DELETE ON RHEL9/d' libpod/runtime.go
# untar dnsname
tar zxf %{SOURCE1}
%if %{defined gvproxy_subpackage}
# untar %%{name}-gvproxy
tar zxf %{SOURCE2}
%endif
%build
@ -244,61 +263,57 @@ CGO_CFLAGS=$(echo $CGO_CFLAGS | sed 's/-specs=\/usr\/lib\/rpm\/redhat\/redhat-an
export CGO_CFLAGS+=" -m64 -mtune=generic -fcf-protection=full"
%endif
export GOPROXY=direct
LDFLAGS="-X %{ld_libpod}/define.buildInfo=${SOURCE_DATE_EPOCH:-$(date +%s)} \
-X \"%{ld_libpod}/define.buildOrigin=%{build_origin}\" \
LDFLAGS="-X %{ld_libpod}/define.buildInfo=$(date +%s) \
-X %{ld_libpod}/config._installPrefix=%{_prefix} \
-X %{ld_libpod}/config._etcDir=%{_sysconfdir} \
-X %{ld_project}/pkg/systemd/quadlet._binDir=%{_bindir}"
# This variable will be set by Packit actions. See .packit.yaml in the root dir
# of the repo (upstream as well as Fedora dist-git).
GIT_COMMIT="f845d14e941889ba4c071f35233d09b29d363c75"
LDFLAGS="$LDFLAGS -X %{ld_libpod}/define.gitCommit=$GIT_COMMIT"
# build rootlessport first
%gobuild -o bin/rootlessport ./cmd/rootlessport
export BASEBUILDTAGS="seccomp $(hack/systemd_tag.sh) $(hack/libsubid_tag.sh) libsqlite3 grpcnotrace"
# libtrust_openssl buildtag switches to using the FIPS-compatible func
# `ecdsa.HashSign`.
# Ref 1: https://github.com/golang-fips/go/blob/main/patches/015-add-hash-sign-verify.patch#L22
# Ref 2: https://github.com/containers/libtrust/blob/main/ec_key_openssl.go#L23
%if %{defined fips_enabled}
export BASEBUILDTAGS="$BASEBUILDTAGS libtrust_openssl"
%endif
export BASEBUILDTAGS="seccomp exclude_graphdriver_devicemapper $(hack/systemd_tag.sh) $(hack/libsubid_tag.sh)"
# build %%{name}
export BUILDTAGS="$BASEBUILDTAGS $(hack/btrfs_installed_tag.sh)"
%if %{defined sequoia}
export BUILDTAGS="$BUILDTAGS containers_image_sequoia"
%endif
export BUILDTAGS="$BASEBUILDTAGS $(hack/btrfs_installed_tag.sh) $(hack/btrfs_tag.sh) $(hack/libdm_tag.sh)"
%gobuild -o bin/%{name} ./cmd/%{name}
# build %%{name}-remote
export BUILDTAGS="$BASEBUILDTAGS exclude_graphdriver_btrfs remote"
export BUILDTAGS="$BASEBUILDTAGS exclude_graphdriver_btrfs btrfs_noversion remote"
%gobuild -o bin/%{name}-remote ./cmd/%{name}
# build quadlet
export BUILDTAGS="$BASEBUILDTAGS $(hack/btrfs_installed_tag.sh)"
export BUILDTAGS="$BASEBUILDTAGS $(hack/btrfs_installed_tag.sh) $(hack/btrfs_tag.sh)"
%gobuild -o bin/quadlet ./cmd/quadlet
# build %%{name}-testing
export BUILDTAGS="$BASEBUILDTAGS $(hack/btrfs_installed_tag.sh)"
%gobuild -o bin/podman-testing ./cmd/podman-testing
# reset LDFLAGS for plugins binaries
# reset LDFLAGS for plugins and gvisor binaries
LDFLAGS=''
%if %{defined gvproxy_subpackage}
# build gvisor-tap-vsock binaries
cd %{repo_gvproxy}-%{commit_gvproxy}
%gobuild -o bin/gvproxy ./cmd/gvproxy
%gobuild -o bin/gvforwarder ./cmd/vm
cd ..
%endif
%{__make} docs docker-docs
# build dnsname the old way otherwise it fails on koji
cd %{repo_plugins}-%{commit_plugins}
mkdir _build
cd _build
mkdir -p src/%{container_base_path}
ln -s ../../../../ src/%{import_path_plugins}
cd ..
ln -s vendor src
export GOPATH=$(pwd)/_build:$(pwd)
%define gomodulesmode GO111MODULE=off
%gobuild -o bin/dnsname %{import_path_plugins}/plugins/meta/dnsname
cd ..
%install
install -dp %{buildroot}%{_unitdir}
PODMAN_VERSION=%{version} %{__make} DESTDIR=%{buildroot} PREFIX=%{_prefix} ETCDIR=%{_sysconfdir} \
PODMAN_VERSION=%{version} %{__make} PREFIX=%{buildroot}%{_prefix} ETCDIR=%{_sysconfdir} \
install.bin \
install.man \
install.systemd \
@ -306,33 +321,41 @@ PODMAN_VERSION=%{version} %{__make} DESTDIR=%{buildroot} PREFIX=%{_prefix} ETCDI
install.docker \
install.docker-docs \
install.remote \
install.testing
%if %{defined _modulesloaddir}
install.modules-load
%endif
sed -i 's;%{buildroot};;g' %{buildroot}%{_bindir}/docker
# install dnsname plugin
cd %{repo_plugins}-%{commit_plugins}
%{__make} PREFIX=%{_prefix} DESTDIR=%{buildroot} install
cd ..
%if %{defined gvproxy_subpackage}
# install gvproxy
cd %{repo_gvproxy}-%{commit_gvproxy}
install -dp %{buildroot}%{_libexecdir}/%{name}
install -p -m0755 bin/gvproxy %{buildroot}%{_libexecdir}/%{name}
install -p -m0755 bin/gvforwarder %{buildroot}%{_libexecdir}/%{name}
cd ..
%endif
# do not include docker and podman-remote man pages in main package
for file in `find %{buildroot}%{_mandir}/man[157] -type f | sed "s,%{buildroot},," | grep -v -e %{name}sh.1 -e remote -e docker`; do
echo "$file*" >> %{name}.file-list
for file in `find %{buildroot}%{_mandir}/man[15] -type f | sed "s,%{buildroot},," | grep -v -e remote -e docker`; do
echo "$file*" >> podman.file-list
done
rm -f %{buildroot}%{_mandir}/man5/docker*.5
install -d -p %{buildroot}%{_datadir}/%{name}/test/system
cp -pav test/system %{buildroot}%{_datadir}/%{name}/test/
%ifarch %{machine_arches}
# symlink virtiofsd in %%{name} libexecdir for machine subpackage
ln -s ../virtiofsd %{buildroot}%{_libexecdir}/%{name}
%endif
install -d -p %{buildroot}/%{_datadir}/%{name}/test/system
cp -pav test/system %{buildroot}/%{_datadir}/%{name}/test/
#define license tag if not already defined
%{!?_licensedir:%global license %doc}
# Include empty check to silence rpmlint warning
%check
%files -f %{name}.file-list
%license LICENSE vendor/modules.txt
%license LICENSE
%doc README.md CONTRIBUTING.md install.md transfer.md
%{_bindir}/%{name}
%dir %{_libexecdir}/%{name}
@ -349,17 +372,13 @@ ln -s ../virtiofsd %{buildroot}%{_libexecdir}/%{name}
%{_tmpfilesdir}/%{name}.conf
%{_systemdgeneratordir}/%{name}-system-generator
%{_systemdusergeneratordir}/%{name}-user-generator
# iptables modules are only needed with iptables-legacy,
# as of f41 netavark will default to nftables so do not load unessary modules
# https://fedoraproject.org/wiki/Changes/NetavarkNftablesDefault
%if %{defined fedora} && 0%{?fedora} < 41
%if %{defined _modulesloaddir}
%{_modulesloaddir}/%{name}-iptables.conf
%endif
%files docker
%{_bindir}/docker
%{_mandir}/man1/docker*.1*
%{_sysconfdir}/profile.d/%{name}-docker.*
%{_tmpfilesdir}/%{name}-docker.conf
%{_user_tmpfilesdir}/%{name}-docker.conf
@ -374,18 +393,33 @@ ln -s ../virtiofsd %{buildroot}%{_libexecdir}/%{name}
%{_datadir}/zsh/site-functions/_%{name}-remote
%files tests
%{_bindir}/%{name}-testing
%license LICENSE
%{_datadir}/%{name}/test
%files -n %{name}sh
%{_bindir}/%{name}sh
%{_mandir}/man1/%{name}sh.1*
%files plugins
%license %{repo_plugins}-%{commit_plugins}/LICENSE
%doc %{repo_plugins}-%{commit_plugins}/{README.md,README_PODMAN.md}
%dir %{_libexecdir}/cni
%{_libexecdir}/cni/dnsname
%ifarch %{machine_arches}
%files machine
%if %{defined gvproxy_subpackage}
%files gvproxy
%license %{repo_gvproxy}-%{commit_gvproxy}/LICENSE
%doc %{repo_gvproxy}-%{commit_gvproxy}/README.md
%dir %{_libexecdir}/%{name}
%{_libexecdir}/%{name}/virtiofsd
%{_libexecdir}/%{name}/gvproxy
%{_libexecdir}/%{name}/gvforwarder
%endif
%files -n %{name}sh
%license LICENSE
%doc README.md CONTRIBUTING.md install.md transfer.md
%{_bindir}/%{name}sh
%changelog
%if %{defined autochangelog}
%autochangelog
%else
* Mon May 01 2023 RH Container Bot <rhcontainerbot@fedoraproject.org>
- Placeholder changelog for envs that are not autochangelog-ready
%endif

View file

@ -1 +1,3 @@
SHA512 (v5.7.1.tar.gz) = 81fd4c27ff1d16dcb85229d4e4fd2cb06943ddfe966b5324fa8a8a957b2d2ec2aed7c5da05d6c009148f53b76545b27b0cba506622c8861f70bf7cad6c214a08
SHA512 (v4.6.2.tar.gz) = 0c89ff3df21e9ca0eb6891600eb86c47463a53bd004d1564cc4661f0ea303dc245b47467d586db29587f960d5c78e0326b7f33ef87ba95e142e3320c56ceaa99
SHA512 (dnsname-18822f9a4fb35d1349eb256f4cd2bfd372474d84.tar.gz) = de371722fbf18cd23b31485ee7ba36bb41d0d9a932d15e50872989c3ca1ff7246da63143c3725d81089fadda3821a54c18b22150d9d16005b07df6824f5f71f8
SHA512 (gvisor-tap-vsock-407efb5dcdb0f4445935f7360535800b60447544.tar.gz) = 8b9e687c8be7063641839b5764787ae82561635ae6410585a3c70552bed741e6a63154f55d0209a6408861d5ee76619a765e70b2deda37d38802f6e5b57f2a4c

View file

@ -1,51 +0,0 @@
require:
- podman-tests
- psmisc
environment:
# PODMAN_TESTING envvar is set in system.sh
PODMAN: /usr/bin/podman
QUADLET: /usr/libexec/podman/quadlet
ROOTLESS_USER: "fedora"
adjust+:
- when: distro == centos-stream
environment+:
ROOTLESS_USER: "ec2-user"
- when: distro == rhel
environment+:
ROOTLESS_USER: "cloud-user"
- when: initiator != "packit"
environment+:
RELEASE_TESTING: true
/local-root:
tag: [ local, root ]
summary: local rootful test
test: bash ./system.sh
duration: 30m
/local-rootless:
tag: [ local, rootless ]
summary: rootless test
test: bash ./system.sh rootless
duration: 30m
/remote-root:
tag: [ remote, root ]
summary: remote rootful test
test: bash ./system.sh
duration: 30m
environment+:
PODMAN: /usr/bin/podman-remote
require+:
- podman-remote
/remote-rootless:
tag: [ remote, rootless ]
summary: remote rootless test
test: bash ./system.sh rootless
duration: 30m
environment+:
PODMAN: /usr/bin/podman-remote
require+:
- podman-remote

View file

@ -1,44 +0,0 @@
#!/usr/bin/env bash
set -exo pipefail
uname -r
loginctl enable-linger "$ROOTLESS_USER"
rpm -q \
aardvark-dns \
buildah \
conmon \
container-selinux \
containers-common \
criu \
crun \
netavark \
passt \
podman \
podman-tests \
skopeo \
slirp4netns \
systemd
export system_service_cmd="/usr/bin/podman system service --timeout=0 &"
export test_cmd="whoami && cd /usr/share/podman/test/system && PODMAN_TESTING=/usr/bin/podman-testing bats ."
if [[ -z $1 ]]; then
if [[ $PODMAN == "/usr/bin/podman-remote" ]]; then
eval "$system_service_cmd"
fi
eval "$test_cmd"
elif [[ $1 == "rootless" ]]; then
if [[ $PODMAN == "/usr/bin/podman-remote" ]]; then
su - "$ROOTLESS_USER" -c "eval $system_service_cmd"
fi
su - "$ROOTLESS_USER" -c "eval $test_cmd"
fi
# Kill all podman processes for remote tests
if [[ $PODMAN == "/usr/bin/podman-remote" ]]; then
killall -q podman
fi
exit 0

View file

@ -1,13 +0,0 @@
enabled: false
adjust:
enabled: true
when: initiator != packit && distro != rhel
summary: Make sure that TMT container provision works
tag: [downstream]
require:
- tmt+provision-container
test:
tmt run --verbose --remove
provision --how container --image fedora
login --command 'cat /etc/os-release'
finish

25
tests/README Normal file
View file

@ -0,0 +1,25 @@
I'm sorry. The playbooks here are a much-too-complicated way of saying:
- test podman (root and rootless) under cgroups v2
- reboot into cgroups v1
- repeat the same podman tests
We can't use standard-test-basic any more because, tl;dr, that has to
be the last stanza in the playbook and it doesn't offer any mechanism
for running a reboot in the middle of tests. (I actually found a way
but it was even uglier than this approach).
The starting point is tests.yml . From there:
tests.yml
\- test_podman.yml
|- roles/rootless_user_ready/
\- test_podman_cgroups_vn.yml (runs twice: cgroups v2, v1)
|- roles/set_cgroups/
\- roles/run_bats_tests/ (runs tests: root, rootless)
Principal result is the file 'artifacts/test.log'. It will contain
one line for each test run, format will be '(PASS|FAIL|ERROR) <test name>'
For each completed test there will also be a 'test.<name>.bats.log'
containing some setup blurbs (RPMs, environment) and the full BATS log.

36
tests/check_results.yml Normal file
View file

@ -0,0 +1,36 @@
---
# Copied from standard-test-basic
# ...and, 2020-05-13, updated, looks like they changed the whole thing around
- name: Check the results
local_action:
module: shell
cmd: |
log="{{ artifacts }}/test.log"
if [ ! -f "$log" ]; then
echo ERROR
echo "Test results not found." 1>&2
elif grep ^ERROR "$log" 1>&2; then
echo ERROR
elif grep ^FAIL "$log" 1>&2; then
echo FAIL
elif grep -q ^PASS "$log"; then
echo PASS
else
echo ERROR
echo "No test results found." 1>&2
fi
register: test_results
- name: Set role result
set_fact:
role_result: "{{ test_results.stdout }}"
role_message: "{{ test_results.stderr|d('test execution error.') }}"
- name: display results
vars:
msg: |
role_result: {{ role_result|d('Undefined') }}
{{ role_message|d('[No error messages found]') }}
debug:
msg: "{{ msg.split('\n') }}"
failed_when: role_message|d("") != ""

View file

@ -0,0 +1,41 @@
#!/bin/bash
#
# Excerpted from https://github.com/containers/automation_images/blob/main/systemd_banish.sh
#
# Early 2023: https://github.com/containers/podman/issues/16973
#
# We see countless instances of "lookup cdn03.quay.io" flakes.
# Disabling the systemd resolver has completely resolved those,
# from multiple flakes per day to zero in a month.
#
# Opinions differ on the merits of systemd-resolve, but the fact is
# it breaks our CI testing. Kill it.
nsswitch=/etc/authselect/nsswitch.conf
if [[ -e $nsswitch ]]; then
if grep -q -E 'hosts:.*resolve' $nsswitch; then
echo "Disabling systemd-resolved"
sed -i -e 's/^\(hosts: *\).*/\1files dns myhostname/' $nsswitch
systemctl disable --now systemd-resolved
rm -f /etc/resolv.conf
# NetworkManager may already be running, or it may not....
systemctl start NetworkManager
sleep 1
systemctl restart NetworkManager
# ...and it may create resolv.conf upon start/restart, or it
# may not. Keep restarting until it does. (Yes, I realize
# this is cargocult thinking. Don't care. Not worth the effort
# to diagnose and solve properly.)
retries=10
while ! test -e /etc/resolv.conf;do
retries=$((retries - 1))
if [[ $retries -eq 0 ]]; then
echo "Timed out waiting for resolv.conf" >&2
echo "...gonna try continuing. Expect failures." >&2
fi
systemctl restart NetworkManager
sleep 5
done
fi
fi

View file

@ -0,0 +1,3 @@
---
- name: disable systemd resolved
script: ./disable_systemd_resolved.sh

View file

@ -0,0 +1,14 @@
---
- name: make sure rootless account exists
user: name={{ rootless_user }}
- name: rootless account | enable linger
shell: loginctl enable-linger {{ rootless_user }}
- name: rootless account | get uid
getent:
database: passwd
key: "{{ rootless_user }}"
- name: rootless account | preserve uid
set_fact: rootless_uid="{{ getent_passwd[rootless_user][1] }}"

View file

@ -0,0 +1,73 @@
#!/bin/bash
#
# Run bats tests for a given $TEST_PACKAGE, e.g. buildah, podman
#
# This is invoked by the 'run_bats_tests' role; we assume that
# the package foo has a foo-tests subpackage which provides the
# directory /usr/share/foo/test/system, containing one or more .bats
# test files.
#
# We create two files:
#
# /tmp/test.summary.log - one-liner with FAIL, PASS, ERROR and a blurb
# /tmp/test.bats.log - full log of this script, plus the BATS run
#
export PATH=/usr/local/bin:/usr/sbin:/usr/bin
FULL_LOG=/tmp/test.bats.log
rm -f $FULL_LOG
touch $FULL_LOG
# Preserve output to a log file, but also emit on stdout. This covers
# RHEL (which preserves logfiles but runs ansible without --verbose)
# and Fedora (which hides logfiles but runs ansible --verbose).
exec &> >(tee -a $FULL_LOG)
# Log program versions
echo "Packages:"
echo " Kernel: $(uname -r)"
rpm -qa |\
egrep 'podman|conmon|containers-common|crun|runc|iptable|slirp|aardvark|netavark|containernetworking-plugins|systemd|container-selinux|passt' |\
sort |\
sed -e 's/^/ /'
divider='------------------------------------------------------------------'
echo $divider
printenv | sort
echo $divider
echo "ip addr:"
ip addr
echo $divider
testdir=/usr/share/${TEST_PACKAGE}/test/system
if ! cd $testdir; then
echo "FAIL ${TEST_NAME} : cd $testdir" > /tmp/test.summary.log
exit 0
fi
if [[ $PODMAN =~ remote ]]; then
${PODMAN%%-remote} system service -t0 &>/dev/null &
PODMAN_SERVER_PID=$!
fi
echo "\$ bats ."
bats .
rc=$?
if [[ -n "$PODMAN_SERVER_PID" ]]; then
kill $PODMAN_SERVER_PID
fi
echo $divider
echo "bats completed with status $rc"
status=PASS
if [ $rc -ne 0 ]; then
status=FAIL
fi
echo "${status} ${TEST_NAME}" > /tmp/test.summary.log
# FIXME: for CI purposes, always exit 0. This allows subsequent tests.
exit 0

View file

@ -0,0 +1,10 @@
---
# Create empty results file, world-writable
- name: initialize test.log file
copy: dest=/tmp/test.log content='' force=yes mode=0666
- name: execute tests
include: run_one_test.yml
with_items: "{{ tests }}"
loop_control:
loop_var: test

View file

@ -0,0 +1,87 @@
---
- name: "{{ test.name }} | install test packages"
dnf: name="{{ test.package }}-tests" state=installed
- name: "{{ test.name }} | define helper variables"
set_fact:
test_name_oneword: "{{ test.name | replace(' ','-') }}"
# UGH. This is necessary because our caller sets some environment variables
# and we need to set a few more based on other caller variables; then we
# need to combine the two dicts when running the test. This seems to be
# the only way to do it in ansible.
- name: "{{ test.name }} | define local environment"
set_fact:
local_environment:
TEST_NAME: "{{ test.name }}"
TEST_PACKAGE: "{{ test.package }}"
TEST_ENV: "{{ test.environment }}"
- name: "{{ test.name }} | setup/teardown helper | see if exists"
local_action: stat path={{ role_path }}/files/helper.{{ test_name_oneword }}.sh
register: helper
- name: "{{ test.name }} | setup/teardown helper | install"
copy: src=helper.{{ test_name_oneword }}.sh dest=/tmp/helper.sh
when: helper.stat.exists
# This is what runs the BATS tests.
- name: "{{ test.name }} | run test"
script: ./run_bats_tests.sh
args:
chdir: /usr/share/{{ test.package }}/test/system
become: "{{ true if test.become is defined else false }}"
become_user: "{{ rootless_user }}"
environment: "{{ local_environment | combine(test.environment) }}"
# BATS tests will always exit zero and should leave behind two files:
# a full log (test.bats.log) and a one-line PASS/FAIL file (.summary.log)
- name: "{{ test.name }} | pull logs"
fetch:
src: "/tmp/test.{{ item }}.log"
dest: "{{ artifacts }}/test.{{ test_name_oneword }}.{{ item }}.log"
flat: yes
with_items:
- bats
- summary
# Collect all the one-line PASS/FAIL results in one file, test.log
# Write the same thing, in a different format, to results.yml
# https://docs.fedoraproject.org/en-US/ci/standard-test-interface/
- name: "{{ test.name }} | keep running tally of test results"
local_action:
module: shell
cmd: |
cd {{ artifacts }}
cat "test.{{ test_name_oneword }}.summary.log" >>test.log
status=$(awk '{print $1}' <test.{{ test_name_oneword }}.summary.log | tr A-Z a-z)
echo "- test: {{ test.name }}" >>results.yml
echo " result: $status" >>results.yml
echo " logs: test.{{ test_name_oneword }}.bats.log" >>results.yml
# delete the oneliner file, to keep artifacts dir clean
rm -f test.{{ test_name_oneword }}.summary.log
- name: "{{ test.name }} | remove remote logs and helpers"
file:
dest=/tmp/{{ item }}
state=absent
with_items:
- test.bats.log
- test.summary.log
- helper.sh
# AAAAARGH!
#
# Fedora gating tests are failing, because str-common-final/tasks/main.yml
# tries to pull test.log and other logs from $remote_host:/tmp/artifacts .
# Those don't exist, because I track status and artifacts locally, because
# with the reboot I can't rely on /tmp being preserved.
# I see no way to tell str-common-final to skip this step; so let's just
# push logs over upon completion of each subtest.
- name: keep remote artifacts synced
synchronize:
src: "{{ artifacts }}/"
dest: "{{ remote_artifacts|d('/tmp/artifacts') }}/"
mode: push

View file

@ -0,0 +1,73 @@
---
# Check the CURRENT cgroup level; we get this from /proc/cmdline
- name: check current kernel options
shell: fgrep systemd.unified_cgroup_hierarchy=0 /proc/cmdline
register: result
ignore_errors: true
- name: determine current cgroups | assume v2
set_fact: current_cgroups=2
- name: determine current cgroups | looks like v1
set_fact: current_cgroups=1
when: result is succeeded
- debug:
msg: "want: v{{ want_cgroups }} actual: v{{ current_cgroups }}"
- name: grubenv, pre-edit, cat
shell: cat /boot/grub2/grubenv
register: grubenv
- name: grubenv, pre-edit, show
debug:
msg: "{{ grubenv.stdout_lines }}"
# Update grubenv file to reflect the desired cgroup level
- name: remove cgroup option from kernel flags
shell:
cmd: sed -i -e "s/^\(kernelopts=.*\)systemd\.unified_cgroup_hierarchy=.\(.*\)/\1 \2/" /boot/grub2/grubenv
- name: add it with the desired value
shell:
cmd: sed -i -e "s/^\(kernelopts=.*\)/\1 systemd.unified_cgroup_hierarchy=0/" /boot/grub2/grubenv
when: want_cgroups == 1
- name: grubenv, post-edit, cat
shell: cat /boot/grub2/grubenv
register: grubenv
- name: grubenv, post-edit, show
debug:
msg: "post: {{ grubenv.stdout_lines }}"
# If want != have, reboot
- name: reboot and wait
block:
- name: reboot
reboot:
reboot_timeout: 900
ignore_errors: yes
- name: wait and reconnect
wait_for_connection:
timeout: 900
when: want_cgroups|int != current_cgroups|int
- set_fact:
expected_fstype:
- none
- tmpfs
- cgroup2fs
- name: confirm cgroups setting
shell: stat -f -c "%T" /sys/fs/cgroup
register: fstype
- debug:
msg: "stat(/sys/fs/cgroup) = {{ fstype.stdout }}"
- name: system cgroups is the expected type
assert:
that:
- fstype.stdout == expected_fstype[want_cgroups|int]
fail_msg: "stat(/sys/fs/cgroup) = {{ fstype.stdout }} (expected {{ expected_fstype[want_cgroups|int] }})"

51
tests/test_podman.yml Normal file
View file

@ -0,0 +1,51 @@
---
- hosts: localhost
tags:
- classic
- container
vars:
- artifacts: ./artifacts
rootless_user: testuser
roles:
- role: disable_systemd_resolved
- role: rootless_user_ready
tasks:
# At the start of a run, clean up state. Useful for test reruns.
- name: local artifacts directory exists
local_action: file path="{{ artifacts }}" state=directory
- name: remove stale log files
local_action: shell rm -f {{ artifacts }}/test*.log
- name: clear test results (test.log)
local_action: command truncate --size=0 {{ artifacts }}/test.log
- name: clear test results (results.yml)
local_action: copy content="results:\n" dest={{ artifacts }}/results.yml
# These are the actual tests: set cgroups vN, then run root/rootless tests.
#
# FIXME FIXME FIXME: 2020-05-21: 'loop' should be '2, 1' but there's some
# nightmarish bug in CI wherein reboots hang forever. There's a bug open[1]
# but it seems dead. Without a working reboot, there's no way to test v1.
# [1] https://redhat.service-now.com/surl.do?n=PNT0808530
# I'm leaving this as a 'loop' in (foolish? vain?) hope that the bug will
# be fixed. Let's revisit this after, say, 2020-08. If the bug persists
# then let's just revert the entire cgroups v1 change, and go back to
# using standard-test-basic.
- name: set cgroups and run podman tests
include_tasks: test_podman_cgroups_vn.yml
loop: [ 2 ]
loop_control:
loop_var: want_cgroups
- name: test podman-remote
include_tasks: test_podman_remote.yml
- name: test toolbox
include_tasks: test_toolbox.yml
# Postprocessing: check for FAIL or ERROR in any test, exit 1 if so
- name: check results
include_tasks: check_results.yml

View file

@ -0,0 +1,21 @@
---
# Requires: 'want_cgroups' variable set to 1 or 2
- include_role:
name: set_cgroups
- include_role:
name: run_bats_tests
vars:
tests:
# Yes, this is horrible duplication, but trying to refactor in ansible
# yields even more horrible unreadable code. This is the lesser evil.
- name: podman root cgroupsv{{ want_cgroups }}
package: podman
environment:
PODMAN: /usr/bin/podman
QUADLET: /usr/libexec/podman/quadlet
- name: podman rootless cgroupsv{{ want_cgroups }}
package: podman
environment:
PODMAN: /usr/bin/podman
QUADLET: /usr/libexec/podman/quadlet
become: true

View file

@ -0,0 +1,19 @@
---
- name: "podman-remote | install"
dnf: name="podman-remote" state=installed
- include_role:
name: run_bats_tests
vars:
tests:
- name: podman-remote root
package: podman
environment:
PODMAN: /usr/bin/podman-remote
QUADLET: /usr/libexec/podman/quadlet
- name: podman-remote rootless
package: podman
environment:
PODMAN: /usr/bin/podman-remote
QUADLET: /usr/libexec/podman/quadlet
become: true

10
tests/test_toolbox.yml Normal file
View file

@ -0,0 +1,10 @@
---
- include_role:
name: run_bats_tests
vars:
tests:
- name: toolbox
package: toolbox
become: true
environment:
XDG_RUNTIME_DIR: /run/user/{{ rootless_uid }}

1
tests/tests.yml Normal file
View file

@ -0,0 +1 @@
- import_playbook: test_podman.yml