Commit Graph
6728 Commits
Author SHA1 Message Date
Sébastien Han 48978f9919 Merge pull request #7692 from leseb/reset-rnote
docs: reset the pending release notes
2021-04-20 09:20:38 +02:00
Sébastien Han 4c21e5b7c4 docs: reset the pending release notes
Since the v1.6 release is completed, reset the pending release notes
for v1.7.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-20 09:15:35 +02:00
Sébastien Han 96945a539e Merge pull request #7681 from leseb/fix-mds-flag-on-upgrade
ceph: always apply config flags for mds and rgw
2021-04-20 08:31:12 +02:00
Travis Nielsen ec9f1b57b4 Merge pull request #7683 from leseb/fix-crd-unknow-field
ceph: preserve volume claim template metadata in schema
2021-04-19 12:13:59 -06:00
Travis Nielsen 12c9fb1a80 Merge pull request #7595 from leseb/always-run-actios
ci: always run all the actions
2021-04-19 11:40:54 -06:00
Sébastien Han 21d6001ed2 ceph: preserve volume claim template metadata in schema
The schema generation was not generating the metadata properties
under the VolumeClaimTemplate type, resulting in the properties being
ignored by the api server. The preserve unknown fields tag was
not working recursively on the volumeClaimTemplates since the subtypes
were defined. Now we post-process the schema so we can preserve
the unknown fields for the volume claim templates metadata.

We now use 'yq' to hot-fix the CRDs, the only 'downside' is that 'yq'
will not preserve the existing formatting, this is a known problem:

https://github.com/mikefarah/yq/issues/465

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-19 19:03:13 +02:00
Sébastien Han 341aefc95d ceph: revert "ceph: preserve volume claim template metadata in schema"
This reverts commit a9fb9d20bb. During the
CSV generation we strip the description lines from the CRD spec, however
the 'sed' command relies on the 'descrition' section to operate. Next
commit will fix this.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-19 19:01:13 +02:00
Sébastien Han ca1cf6672e ceph: always apply config flags for mds and rgw
We now always set the config flags on reconcile. Previously we were
looking for non-existing rgw or mds which means that on upgrade we would
never set those flags. However, we want to set those flags on "old"
cluster that got upgraded.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-19 17:39:43 +02:00
Sébastien Han 6a33395c4a ci: separate PR and release/master branch push into different files
We now have a single file with all the integration test that will run
when code is pushed to a release branch or merged in master.

Also, we have separate files with integration tests that run on pull
requests against master or a release branch.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-19 12:43:31 +02:00
Sébastien Han 5a7f405010 ci: remove the build action
This action is not needed anymore since other actions build already.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-19 12:41:47 +02:00
Sébastien Han aecec6f870 ci: only run cassandra job on cassandra code
Only run the cassandra integration if the PR involves cassandra, has the
"cassandra" label on it.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-19 12:41:47 +02:00
Sébastien Han 8c95ac2880 bot: auto-label cassandra pull requests
Just like ceph if a PR title starts with "cassandra" let's add the
"cassandra" label to it.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-19 12:41:47 +02:00
Sébastien Han f4cfc7a03d Merge pull request #7678 from alrs/ceph-osd-imports
ceph: fix multiple imports
2021-04-19 10:25:58 +02:00
Lars Lehtonen bb323de403 ceph: fix multiple imports
This mops up the last of the multiple-imports within ceph-related
packages, in pkg/daemon/ceph/agent/flexvolume/manager/ceph and
pkg/daemon/ceph/osd.

