Skip to content

Commit c8e99c1

Browse files
committed
ci: Add test plan that runs CI tests and customize it for each role
* Calculate number of managed nodes with this formula: (( number_of_test_playbooks / 10 + 1 )) * Add README explaining how to run the plan locally and remotely Signed-off-by: Sergei Petrosian <spetrosi@redhat.com>
1 parent 1b6a4c7 commit c8e99c1

4 files changed

Lines changed: 134 additions & 4 deletions

File tree

.codespellrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ check-hidden = true
55
ignore-multiline-regex = codespell:ignore-begin.*codespell:ignore-end
66
ignore-words = .codespell_ignores
77
# skip-file is not available https://github.com/codespell-project/codespell/pull/2759
8+
# .pandoc_template.html5 contains a typo in Licence that we shouldn't edit
9+
# .README.html is generated from README.md automatically - no need to check spelling
810
skip = .pandoc_template.html5,.README.html

.github/workflows/tft.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ jobs:
157157
uses: sclorg/testing-farm-as-github-action@v3
158158
if: contains(needs.prepare_vars.outputs.supported_platforms, matrix.platform)
159159
with:
160-
git_url: https://github.com/linux-system-roles/tft-tests
161160
git_ref: main
162161
pipeline_settings: '{ "type": "tmt-multihost" }'
163162
environment_settings: '{ "provisioning": { "tags": { "BusinessUnit": "system_roles" } } }'
@@ -170,7 +169,6 @@ jobs:
170169
TEST_LOCAL_CHANGES=false;\
171170
LINUXSYSTEMROLES_USER=${{ vars.LINUXSYSTEMROLES_USER }};\
172171
ARTIFACTS_URL=${{ steps.set_vars.outputs.ARTIFACTS_URL }}"
173-
# to increase ansible verbosity, add LSR_ANSIBLE_VERBOSITY='-vvv'
174172
# Note that LINUXSYSTEMROLES_SSH_KEY must be single-line, TF doesn't read multi-line variables fine.
175173
secrets: "LINUXSYSTEMROLES_DOMAIN=${{ secrets.LINUXSYSTEMROLES_DOMAIN }};\
176174
LINUXSYSTEMROLES_SSH_KEY=${{ secrets.LINUXSYSTEMROLES_SSH_KEY }}"
@@ -181,8 +179,7 @@ jobs:
181179
tf_scope: private
182180
api_key: ${{ secrets.TF_API_KEY_RH }}
183181
update_pull_request_status: false
184-
tmt_hardware: '{ "memory": ">= ${{ needs.prepare_vars.outputs.memory }} MB" }'
185-
tmt_plan_filter: "tag:general,certificate"
182+
tmt_plan_filter: "tag:playbooks_parallel,certificate"
186183

187184
- name: Set final commit status
188185
uses: myrotvorets/set-commit-status-action@master

