diff --git a/.fmf/version b/.fmf/version
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/.fmf/version
@@ -0,0 +1 @@
+1
diff --git a/plans/integration.fmf b/plans/integration.fmf
new file mode 100644
index 0000000..b2e3dbe
--- /dev/null
+++ b/plans/integration.fmf
@@ -0,0 +1,12 @@
+summary: Integration tests for anaconda
+
+discover:
+    how: fmf
+    filter: 'tag: integration'
+
+execute:
+    how: tmt
+
+finish:
+    how: shell
+    script: command -v journalctl && journalctl -a || true
diff --git a/tests/.fmf/version b/tests/.fmf/version
deleted file mode 100644
index d00491f..0000000
--- a/tests/.fmf/version
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/tests/README.md b/tests/README.md
deleted file mode 100644
index af2be65..0000000
--- a/tests/README.md
+++ /dev/null
@@ -1,56 +0,0 @@
-[Anaconda](https://github.com/rhinstaller/anaconda) installer gating tests.
-
-Additionally to the tests (`tests*.yml`) contains also playbooks for runnning the tests from localhost on a remote test runner. The runner can be provisioned by `linchpin`. See [run_tests_remotely.sh](run_tests_remotely.sh) script as an example of the playbooks usage.
-
-Running the tests remotely
---------------------------
-
-### Test runner
-
-The remote test runner can be provided in any way. To be used by the playbooks:
-
-* It has to allow ssh access as a remote user which is allowed to become root, using the ssh key configured by `private_key_file` in [ansible config](remote_config/ansible.cfg). By default the `remote_user` for running the tests is `root`.
-* Test runner host name / IP should be configured for the playbooks in `gating_test_runner` group of [remote_config/inventory](remote_config/inventory).
-
-The runner can be provisioned in a cloud by linchpin as in the [script](run_tests_remotely.sh):
-
-* The cloud credentials need to be configured in the file and profile reffered by `credentials` variable of [topology](linchpin/topologies/gating-test.yml). So the credentials file [`clouds.yml`](linchpin/credentials/clouds.yml) should contain profile `ci-rhos`. The file can be placed to `~/.config/linchpin` directory or the directory containing the file can be set by `linchpin` `--creds-path` option.
-* The ssh key is set by `keypair` value of linchpin [topology](linchpin/topologies/gating-test.yml) file. It should correspond to the key defined in [ansible config](remote_config/ansible.cfg). The [topology](linchpin/topologies/gating-test.yml) file also defines image to be used for test runner.
-* The script populates the [inventory](remote_config/inventory) for playbooks with [inventory](linchpin/layouts/gating-test.yml) generated by linchpin.
-* The script tries to find out which remote user should be used (`root`, `fedora`, `cloud-user`) and updates [ansible config](remote_config/ansible.cfg) with the value.
-
-### Test runner environment
-
-Test runner environment is prepared by [`prepare-test-runner.yml`](prepare-test-runner.yml) playbook:
-
-* It is possible to add repositories to the runner by defining [`test_runner_repos`](roles/prepare-test-runner/defaults/main.yml) variable. It can be useful for example for adding a repository with scratch build to be tested or adding repositories for test dependencies missing on remote runner.
-* Empty directory for storing test artifacts is created on test runner based on the [`artifacts`](roles/prepare-test-runner/vars/main.yml) variable.
-
-### Test playbooks configuration
-
-#### Running on the remote runner:
-
-Normally the testing system runs all the `tests*.yml` playbooks.
-
-**WARNING:**
-The test playbooks are run on `localhost` (test runner provided by the testing system). They change the test runner environment (eg install packages) so most probably you don't want to run them as they are - on your local host.
-The [script](run_tests_remotely.sh) updates `hosts` value of the test playbooks to use remote host from [`gating_test_runner`](remote_config/inventory/hosts) group as test runner (using a [playbook](set_tests_to_run_on_remote.yml)).
-If you want to run the tests playbooks separately make sure the `hosts` variable in the test playbook is set to remote test runner (eg. `gating_test_runner`).
-
-
-
-
-The test playbooks need [`artifacts`](roles/prepare-test-runner/vars/main.yml) variable supplied as can be seen in the [script](run_tests_remotely.sh). (Normally testing system takes care of this.)
-
-#### Installation repositories:
-
-Repositories (base and additional) used for installation test are defined in [repos](roles/installation-repos/defaults/main.yml) configuration. Their URL can be either defined explicitly or looked up in specified repositories of the test runner.
-
-#### dirinstall test
-
-There is a text and a vnc variant of dirinstall test. Both will run all the kickstarts found in [roles/dirinstall/templates/kickstarts](roles/dirinstall/templates/kickstarts).
-
-
-### The results
-
-The results and logs are fetched from remote host into local host directory defined by `artifacts` variable passed to the playbooks. This value can be passed also to the [script](run_tests_remotely.sh) with `-a` option.
diff --git a/tests/check_and_set_remote_user.yml b/tests/check_and_set_remote_user.yml
deleted file mode 100644
index 59df611..0000000
--- a/tests/check_and_set_remote_user.yml
+++ /dev/null
@@ -1,25 +0,0 @@
----
-# Check if remote_user is reachable by ansible and set ansible.cfg
-# if so.
-
-- hosts: gating_test_runner
-  become: True
-  gather_facts: False
-  remote_user: "{{ remote_user }}"
-
-  tasks:
-  - name: Try a raw command as a check
-    raw: echo "CHECK OK"
-    register: result
-
-  - debug:
-      msg: "{{ result }}"
-
-  - name: Set ansible.cfg remote user to "{{ remote_user }}"
-    become: no
-    local_action:
-      module: lineinfile
-      path: ./remote_config/ansible.cfg
-      regexp: ^remote_user
-      line: "remote_user = {{ remote_user }}"
-    when: result.stdout_lines[0] == "CHECK OK"
diff --git a/tests/dirinstall/dirinstall.fmf b/tests/dirinstall/dirinstall.fmf
new file mode 100644
index 0000000..e49bfe1
--- /dev/null
+++ b/tests/dirinstall/dirinstall.fmf
@@ -0,0 +1,22 @@
+summary: Dirinstall test on regular os
+contact: Radek Vykydal <rvykydal@redhat.com>
+path: /tests/dirinstall
+test: ./dirinstall.sh
+duration: 1h
+tag: [integration]
+
+/text:
+    summary: Dirinstall test on regular os - text UI
+    require:
+        - anaconda
+    environment:
+        ANACONDA_UI_MODE: text
+
+/vnc:
+    summary: Dirinstall test on regular os - vnc UI
+    enabled: false
+    require:
+        - anaconda
+        - gnome-kiosk
+    environment:
+        ANACONDA_UI_MODE: vnc
diff --git a/tests/dirinstall/dirinstall.sh b/tests/dirinstall/dirinstall.sh
new file mode 100755
index 0000000..9bbae66
--- /dev/null
+++ b/tests/dirinstall/dirinstall.sh
@@ -0,0 +1,42 @@
+#!/bin/sh -eux
+
+
+# Prepare test work directory
+
+WORK_DIR=$(mktemp -d /var/tmp/dirinstall.XXXXXX)
+
+
+# Create kickstart
+
+KICKSTART_PATH=${WORK_DIR}/ks.cfg
+source ./repositories
+TEST_KICKSTART=./ks.dirinstall.cfg
+
+# Dump URLs of installation repositories found in local repositories whose names are configured in 'repositories' file
+echo "url --metalink=$(dnf repoinfo $BASE_REPO | grep ^Repo-metalink | cut -d: -f2- | sed 's/^ *//')" > ${KICKSTART_PATH}
+for repo in $REPOS; do
+    echo "repo --name=$repo --metalink=$(dnf repoinfo $repo | grep ^Repo-metalink | cut -d: -f2- | sed 's/^ *//')" >> ${KICKSTART_PATH}
+done
+
+cat ${TEST_KICKSTART} >> ${KICKSTART_PATH}
+
+# Log the kickstart
+cat ${KICKSTART_PATH}
+
+
+# Run dirinstall
+
+INSTALL_DIR=${WORK_DIR}/install_dir
+mkdir ${INSTALL_DIR}
+
+anaconda --dirinstall ${INSTALL_DIR} --kickstart ${KICKSTART_PATH} --${ANACONDA_UI_MODE} --noninteractive 2>&1
+
+
+# Remove test work directory
+
+rm -rf ${WORK_DIR}
+
+
+# Show and remove the logs for this anaconda run
+
+./show_logs.sh
diff --git a/tests/dirinstall/ks.dirinstall.cfg b/tests/dirinstall/ks.dirinstall.cfg
new file mode 100644
index 0000000..9b54293
--- /dev/null
+++ b/tests/dirinstall/ks.dirinstall.cfg
@@ -0,0 +1,12 @@
+# The repository configuration (url, repo) needs to be added here.
+# It varies by the product and version we are running on / testing
+
+lang en_US.UTF-8
+keyboard --vckeymap=us --xlayouts='us'
+rootpw --plaintext redhat
+timezone --utc Europe/Prague
+
+shutdown
+
+%packages
+%end
diff --git a/tests/dirinstall/repositories b/tests/dirinstall/repositories
new file mode 100644
index 0000000..9fee07a
--- /dev/null
+++ b/tests/dirinstall/repositories
@@ -0,0 +1,4 @@
+# Names of local repositories whose urls will be used for installation
+# Repositories for "Fedora X" release:
+BASE_REPO="fedora"
+REPOS="fedora-modular"
diff --git a/tests/dirinstall/show_logs.sh b/tests/dirinstall/show_logs.sh
new file mode 100755
index 0000000..486ed25
--- /dev/null
+++ b/tests/dirinstall/show_logs.sh
@@ -0,0 +1,21 @@
+#!/bin/sh -x
+
+ls /tmp
+
+LOG_DIR=/tmp
+
+cd ${LOG_DIR}
+KS_SCRIPT_LOGS=$(ls ks-script-*.log)
+cd -
+
+ANACONDA_LOGS="anaconda.log storage.log packaging.log program.log dbus.log dnf.librepo.log ${KS_SCRIPT_LOGS}"
+
+for log in ${ANACONDA_LOGS} ; do
+    LOG_PATH=${LOG_DIR}/${log}
+    if [ -f ${LOG_PATH} ]; then
+        echo "----------------------- Dumping log file $LOG_PATH:"
+        cat $LOG_PATH
+        # clear for the following test
+        rm $LOG_PATH
+    fi
+done
diff --git a/tests/linchpin/PinFile b/tests/linchpin/PinFile
deleted file mode 100644
index 4438a09..0000000
--- a/tests/linchpin/PinFile
+++ /dev/null
@@ -1,4 +0,0 @@
----
-gating-test:
-  topology: gating-test.yml
-  layout: gating-test.yml
diff --git a/tests/linchpin/credentials/clouds.yml b/tests/linchpin/credentials/clouds.yml
deleted file mode 100644
index aafd9c4..0000000
--- a/tests/linchpin/credentials/clouds.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-clouds:
-  ci-rhos:
-    auth:
-      auth_url:
-      project_name:
-      username:
-      password:
diff --git a/tests/linchpin/inventories/empty b/tests/linchpin/inventories/empty
deleted file mode 100644
index 10acfd5..0000000
--- a/tests/linchpin/inventories/empty
+++ /dev/null
@@ -1 +0,0 @@
-[gating_test_runner]
diff --git a/tests/linchpin/layouts/gating-test.yml b/tests/linchpin/layouts/gating-test.yml
deleted file mode 100644
index d511ace..0000000
--- a/tests/linchpin/layouts/gating-test.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-inventory_layout:
-  #inventory_file: "{% raw -%}{{ workspace }}/inventories/gating-test.inventory{%- endraw%}"
-  vars:
-    hostname: __IP__
-  hosts:
-    gating_test_runner:
-      count: 1
-      host_groups:
-        - gating_test_runner
-
diff --git a/tests/linchpin/linchpin.conf b/tests/linchpin/linchpin.conf
deleted file mode 100644
index 81364e0..0000000
--- a/tests/linchpin/linchpin.conf
+++ /dev/null
@@ -1,295 +0,0 @@
-# This file is a well-documented, and commented out (mostly) file, which
-# covers the configuration options available in LinchPin
-#
-# Used to override default configuration settings for LinchPin
-# Defaults exist in linchpin/linchpin.constants file
-#
-# Uncommented options enable features found in v1.5.1 or newer and
-# can be turned off by commenting them out.
-#
-# structured in INI style
-# use %% to allow code interpolation
-# use % to use config interpolation
-#
-
-[DEFAULT]
-# name of the python package (Redundant, but easier than programmatically
-# obtaining the value. It's very unlikely to change.)
-pkg = linchpin
-
-# Useful for storing the RunDB or other components like global credentials
-# travis-ci doesn't like ~/.config/linchpin, use /tmp
-#default_config_path = ~/.config/linchpin
-
-# When creating an provider not already included in LinchPin, this path
-# extends where LinchPin will look to run the appropriate playbooks
-#external_providers_path = %(default_config_path)s/linchpin-x
-
-# When adding anything to the lp section, it should be general for
-# the entire application.
-[lp]
-
-# load custom ansible modules from here
-#module_folder = library
-
-# rundb tracks provisioning transactions
-# If you add a new one, rundb/drivers.py needs to be updated to match
-# rundb_conn is the location of the run database.
-# A common reason to move it is to use the rundb centrally across
-# the entire system, or in a central db on a shared filesystem.
-# System-wide RunDB: rundb_conn = ~/.config/linchpin/rundb-::mac::.json
-#rundb_conn = {{ workspace }}/.rundb/rundb-::mac::.json
-rundb_conn = ~/.config/linchpin/rundb-::mac::.json
-
-# name the type of Run database. Currently only TinyRunDB exists
-#rundb_type = TinyRunDB
-
-# How to connect to the RunDB, if it's on a separate server,
-# it may be tcp or ssh
-#rundb_conn_type = file
-
-# The schema is used because TinyDB is a NoSQL db. Another DB
-# may use this as a way to manage fields in a specific table.
-#rundb_schema = {"action": "",
-#                "inputs": [],
-#                "outputs": [],
-#                "start": "",
-#                "end": "",
-#                "rc": 0,
-#                "uhash": ""}
-
-# each entry in the RunDB contains a unique-ish hash (uhash). This
-# sets the hashing mechanism used to generate the uhash.
-#rundb_hash = sha256
-
-# The default dateformat used in LinchPin. Specifically used in the
-# RunDB for recording start and end dates, but also used elsewhere.
-#dateformat = %%m/%%d/%%Y %%I:%%M:%%S %%p
-
-# The name of the pinfile. Someone could adjust this and use TopFile
-# or somesuch. The ramifications of this would mean that the file in
-# the workspace that linchpin reads would change to this value.
-#default_pinfile = PinFile
-
-# By default, whenever linchpin performs an action
-# (linchpin up/linchpin destroy), the data is read from the PinFile.
-# Enabling 'use_rundb_for_actions' will allow destroy and certain up
-# actions (specifically when using --run-id or --tx-id) to pull data
-# from the RunDB instead.
-#use_rundb_for_actions = False
-use_rundb_for_actions = True
-
-# A user can request specific data distilled from the RunDB. This flag
-# enables the Context Distiller.
-# NOTE: This flag requires generate_resources = False.
-#distill_data = False
-distill_data = True
-
-# If desired, enabling distill_on_error will distill any successfully (and
-# possibly failed) provisioned resources. This is predicated on the data
-# being written to the RunDB (usually means _async tasks may never record
-# data upon failure).
-distill_on_error = False
-
-# User can make linchpin use the actual return codes for final return code
-# if enabled True, even if one target provision is successfull linchpin 
-# returns exit code zero else returns the sum of all the return codes
-# use_actual_rcs = False
-
-# LinchPin sets several extra_vars (evars) that are passed to the playbooks.
-# This section controls those items.
-[evars]
-
-# enables the ansible --check option
-# _check_mode = False
-
-# enables the ansible async ability. For some providers, it allows multiple
-# provisioning tasks to happen at once, then will collect the data afterward.
-# The default is perform the provision actions in serial.
-#_async = False
-
-# How long to wait before failing (in seconds) for an async task.
-#async_timeout = 1000
-
-# the uhash value will still exist, but will not be added to
-# instances or the inventory_path
-#enable_uhash = False
-enable_uhash = True
-
-# in older versions of linchpin (<v1.0.4), a resources folder exists, which
-# dumped the data that is now stored in the RunDB. To disable the resources
-# output, set the value to False.
-#generate_resources = True
-generate_resources = False
-
-# default paths in playbooks
-#
-# lp_path = <src_dir>/linchpin
-# determined in the load_config method of # linchpin.cli.LinchpinCliContext
-
-# Each of the following items controls the path (usually along with the
-# default values below) to the corresponding item.
-
-# In the workspace (generally), this is the location of the layouts and
-# topologies looked up by the PinFile. If either of these change, the
-# value in linchpin/templates must also change.
-#layouts_folder = layouts
-#topologies_folder = topologies
-
-# The relative location for hooks
-#hooks_folder = hooks
-
-# The relative location for provider roles
-#roles_folder = roles
-
-# The relative location for storing inventories
-#inventories_folder = inventories
-
-# The relative location for resources output (deprecated)
-#resources_folder = resources
-
-# The relative location to find schemas (deprecated)
-#schemas_folder = schemas
-
-# The relative location to find playbooks
-#playbooks_folder = provision
-
-# The default path to schemas for validation (deprecated)
-#default_schemas_path = {{ lp_path }}/defaults/%(schemas_folder)s
-
-# The default path to topologies if they aren't in the workspace
-#default_topologies_path = {{ lp_path }}/defaults/%(topologies_folder)s
-
-# The default path to inventory layouts if they aren't in the workspace
-#default_layouts_path = {{ lp_path }}/defaults/%(layouts_folder)s
-
-# The default path for outputting ansible static inventories
-#default_inventories_path = {{ lp_path }}/defaults/%(inventories_folder)s
-
-# The default path to the ansible roles which control the providers
-#default_roles_path = {{ lp_path }}/%(playbooks_folder)s/%(roles_folder)s
-
-# In older versions (<1.2.x), the schema was held here. These schemas are
-# deprecated.
-#schema_v3 = %(default_schemas_path)s/schema_v3.json
-#schema_v4 = %(default_schemas_path)s/schema_v4.json
-
-# The location where default credentials data would exist. This path doesn't
-# automatically exist
-#default_credentials_path = %(default_config_path)s
-
-# If desired, one could overwrite the location of the generated inventory path
-#inventory_path = {{ workspace }}/{{inventories_folder}}/happy.inventory
-
-# Libvirt images can be stored almost anywhere (not /tmp).
-# Unprivileged users need not setup sudo to manage a path to which they have rights.
-# The following are specific settings to manage libvirt images and instances
-
-# the location to store generated ssh keys and the like
-#default_ssh_key_path = ~/.ssh
-
-# Where to store the libvirt images for copying/booting instances
-#libvirt_image_path = /var/lib/libvirt/images/
-
-# What user to use to access libvirt.
-# Using root means sudo without password must be setup
-#libvirt_user = root
-
-# When using root or any privileged user, this must be set to yes.
-# sudo without password must also be setup
-#libvirt_become = yes
-
-# This section covers settings for the `linchpin init` command
-#[init]
-
-# source path of files generated by linchpin init
-#source = templates/
-
-# formal name of the generated PinFile. Can be changed as desired.
-#pinfile = PinFile
-
-# This section covers logging setup
-[logger]
-
-# Turns off and on the logger functionality
-#enable = True
-
-# Full path to the location of the linchpin log file
-file = ~/.config/linchpin/linchpin.log
-
-# Log format used. See https://docs.python.org/2/howto/logging-cookbook.html
-#format = %%(levelname)s %%(asctime)s %%(message)s
-
-# Date format used. See https://docs.python.org/2/howto/logging-cookbook.html
-#dateformat = %%m/%%d/%%Y %%I:%%M:%%S %%p
-
-# Level of logging provided
-#level = logging.DEBUG
-
-# Logging to the console via STDERR
-#[console]
-
-# logging to the console should also be possible
-# NOTE: Placeholder only, cannot disable.
-#enable = True
-
-# Log format used. See https://docs.python.org/2/howto/logging-cookbook.html
-#format = %%(message)s
-
-# Level of logging provided
-#level = logging.INFO
-
-# LinchPin hooks have several states depending on the action. Currently, there
-# are three hook states relating to tasks being completed.
-# * up - when performing the up (provision) action
-# * destroy - when performing the destroy (teardown) action
-# * inv - when performing the internal inventory generation action
-#   (currently unimplemented)
-#[hookstates]
-
-# when performing the up action, these hooks states are run
-#up = pre,post,inv
-
-# when performing the inv action, these hooks states are run
-#inv = post
-
-# when performing the destroy action, these hooks states are run
-#destroy = pre,post
-
-# This section covers file extensions for generating or looking
-# up specific files
-#[extensions]
-
-# When looking for provider playbooks, use this extension
-#playbooks = .yml
-
-# When generating inventory files, use this extension
-#inventory = .inventory
-
-# This section controls the ansible settings for display or other settings
-#[ansible]
-
-# If set to true, this enables verbose output automatically to the screen.
-# This is equivalent of passing `-v` to the linchpin command line shell.
-#console = False
-
-# When linchpin is run, certain states are called at certain points along the
-# execution timeline. These STATES are defined below.
-#[states]
-# in future each state will have comma separated substates
-
-# The name of the state which occurs before (pre) provisioning (up)
-#preup = preup
-
-# The name of the state which occurs before (pre) teardown (destroy)
-#predestroy = predestroy
-
-# The name of the state which occurs after (post) provisioning (up)
-#postup = postup
-
-# The name of the state which occurs after (pre) teardown (destroy)
-#postdestroy = postdestroy
-
-# The name of the state which occurs after (post) inventory is generated (inv)
-#postinv = inventory
-
diff --git a/tests/linchpin/topologies/gating-test.yml b/tests/linchpin/topologies/gating-test.yml
deleted file mode 100644
index e34043a..0000000
--- a/tests/linchpin/topologies/gating-test.yml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-topology_name: gating-test
-resource_groups:
-    - resource_group_name: gating-test
-      resource_group_type: openstack
-      resource_definitions:
-        - name: "gating_test_runner"
-          role: os_server
-          flavor: m1.small
-          image: RHEL-8.0-x86_64-nightly-latest
-          count: 1
-          keypair: kstests
-          fip_pool: 10.8.240.0
-          networks:
-            - installer-jenkins-priv-network
-      credentials:
-        filename: clouds.yml
-        profile: ci-rhos
diff --git a/tests/prepare-test-runner.yml b/tests/prepare-test-runner.yml
deleted file mode 100644
index f2f5f59..0000000
--- a/tests/prepare-test-runner.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-# prepare test runner
-- hosts: gating_test_runner
-  become: true
-
-  roles:
-    - prepare-test-runner
diff --git a/tests/provision.fmf b/tests/provision.fmf
deleted file mode 100644
index 62a6eba..0000000
--- a/tests/provision.fmf
+++ /dev/null
@@ -1,5 +0,0 @@
----
-
-standard-inventory-qcow2:
-  qemu:
-    m: 2G
diff --git a/tests/remote_config/ansible.cfg b/tests/remote_config/ansible.cfg
deleted file mode 100644
index 6795cfa..0000000
--- a/tests/remote_config/ansible.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[defaults]
-inventory = inventory
-remote_user = root
-host_key_checking = False
-private_key_file = /path/to/private_key
diff --git a/tests/remote_config/inventory/hosts b/tests/remote_config/inventory/hosts
deleted file mode 100644
index 73cac65..0000000
--- a/tests/remote_config/inventory/hosts
+++ /dev/null
@@ -1,3 +0,0 @@
-[gating_test_runner]
-[gating_test_runner:vars]
-ansible_python_interpreter=/usr/libexec/platform-python
diff --git a/tests/roles/dirinstall/tasks/ks-run.yml b/tests/roles/dirinstall/tasks/ks-run.yml
deleted file mode 100644
index e33227e..0000000
--- a/tests/roles/dirinstall/tasks/ks-run.yml
+++ /dev/null
@@ -1,78 +0,0 @@
----
-
-- set_fact:
-    kickstart: "{{ kickstart_template | basename }}"
-
-- set_fact:
-    test_name_with_ks: "{{ test_name }}.{{ kickstart }}"
-
-- debug:
-    msg: "Running '{{ test_name }}' with kickstart '{{ kickstart }}'"
-
-- name: Copy installation kickstart
-  template:
-    src: "templates/kickstarts/{{ kickstart }}"
-    dest: "{{ kickstart_dest }}"
-    mode: 0755
-
-- name: Clean target directory
-  file:
-    path: "{{ install_dir }}"
-    state: "{{ item }}"
-    mode: 0755
-  with_items:
-    - absent
-    - directory
-
-- name: Clean installation logs
-  file:
-    path: "/tmp/{{ item }}"
-    state: absent
-  with_items: "{{ installation_logs }}"
-
-- name: Run dirinstall
-  shell: timeout -k 10s 3600s anaconda --dirinstall {{ install_dir }} --kickstart {{ kickstart_dest }} {{ method }} --noninteractive 2>&1
-  register: result
-  ignore_errors: True
-
-- debug:
-    msg: "{{ result }}"
-
-- set_fact:
-    result_str: "PASS"
-
-- set_fact:
-    result_str: "FAIL"
-    global_result: "FAIL"
-  when: result.rc != 0
-
-- name: Update global test.log
-  lineinfile:
-    path: "{{ local_artifacts }}/test.log"
-    line: "{{ result_str }} {{ test_name_with_ks }}"
-    create: yes
-    insertafter: EOF
-
-- name: Create this test log
-  copy:
-    content: "{{ result.stdout }}"
-    dest: "{{ local_artifacts }}/{{ result_str }}_{{ test_name_with_ks }}.log"
-
-- name: Create installation logs dir in artifacts
-  file:
-    path: "{{ local_artifacts }}/{{ test_name_with_ks }}"
-    state: directory
-
-- name: Copy input kickstart to artifacts
-  copy:
-    remote_src: True
-    src: "{{ kickstart_dest }}"
-    dest: "{{ local_artifacts }}/{{ test_name_with_ks }}/{{ kickstart_dest | basename }}"
-
-- name: Copy installation logs to artifacts
-  copy:
-    remote_src: True
-    src: "/tmp/{{ item }}"
-    dest: "{{ local_artifacts }}/{{ test_name_with_ks }}/{{ item }}"
-  with_items: "{{ installation_logs }}"
-  ignore_errors: True
diff --git a/tests/roles/dirinstall/tasks/main.yml b/tests/roles/dirinstall/tasks/main.yml
deleted file mode 100644
index 66cf52a..0000000
--- a/tests/roles/dirinstall/tasks/main.yml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-- name: Install vnc install dependencies
-  dnf:
-    name:
-      - metacity
-    state: latest
-  when: method == "--vnc"
-
-- include_tasks: ks-run.yml
-  with_fileglob:
-    - templates/kickstarts/*
-  loop_control:
-    loop_var: kickstart_template
diff --git a/tests/roles/dirinstall/templates/kickstarts/basic b/tests/roles/dirinstall/templates/kickstarts/basic
deleted file mode 100644
index d0c0db1..0000000
--- a/tests/roles/dirinstall/templates/kickstarts/basic
+++ /dev/null
@@ -1,12 +0,0 @@
-{{ base_repo_command }}
-{{ "\n".join(repo_commands) }}
-{{ "\n".join(additional_repo_commands) }}
-lang en_US.UTF-8
-keyboard --vckeymap=us --xlayouts='us'
-rootpw --plaintext redhat
-timezone --utc Europe/Prague
-
-shutdown
-
-%packages
-%end
diff --git a/tests/roles/dirinstall/vars/main.yml b/tests/roles/dirinstall/vars/main.yml
deleted file mode 100644
index 5438297..0000000
--- a/tests/roles/dirinstall/vars/main.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-
-install_dir: "/root/installdir"
-kickstart_dest: "/root/ks.dirinstall.cfg"
-
diff --git a/tests/roles/global-result/tasks/main.yml b/tests/roles/global-result/tasks/main.yml
deleted file mode 100644
index 80ec312..0000000
--- a/tests/roles/global-result/tasks/main.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-# Make the test fail based on individual test failures
-
-- fail:
-    msg: "The test has failed."
-  when: global_result is defined and global_result == "FAIL"
diff --git a/tests/roles/installation-repos/defaults/main.yml b/tests/roles/installation-repos/defaults/main.yml
deleted file mode 100644
index fad262e..0000000
--- a/tests/roles/installation-repos/defaults/main.yml
+++ /dev/null
@@ -1,43 +0,0 @@
----
-
-### Base repository
-
-# Base repository command for kickstart
-
-#base_repo_command: "url --url=http://download.englab.brq.redhat.com/pub/fedora/development-rawhide/Everything/x86_64/os/"
-
-# If base_repo_command is not defined, look for base repo url
-# in [base_repo_from_runner.repo] repository of
-# /etc/yum.repos.d/base_repo_from_runner.file on test runner
-
-base_repo_from_runner:
-  file: rhel.repo
-  repo: rhel
-
-
-### Additional repositories
-
-# Additional repo commands for kickstart:
-# - undefine to allow detecting of repos from test runner by
-#   repos_from_runner variable
-# - set to [] for no additional repositories
-
-#repo_commands: []
-#repo_commands:
-#  - "repo --baseurl=http://download.englab.brq.redhat.com/pub/fedora/development-rawhide/Everything/x86_64/os/"
-
-# If repo_commands is not defined, look for additinal repositories
-# in [repo] repository of /etc/yum.repos.d/file of test runner.
-# Multiple repositories can be defined here.
-
-repos_from_runner:
-  - file: rhel.repo
-    repo: rhel
-  - file: rhel.repo
-    repo: rhel-AppStream
-
-
-# Additional repo commands to be used in any case,
-# ie even in case additional repos are detected by repos_from_runner
-
-additional_repo_commands: []
diff --git a/tests/roles/installation-repos/tasks/main.yml b/tests/roles/installation-repos/tasks/main.yml
deleted file mode 100644
index 0686004..0000000
--- a/tests/roles/installation-repos/tasks/main.yml
+++ /dev/null
@@ -1,87 +0,0 @@
----
-
-### Set up local facts from system repositories
-
-- name: Create facts directory for repository custom facts
-  file:
-    state: directory
-    recurse: yes
-    path: /etc/ansible/facts.d
-
-- name: Install base repository facts
-  copy:
-    remote_src: yes
-    src: "/etc/yum.repos.d/{{ base_repo_from_runner.file }}"
-    dest: "/etc/ansible/facts.d/{{ base_repo_from_runner.file}}.fact"
-  when: base_repo_command is not defined and base_repo_from_runner is defined
-
-- name: Install additional repositories facts
-  copy:
-    remote_src: yes
-    src: "/etc/yum.repos.d/{{ item.file }}"
-    dest: "/etc/ansible/facts.d/{{ item.file}}.fact"
-  with_items: "{{ repos_from_runner }}"
-  when: repo_commands is not defined and repos_from_runner is defined
-
-- name: Setup repository facts
-  setup:
-    filter: ansible_local
-
-### Base repository
-
-- name: Set base installation repository from system base metalink repository
-  set_fact:
-    base_repo_command: "url --metalink={{ ansible_local[base_repo_from_runner.file][base_repo_from_runner.repo]['metalink'] }}"
-  when: ansible_local[base_repo_from_runner.file][base_repo_from_runner.repo]['metalink'] is defined
-
-- name: Set base installation repository from system base mirrorlist repository
-  set_fact:
-    base_repo_command: "url --mirrorlist={{ ansible_local[base_repo_from_runner.file][base_repo_from_runner.repo]['mirrorlist'] }}"
-  when: ansible_local[base_repo_from_runner.file][base_repo_from_runner.repo]['mirrorlist'] is defined
-
-- name: Set base installation repository from system base url repository
-  set_fact:
-    base_repo_command: "url --url={{ ansible_local[base_repo_from_runner.file][base_repo_from_runner.repo]['baseurl'] }}"
-  when: ansible_local[base_repo_from_runner.file][base_repo_from_runner.repo]['baseurl'] is defined
-
-### Additional repositories
-
-- name: Look for system metalink repositories
-  set_fact:
-    repos_metalink: "{{ repos_metalink | default([]) + [ 'repo --name=' + item.repo + ' --metalink=' + ansible_local[item.file][item.repo]['metalink'] ] }}"
-    #ignore_errors: true
-  with_items: "{{ repos_from_runner }}"
-  when: repo_commands is not defined and ansible_local[item.file][item.repo]['metalink'] is defined
-
-- name: Look for system mirrorlist repositories
-  set_fact:
-    repos_mirrorlist: "{{ repos_mirrorlist | default([]) + [ 'repo --name=' + item.repo + ' --mirrorlist=' + ansible_local[item.file][item.repo]['mirrorlist'] ] }}"
-    #ignore_errors: true
-  with_items: "{{ repos_from_runner }}"
-  when: repo_commands is not defined and ansible_local[item.file][item.repo]['mirrorlist'] is defined
-
-- name: Look for system baseurl repositories
-  set_fact:
-    repos_baseurl: "{{ repos_baseurl | default([]) + [ 'repo --name=' + item.repo + ' --baseurl=' + ansible_local[item.file][item.repo]['baseurl'] ] }}"
-    #ignore_errors: true
-  with_items: "{{ repos_from_runner }}"
-  when: repo_commands is not defined and ansible_local[item.file][item.repo]['baseurl'] is defined
-
-
-- name: Set additional metalink installation repositories from system
-  set_fact:
-    repo_commands: "{{ repo_commands | default([]) + [ item ] }}"
-  with_items: "{{ repos_metalink }}"
-  when: repos_metalink is defined
-
-- name: Set additional mirrorlist installation repositories from system
-  set_fact:
-    repo_commands: "{{ repo_commands | default([]) + [ item ] }}"
-  with_items: "{{ repos_mirrorlist }}"
-  when: repos_mirrorlist is defined
-
-- name: Set additional baseurl installation repositories from system
-  set_fact:
-    repo_commands: "{{ repo_commands | default([]) + [ item ] }}"
-  with_items: "{{ repos_baseurl }}"
-  when: repos_baseurl is defined
diff --git a/tests/roles/prepare-env/tasks/main.yml b/tests/roles/prepare-env/tasks/main.yml
deleted file mode 100644
index 856ac28..0000000
--- a/tests/roles/prepare-env/tasks/main.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: Prepare testing environment
-  dnf:
-    name:
-      - anaconda
-    state: latest
diff --git a/tests/roles/prepare-test-runner/defaults/main.yml b/tests/roles/prepare-test-runner/defaults/main.yml
deleted file mode 100644
index 8332f3e..0000000
--- a/tests/roles/prepare-test-runner/defaults/main.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-
-# Additional repos added to test runner, eg repo with builds to be tested
-test_runner_repos:
-  rhel:
-    name: rhel
-    source: "baseurl=http://download.eng.bos.redhat.com/rhel-9/nightly/RHEL-9-Beta/latest-RHEL-9/compose/BaseOS/x86_64/os/"
-  rhel-AppStream:
-    name: rhel-AppStream
-    source: "baseurl=http://download.eng.bos.redhat.com/rhel-9/nightly/RHEL-9-Beta/latest-RHEL-9/compose/AppStream/x86_64/os/"
diff --git a/tests/roles/prepare-test-runner/tasks/main.yml b/tests/roles/prepare-test-runner/tasks/main.yml
deleted file mode 100644
index 2c01d47..0000000
--- a/tests/roles/prepare-test-runner/tasks/main.yml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-
-- name: Add repositories
-  template:
-    src: repo.j2
-    dest: "/etc/yum.repos.d/{{ test_runner_repos[item]['name']}}.repo"
-  with_items: "{{ test_runner_repos }}"
-
-- name: Create empty artifacts directory on local host
-  become: no
-  local_action:
-    module: file
-    path: "{{ artifacts }}"
-    state: "{{ item }}"
-    mode: 0755
-  with_items:
-    - absent
-    - directory
diff --git a/tests/roles/prepare-test-runner/templates/repo.j2 b/tests/roles/prepare-test-runner/templates/repo.j2
deleted file mode 100644
index 557cec8..0000000
--- a/tests/roles/prepare-test-runner/templates/repo.j2
+++ /dev/null
@@ -1,5 +0,0 @@
-[{{ test_runner_repos[item]['name'] }}]
-name={{ test_runner_repos[item]['name'] }}
-{{ test_runner_repos[item]['source'] }}
-enabled=1
-gpgcheck=0
diff --git a/tests/roles/sync-artifacts/defaults/main.yml b/tests/roles/sync-artifacts/defaults/main.yml
deleted file mode 100644
index 0c46caa..0000000
--- a/tests/roles/sync-artifacts/defaults/main.yml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-
-artifacts: "{{ lookup('env', 'TEST_ARTIFACTS')|default('./artifacts', true) }}"
diff --git a/tests/roles/sync-artifacts/tasks/main.yml b/tests/roles/sync-artifacts/tasks/main.yml
deleted file mode 100644
index 449fcac..0000000
--- a/tests/roles/sync-artifacts/tasks/main.yml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-
-- name: Make sure rsync required to fetch artifacts is installed
-  dnf:
-    name:
-      - rsync
-
-- name: Fetch artifacts
-  synchronize:
-    mode: pull
-    delete: yes
-    src: "{{ local_artifacts }}/"
-    dest: "{{ artifacts }}"
diff --git a/tests/run_tests_remotely.sh b/tests/run_tests_remotely.sh
deleted file mode 100755
index 309d36c..0000000
--- a/tests/run_tests_remotely.sh
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/bin/sh
-
-usage () {
-    cat <<HELP_USAGE
-
-    $0  [-c] [-a <ARTIFACTS DIR>]
-
-    Run gating tests on test runners provisioned by linchpin and deployed with ansible,
-    syncing artifacts to localhost.
-
-   -c  Run configuration check.
-   -a  Local host directory for fetching artifacts from test runner.
-HELP_USAGE
-}
-
-CHECK_ONLY="no"
-ARTIFACTS="/tmp/artifacts"
-
-while getopts "ca:" opt; do
-    case $opt in
-        c)
-            # Run only configuration check
-            CHECK_ONLY="yes"
-            ;;
-        a)
-            # Set up directory for fetching artifacts
-            ARTIFACTS="${OPTARG}"
-            ;;
-        *)
-            echo "Usage:"
-            usage
-            exit 1
-            ;;
-    esac
-done
-
-DEFAULT_CRED_FILENAME="clouds.yml"
-CRED_DIR="${HOME}/.config/linchpin"
-CRED_FILE_PATH=${CRED_DIR}/${DEFAULT_CRED_FILENAME}
-TOPOLOGY_FILE_PATH="linchpin/topologies/gating-test.yml"
-ANSIBLE_CFG_PATH="remote_config/ansible.cfg"
-
-CHECK_RESULT=0
-
-
-############################## Check the configuration
-
-echo
-echo "========= Dependencies are installed"
-echo "linchpin and ansible are required to be installed."
-echo "For linchpin installation instructions see:"
-echo "https://linchpin.readthedocs.io/en/latest/installation.html"
-echo
-
-if ! type ansible &> /dev/null; then
-    echo "=> FAILED: ansible package is not installed"
-    CHECK_RESULT=1
-else
-    echo "=> OK: ansible is installed"
-fi
-
-if ! type linchpin &> /dev/null; then
-    echo "=> FAILED: linchpin is not installed"
-    CHECK_RESULT=1
-else
-    echo "=> OK: linchpin is installed"
-fi
-
-
-echo
-echo "========= Linchpin cloud credentials configuration"
-echo "The credentials file for linchpin provisioner should be in ${CRED_DIR}"
-echo "The name of the file and the profile to be used is defined by"
-echo "   resource_groups.credentials variables in the topology file"
-echo "   (${TOPOLOGY_FILE_PATH})"
-echo
-
-config_changed=0
-if [[ -f ${TOPOLOGY_FILE_PATH} ]]; then
-    grep -q 'filename:.*'${DEFAULT_CRED_FILENAME} ${TOPOLOGY_FILE_PATH}
-    config_changed=$?
-fi
-
-if [[ ${config_changed} -eq 0 ]]; then
-    if [[ -f ${CRED_FILE_PATH} ]]; then
-        echo "=> OK: ${CRED_FILE_PATH} exists"
-    else
-        echo "=> FAILED: ${CRED_FILE_PATH} does not exist"
-        CHECK_RESULT=1
-    fi
-else
-    echo "=> NOT CHECKING: seems like this has been configured in a different way"
-fi
-
-
-echo
-echo "========== Deployment ssh key configuration"
-echo "The ssh key used for deployment with ansible has to be defined by"
-echo "private_key_file variable in ${ANSIBLE_CFG_PATH}"
-echo "and match the key used for provisioning of the machines with linchpin"
-echo "which is defined by resource_groups.resource_definitions.keypair variable"
-echo "in topology file (${TOPOLOGY_FILE_PATH})."
-echo
-
-
-deployment_key_defined_line=$(grep 'private_key_file.*=.*[^\S]' ${ANSIBLE_CFG_PATH})
-if [[ -n "${deployment_key_defined_line}" ]]; then
-    echo "=> OK: ${ANSIBLE_CFG_PATH}: ${deployment_key_defined_line}"
-else
-    echo "=> FAILED: deployment ssh key not defined in ${ANSIBLE_CFG_PATH}"
-    CHECK_RESULT=1
-fi
-
-linchpin_keypair=$(grep "keypair:" ${TOPOLOGY_FILE_PATH} | uniq)
-echo "=> INFO: should be the same key as ${TOPOLOGY_FILE_PATH}: ${linchpin_keypair}"
-
-
-if [[ ${CHECK_RESULT} -ne 0 ]]; then
-echo
-echo "=> Configuration check FAILED, see FAILED messages above."
-echo
-fi
-
-if [[ ${CHECK_ONLY} == "yes" || ${CHECK_RESULT} -ne 0 ]]; then
-    exit ${CHECK_RESULT}
-fi
-
-
-############################## Run the tests
-
-set -x
-
-### Clean the linchpin generated inventory
-rm -rf linchpin/inventories/*.inventory
-
-### Provision test runner
-linchpin -v --workspace linchpin -p linchpin/PinFile -c linchpin/linchpin.conf up
-
-### Pass inventory generated by linchpin to ansible
-cp linchpin/inventories/*.inventory remote_config/inventory/linchpin.inventory
-
-### Use remote hosts in tests playbooks
-ansible-playbook set_tests_to_run_on_remote.yml
-
-### Use the ansible configuration for running tests on remote host
-export ANSIBLE_CONFIG=${ANSIBLE_CFG_PATH}
-
-### Configure remote user for playbooks
-# By default root is used but it can be fedora or cloud-user for cloud images
-for USER in root fedora cloud-user; do
-  ansible-playbook --extra-vars="remote_user=$USER" check_and_set_remote_user.yml
-done
-
-### Prepare test runner
-ansible-playbook --extra-vars="artifacts=${ARTIFACTS}" prepare-test-runner.yml
-### Run test on test runner (supply artifacts variable which is testing system's job)
-ansible-playbook --extra-vars="artifacts=${ARTIFACTS}" tests.yml
-
-### Destroy the test runner
-linchpin -v --workspace linchpin -p linchpin/PinFile -c linchpin/linchpin.conf destroy
-
diff --git a/tests/set_tests_to_run_on_remote.yml b/tests/set_tests_to_run_on_remote.yml
deleted file mode 100644
index 4a3b6c9..0000000
--- a/tests/set_tests_to_run_on_remote.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-# Replace hosts in test playbooks to run on remote host instead of localhost
-
-- hosts: localhost
-  become: False
-  gather_facts: False
-
-  tasks:
-  - name: Replace hosts in tests*.yml playbooks
-    lineinfile:
-      path: "{{ item }}"
-      regexp: "- hosts: localhost\\S*"
-      line: "- hosts: gating_test_runner"
-      backrefs: yes
-    with_fileglob:
-      - tests*.yml
-
diff --git a/tests/tests.yml b/tests/tests.yml
deleted file mode 100644
index e78df87..0000000
--- a/tests/tests.yml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-# test anaconda
-- hosts: localhost
-  become: true
-  tags:
-    - classic
-  vars_files:
-    - vars_tests.yml
-
-  roles:
-    - role: prepare-env
-      tags:
-        - prepare-env
-    - role: installation-repos
-    - role: dirinstall
-      vars:
-        method: "--text"
-        test_name: dirinstall-text
-      tags:
-        - dirinstall-text
-    - role: sync-artifacts
-    - role: global-result
diff --git a/tests/vars_tests.yml b/tests/vars_tests.yml
deleted file mode 100644
index 3f23934..0000000
--- a/tests/vars_tests.yml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-# variables for tests.yml
-installation_logs:
-  - anaconda.log
-  - dbus.log
-  - dnf.librepo.log
-  - hawkey.log
-  - ifcfg.log
-  - packaging.log
-  - program.log
-  - storage.log
-local_artifacts: /tmp/artifacts