Skip to content

Commit 1bc4873

Browse files
authored
Merge branch 'main' into feat/scs-0102-v2
2 parents 199f36a + 3eaef13 commit 1bc4873

39 files changed

Lines changed: 1141 additions & 984 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ node_modules
77
Tests/kaas/results/
88
Tests/kaas/kaas-sonobuoy-tests/results/
99
*.tar.gz
10+
.direnv

.zuul.d/config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
# a) leave room for long-running tests (mostly when some cloud is unreachable)
5555
# b) keep in mind that this job covers ALL test subjects (at most 4 in parallel)
5656
timeout: 3600
57+
attempts: 2 # usually, retries are not too promising; better to save resources
5758
vars:
5859
preset: iaas
5960
- job:
@@ -63,6 +64,7 @@
6364
# a) these tests take a lot of time, I'm afraid, particularly Sonobuoy
6465
# b) keep in mind that this job covers ALL test subjects (at most 4 in parallel)
6566
timeout: 21600 # 6 hrs -- 5 hrs was almost sufficient (reports came through sometimes)
67+
attempts: 1 # this job is heavy, and retries aren't very promising
6668
vars:
6769
preset: kaas
6870
iaas: false

.zuul.d/secure.yaml

Lines changed: 160 additions & 160 deletions
Large diffs are not rendered by default.
File renamed without changes.

Community-Governance/2026-01-project-board-termin-2026.md renamed to Community-Governance/2026-01-project-board.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Project Board Term 2026
22

3-
Spokesperson:
3+
Spokesperson: Kurt Garloff, @garloff
44

55
| Name, Firstname | Github Handle | E-Mail | Remark |
66
| ----------------------- | -------------- | ----------------------------------- |---------------------------------

Standards/scs-0003-v1-sovereign-cloud-standards-yaml.md

Lines changed: 21 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -86,22 +86,23 @@ While instructive, this view is still a bit simplified. Let's get more precise n
8686
A statement about the subject that can be evaluated unambiguously to be either satisfied or not. The result is either `PASS` or `FAIL`, or—if the test could not be performed—`DNF` (did not finish).
8787
A test case can be as simple as "the subject conforms to standard X", but a standard can also be decomposed into multiple test cases, which can then be reported on (also to the customers) individually.
8888
This latter option has the advantage that we can show explicitly if the subject complies with optional parts of the standard.
89-
3. _Check_:
90-
A script that determines and reports the results of certain test cases. The report is printed to stdout, and each test case is reported as a single line of the form `testcase-id: [PASS/FAIL]`. The result `DNF` is not reported. Lines of other forms are permissible and will be ignored.
91-
We also occasionally extend the concept of _check_ to manual audits.
92-
4. _Module_:
93-
A collection of test cases and corresponding checks, together with additional meta information such as the result lifetime, description, and a list of tags for a test case.
94-
Ultimately, we aim to specify one module for each version of each standard: the module translates the standard into something measurable and, ideally, executable to be used for certification.
95-
5. _Selector (expression)_:
96-
An expression used to select test cases by referring to the tags that must (or must not) be present.
97-
6. _Target_:
98-
A named collection of test cases specified using selector expressions.
89+
3. _Script_:
90+
A script that determines and reports the results of certain test cases,
91+
which are specified with the script, together with additional meta information such as the result lifetime, and a description for each test case.
92+
The report is printed to stdout, and each test case is reported as a single line of the form `testcase-id: [PASS/FAIL/ABORT]`.
93+
Lines of other forms are permissible and will be ignored.
94+
We also occasionally extend the concept of _script_ to manual audits.
95+
4. _Target_:
96+
A named collection of test cases.
9997
Ultimately, the certification of a subject always depends on a designated "main" target; all its test cases must be passed for the certificate to be awarded.
10098
Further targets can be used to report on optional aspects of the certificate, such as particularly good security and encryption measures.
101-
7. _(Certificate-scope) version_:
102-
A collection of modules and a collection of targets, one of them being "main".
99+
5. _Module_:
100+
A collection of targets.
101+
Ultimately, we aim to specify one module for each version of each standard: the module translates the standard into something measurable and, ideally, executable to be used for certification.
102+
6. _(Certificate-scope) version_:
103+
A collection of modules. Like a module, the version has targets, but they are implicitly given by taking the union of the targets of all its modules.
103104
Note that a collection of modules can again be construed as a (larger) module. We opt to use one module per standard version, as mentioned above, in order to make commonalities between certificate-scope versions explicit.
104-
8. _Certificate scope_:
105+
7. _Certificate scope_:
105106
A list of certificate-scope versions.
106107

