Commit graph

269 commits

Author SHA1 Message Date
Lars Karlitski
ea70d9dfc5 blueprint: don't set omitempty for toml groups and modules
The integration tests expect the empty arrays to be there.
2019-12-10 20:21:47 +00:00
Lars Karlitski
0718766fbc weldr: fix reply on compose/info route
composer-cli requires `dependencies.packages` to exist. We can still
leave it empty for now, because it doesn't look at the contents.
2019-12-10 20:21:47 +00:00
Lars Karlitski
b7dac20c74 weldr: add test for blueprint/depsolve route 2019-12-10 20:38:22 +01:00
Lars Karlitski
280a7c3950 distro/rhel82: use latest nightly
Now that osbuild-composer is inserting repository checksums dynamically,
we can use a URL that points to a changing repository.
2019-12-10 20:38:22 +01:00
Lars Karlitski
d3a0b788a2 distro: set the repository checksum dynamically
Instead of having a static repository checksum, set it dynamically from
the metadata that osbuild-composer last saw. This is implemented in
dnf-json, which returns the checksums for each repository on every call.

This enables the use of repositories that change over time, such as
fedora-updates. Note that the osbuild pipeline will break when such a
repository changes. This is intentional: pipelines have to be
reproducible.
2019-12-10 20:38:22 +01:00
Lars Karlitski
75218ad2d9 distro/fedora30: don't include variables in repo URL
Replace those variables with their contents everywhere the repository
URLs are used is error-prone.
2019-12-10 20:38:22 +01:00
Tom Gundersen
0d091decb5 test: add provisional multi-arch support
Currently we still only build for x86_64, but now the test suite is
prepared for hooking up other architectures.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
9bedc0c393 test/run: allow filter on distro
This way we can test the distros on their respective CI, as not
all distros can be built in all environment. In particular RHEL
needs to be on a subscribed host.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
34a4f24141 test/run: print a bit more useful info on test-runs
Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
8c68018d62 test/run: make relative OSBUILD_TEST_STORE consistent
Make it relative to the directory invoking ./run, rather than passing it along.
2019-12-10 02:47:35 +01:00
Tom Gundersen
3adcac0123 test/run: merge boot and non-boot test handling
We can now select specific cases, but whether or not to check image-info
or boot the image is determined purely by the contents of the json test
case.

We still run the tests as two travis workers just to avoid the timeout,
this should clearly be reworked.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
c090ab3812 test/run: drop support for non-pipeline test cases
We were supporting downloading an image and checking its image info. We don't
want to rely on external resources, and we should not test images made by others.

Drop it.
2019-12-10 02:47:35 +01:00
Tom Gundersen
cc04f92997 test/cases: rename json sections
Rename to fit more closely with their use before we add too many more
of these.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
6c44d231ee test/run/nspawn: name the instances differently
We were failing on name reuse. We should be able to not name these
at all, but nspawn is not happy with that.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
82c156ef1b test/cases: boot test the empty blueprint ami image
There should be no need to create a custom blueprint, even the empty one
should boot.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
a7203db963 test/run/qemu: support compressed images
Uncompress, strip the extension and pass to qemu as usual.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
404ad2023d test/run: wait on is-system-running
Once we are connected, wait for the command to return a definitive
result, rather than retry.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
ad7c5bc735 test/run: improve output on ssh retry
We expect to have to retry the ssh connection, so let's print something
less scary when that happens.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
4ec7ac1ecd test/cases: start to unify boot tests with other image tests
We now have three top-level maps, that can be combined in any way:

boot-test: information about how to boot the image
compose: information about how to generate the pipeline
pipeline: the pipeline to generate the image
expected: the expected image-info