Signed-off-by: Lars Lehtonen <lars.lehtonen@gmail.com>
2021-04-19 00:06:10 -07:00
Blaine Gardner d3b094710a Merge pull request #7663 from BlaineEXE/radosgw-admin-omap-message-info-to-debug
ceph: change radosgw-admin workaround log to debug
2021-04-16 14:19:11 -06:00
Travis Nielsen 157d342330 Merge pull request #7662 from travisn/pool-size-min
ceph: Allow pool replica min size 0 for EC pools
2021-04-16 13:40:34 -06:00
Travis Nielsen 9da066eb3f ceph: allow pool replica min size 0 for EC pools
In v1.6 EC pools are being disallowed by the schema since the minimum
is set to 1 on the replicated.size. We expect the replicated.size to be
0 if an EC pool is being created.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2021-04-16 12:53:07 -06:00
Blaine Gardner 8aef8b756d ceph: change radosgw-admin workaround log to debug
Signed-off-by: Blaine Gardner <blaine.gardner@redhat.com>
2021-04-16 12:51:54 -06:00
Blaine Gardner 382775a61c Merge pull request #7664 from BlaineEXE/fix-unit-tests
test: do not allow go.test parallel dependencies
2021-04-16 12:51:05 -06:00
Blaine Gardner a818a01a13 test: do not allow go.test parallel dependencies
Dependencies for `make go.test` have to run in order, so call them
explicitly from the target rather than allowing them to be done in
parallel if `make -j` flag is used.

Signed-off-by: Blaine Gardner <blaine.gardner@redhat.com>
2021-04-16 12:24:39 -06:00
Travis Nielsen 432e42e04a Merge pull request #7650 from BlaineEXE/go-mod-vendor-on-each-build
build: run 'go mod vendor' on each build
2021-04-15 16:32:19 -06:00
Blaine Gardner 37b31a7c5e build: run 'go mod vendor' on each build
CI fails on builds warning with the warning below

    [2021-04-15T14:15:28.461Z] go: inconsistent vendoring in /home/rook/go/src/github.com/rook/rook:
    [2021-04-15T14:15:28.461Z] 	github.com/jstemmer/go-junit-report@v0.9.1: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt

Fix this by running `go mod vendor` before each build.

Signed-off-by: Blaine Gardner <blaine.gardner@redhat.com>
2021-04-15 16:11:59 -06:00
Travis Nielsen 711e16ff9f Merge pull request #7403 from bipuladh/add-sidecar
ceph: Add support for volume replication controller sidecar in Rook
2021-04-15 10:52:37 -06:00
bipuladh 7d5cc8d06b ceph: adds a container to support volume replication controller
this commit adds a new container inside of rbd-provisioner.

Signed-off-by: bipuladh <badhikar@redhat.com>
2021-04-15 21:39:26 +05:30
Travis Nielsen 78bfcacacd Merge pull request #7637 from Madhu-1/ceph-csi-release-3.3
ceph: update csi image to v3.3.0
2021-04-15 09:42:42 -06:00
Sébastien Han 9df2af573c Merge pull request #7630 from BlaineEXE/do-not-reconcile-on-keyring-secret-changes
ceph: redact secret info from reconcile diffs
2021-04-15 16:46:42 +02:00
Blaine Gardner 9d657f464c ceph: redact secret info from reconcile diffs
To avoid logging sensitive information, do not output diffs from secrets
when reconciling resources.

Signed-off-by: Blaine Gardner <blaine.gardner@redhat.com>
2021-04-15 08:14:34 -06:00
Madhu Rajanna fd28e48664 ceph: update csi image to v3.3.0
as we are having v3.3.0 cephcsi latest release
updating the cephcsi image to the same.

Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
2021-04-15 19:36:31 +05:30
Travis Nielsen 4c02a344af Merge pull request #7552 from subhamkrai/dashboard
ceph: update ceph dashboard credential command
2021-04-15 07:49:02 -06:00
Sébastien Han 9416e52250 Merge pull request #7619 from leseb/add-vol-rep-crds
ceph: add volume replication crds
2021-04-15 15:15:02 +02:00
subhamkrai bc48dad19a ceph: update rgw ceph dashboard command
in the latest ceph releases, there are few
changes in accessing the rgw ceph dashboard
command. This commit updates the commands.

old commands
```
$ ceph dashboard set-rgw-api-access-key <access_key>
$ ceph dashboard set-rgw-api-secret-key <secret_key>
```
new commands
```
$ ceph dashboard set-rgw-api-access-key -i <file-containing-access-key>
$ ceph dashboard set-rgw-api-secret-key -i <file-containing-secret-key>
```