107108
Having introduced these concepts, we can now get even more precise by defining the actual specification in YAML format.
@@ -120,6 +121,7 @@ The certification YAML _MUST_ contain the following keys:
120121
| `uuid` | String | Universally unique identifier | `d912d0a5-826a-4b01-bafd-b48f65f76f43` |
121122
| `name` | String | Full name of this certificate scope | `SCS-open KaaS` |
122123
| `url` | String | Valid URL to the latest raw version of this document | `https://raw.githubusercontent.com/SovereignCloudStack/standards/main/Tests/scs-open-kaas.yaml` |
124+
| `scripts` | Array of maps | List of script descriptors (described below) | (see below) |
123125
| `modules` | Array of maps | List of module descriptors (described below) | (see below) |
124126
| `timeline` | Array of maps | List of timeline entries (described below) | (see below) |
125127
| `versions` | Array of maps | List of version descriptors (described below) | (see below) |
@@ -154,7 +156,6 @@ then a certificate of that prerequisite scope has to be presented before the cer
154156
| --------------- | ------------- | ------------------------------------------------------------------------------- | ------------------ |
155157
| `version` | String | required: version of the particular list of standards | `v3` |
156158
| `include` | Array | required: list of module ids or include descriptors (see below) | `[scs-0100-v3]` |
157-
| `targets` | Map of maps | required: this maps target names to selector expressions (explained below) | `main: mandatory` |
158159
| `stabilized_at` | Date | ISO formatted date indicating the date after this version is considered stable. | `2022-11-09` |
159160

160161
The ids of the test cases of all the modules specified via `include` MUST be pairwise different.
@@ -172,38 +173,6 @@ Each include may be specified by means of a module id (i.e., a string) or by an
172173

173174
When the referenced module uses parameters, then these parameters must be assigned values here.
174175

175-
#### Selector expressions
176-
177-
In order to define what a selector expression is, we need to define tags, atoms and terms first.
178-
179-
A _tag_ is a string that does not contain any space, comma, forward slash, or exclamation mark.
180-
181-
Examples: `iaas`, `mandatory`, `recommended`, `encryption`.
182-
183-
An _atom_ is a string that is either (i) a tag or (ii) an exclamation mark followed by tag.
184-
A list of tags _satisfies_ the atom if
185-
186-
- the atom is of form (i) and the tag is contained in the list, or
187-
- the atom is of form (ii) and the tag is not contained in the list.
188-
189-
Examples: `mandatory`, `!mandatory`.
190-
191-
A _term_ is a string that is a non-empty list of atoms joined by slashes.
192-
A list of tags _satisfies_ the term if it satisfies at least one of the atoms.
193-
194-
Examples: `mandatory`, `mandatory/recommended`, `!mandatory/encryption`.
195-
196-
A _selector (expression)_ is a string that is a non-empty list of terms joined by space.
197-
A list of tags _satisfies_ the selector if it satisfies all the terms.
198-
199-
Examples: `mandatory`, `iaas mandatory`, `iaas !mandatory/encryption`.
200-
201-
In the map `targets` above, it is possible to specify a list of selectors that are joined by comma.
202-
(Note that this is still a string, not a YAML list.)
203-
A list of tags satisfies this list of selectors if it satisfies at least one of the selectors.
204-
205-
Examples: `mandatory iaas, recommended kaas` (NOT: `[mandatory iaas, recommended kaas]`)
206-
207176
### Module descriptor
208177