This creates compose entries for all the boot tests, but the blueprints
are named 'blueprint-draft', as we are not yet verifynig that the pipeline
is correct.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
49387604e4 test/run: pass cloud-init data to qemu
This passes the redhat user with ssh key as an ISO image to our
qemu instances, making sure images relying on cloud-init rather than
hardcoded user credentials can be used in our tests.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
59ab975fea test: use the standard port for sshd
For the qemu tests this makes no difference as we are anyway forwarding
the ports. But the nspawn tests share the same network namespace between
the image and the ssh client running the test without any forwarding. In
order for that to work we had to modify the image to use a non-standard
port.

We don't want this for two reasons: we want to make sure we test our images
unmodified, and also this meant that when we changed our pipeline generation
we were not verifying that the boot test cases were updated accordingly. As
a result they have now drifted.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Tom Gundersen
79b868d423 test/run: run each test in its own network namespace
This makes sure we can use any port to connect to sshd, without
worrynig about clashes with parallel tests, or an sshd instance
running on the host.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-10 02:47:35 +01:00
Ondřej Budai
6bbc89d5f3 api: implement /compose/delete route 2019-12-10 01:14:36 +01:00
Ondřej Budai
6d15833e4e store: introduce state directory
Prior to this commit outputs directory used by local target was owned by root.
This made impossible for osbuild-composer to delete images. (osbuild-composer
doesn't run as root).

This commit introduces state directory in which osbuild-composer creates
outputs directory. Because this directory is owned by osbuild-composer, it's
able to delete files inside.
2019-12-10 01:14:36 +01:00
Christian Kellner
0cf8a20744 image-info: mount ESP at /boot/efi if found
If we detect a ESP (via its type UUID) remember it and mount it at
any filesystem that has a /boot/efi (there should in theory be
only one). This is needed so grubenv can be read, which is likely
a link from /boot/grub2/grubenv to ../efi/EFI/$vendor/grubenv.
Additionally this will make rpm verify not report that all the efi
binaries are missing, e.g.:
"missing": [
      "/boot/efi/EFI",
      "/boot/efi/EFI/BOOT",
      "/boot/efi/EFI/BOOT/BOOTIA32.EFI",
      "/boot/efi/EFI/BOOT/BOOTX64.EFI",
      "/boot/efi/EFI/BOOT/fbia32.efi",
      "/boot/efi/EFI/BOOT/fbx64.efi",
      "/boot/efi/EFI/fedora",
      "/boot/efi/EFI/fedora",
      ...
2019-12-09 18:08:52 +01:00
Ondřej Budai
4e62f181fa api: implement /compose/logs route
The implementation is just a stub returning always the same tar archive.
The ability to return actual logs will be implemented in the future - osbuild
isn't currently returning any logs.
2019-12-08 00:21:30 +01:00
Ondřej Budai
d7f81b36e6 api: implement /compose/info route
Not everything is implemented in this route but enough to pass the tests.
2019-12-06 10:42:19 +01:00
Ondřej Budai
ad7650384e api: use committed blueprint in POST /compose
lorax-composer apparently doesn't use blueprint from workspace to create a new
compose. This commit implements the same behaviour.
2019-12-05 13:08:50 +01:00
Ondřej Budai
24faab8c18 store: clean up blueprint API
Prior to this commit blueprint getters looked like C-style API with output
parameters. This commit refactors them to more conventional multiple return
values API.
2019-12-05 13:08:50 +01:00
Ondřej Budai
f89a9671be store: add image struct into compose struct
As a part of f4991cb1 ComposeEntry struct was removed from store package.
This change made sense because this struct is connected more with API than
with store - store uses its own Compose struct. In addition, converters
between Compose and ComposeEntry were added. Unfortunately, ComposeEntry
contains ImageSize which was not stored in Compose but retrieved from store
using GetImage method. This made those converters dependent on the store,
which was messy.

To solve this issue this commit adds image struct into Compose struct.
The content of image struct is generated on the worker side - when the worker
sets the compose status to FINISHED, it also sends Image struct with detailed
information about the result.
2019-12-05 09:48:21 +01:00
Lars Karlitski
b2880cacc6 weldr: don't indent toml output
Be consistent with lorax-composer.

The integration tests do a string compare on received toml files.
2019-12-04 19:15:33 +01:00
Lars Karlitski
b1c65bb671 blueprint: tag all struct fields for toml
This is repetitive, but there doesn't seem to be another way to export
lower-case field names.
2019-12-04 19:15:33 +01:00
Lars Karlitski
94bfcc518c weldr: bump blueprint version
According to the same rules as lorax-compposer:

  https://weldr.io/lorax/lorax-composer.html#blueprints
2019-12-04 18:35:18 +01:00
Ondřej Budai
b6307cafd5 api: fix compose routes returning null instead of empty array
Cockpit-composer really doesn't like that
2019-12-03 11:49:35 +01:00
Ondřej Budai
dca7ab2847 api: handle blueprint depsolve error 2019-12-03 11:49:27 +01:00
Lars Karlitski
20bb60f3fd weldr: add support for toml blueprints 2019-12-03 01:27:00 +01:00
Martin Sehnoutka
bddac13048 add makefile targets for rpm build 2019-12-02 13:45:07 +01:00
Tom Gundersen
b21ebf81c8 4
Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-01 00:09:17 +01:00
Tom Gundersen
0217b4b590 test/run: uncompressed raw images before running image-info
Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-12-01 00:05:17 +01:00
Tom Gundersen
e62ba4577a submodule: update to osbulid v6 2019-12-01 00:05:17 +01:00
Lars Karlitski
1c5adfc682 job: use image.raw.xz filename
RHEL and Fedora used different output formats (.ami vs .raw.xz). The job
package assumed `image.ami`, which failed for RHEL.

Change Fedora to use image.raw.xz as well. This makes it consistent, but
we should also get the filename from the distro at some point.
2019-12-01 00:05:17 +01:00
Lars Karlitski
b53d897019 job: set S3 key to compose id
cockpit-composer currently doesn't require setting the S3 key. Set it to
the compose ID if it's empty.
2019-12-01 00:05:17 +01:00
Ondřej Budai
f4991cb1ca api: Add support for upload API
This commit introduces basic support for upload API. Currently, all the routes
required by cockpit-composer are supported (except for /compose/log).

Also, ComposeEntry struct is moved outside of the store package. I decided
to do it because it isn't connected in any way to store, it's more connected
to API. Due to this move there's currently a known bug that image size is
not returned. This should be solved by moving Image struct inside Compose
struct by follow-up PR.
2019-12-01 00:05:17 +01:00
Ondřej Budai
be1cf79d6a test: introduce helpers for go-cmp
This commit introduces three helpers to ignore dates, uuids and paths when
using cmp.diff() method
2019-12-01 00:05:17 +01:00
Ondřej Budai
613b659b95 test: use google cmp library to do the deep reflect
The cmp library has two advantages:

- it shows diffs between compared values
- it allows ignoring fields based on field name or type
2019-12-01 00:05:17 +01:00
Ondřej Budai
268befa435 store: make ListQueue return value more predictable by sorting it
The return value hasn't been predictable prior to this commit. This is
probably caused by internal implementation of Golang map. This commit
fixes it by sorting the output.
2019-12-01 00:05:17 +01:00
Ondřej Budai
7fbe8453ef api: support wildcard /compose/status 2019-12-01 00:05:17 +01:00
Ondřej Budai
df7e14d5eb target: add new fields to target and cleanup
We need some more fields in target struct to support weldr API. This commit
introduces them. Also a bit of cleanup is done.
2019-12-01 00:05:17 +01:00
Martin Sehnoutka
364ea62f59 Introduce Azure upload test
The test is very simple, it first upload a file with random content and
then downloads it back and compare hashes.
2019-11-29 12:19:40 +01:00
Ondřej Budai
91bce12513 add packit 2019-11-29 12:16:27 +01:00