Signed-off-by: subhamkrai <srai@redhat.com>
2021-04-15 17:32:46 +05:30
subhamkrai 4eb08bb508 ceph: remove unnecessary use of formating
remove unnecessary use of formating.

Signed-off-by: subhamkrai <srai@redhat.com>
2021-04-15 17:32:46 +05:30
subhamkrai 30cc7c7eb6 ceph: update ceph dashboard credential command
in the latest ceph releases, there are
few changes in ceph commands to access
ceph dashboard. This commit update
ceph dashboard credentials command.

Older command
```
ceph dashboard set-login-credentials <username> <password>
```
New command
```
ceph dashboard ac-user-create <username> -i <file-containing-password> administrator
```

Signed-off-by: subhamkrai <srai@redhat.com>
2021-04-15 17:32:37 +05:30
Sébastien Han 83a44ae4df ceph: add volume replication crds
With the help of https://github.com/rook/rook/pull/7403/, rook will soon
integrate the volume replication controller as a side-car. Thus Rook
needs to inject the new CRDs.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-15 13:18:13 +02:00
Sébastien Han b6eea0cb33 Merge pull request #7622 from leseb/rgw-single-deployment
ceph: use replicaset instead of deployments for rgw instances
2021-04-15 09:43:55 +02:00
Sébastien Han 274447c539 ceph: add anti-affinity rules to rgw pods
Ensure in the default examples that gateways will run on different
nodes.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-15 08:53:00 +02:00
Travis Nielsen 76902a9775 Merge pull request #7601 from yanniszark/feature-fix-cassandra-integration-tests
cassandra: Fix flaky Cassandra integration tests
2021-04-14 22:23:23 -06:00
Travis Nielsen d887ba2ed3 Merge pull request #7632 from travisn/preserve-deviceset-metadata
ceph: Preserve volume claim template metadata in schema
2021-04-14 22:21:32 -06:00
Travis Nielsen a9fb9d20bb ceph: preserve volume claim template metadata in schema
The schema generation was not generating the metadata properties
under the VolumeClaimTemplate type, resulting in the properties being
ignored by the api server. The preserve unknown fields tag was
not working recursively on the volumeClaimTemplates since the subtypes
were defined. Now we post-process the schema so we can preserve
the unknown fields for the volume claim templates metadata.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2021-04-14 21:41:12 -06:00
Travis Nielsen b9cfddbaa7 ceph: fail osd creation if duplicate metadata section
The metadata name must be unique for a storageClassDeviceSet since
only one each of the sections data, metadata, and wal can be specified.

Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
2021-04-14 15:21:04 -06:00
Yannis Zarkadas 760e81edba test: skip cassandra integration test in jenkins
Signed-off-by: Yannis Zarkadas <yanniszark@arrikto.com>
2021-04-14 22:03:02 +03:00
Yannis Zarkadas e3c747db47 test: add GitHub Action for Cassandra integration test
Signed-off-by: Yannis Zarkadas <yanniszark@arrikto.com>
2021-04-14 22:03:02 +03:00
Yannis Zarkadas a004942f0b cassandra: fix integration test waiting logic
The integration test for Cassandra waited for Pods to become Running
before trying to connect to the Cassandra cluster. However, the check
should be that the cluster is Ready, not that the container state is Running.

If we only check for the Running state, we bump into a scenario where:
- The Cassandra container has started (thus is in Running state)
- The Cassandra server has not stated yet

and then tests will fail.

Signed-off-by: Yannis Zarkadas <yanniszark@arrikto.com>
2021-04-14 21:40:50 +03:00
Yannis Zarkadas c40a116110 cassandra: add missing sidecar permissions to testing manifests
Signed-off-by: Yannis Zarkadas <yanniszark@arrikto.com>
2021-04-14 21:40:50 +03:00
Yannis Zarkadas b71f1077b5 test: replace in-house config loader for controller-runtime's
Rook's testing utilities include a function for loading the default
kubeconfig for a cluster. This function requires maintainance effort and
also doesn't support authentication methods like Basic Authentication.
Instead of adding support for it, drop the config loader and use the one
provided by the controller-runtime library.

