Prepare Plugins
The prepare step is used to define how the guest
environment should be prepared so that the tests can be
successfully executed.
Common Keys
The following keys are accepted by all plugins of the prepare step.
- name
The name of the step phase.
Environment variable:
TMT_PLUGIN_PREPARE_ANSIBLE_NAMEIn plan metadata:
name:
On command-line:
--name ... export TMT_PLUGIN_PREPARE_ANSIBLE_NAME=...
- order
Order in which the phase should be handled.
Default:
50Environment variable:
TMT_PLUGIN_PREPARE_ANSIBLE_ORDERIn plan metadata:
order:
On command-line:
--order ... export TMT_PLUGIN_PREPARE_ANSIBLE_ORDER=...
- summary
Concise summary describing purpose of the phase.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_ANSIBLE_SUMMARYIn plan metadata:
summary:
On command-line:
--summary ... export TMT_PLUGIN_PREPARE_ANSIBLE_SUMMARY=...
- when
If specified, phase is run only if any rule matches plan context.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_ANSIBLE_WHENIn plan metadata:
when: RULE
On command-line:
--when RULE export TMT_PLUGIN_PREPARE_ANSIBLE_WHEN=RULE
- where
Run this phase on given guest or guests with the given role only.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_ANSIBLE_WHEREIn plan metadata:
where: GUEST|ROLE
On command-line:
--where 'GUEST|ROLE' export TMT_PLUGIN_PREPARE_ANSIBLE_WHERE='GUEST|ROLE'
ansible
Run Ansible playbooks against the guest, by running
ansible-playbook for all given playbooks.
Note
The plugin requires a working Ansible to be available on the test runner.
Warning
When specifying playbooks with paths:
If a metadata tree root exists, all paths must be relative to the metadata tree root.
If the metadata tree root does not exist, all paths must be relative to the current working directory.
Warning
The plugin may be a subject of various limitations, imposed by Ansible itself:
Ansible 2.17+ no longer supports Python 3.6 and older. Guests where Python 3.7+ is not available cannot be prepared with the
ansibleplugin. This has been observed when Fedora Rawhide runner is used with CentOS 7 or CentOS Stream 8 guests. Possible workarounds: downgrade Ansible tmt uses, or install Python 3.7+ before usingansibleplugin from an alternative repository or local build.
Run a single playbook on the guest:
prepare:
how: ansible
playbook: ansible/packages.yml
prepare --how ansible --playbook ansible/packages.yml
Run multiple playbooks in one phase, with extra arguments for
ansible-playbook:
prepare:
how: ansible
playbook:
- one.yml
- two.yml
extra-args: '-vvv'
prepare --how ansible --playbook one.yml --playbook two.yml --extra-args '-vvv'
Remote playbooks - provided as URLs starting with http:// or
https://, local playbooks - optionally starting with a
file:// schema, and playbooks bundled with collections can be
referenced as well as local ones, and all kinds can be intermixed:
prepare:
how: ansible
playbook:
- https://foo.bar/one.yml
- two.yml
- file://three.yml
- ansible_galaxy_namespace.cool_collection.four
prepare --how ansible --playbook https://foo.bar/two.yml \
--playbook two.yml \
--playbook file://three.yml \
--playbook ansible_galaxy_namespace.cool_collection.four
Configuration
See also Common Keys accepted by the plugin.
- extra-args
Additional CLI options for
ansible-playbook.Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_ANSIBLE_EXTRA_ARGSIn plan metadata:
extra-args: ANSIBLE-PLAYBOOK-OPTIONS extra-args: -vvv
On command-line:
--extra-args ANSIBLE-PLAYBOOK-OPTIONS export TMT_PLUGIN_PREPARE_ANSIBLE_EXTRA_ARGS=ANSIBLE-PLAYBOOK-OPTIONS --extra-args -vvv export TMT_PLUGIN_PREPARE_ANSIBLE_EXTRA_ARGS=-vvv
- playbook
Path or URL of an Ansible playbook, or a playbook bundled within a collection, to run on a guest. Playbook
PATHmust be relative to the metadata tree root, if the metadata tree exists, or to the current working directory.Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_ANSIBLE_PLAYBOOKIn plan metadata:
playbook: PATH|URL|NAMESPACE.COLLECTION.PLAYBOOK
On command-line:
--playbook 'PATH|URL|NAMESPACE.COLLECTION.PLAYBOOK' export TMT_PLUGIN_PREPARE_ANSIBLE_PLAYBOOK='PATH|URL|NAMESPACE.COLLECTION.PLAYBOOK'
artifact
Warning
Please, be aware that the documentation below is a work in progress. We are working on fixing it, adding missing bits and generally making it better. Also, it was originally used for command line help only, therefore the formatting is often suboptimal.
Prepare artifacts on the guest.
Note
This is a draft plugin to be implemented
Configuration
See also Common Keys accepted by the plugin.
- provide
Artifact ID to provide. Format <type>:<id>.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_ARTIFACT_PROVIDEIn plan metadata:
provide: ID
On command-line:
--provide ID export TMT_PLUGIN_PREPARE_ARTIFACT_PROVIDE=ID
feature
Warning
Please, be aware that the documentation below is a work in progress. We are working on fixing it, adding missing bits and generally making it better. Also, it was originally used for command line help only, therefore the formatting is often suboptimal.
Easily enable and disable common features
The feature plugin provides a comfortable way to enable
and disable some commonly used functionality such as enabling
and disabling the epel repository or the fips mode.
Note
The plugin requires a working Ansible to be available on the test runner.
Warning
The plugin may be a subject of various limitations, imposed by the fact it uses Ansible to implement some of the features:
Ansible 2.17+ no longer supports Python 3.6 and older. Guests where Python 3.7+ is not available cannot be prepared with the
featureplugin. This has been observed when Fedora Rawhide runner is used with CentOS 7 or CentOS Stream 8 guests. Possible workarounds: downgrade Ansible tmt uses, or install Python 3.7+ before usingfeatureplugin from an alternative repository or local build.
prepare:
how: feature
epel: disabled
crb: enabled
fips: enabled
...
prepare --how feature --epel disabled --crb enabled --fips enabled ...
Note
Features available via this plugin are implemented and shipped as plugins too. The list of available features and configuration keys will depend on which plugins you have installed.
See also Common Keys accepted by the plugin.
crb
Warning
Please, be aware that the documentation below is a work in progress. We are working on fixing it, adding missing bits and generally making it better. Also, it was originally used for command line help only, therefore the formatting is often suboptimal.
Enable or disable the CodeReady Builder (CRB) repository:
prepare:
how: feature
crb: enabled
prepare --how feature --crb enabled
Added in version 1.49.
- crb
Whether the CRB repository should be enabled or disabled.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE-FEATURE_CRB_CRBIn plan metadata:
crb: enabled|disabled
On command-line:
--crb 'enabled|disabled' export TMT_PLUGIN_PREPARE-FEATURE_CRB_CRB='enabled|disabled'
epel
Warning
Please, be aware that the documentation below is a work in progress. We are working on fixing it, adding missing bits and generally making it better. Also, it was originally used for command line help only, therefore the formatting is often suboptimal.
Control Extra Packages for Enterprise Linux (EPEL) repository.
EPEL is an initiative within the Fedora Project to provide high quality additional packages for CentOS Stream and Red Hat Enterprise Linux (RHEL).
Enable or disable EPEL repository on the guest:
prepare:
how: feature
epel: enabled
prepare --how feature --epel enabled
Note
This plugin requires the following Ansible modules be installed on the runner:
- epel
Whether EPEL repository should be installed & enabled or disabled.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE-FEATURE_EPEL_EPELIn plan metadata:
epel: enabled|disabled
On command-line:
--epel 'enabled|disabled' export TMT_PLUGIN_PREPARE-FEATURE_EPEL_EPEL='enabled|disabled'
fips
Warning
Please, be aware that the documentation below is a work in progress. We are working on fixing it, adding missing bits and generally making it better. Also, it was originally used for command line help only, therefore the formatting is often suboptimal.
- fips
Whether FIPS mode should be enabled
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE-FEATURE_FIPS_FIPSIn plan metadata:
fips: enabled
On command-line:
--fips enabled export TMT_PLUGIN_PREPARE-FEATURE_FIPS_FIPS=enabled
profile
Warning
Please, be aware that the documentation below is a work in progress. We are working on fixing it, adding missing bits and generally making it better. Also, it was originally used for command line help only, therefore the formatting is often suboptimal.
Prepare guest setup with a guest profile.
Note
Guest profiles are being developed, once there is an agreed upon text we could steal^Wborrow^Wreuse, we shall add it to this docstring.
Guest profiles represent a particular setup of guest environment as defined by a CI system or service. They are implemented as Ansible roles, and packaged as Ansible collections. The CI systems use profiles to set up guests before testing, and users may use the same profiles to establish the same environment locally when developing tests or reprodcing issues.
Apply a profile to the guest:
prepare:
how: feature
profile: testing_farm.fedora_ci
prepare --how feature --profile testing_farm.fedora_ci
- profile
Apply guest profile.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE-FEATURE_PROFILE_PROFILEIn plan metadata:
profile: NAME
On command-line:
--profile NAME export TMT_PLUGIN_PREPARE-FEATURE_PROFILE_PROFILE=NAME
install
Warning
Please, be aware that the documentation below is a work in progress. We are working on fixing it, adding missing bits and generally making it better. Also, it was originally used for command line help only, therefore the formatting is often suboptimal.
Install packages on the guest.
Example config:
prepare:
how: install
copr: psss/tmt
package: tmt-all
missing: fail
Use copr for enabling a desired Copr repository and missing to choose
whether missing packages should be silently ignored (skip) or a
preparation error should be reported (fail), which is the default.
One or more RPM packages can be specified under the
package attribute. The packages will be installed
on the guest. They can either be specified using their
names, paths to local rpm files or urls to remote rpms.
# Install local rpms using file path
prepare:
how: install
package:
- tmp/RPMS/noarch/tmt-0.15-1.fc31.noarch.rpm
- tmp/RPMS/noarch/python3-tmt-0.15-1.fc31.noarch.rpm
# Install remote packages using url
prepare:
how: install
package:
- https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
- https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-8.noarch.rpm
# Install the whole directory, exclude selected packages
prepare:
how: install
directory:
- tmp/RPMS/noarch
exclude:
- tmt+all
- tmt+provision-virtual
prepare:
how: install
# Repository with a group owner (@ prefixed) requires quotes, e.g.
# copr: "@osci/rpminspect"
copr: psss/tmt
package: tmt-all
missing: skip
Use directory to install all packages from given folder and
exclude to skip selected packages (globbing characters are supported as
well).
prepare:
how: install
directory: tmp/RPMS/noarch
exclude: tmt+provision-virtual
Note
When testing ostree booted deployments tmt will use
rpm-ostree as the package manager to perform the installation of
requested packages. The current limitations of the rpm-ostree
implementation are:
Cannot install new version of already installed local rpm.
No support for installing debuginfo packages at this time.
Configuration
See also Common Keys accepted by the plugin.
- copr
Copr repository to be enabled.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_INSTALL_COPRIn plan metadata:
copr: REPO
On command-line:
--copr REPO export TMT_PLUGIN_PREPARE_INSTALL_COPR=REPO
- directory
Path to a local directory with rpm packages.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_INSTALL_DIRECTORYIn plan metadata:
directory: PATH
On command-line:
--directory PATH export TMT_PLUGIN_PREPARE_INSTALL_DIRECTORY=PATH
- exclude
Packages to be skipped during installation.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_INSTALL_EXCLUDEIn plan metadata:
exclude: PACKAGE
On command-line:
--exclude PACKAGE export TMT_PLUGIN_PREPARE_INSTALL_EXCLUDE=PACKAGE
- missing
Action on missing packages, fail (default) or skip.
Default:
failEnvironment variable:
TMT_PLUGIN_PREPARE_INSTALL_MISSINGIn plan metadata:
missing: ACTION
On command-line:
--missing ACTION export TMT_PLUGIN_PREPARE_INSTALL_MISSING=ACTION
- package
Package name or path to rpm to be installed.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_INSTALL_PACKAGEIn plan metadata:
package: PACKAGE
On command-line:
--package PACKAGE export TMT_PLUGIN_PREPARE_INSTALL_PACKAGE=PACKAGE
shell
Warning
Please, be aware that the documentation below is a work in progress. We are working on fixing it, adding missing bits and generally making it better. Also, it was originally used for command line help only, therefore the formatting is often suboptimal.
Prepare guest using shell (Bash) scripts.
Default shell options are applied to the script, see the test key specification for more details.
prepare:
how: shell
script:
- sudo dnf install -y 'dnf-command(copr)'
- sudo dnf copr enable -y psss/tmt
- sudo dnf install -y tmt
Scripts can also be fetched from a remote git repository.
Specify the url for the repository and optionally ref
to checkout a specific branch, tag or commit.
TMT_PREPARE_SHELL_URL_REPOSITORY will hold the value of the
repository path.
prepare:
how: shell
url: https://github.com/teemtee/tmt.git
ref: main
script: cd $TMT_PREPARE_SHELL_URL_REPOSITORY && make docs
Configuration
See also Common Keys accepted by the plugin.
- ref
Branch, tag or commit to checkout in the git repository cloned when
urlis specified.Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_SHELL_REFIn plan metadata:
ref: REVISION
On command-line:
--ref REVISION export TMT_PLUGIN_PREPARE_SHELL_REF=REVISION
- script
Shell script to be executed. Can be used multiple times.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_SHELL_SCRIPTIn plan metadata:
script: SCRIPT
On command-line:
--script SCRIPT export TMT_PLUGIN_PREPARE_SHELL_SCRIPT=SCRIPT
- url
URL of a repository to clone. It will be pushed to guests before running any scripts, the path on the guest will be stored in a step variable.
Default: not set
Environment variable:
TMT_PLUGIN_PREPARE_SHELL_URLIn plan metadata:
url: REPOSITORY
On command-line:
--url REPOSITORY export TMT_PLUGIN_PREPARE_SHELL_URL=REPOSITORY