Blame docs/ci.md

80c633
# Testing
15677d
15677d
The CentOS Project has some resources available for each SIG to run some CI jobs/tests for their projects.
15677d
We'll document soon how to get onboarded (on request) on the CentOS CI infra platform.
15677d
73fd19
We offer the following resources :
15677d
15677d
  * Openshift hosted jenkins (one per project/SIG), using usual authentication from FAS/ACO
2521ad
  * bare-metal and/or Virtual Machines ephemeral nodes on which you can run some tests (including destructive ones), that will be automatically be reinstalled (for bare-metal) or discarded (for VMs) - aka `Duffy` 
f8ca97
f8ca97
2521ad
## Openshift
2521ad
2521ad
2521ad
2521ad
## Duffy (ephemeral bare-metal/Virtual Machines provider)
2521ad
f8ca97
Duffy is the middle layer running ci.centos.org that manages the provisioning, maintenance and teardown / rebuild of the Nodes (physical hardware and VMs) that are used to run the tests in the CI Cluster.
f8ca97
2521ad
We provide both bare-metal and VMs and support the following architectures :
2521ad
2521ad
  * x86_64 (both physical and VMs)
2521ad
  * aarch64 (both physical and VMs)
2521ad
  * ppc64le (only VMs on Power 8 or Power 9 but supporting nested virtualization)
2521ad
2521ad
To be able to request ephemeral nodes to run your tests, you'll need both your `project` name and `api key` that will be generated for you once your project will have be allowed on that Infra.
2521ad
2521ad
!!! note
2521ad
    It's worth knowing that there are quotas in place to ensure that you can't request infinite number of nodes in parallel and each `session` has a maximum lifetime of 6h. After that your nodes are automatically reclaimed by Duffy and are freshly reinstalled and put back in the Ready pool.
2521ad
2521ad
!!! warning
ef03d2
    The following notes are only applicable for new Duffy v3 API that will be available around August 2022. Previous `cico client` will continue to work on actual Duffy v2 instance for the time being
2521ad
2521ad
f8ca97
### Installing and configuring duffy client
2521ad
Use `pip` (or `pip3.8` on el8) to install duffy client.
f8ca97
f8ca97
```shell
f8ca97
pip install --user duffy[client]
f8ca97
```
f8ca97
f8ca97
Duffy client needs the tenant's name and the tenant's API key to be able to request sessions from duffy server. If the tenant doesn't exist yet, it should be created in duffy server. Having the tenant's name and the tenant's API key, create the file `.config/duffy` with the following content. 
f8ca97
f8ca97
```
f8ca97
client:
f8ca97
  url: https://duffy.ci.centos.org/api/v1
f8ca97
  auth:
f8ca97
    name: <tenant name>
f8ca97
    key: <API key>
f8ca97
```
f8ca97
f8ca97
### Requesting a session
f8ca97
Before creating a session, the name of the pool is required. Check the pool available executing the command.
f8ca97
f8ca97
```shell
f8ca97
duffy client list-pools
f8ca97
```
f8ca97
f8ca97
!!! note
f8ca97
    The name of the pool is structured like this: 
f8ca97
f8ca97
    `<AAA>-<BBB>-<CCC>-<DDD>-<EEE>-<FFF>`
f8ca97
f8ca97
    - AAA: Identify if it is a bare metal or virtual machine
ef03d2
    - BBB: The kind of the instance, like seamicro bare-metal, AWS EC2, etc
ef03d2
    - CCC: The machine flavor type
ef03d2
    - DDD: Operating System (CentOS|Fedora)
ef03d2
    - EEE: OS version
ef03d2
    - FFF: architecture (x86_64|aarch64|ppc64le)
f8ca97
f8ca97
f8ca97
Having the name of the pool, request how many sessions needed. Duffy has a limit of sessions per tenant, this information is available in the duffy server.
f8ca97
ef03d2
Worth knowing that one can also see current pool usage and machines in `ready` state, etc, by querying specific pool. Example:
ef03d2
ef03d2
```
ef03d2
duffy client show-pool virt-ec2-t2-centos-9s-x86_64
ef03d2
{
ef03d2
  "action": "get",
ef03d2
  "pool": {
ef03d2
    "name": "virt-ec2-t2-centos-9s-x86_64",
ef03d2
    "fill_level": 5,
ef03d2
    "levels": {
ef03d2
      "provisioning": 0,
ef03d2
      "ready": 5,
ef03d2
      "contextualizing": 0,
ef03d2
      "deployed": 0,
ef03d2
      "deprovisioning": 0
ef03d2
    }
ef03d2
  }
ef03d2
}
ef03d2
ef03d2
```
ef03d2
ef03d2
To then request some nodes from a pool one can use the following duffy call : 
ef03d2
f8ca97
```shell
ef03d2
duffy client request-session pool=<name of the pool>,quantity=<number of machines to get>
f8ca97
``` 
f8ca97
f8ca97
By default this command outputs a _json_, but it's possible to change the format to _yaml_ or _flat_ using `--format`. Under "node" key it's possible to find the node's hostname provisioned. Log in to it as `root` user, using `ssh`.
f8ca97
f8ca97
```json
f8ca97
{
f8ca97
<...output ommited...>
f8ca97
f8ca97
"nodes": [
f8ca97
    {
f8ca97
        "hostname": "<hostname>",
f8ca97
        "ipaddr": "<ip address>",
f8ca97
f8ca97
<...output ommited...>
f8ca97
}
f8ca97
```
f8ca97
f8ca97
### Retiring a session
2521ad
2521ad
At the end of the test, you should "return" your ephemeral nodes to Duffy API service. This will trigger either a reinstall of the physical node (through kickstart) or just discarding/terminating it (if that's a cloud instance)
2521ad
f8ca97
To retire a session, the session id is required. Check the id executing.
f8ca97
f8ca97
```shell
f8ca97
duffy client list-sessions
f8ca97
```
f8ca97
f8ca97
When needed to retire the session execute the command.
f8ca97
f8ca97
```shell
f8ca97
duffy client retire-session <session id>
f8ca97
```