Signed-off-by: Yannis Zarkadas <yanniszark@arrikto.com>
2021-04-14 21:40:50 +03:00
Travis Nielsen b2b54f187f Merge pull request #7618 from alrs/ceph-cluster-imports
ceph: pkg/operator/ceph/cluster double imports
2021-04-14 10:32:42 -06:00
Travis Nielsen 189a867636 Merge pull request #7521 from chienfuchen32/patch-1
ceph: update Kubernetes registry link in CephFS document
2021-04-14 10:22:31 -06:00
Sébastien Han 1d52811902 Merge pull request #7621 from leseb/skip-ci
ci: ability to skip ci with a label
2021-04-14 15:41:46 +02:00
Sébastien Han 20c302f72d ceph: use replicaset instead of deployments for rgw instances
Since Pacific, we can deploy multiple object gateway using the same
keying and they will appear in the service map separetly. So from now on
and on upgrades to Pacific Rook will remove all extra deployments to
only keep 1. In this single deployment the number of replica will be set
the desired `instances` count from the CRD spec.

You will now see gateways like this on Pacific:

```
rgw: 3 daemons active (1 hosts, 1 zones)
```

See an upgrade operator logs from Octopus to Pacific:

```
2021-04-14 10:05:16.883145 I | ceph-object-controller: setting multisite settings for object store "my-store"
2021-04-14 10:05:17.006492 I | ceph-object-controller: Multisite for object-store: realm=my-store, zonegroup=my-store, zone=my-store
2021-04-14 10:05:17.006516 I | ceph-object-controller: multisite configuration for object-store my-store is complete
2021-04-14 10:05:17.006523 I | ceph-object-controller: creating object store "my-store" in namespace "rook-ceph"
2021-04-14 10:05:17.006533 I | cephclient: getting or creating ceph auth key "client.rgw.my.store.a"
2021-04-14 10:05:17.298176 I | ceph-object-controller: object store "my-store" deployment "rook-ceph-rgw-my-store-a" started
2021-04-14 10:05:17.307913 I | ceph-object-controller: object store "my-store" deployment "rook-ceph-rgw-my-store-a" already exists. updating if needed
2021-04-14 10:05:17.317441 I | op-k8sutil: updating deployment "rook-ceph-rgw-my-store-a" after verifying it is safe to stop
2021-04-14 10:05:17.317463 I | op-mon: checking if we can stop the deployment rook-ceph-rgw-my-store-a
2021-04-14 10:05:25.552648 I | op-k8sutil: finished waiting for updated deployment "rook-ceph-mgr-a"
2021-04-14 10:05:25.552662 I | op-mon: checking if we can continue the deployment rook-ceph-mgr-a
2021-04-14 10:05:25.555077 I | op-mgr: setting services to point to mgr "a"
2021-04-14 10:05:25.608535 I | op-osd: start running osds in namespace "rook-ceph"
2021-04-14 10:05:25.608587 I | op-osd: wait timeout for healthy OSDs during upgrade or restart is "10m0s"
2021-04-14 10:05:25.618392 I | op-osd: start provisioning the OSDs on PVCs, if needed
2021-04-14 10:05:25.620512 I | op-osd: no storageClassDeviceSets or volumeSources are defined to configure OSDs on PVCs
2021-04-14 10:05:25.620542 I | op-osd: start provisioning the OSDs on nodes, if needed
2021-04-14 10:05:25.628416 I | op-osd: 1 of the 1 storage nodes are valid
2021-04-14 10:05:25.760702 I | op-k8sutil: Removing previous job rook-ceph-osd-prepare-minikube to start a new one
2021-04-14 10:05:25.773213 I | op-k8sutil: batch job rook-ceph-osd-prepare-minikube still exists
2021-04-14 10:05:26.595673 I | op-mgr: successful modules: prometheus
2021-04-14 10:05:27.129569 I | op-mgr: successful modules: mgr module(s) from the spec
2021-04-14 10:05:27.776720 I | op-k8sutil: batch job rook-ceph-osd-prepare-minikube deleted
2021-04-14 10:05:27.781881 I | op-osd: started OSD provisioning job for node "minikube"
2021-04-14 10:05:27.786693 I | op-osd: OSD orchestration status for node minikube is "starting"
2021-04-14 10:05:28.617937 I | op-mgr: successful modules: balancer
2021-04-14 10:05:28.706307 W | cephclient: all OSDs are running on the same host. not performing upgrade check. running in best-effort
2021-04-14 10:05:28.710245 I | op-osd: updating OSD 0 on node "minikube"
2021-04-14 10:05:31.596511 I | op-mgr: the dashboard secret was already generated
2021-04-14 10:05:31.926125 I | op-mgr: setting ceph dashboard "admin" login creds
2021-04-14 10:05:32.190343 E | op-mgr: failed modules: "dashboard". failed to initialize dashboard: failed to set login credentials for the ceph dashboard: failed to set login creds on mgr: failed to complete command for set dashboard creds: Invalid command: unused arguments: ["P.c(b6V$0pfK#)'70c5z"]
dashboard set-login-credentials <username> :  Set the login credentials. Password read from -i <file>
Traceback (most recent call last):
  File "/usr/bin/ceph", line 1310, in <module>
    retval = main()
  File "/usr/bin/ceph", line 1256, in main
    outf.write(outbuf)
TypeError: a bytes-like object is required, not 'str'
.
2021-04-14 10:05:35.665419 I | op-k8sutil: finished waiting for updated deployment "rook-ceph-rgw-my-store-a"
2021-04-14 10:05:35.665553 I | op-mon: checking if we can continue the deployment rook-ceph-rgw-my-store-a
2021-04-14 10:05:35.675293 I | ceph-object-controller: config map "rook-ceph-rgw-my-store-mime-types" for object store "my-store" already exists, not overwriting
2021-04-14 10:05:35.691549 I | ceph-object-controller: found more rgw deployments 3 than desired 3 in object store "my-store", scaling down
2021-04-14 10:05:35.691580 I | op-k8sutil: removing deployment rook-ceph-rgw-my-store-c if it exists
2021-04-14 10:05:35.698382 I | op-k8sutil: Removed deployment rook-ceph-rgw-my-store-c
2021-04-14 10:05:35.704568 I | op-k8sutil: "rook-ceph-rgw-my-store-c" still found. waiting...
2021-04-14 10:05:44.881129 I | op-osd: OSD orchestration status for node minikube is "orchestrating"
2021-04-14 10:05:44.882149 I | op-osd: OSD orchestration status for node minikube is "completed"
2021-04-14 10:05:45.756762 I | op-k8sutil: "rook-ceph-rgw-my-store-c" still found. waiting...
2021-04-14 10:05:45.782039 W | cephclient: all OSDs are running on the same host. not performing upgrade check. running in best-effort
2021-04-14 10:05:45.785188 I | op-osd: updating OSD 1 on node "minikube"
2021-04-14 10:05:54.768851 W | cephclient: all OSDs are running on the same host. not performing upgrade check. running in best-effort
2021-04-14 10:05:54.773191 I | op-osd: updating OSD 2 on node "minikube"
2021-04-14 10:05:55.843879 I | op-k8sutil: "rook-ceph-rgw-my-store-c" still found. waiting...
2021-04-14 10:06:05.255136 I | op-osd: finished running OSDs in namespace "rook-ceph"
2021-04-14 10:06:05.255155 I | ceph-cluster-controller: done reconciling ceph cluster in namespace "rook-ceph"
2021-04-14 10:06:05.560201 W | ceph-cluster-controller: upgrade orchestration completed but somehow we still have more than one Ceph version running. map[ceph version 15.2.9 (357616cbf726abb779ca75a551e8d02568e15b17) octopus (stable):3 ceph version 16.2.0 (0c2054e95bcd9b30fdd908a79ac1d8bbc3394442) pacific (stable):6]:
2021-04-14 10:06:05.885001 I | op-k8sutil: "rook-ceph-rgw-my-store-c" still found. waiting...
2021-04-14 10:06:08.321209 I | exec: timeout waiting for process radosgw-admin to return. Sending interrupt signal to the process
2021-04-14 10:06:10.645672 I | ceph-spec: object "rook-ceph-rgw-my-store-c" matched on delete, reconciling
2021-04-14 10:06:11.940994 I | op-k8sutil: confirmed rook-ceph-rgw-my-store-c does not exist
2021-04-14 10:06:11.972935 I | ceph-spec: object "rook-ceph-rgw-my-store-c-keyring" matched on delete, reconciling
2021-04-14 10:06:11.974394 I | ceph-object-controller: deleting rgw CephX key and configuration in centralized mon database for "rook-ceph-rgw-my-store-c"
2021-04-14 10:06:13.721964 I | ceph-object-controller: successfully deleted rgw config for "client.rgw.my.store.c" in mon configuration database
2021-04-14 10:06:13.721989 I | cephclient: deleting ceph auth "client.rgw.my.store.c"
2021-04-14 10:06:14.073700 I | ceph-object-controller: completed deleting rgw CephX key and configuration in centralized mon database for "rook-ceph-rgw-my-store-c"
2021-04-14 10:06:14.073724 I | op-k8sutil: removing deployment rook-ceph-rgw-my-store-b if it exists
2021-04-14 10:06:14.083950 I | op-k8sutil: Removed deployment rook-ceph-rgw-my-store-b
2021-04-14 10:06:14.090226 I | op-k8sutil: "rook-ceph-rgw-my-store-b" still found. waiting...
2021-04-14 10:06:24.174846 I | op-k8sutil: "rook-ceph-rgw-my-store-b" still found. waiting...
2021-04-14 10:06:30.505574 I | ceph-spec: object "rook-ceph-rgw-my-store-b" matched on delete, reconciling
2021-04-14 10:06:32.201263 I | op-k8sutil: confirmed rook-ceph-rgw-my-store-b does not exist
2021-04-14 10:06:32.219559 I | ceph-object-controller: deleting rgw CephX key and configuration in centralized mon database for "rook-ceph-rgw-my-store-b"
2021-04-14 10:06:32.220219 I | ceph-spec: object "rook-ceph-rgw-my-store-b-keyring" matched on delete, reconciling
2021-04-14 10:06:33.821969 I | ceph-object-controller: successfully deleted rgw config for "client.rgw.my.store.b" in mon configuration database
2021-04-14 10:06:33.821992 I | cephclient: deleting ceph auth "client.rgw.my.store.b"
2021-04-14 10:06:34.182091 I | ceph-object-controller: completed deleting rgw CephX key and configuration in centralized mon database for "rook-ceph-rgw-my-store-b"
2021-04-14 10:06:34.188659 I | ceph-object-controller: successfully scaled down rgw deployments to 1 in object store "my-store"
2021-04-14 10:06:34.188676 I | ceph-object-controller: enabling rgw dashboard
2021-04-14 10:06:49.487902 I | exec: timeout waiting for process radosgw-admin to return. Sending interrupt signal to the process
2021-04-14 10:06:49.494605 W | ceph-object-controller: failed to enable dashboard for rgw. failed to create user "dashboard-admin": failed to create s3 user: signal: interrupt
2021-04-14 10:06:49.494676 I | ceph-object-controller: created object store "my-store" in namespace "rook-ceph"
```

Running pods:

```
...
...
rook-ceph-rgw-my-store-a-6756bdbbd4-7265v            1/1     Running     1          41m
rook-ceph-rgw-my-store-a-6756bdbbd4-l5ccr            1/1     Running     1          41m
rook-ceph-rgw-my-store-a-6756bdbbd4-m679c            1/1     Running     1          41m
...
...
```

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-14 13:38:29 +02:00
Sébastien Han 01ad7afe53 ci: ability to skip ci with a label
Additionally to skip ci tag in the commit message from https://github.blog/changelog/2021-02-08-github-actions-skip-pull-request-and-push-workflows-with-skip-ci/
We can now skip integration tests by applying the "skip-ci" label at the
**creation time** of the PR. Obviously adding later works but will still
trigger the test in the initial opening of the PR. Subsequent pushes
will skip integration tests.

Signed-off-by: Sébastien Han <seb@redhat.com>
2021-04-14 12:17:34 +02:00