209178
| Key | Type | Description | Example |
@@ -212,8 +181,7 @@ Examples: `mandatory iaas, recommended kaas` (NOT: `[mandatory iaas, recommended
212181
| `name` | String | name of this module | `Flavor naming v3` |
213182
| `url` | String | Valid URL to relevant documentation (usually a standard document) | `https://docs.scs.community/standards/scs-0100-v3-flavor-naming` |
214183
| `parameters` | List | List of parameters that the checks in this module might use | `[image_spec]` |
215-
| `run` | Array | List of all checks that should be run; each entry being a check descriptor | (see below) |
216-
| `testcases` | Array | List of all test cases; each entry being a test-case descriptor | (see below) |
184+
| `targets` | Map of lists | required: this maps target names to lists of testcases | `main: [tc1, tc2]` |
217185

218186
The parameters specified here will be added to the variable assignment for all check tools that belong to this module, so they will be substituted in the same way.
219187
The values to these parameters must be provided in the include descriptor as explained above.
@@ -223,13 +191,14 @@ Using parameters offers two advantages:
223191
- they may show up in the automatically generated documentation, whereas the check tools themselves probably won't.
224192
- multiple versions of a standard can be represented using the same module, if everything that changes between versions can be captured by the parameters.
225193

226-
### Check descriptor
194+
### Script descriptor
227195

228-
The following fields are valid for every check descriptor:
196+
The following fields are valid for every script descriptor:
229197

230198
| Key | Type | Description | Example |
231199
| ----------------- | ------ | ---------------------------------------------------------------------------------------------- | ---------- |
232200
| `section` | String | _Optional_ what section to associate this check with (sections can be checked in isolation) | `weekly` |
201+
| `testcases` | Array | List of all test cases; each entry being a test-case descriptor | (see below) |
233202

234203
Additional fields are valid depending on whether the check is automated or manual.
235204

@@ -257,14 +226,12 @@ TBD
257226
| ----------------- | --------------- | ------------------------------------------------------------------------------------------------- | ----------------- |
258227
| `id` | String | Identifier for this test case (immutable and unique within this module) | `image-md-check` |
259228
| `lifetime` | String | One of: `day`, `week` (_default_), `month`, `quarter`, `year` | `day` |
260-
| `tags` | List of strings | A tag is a keyword that will be used to select this test case using a selector expression | `[mandatory]` |
261-
| `description` | String | Short description of the test case | |
229+
| `description` | String | Short description of the test case (markdown allowed, but keep it short for CLI users) | |
230+
| `url` | String | URL pointing to the relevant SCS documentation for the testcase | |
262231

263232
A test result is valid until the end of the next period, except when lifetime is `year`: then the result is
264233
valid until the end of the following month plus one year.
265234

266-
A tag MUST NOT contain any of these characters: space, comma, exclamation mark, forward slash.
267-
268235
The `id` of a test case MUST NOT be changed.
269236
Exceptions MAY be made if the test case is not referenced by any stable version.
270237

Standards/scs-0100-w1-flavor-naming-implementation-testing.md

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -154,30 +154,12 @@ generation `x` for the time being.
154154

155155
## Automated tests
156156

157-
### Errors
158-
159-
The following items MUST be detected and reported as an error:
160-
161-
- any syntax error in a name starting with `SCS-`,
162-
- any mismatch between any immediately discoverable property of a flavor (currently, CPU, RAM and disk size)
163-
and the meaning of its name (which is usually a lower bound), such as the CPU generation or hypervisor.
164-
165-
In addition, the following items MAY be reported as an error:
166-
167-
- any mismatch between any non-immediately discoverable property of flavor and the meaning of its name.
168-
169-
### Warnings
170-
171-
None so far.
172-
173-
### Implementation
174-
175-
We implemented two testcases, paralleling the two items in the "Errors" section above:
157+
The following testcases [are implemented](https://github.com/SovereignCloudStack/standards/tree/main/Tests/iaas/openstack_test.py):
176158

177159
- `scs-0100-syntax-check` ensures that any name starting with `SCS-` adheres to the standard;
178-
- `scs-0100-semantics-check` ensures that any such name is telling the truth as specified in the standard.
179-
180-
These testcases can be checked using [`openstack_test.py`](https://github.com/SovereignCloudStack/standards/tree/main/Tests/iaas/openstack_test.py).
160+
- `scs-0100-semantics-check` ensures that any such name is telling the truth as specified in the standard;
161+
specifically: any immediately discoverable property of a flavor (currently, CPU, RAM and disk size)
162+
matches the meaning of its name (which is usually a lower bound), such as the CPU generation or hypervisor.
181163

182164
## Manual tests
183165

Standards/scs-0101-w1-entropy-implementation-testing.md

Lines changed: 9 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -19,57 +19,26 @@ Only the flavor and image attributes required by the standard have to be set:
1919

2020
## Automated tests
2121

22-
### Images sample
22+
The following testcases [are implemented](https://github.com/SovereignCloudStack/standards/blob/main/Tests/iaas/openstack_test.py):
2323

24-
Some checks need to be performed on a live instance. For these checks, it is
25-
necessary to choose a sample of VM images to test on.
26-
27-
For the time being, the sample MUST contain at least one public image reported
28-
by OpenStack. This may be extended in the future.
29-
30-
### Errors
31-
32-
For every image in the chosen sample, the following items MUST be detected and
33-
reported as an error:
34-
35-
- the service `rngd` is not running,
36-
- the special file `/proc/sys/kernel/random/entropy_avail` does not contain
37-
the value 256 (pinned since kernel 5.18),
38-
- the number of FIPS 140-2 failures exceeds 5 out of 1000 blocks
39-
tested, as determined by `cat /dev/random | rngtest -c 1000` .
24+
- `scs-0101-image-property` ensures that each flavor has the extra spec `hw_rng:allowed=True`,
25+
- `scs-0101-flavor-property` ensures that each public image has the property `hw_rng_model: virtio`,
26+
- `scs-0101-rngd` ensures that the service `rngd` is present on a sample VM,
27+
- `scs-0101-entropy-avail` ensures that the special file `/proc/sys/kernel/random/entropy_avail` contains
28+
the value 256 (pinned since kernel 5.18) on a sample VM,
29+
- `scs-0101-fips-test` ensures that the number of FIPS 140-2 failures is below 5 out of 1000 blocks
30+
tested, as determined by `cat /dev/random | rngtest -c 1000` on a sample VM.
4031

4132
Note: The latter two items act as surrogates for the following item, which
4233
cannot be detected directly:
4334

44-
- CPU instructions for accessing entropy are not available to the VMs.
45-
46-
### Warnings
47-
48-
The following items MUST be detected and reported as a warning:
49-
50-
- any flavor missing the attribute `hw_rng:allowed=True`,
51-
- any image missing the attribute `hw_rng_model: virtio`,
52-
- the number of FIPS 140-2 failures exceeds 3 out of 1000 blocks
53-
tested (compare with errors).
35+
- CPU instructions for accessing entropy are available to the VMs.
5436

5537
Note that the requirement regarding the kernel patch level will not be
5638
checked, because of two reasons: (a) we already check the file `entropy_avail`
5739
(see subsection on Errors), and (b) users can always choose a recent image,
5840
as ensured by the image metadata standard.
5941

60-
### Implementation
61-
62-
We implemented the following testcases that reflect the items in the above section
63-
on automated tests:
64-
65-
- `scs-0101-image-property`,
66-
- `scs-0101-flavor-property`,
67-
- `scs-0101-entropy-avail`,
68-
- `scs-0101-rngd`,
69-
- `scs-0101-fips-test` (covers both the error and warning case).
70-
71-
These testcases can be checked using [`openstack_test.py`](https://github.com/SovereignCloudStack/standards/blob/main/Tests/iaas/openstack_test.py).
72-
7342
## Manual tests
7443

7544
None.

Standards/scs-0102-w1-image-metadata-implementation-testing.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ for these images.
1616

1717
## Automated tests
1818

19-
We implemented a host of testcases to reflect the requirements and recommendations of the standard. The following
20-
testcases ensure that fields have proper values:
19+
We [implemented](https://github.com/SovereignCloudStack/standards/blob/main/Tests/iaas/openstack_test.py)
20+
a host of testcases to reflect the requirements and recommendations of the standard.
21+
22+
The following testcases ensure that fields have proper values:
2123

2224
- `scs-0102-prop-architecture`,
2325
- `scs-0102-prop-hash_algo`,
@@ -43,9 +45,6 @@ The following testcase ensures that each image is as recent as claimed by its `r
4345

4446
- `scs-0102-image-recency`
4547

46-
The script [`openstack_test.py`](https://github.com/SovereignCloudStack/standards/blob/main/Tests/iaas/openstack_test.py)
47-
can be used to check these testcases.
48-
4948
## Manual tests
5049

5150
None.

Standards/scs-0103-w1-standard-flavors-implementation.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@ You can generate input for it using the tool
1717

1818
## Automated tests
1919

20-
We implemented a set of testcases corresponding 1:1 to the standard flavors:
20+
We [implemented](https://github.com/SovereignCloudStack/standards/blob/main/Tests/iaas/openstack_test.py)
21+
a set of testcases corresponding 1:1 to the standard flavors:
2122

2223
- `scs-0103-flavor-X` with varying `X`: ensures that flavor `SCS-X` is present and has the
2324
required `extra_specs`.
2425

2526
_NOTE_: We still need to add testcases to ensure that the `extra_specs` of non-standard
2627
flavors are correct as well.
27-
28-
The testcases can be run using the script
29-
[`openstack_test.py`](https://github.com/SovereignCloudStack/standards/blob/main/Tests/iaas/openstack_test.py).

0 commit comments

Comments
 (0)