plans/README-plans.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Introduction CI Testing Plans
2+
3+
Linux System Roles CI runs [tmt](https://tmt.readthedocs.io/en/stable/index.html) test plans in [Testing farm](https://docs.testing-farm.io/Testing%20Farm/0.1/index.html) with the [tft.yml](https://github.com/linux-system-roles/certificate/blob/main/.github/workflows/tft.yml) GitHub workflow.
4+
5+
The `plans/test_playbooks_parallel.fmf` plan is a test plan that runs test playbooks in parallel on multiple managed nodes.
6+
`plans/test_playbooks_parallel.fmf` is generated centrally from `https://github.com/linux-system-roles/.github/`.
7+
The automation calculates the number of managed nodes to provision with this formula:
8+
9+
```plain
10+
number-of-test-playbooks / 10 + 1
11+
```
12+
13+
The `plans/test_playbooks_parallel.fmf` plan does the following steps:
14+
15+
1. Provisions systems to be used as a control node and as managed nodes.
16+
2. Does the required preparation on systems.
17+
3. For the given role and the given PR, runs the general test from [test.sh](https://github.com/linux-system-roles/tft-tests/blob/main/tests/general/test.sh).
18+
19+
The [tft.yml](https://github.com/linux-system-roles/certificate/blob/main/.github/workflows/tft.yml) workflow runs the above plan and uploads the results to our Fedora storage for public access.
20+
This workflow uses Testing Farm's Github Action [Schedule tests on Testing Farm](https://github.com/marketplace/actions/schedule-tests-on-testing-farm).
21+
22+
## Running Tests
23+
24+
You can run tests locally with the `tmt try` cli or remotely in Testing Farm.
25+
26+
### Running Tests Locally
27+
28+
1. Install `tmt` as described in [Installation](https://tmt.readthedocs.io/en/stable/stories/install.html).
29+
2. Change to the role repository directory.
30+
3. Modify `plans/test_playbooks_parallel.fmf` to suit your requirements:
31+
1. Due to [issue #3138](https://github.com/teemtee/tmt/issues/3138), comment out all managed nodes except for one.
32+
2. Optionally modify environment variables to, e.g. run only specified test playbooks by modifying `SYSTEM_ROLES_ONLY_TESTS`.
33+
4. Enter `tmt try -p plans/test_playbooks_parallel <platform>`.
34+
This command identifies the `plans/test_playbooks_parallel.fmf` plan and provisions local VMs, a control node and a managed node.
35+
5. `tmt try` is in development and does not identify tests from URL automatically, so after provisioning the machines, you must type `t`, `p`, `t` from the interactive prompt to identify tests, run preparation steps, and run the tests.
36+
37+
### Running in Testing Farm
38+
39+
1. Install `testing-farm` as described in [Installation](https://gitlab.com/testing-farm/cli/-/blob/main/README.adoc#user-content-installation).
40+
2. Change to the role repository directory.
41+
3. If you want to run tests with edits in your branch, you need to commit and push changes first to some branch.
42+
4. You can uncomment "Inject your ssh public key to test systems" discover step in the plan if you want to troubleshoot tests by SSHing into test systems in Testing Farm.
43+
5. Enter `testing-farm request`.
44+
Edit to your needs.
45+
46+
```bash
47+
$ TESTING_FARM_API_TOKEN=<your_api_token> \
48+
testing-farm request --pipeline-type="tmt-multihost" \
49+
--plan-filter="tag:playbooks_parallel" \
50+
--git-url "https://github.com/<my_user>/certificate" \
51+
--git-ref "<my_branch>" \
52+
--compose CentOS-Stream-9 \
53+
-e "SYSTEM_ROLES_ONLY_TESTS=tests_default.yml" \
54+
--no-wait
55+
```

plans/test_playbooks_parallel.fmf

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
summary: A general test for a system role
2+
tag: playbooks_parallel
3+
provision:
4+
# TF uses `how: artemis`, and `tmt try`` uses `how: virtual`.
5+
# Hence there is no need to define `how` explicitly.
6+
- name: control-node1
7+
role: control_node
8+
# `connection: system` is required for `how: virtual` to assign VMs a real
9+
# IP making SSH configuration easier.
10+
# This setting is ignored in `artemis`, so we can leave it as is.
11+
connection: system
12+
- name: managed-node1
13+
role: managed_node
14+
connection: system
15+
hardware:
16+
memory: '>= 4096 MB'
17+
- name: managed-node2
18+
role: managed_node
19+
connection: system
20+
hardware:
21+
memory: '>= 4096 MB'
22+
environment:
23+
ANSIBLE_VER: 2.17
24+
REPO_NAME: certificate
25+
PYTHON_VERSION: 3.12
26+
SYSTEM_ROLES_ONLY_TESTS: "" # tests_default.yml
27+
TEST_LOCAL_CHANGES: true
28+
PR_NUM: ""
29+
LINUXSYSTEMROLES_USER: ""
30+
LINUXSYSTEMROLES_DOMAIN: ""
31+
LINUXSYSTEMROLES_SSH_KEY: ""
32+
ARTIFACTS_DIR: ""
33+
ARTIFACTS_URL: ""
34+
LSR_TFT_DEBUG: false
35+
prepare:
36+
- name: Use vault.centos.org repos (CS 7, 8 EOL workaround)
37+
script: |
38+
if grep -q 'CentOS Stream release 8' /etc/redhat-release; then
39+
sed -i '/^mirror/d;s/#\(baseurl=http:\/\/\)mirror/\1vault/' /etc/yum.repos.d/*.repo
40+
fi
41+
if grep -q 'CentOS Linux release 7.9' /etc/redhat-release; then
42+
sed -i '/^mirror/d;s/#\?\(baseurl=http:\/\/\)mirror/\1vault/' /etc/yum.repos.d/*.repo
43+
fi
44+
# Replace with feature: epel: enabled once https://github.com/teemtee/tmt/pull/3128 is merged
45+
- name: Enable epel to install beakerlib
46+
script: |
47+
# CS 10 and Fedora doesn't require epel
48+
if grep -q -e 'CentOS Stream release 10' -e 'Fedora release' /etc/redhat-release; then
49+
exit 0
50+
fi
51+
yum install epel-release yum-utils -y
52+
yum-config-manager --enable epel epel-debuginfo epel-source
53+
discover:
54+
- name: Prepare managed node
55+
how: fmf
56+
where: managed_node
57+
filter: tag:prep_managed_node
58+
url: https://github.com/linux-system-roles/tft-tests
59+
ref: main
60+
- name: Run test playbooks from control_node
61+
how: fmf
62+
where: control_node
63+
filter: tag:test_playbooks
64+
url: https://github.com/linux-system-roles/tft-tests
65+
ref: main
66+
# Uncomment this step for troubleshooting
67+
# This is required because currently testing-farm cli doesn't support running multi-node plans
68+
# You can set ID_RSA_PUB in the environment section above to your public key to distribute it to nodes
69+
# - name: Inject your ssh public key to test systems
70+
# how: fmf
71+
# where: control_node
72+
# filter: tag:reserve_system
73+
# url: https://github.com/linux-system-roles/tft-tests
74+
# ref: main
75+
execute:
76+
how: tmt

0 commit comments

Comments
 (0)