Skip to content

Commit 14e7844

Browse files
committed
feat(test): add integration tests
Integration tests for trustee_quadlet and secret_registration_server. Signed-off-by: Li Tian <litian@redhat.com>
1 parent 19cb256 commit 14e7844

29 files changed

Lines changed: 208 additions & 109 deletions

README.md

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
# trustee_server
1+
# trustee_attestation_server
22

33
[![ansible-lint.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/ansible-lint.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/ansible-lint.yml) [![ansible-test.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/ansible-test.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/ansible-test.yml) [![codespell.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/codespell.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/codespell.yml) [![markdownlint.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/markdownlint.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/markdownlint.yml) [![qemu-kvm-integration-tests.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/qemu-kvm-integration-tests.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/qemu-kvm-integration-tests.yml) [![shellcheck.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/shellcheck.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/shellcheck.yml) [![tft.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/tft.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/tft.yml) [![tft_citest_bad.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/tft_citest_bad.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/tft_citest_bad.yml) [![woke.yml](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/woke.yml/badge.svg)](https://github.com/linux-system-roles/trustee_attestation_server/actions/workflows/woke.yml)
4-
![trustee_server](https://github.com/linux-system-roles/trustee_server/workflows/tox/badge.svg)
54

6-
An Ansible role that deploys [Trustee](https://confidentialcontainers.org/docs/attestation/) server components for confidential computing. Trustee provides attestation and secret delivery services (KBS, Attestation Service) for workloads running in Trusted Execution Environments (TEEs).
5+
![trustee_attestation_server](https://github.com/linux-system-roles/trustee_attestation_server/workflows/tox/badge.svg)
6+
7+
An Ansible role that deploys [Trustee](https://confidentialcontainers.org/docs/attestation/) server components for confidential computing. Trustee provides attestation and secret delivery services (KBS, AS, RVPS) for workloads running in Trusted Execution Environments (TEEs).
78

89
## Features
910

@@ -21,27 +22,21 @@ An Ansible role that deploys [Trustee](https://confidentialcontainers.org/docs/a
2122
ansible-galaxy collection install -r meta/collection-requirements.yml
2223
```
2324

24-
### Managed node
25-
26-
- Fedora or RHEL 9+
27-
- Podman
28-
- Python 3
29-
3025
## Example Playbook
3126

3227
```yaml
3328
- name: Deploy Trustee Server
3429
hosts: all
3530
vars:
36-
trustee_server_trustee: true
37-
trustee_server_quadlet_repo_url: "https://github.com/litian1992/trustee-quadlet-rhel.git"
38-
trustee_server_quadlet_repo_path: "quadlet"
39-
trustee_server_quadlet_repo_branch: "main"
40-
trustee_server_quadlet_install_dir: "/etc/containers/systemd"
41-
trustee_server_secret_registration_server_enabled: true
42-
trustee_server_secret_registration_listen_port: 8081
31+
trustee_attestation_server_trustee: true
32+
trustee_attestation_server_quadlet_repo_url: "https://github.com/litian1992/trustee-quadlet-rhel.git"
33+
trustee_attestation_server_quadlet_repo_path: "quadlet"
34+
trustee_attestation_server_quadlet_repo_branch: "main"
35+
trustee_attestation_server_quadlet_install_dir: "/etc/containers/systemd"
36+
trustee_attestation_server_secret_registration_enabled: true
37+
trustee_attestation_server_secret_registration_listen_port: 8081
4338
roles:
44-
- linux-system-roles.trustee_server
39+
- linux-system-roles.trustee_attestation_server
4540
```
4641
4742
More examples are in the [`examples/`](examples) directory.
@@ -51,9 +46,9 @@ More examples are in the [`examples/`](examples) directory.
5146
When enabled, the role:
5247

5348
1. Downloads the Podman Quadlets from designated repo
54-
2. Generates all required certficates of Trustee server components
49+
2. Generates all required certificates of Trustee server components
5550
3. Add KBS port 8080 to firewalld
56-
3. Enables the services by default
51+
4. Enables the services by default
5752

5853
Note that KBS listens on port 8080 which may require additional network security allowance depending on your environment.
5954

defaults/main.yml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
# This file also serves as a documentation for such a variables.
55

66
# Trustee Server Components Quadlet repository configuration
7-
trustee_server_trustee: true
8-
trustee_server_quadlet_repo_url: "https://github.com/litian1992/trustee-quadlet-rhel.git"
9-
trustee_server_quadlet_repo_path: "quadlet"
10-
trustee_server_quadlet_repo_branch: "main"
11-
trustee_server_quadlet_install_dir: "/etc/containers/systemd"
7+
trustee_attestation_server_trustee: true
8+
trustee_attestation_server_quadlet_repo_url: "https://github.com/litian1992/trustee-quadlet-rhel.git"
9+
trustee_attestation_server_quadlet_repo_path: "quadlet"
10+
trustee_attestation_server_quadlet_repo_branch: "main"
11+
trustee_attestation_server_quadlet_install_dir: "/etc/containers/systemd"
1212
trustee_attestation_server_config_dir: "/etc/trustee"
13-
1413
# Secret registration server service configuration
15-
trustee_server_secret_registration_server_enabled: false
16-
trustee_server_secret_registration_listen_port: 8081
14+
trustee_attestation_server_secret_registration_enabled: false
15+
trustee_attestation_server_secret_registration_listen_port: 8081

examples/simple.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
- name: Deploy Trustee Server Components using Podman Quadlets from GitHub repository
44
hosts: all
55
vars:
6-
trustee_server_trustee: true
7-
trustee_server_quadlet_repo_url: "https://github.com/litian1992/trustee-quadlet-rhel.git"
8-
trustee_server_quadlet_repo_path: "quadlet"
9-
trustee_server_quadlet_repo_branch: "main"
10-
trustee_server_quadlet_install_dir: "/etc/containers/systemd"
11-
trustee_server_secret_registration_server_enabled: false
6+
trustee_attestation_server_trustee: true
7+
trustee_attestation_server_quadlet_repo_url: "https://github.com/litian1992/trustee-quadlet-rhel.git"
8+
trustee_attestation_server_quadlet_repo_path: "quadlet"
9+
trustee_attestation_server_quadlet_repo_branch: "main"
10+
trustee_attestation_server_quadlet_install_dir: "/etc/containers/systemd"
11+
trustee_attestation_server_secret_registration_enabled: false
1212
roles:
13-
- linux-system-roles.trustee-server
13+
- linux-system-roles.trustee_attestation_server

handlers/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: MIT
22
---
33
- name: Handler for trustee_attestation_server to restart services
4-
service:
4+
ansible.builtin.systemd:
55
name: "{{ item }}"
66
state: restarted
77
enabled: true

plans/README-plans.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,7 @@ You can run tests locally with the `tmt try` cli or remotely in Testing Farm.
4747
$ TESTING_FARM_API_TOKEN=<your_api_token> \
4848
testing-farm request --pipeline-type="tmt-multihost" \
4949
--plan-filter="tag:playbooks_parallel" \
50-
<<<<<<< HEAD
5150
--git-url "https://github.com/<my_user>/trustee_attestation_server" \
52-
=======
53-
--git-url "https://github.com/<my_user>/trustee_server" \
54-
>>>>>>> 4efcd62 (feat(trustee_quadlet): add Trustee quadlet deployment)
5551
--git-ref "<my_branch>" \
5652
--compose CentOS-Stream-9 \
5753
-e "SYSTEM_ROLES_ONLY_TESTS=tests_default.yml" \

tasks/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# Examples of some tasks:
77
- name: Deploy Trustee Server Components using Podman Quadlets
88
include_tasks: trustee_quadlet.yml
9-
when: trustee_server_trustee | bool
9+
when: trustee_attestation_server_trustee | bool
1010

1111
- name: Deploy Secret Registration Server Service
1212
include_tasks: secret_registration_server.yml

tasks/secret_registration_server.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
- name: Ensure secret registration server dependencies are installed
88
ansible.builtin.package:
9-
name: "{{ __trustee_server_secret_registration_packages }}"
9+
name: "{{ __trustee_attestation_server_secret_registration_packages }}"
1010
state: present
11-
use: "{{ (__trustee_server_is_ostree | d(false)) |
11+
use: "{{ (__trustee_attestation_server_is_ostree | d(false)) |
1212
ternary('ansible.posix.rhel_rpm_ostree', omit) }}"
1313

1414
- name: Deploy secret registration server script
@@ -30,7 +30,7 @@
3030

3131
- name: Allow secret registration server port in firewall
3232
ansible.posix.firewalld:
33-
port: "{{ trustee_server_secret_registration_listen_port }}/tcp"
33+
port: "{{ trustee_attestation_server_secret_registration_listen_port }}/tcp"
3434
permanent: true
3535
immediate: true
3636
state: enabled

tasks/set_vars.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
22
- name: Ensure ansible_facts used by role
33
setup:
4-
gather_subset: "{{ __trustee_server_required_facts_subsets }}"
5-
when: __trustee_server_required_facts |
4+
gather_subset: "{{ __trustee_attestation_server_required_facts_subsets }}"
5+
when: __trustee_attestation_server_required_facts |
66
difference(ansible_facts.keys() | list) | length > 0
77

88
- name: Determine if system is ostree and set flag
9-
when: not __trustee_server_is_ostree is defined
9+
when: not __trustee_attestation_server_is_ostree is defined
1010
block:
1111
- name: Check if system is ostree
1212
stat:
@@ -15,7 +15,7 @@
1515

1616
- name: Set flag to indicate system is ostree
1717
set_fact:
18-
__trustee_server_is_ostree: "{{ __ostree_booted_stat.stat.exists }}"
18+
__trustee_attestation_server_is_ostree: "{{ __ostree_booted_stat.stat.exists }}"
1919

2020
- name: Set platform/version specific variables
2121
include_vars: "{{ __vars_file }}"

tasks/trustee_quadlet.yml

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,34 @@
22
---
33
- name: Ensure required packages are installed
44
ansible.builtin.package:
5-
name: "{{ __trustee_server_trustee_packages }}"
5+
name: "{{ __trustee_attestation_server_trustee_packages }}"
66
state: present
7-
use: "{{ (__trustee_server_is_ostree | d(false)) |
7+
use: "{{ (__trustee_attestation_server_is_ostree | d(false)) |
88
ternary('ansible.posix.rhel_rpm_ostree', omit) }}"
99

1010
- name: Ensure quadlet install directory exists
1111
ansible.builtin.file:
12-
path: "{{ trustee_server_quadlet_install_dir }}"
12+
path: "{{ trustee_attestation_server_quadlet_install_dir }}"
1313
state: directory
1414
mode: "0755"
1515

1616
- name: Create a temporary directory for the quadlet repository
1717
ansible.builtin.tempfile:
1818
state: directory
19-
register: __trustee_server_quadlet_repo_dir
19+
register: __trustee_attestation_server_quadlet_repo_dir
2020

2121
- name: Download Trustee Server quadlet files from GitHub repository
2222
ansible.builtin.git:
23-
repo: "{{ trustee_server_quadlet_repo_url }}"
24-
dest: "{{ __trustee_server_quadlet_repo_dir.path }}"
25-
version: "{{ trustee_server_quadlet_repo_branch }}"
23+
repo: "{{ trustee_attestation_server_quadlet_repo_url }}"
24+
dest: "{{ __trustee_attestation_server_quadlet_repo_dir.path }}"
25+
version: "{{ trustee_attestation_server_quadlet_repo_branch }}"
2626
depth: 1
2727
force: true
2828
register: quadlet_repo_download
2929

3030
- name: Find Trustee Server quadlet files in repository
3131
ansible.builtin.find:
32-
paths: "{{ __trustee_server_quadlet_repo_dir.path }}/{{ trustee_server_quadlet_repo_path }}"
32+
paths: "{{ __trustee_attestation_server_quadlet_repo_dir.path }}/{{ trustee_attestation_server_quadlet_repo_path }}"
3333
patterns:
3434
- "*.container"
3535
- "*.volume"
@@ -40,13 +40,13 @@
4040

4141
- name: Fail if no Trustee Server quadlet files found
4242
ansible.builtin.fail:
43-
msg: "No quadlet files found in {{ trustee_server_quadlet_repo_url }}/{{ trustee_server_quadlet_repo_path }}"
43+
msg: "No quadlet files found in {{ trustee_attestation_server_quadlet_repo_url }}/{{ trustee_attestation_server_quadlet_repo_path }}"
4444
when: quadlet_files_found.files | length == 0
4545

4646
- name: Copy Trustee Server quadlet files to install directory
4747
ansible.builtin.copy:
4848
src: "{{ item.path }}"
49-
dest: "{{ trustee_server_quadlet_install_dir }}/{{ item.path | basename }}"
49+
dest: "{{ trustee_attestation_server_quadlet_install_dir }}/{{ item.path | basename }}"
5050
mode: "0644"
5151
remote_src: true
5252
force: true
@@ -55,13 +55,13 @@
5555

5656
- name: Stat repository configs directory
5757
ansible.builtin.stat:
58-
path: "{{ __trustee_server_quadlet_repo_dir.path }}/configs"
58+
path: "{{ __trustee_attestation_server_quadlet_repo_dir.path }}/configs"
5959
register: __repo_configs_dir
6060

6161
- name: Copy Trustee Server config files to config directory
6262
ansible.builtin.copy:
63-
src: "{{ __trustee_server_quadlet_repo_dir.path }}/configs/"
64-
dest: "{{ trustee_attestation_server_config_dir }}/"
63+
src: "{{ __trustee_attestation_server_quadlet_repo_dir.path }}/configs/"
64+
dest: "{{ __trustee_attestation_server_config_dir }}/"
6565
mode: "0644"
6666
remote_src: true
6767
force: true
@@ -70,28 +70,28 @@
7070
- name: Generate certificates for all components
7171
ansible.builtin.shell: |
7272
# Trustee Server SSL
73-
if [ ! -f {{ trustee_attestation_server_config_dir }}/kbs/server.key ] || [ ! -f {{ trustee_attestation_server_config_dir }}/kbs/server.crt ]; then
74-
openssl req -x509 -newkey rsa:2048 -nodes -keyout {{ trustee_attestation_server_config_dir }}/kbs/server.key \
73+
if [ ! -f {{ __trustee_attestation_server_config_dir }}/kbs/server.key ] || [ ! -f {{ __trustee_attestation_server_config_dir }}/kbs/server.crt ]; then
74+
openssl req -x509 -newkey rsa:2048 -nodes -keyout {{ __trustee_attestation_server_config_dir }}/kbs/server.key \
7575
-subj "/CN=$(hostname -f)/O=Red Hat" \
7676
-addext "basicConstraints=CA:FALSE" \
7777
-addext "keyUsage=digitalSignature,keyEncipherment" \
7878
-addext "extendedKeyUsage=serverAuth" \
7979
-addext "subjectAltName=DNS:$(hostname -f)" \
80-
-out {{ trustee_attestation_server_config_dir }}/kbs/server.crt
80+
-out {{ __trustee_attestation_server_config_dir }}/kbs/server.crt
8181
fi
8282
# KBS authentication key pair
83-
if [ ! -f {{ trustee_attestation_server_config_dir }}/kbs/auth.key ] || [ ! -f {{ trustee_attestation_server_config_dir }}/kbs/auth.pub ]; then
84-
openssl genpkey -algorithm ed25519 -out {{ trustee_attestation_server_config_dir }}/kbs/auth.key
85-
openssl pkey -in {{ trustee_attestation_server_config_dir }}/kbs/auth.key -pubout -out {{ trustee_attestation_server_config_dir }}/kbs/auth.pub
83+
if [ ! -f {{ __trustee_attestation_server_config_dir }}/kbs/auth.key ] || [ ! -f {{ __trustee_attestation_server_config_dir }}/kbs/auth.pub ]; then
84+
openssl genpkey -algorithm ed25519 -out {{ __trustee_attestation_server_config_dir }}/kbs/auth.key
85+
openssl pkey -in {{ __trustee_attestation_server_config_dir }}/kbs/auth.key -pubout -out {{ __trustee_attestation_server_config_dir }}/kbs/auth.pub
8686
fi
8787
# Attestation Service token signer key pair
88-
if [ ! -f {{ trustee_attestation_server_config_dir }}/as/token.key ] || [ ! -f {{ trustee_attestation_server_config_dir }}/as/token.crt ]; then
89-
openssl ecparam -name prime256v1 -genkey -noout -out {{ trustee_attestation_server_config_dir }}/as/token.key
90-
openssl req -new -x509 -key {{ trustee_attestation_server_config_dir }}/as/token.key \
91-
-out {{ trustee_attestation_server_config_dir }}/as/token.crt -days 3550 \
88+
if [ ! -f {{ __trustee_attestation_server_config_dir }}/as/token.key ] || [ ! -f {{ __trustee_attestation_server_config_dir }}/as/token.crt ]; then
89+
openssl ecparam -name prime256v1 -genkey -noout -out {{ __trustee_attestation_server_config_dir }}/as/token.key
90+
openssl req -new -x509 -key {{ __trustee_attestation_server_config_dir }}/as/token.key \
91+
-out {{ __trustee_attestation_server_config_dir }}/as/token.crt -days 3550 \
9292
-subj "/CN=as-token-signer/O=Red Hat"
93-
mkdir -p {{ trustee_attestation_server_config_dir }}/kbs/trusted_certs
94-
cp {{ trustee_attestation_server_config_dir }}/as/token.crt {{ trustee_attestation_server_config_dir }}/kbs/trusted_certs/token0.crt
93+
mkdir -p {{ __trustee_attestation_server_config_dir }}/kbs/trusted_certs
94+
cp {{ __trustee_attestation_server_config_dir }}/as/token.crt {{ __trustee_attestation_server_config_dir }}/kbs/trusted_certs/token0.crt
9595
fi
9696
changed_when: true
9797

@@ -108,21 +108,22 @@
108108

109109
- name: Get the installed Trustee Server pod name
110110
ansible.builtin.find:
111-
paths: "{{ trustee_server_quadlet_install_dir }}"
111+
paths: "{{ trustee_attestation_server_quadlet_install_dir }}"
112112
patterns: "*.pod"
113113
register: __trustee_attestation_server_pod_name
114114

115-
- name: Append Trustee Server services to the list of services to restart
116-
set_fact:
117-
__trustee_attestation_server_services: >-
118-
{{ __trustee_attestation_server_services | default([]) + [__trustee_attestation_server_pod_name.files[0].path | basename | replace('.pod', '-pod')] }}
115+
- name: Enable and start Trustee Server services
116+
ansible.builtin.systemd:
117+
name: "{{ __trustee_attestation_server_pod_name.files[0].path | basename | replace('.pod', '-pod.service') }}"
118+
enabled: true
119+
state: restarted
120+
daemon_reload: true
119121
when: __trustee_attestation_server_pod_name.files | length > 0
120-
changed_when: true
121-
notify: Handler for trustee_attestation_server to restart services
122+
failed_when: false
122123

123124
# TODO keep the server.crt and DNS names in the role variables
124125

125126
- name: Clean up temporary repository directory
126127
ansible.builtin.file:
127-
path: "{{ __trustee_server_quadlet_repo_dir.path }}"
128+
path: "{{ __trustee_attestation_server_quadlet_repo_dir.path }}"
128129
state: absent

templates/foo.conf.j2

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# SPDX-License-Identifier: MIT
2+
#
3+
# Example of a trustee_attestation_server of configuration file
4+
#
5+
{{ ansible_managed | comment }}
6+
{{ "system_role:trustee_attestation_server" | comment(prefix="", postfix="") }}
7+
[foo]
8+
foo = {{ trustee_attestation_server_foo }}
9+
bar = {{ trustee_attestation_server_bar }}

0 commit comments

Comments
 (0)