Commit graph

7242 commits

Author SHA1 Message Date
Tom Gundersen
7f5c869cd2 upload/aws: add a sample AWS upload client
This commandline tools uploads a file to S3, as a proof of concept.

All options are mandatory. Credentials are only read from the
commandline and not from the environment or configuration files.

The next step is to add support for importing from S3 to EC2,
currently the images we produce cannot be imported as-is, so this
requires more research.

To try this out: create an S3 bucket, get your credentials and
call the tool, passing any value as `key`. Note that if the key
already exists, it will be overwritten.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-26 01:05:34 +01:00
Martin Sehnoutka
78ea0e0b6f Introduce Azure upload CLI utility
It uses Azure SDK to connect to Azure storage, creates a container there
and uploads the image. Unfortunately the API for page blobs does not
include some thread pool for upload so I implemented one myself. The
performance can be tweaked using the upload chunk size and number of
parallel threads.

The package is prepared to be refactored into common module within
internals package as soon as we agree on the of these common packages
for image upload.

Add azure-blob-storage rpm package as a dependency

It didn't work for me using the `golang(package)` syntax. Using the
package name explicitly works.
2019-11-25 17:10:11 +01:00
Martin Sehnoutka
4910cd18e3 change image size to fulfill Azure requirements
the hardcoded image size is now aligned to 1MB, because Azure requires
it: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/create-upload-generic

once we make the size configurable, we should make sure the alignment
stays the same

fix test cases to reflect new image size
2019-11-25 17:06:32 +01:00
Martin Sehnoutka
ea73597c5d use vpc type in call to qemu-img for vhd images
vhd images currently use qcow2 format, because osbuild does not support
vpc yet, but it should land soon in related PR
2019-11-25 17:06:32 +01:00
Tom Gundersen
e98b189b82 targets: add dummy azure and aws targets
These are not currently implemented in the backend, but shows how
the API will look like.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-25 07:53:50 +01:00
Tom Gundersen
283e89d0f4 distros/f30/ami: image type should be RAW
This was accidentally left as QCOW2.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-24 17:43:00 +01:00
Tom Gundersen
eee08c41ac image-info: support images with empty partitions
Official RHEL EC2 images come with an empty partition, simply ignore
it rather than fail.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-24 17:43:00 +01:00
Ondřej Budai
e73b43162d api: add basic support for v1 api
lorax-composer recently introduced API version 1. This commit introduces
very basic support for it. This implementation tries to deduplicate code
for routes with the same behaviour as much as possible. All the differences of
v1 API are marked as TODOs for now and will be implemented in follow-ups PRs.
2019-11-22 14:36:05 +01:00
Lars Karlitski
b911d0b928 weldr: get repositories from distro
Make distros export repository information and use those in the weldr
API. This means that repos are only specified once and that the API
returns the right packages when we allow different distros.
2019-11-18 12:22:10 +01:00
Lars Karlitski
1dac0a03d2 weldr/sourceInfo: move '*' out of the loop
The API returns all sources on the route `sources/info/*`, but shouldn't
when one of the sources in the comma-separated list is a `*`.
2019-11-18 12:22:10 +01:00
Lars Karlitski
d1a6e2efb7 weldr: clean up source/info route
Split the error case (no sources specified) into its own function, so
that we can use `source/info/:sources` (note the colon) to get the list
of sources without the leading `/`. This gets rid of two special cases
which made the previous implementation hard to parse.
2019-11-18 12:22:10 +01:00
Lars Karlitski
d06a39bd51 weldr: move RepoConfig → SourceConfig conversion to store
This puts it aside the already existing SourceConfig → RepoConfig
conversion and makes `sourceInfoHandler` a bit easier to parse.
2019-11-18 12:22:10 +01:00
Lars Karlitski
919d849123 weldr: use repo ids as source names
The naming is confusing: repositories have an `id` and a human readable
`name`. Weldr's sources also have a field called `name`, but
lorax-composer uses that as a way to identify repositories by their id.

Use `id` consistently here as well.
2019-11-18 12:22:10 +01:00
Lars Karlitski
740e4da733 rpmmd: move SourceToRepo to store
This removes the `store` dependency from `rpmmd`, which is the more
generic package.

It's also nicer to have this on a method of `SourceConfig`.
2019-11-18 12:22:10 +01:00
Ondřej Budai
cd5a192dfd 3 2019-11-15 17:22:20 +01:00
Martin Sehnoutka
b0698271b7 Revert "Fill in the license template"
This reverts commit ce6854d781 as I
understood the license text in a wrong way.
2019-11-15 15:26:51 +01:00
Jacob Kozol
e72004de56 api/tests: fix blueprints freeze test
The blueprints freeze test now creates the blueprint with the package
dep-package1 which is mocked and will properly depsolve when the
blueprint is frozen. This test can no longer run externally against
lorax-composer.
2019-11-15 15:24:39 +01:00
Jacob Kozol
6dbde1b5df api/tests: add blueprint freeze test
This test creates a new blueprint with libsemanage. Libsemanage is
already in the mock rpmmd so when we test the freeze route on this
blueprint, the blueprint will properly depsolve and return the package
with the depsolved version.
2019-11-15 00:25:18 +01:00
Jacob Kozol
c4088caee1 api: add blueprint freeze route
The blueprint freeze route returns the blueprint info but each
package will be the package selected by depsolving. So, instead of the
version being the version number with optional wildcards as
/blueprints/info would provide, the version is of the form
`Version-Release.Arch`.
2019-11-15 00:25:18 +01:00
Ondřej Budai
dd9a815c40 api: improve parity of /{modules,projects}/{list,info} routes
These endpoint are similar in many ways, therefore just one commit. Their
functionality is basically same as in lorax except for error messages and
weird edge cases when handling trailing slashes.

closes #64, closes #65
2019-11-15 00:23:24 +01:00
Ondřej Budai
2ed070b218 api: remove packages from api struct
This was probably forgotten in c882bebf
2019-11-15 00:23:24 +01:00
Jacob Kozol
5ffcb3fe6d api: add undo blueprint route
Add a route to set a blueprint back to its state at a particular change.
The route `blueprints/undo/:blueprint/:commit` requires the blueprint
name and the commit hash for the change that the blueprint should be
reverted too. Also, the commit message for the change created when a
blueprint is pushed is now passed from the api to the store's
PushBlueprint funtion.
2019-11-14 20:36:17 +01:00
Jacob Kozol
1b46a83522 store: add getBlueprintChange update blueprint commit message
Add function to get a single blueprint change given the blueprint name
and the commit hash. Update the PushBlueprint function to allow a commit
message to be passed to it which will be used when adding a change.
2019-11-14 20:36:17 +01:00
Jacob Kozol
c882bebfb4 remove packages from weldr API initialization
The package list is generated on each request for a package so there is
no longer a need to generate the package list in main or to store these
packages in the API object.
2019-11-14 12:16:07 +01:00
Jacob Kozol
6f4a7bacd2 api: fetch packages from sources and base repo
The package list is now generated from the base repo and the
user-defined repos. This allows users to add packages not found in the
base repo to their blueprints.
2019-11-14 12:16:07 +01:00
Jacob Kozol
085ba6fec9 rpmmd: convert sources to repos
Add function to convert between a user source and a repo which can be
passed to dnf-json. This is neccessary because user-defined sources have
a slightly different format than dnf repos.
2019-11-14 12:16:07 +01:00
Ondřej Budai
af73810a2d tests: fix failing tests due to a bad merge
I changed the API of weldr.New in 495f5b55 and Jacob added a new call of
that function in 9970150e, which created conflicting state.
2019-11-14 10:19:27 +01:00
Ondřej Budai
2cb7c8936e api/tests: test bodies for equality even if status codes are different
When developing tests it's nice to see all the differences at once.
2019-11-13 23:49:57 +01:00
Martin Sehnoutka
1fac27527b add more local boot test cases
1) additional qemu tests for ami, vmdk, vhd, and openstack image types
2) new type of systemd-nspawn tests for tar, ext4, and parititioned disk
types

the systemd-nspawn tests use loopback network interface directly from
the host so it is necessary to tweak the settings of its SSH server.
This is done in a "script" stage using simple "sed" command.
2019-11-13 21:06:49 +01:00
Ondřej Budai
306ca58588 spec: update to packaging guidelines
- %{_libexecdir}/osbuild-composer/ is good enough for listing the directory
  and its whole tree

- summary should not end with full stop
2019-11-13 19:37:28 +01:00
Ondřej Budai
36ccb110b3 api: add support for /projects/depsolve 2019-11-13 14:54:02 +01:00
Ondřej Budai
9076f68f7b rpmmd: Add error reporting support to dnf-json
Previously dnf-json hasn't been able to report any reports. This commit
tries to fix it with introduction of somewhat flexible error format.
2019-11-13 14:54:02 +01:00
Ondřej Budai
495f5b558b Add support for mocking rpmmd
We want to test API methods which calls dnf. Unfortunately, calling dnf
is expensive operation - it requires network access and downloading
a lot of (meta)data. This commit changes the rpmmd implementation
so that it can be mocked.
2019-11-13 14:54:02 +01:00
Jacob Kozol
9970150ed5 api: add blueprints changes route
For each blueprint name passed to the route, a list of the changes to
that blueprint will be returned.

weldr/tests: add blueprint changes test

In order to test blueprint changes a blueprint must be created with a
unique id. Blueprint changes are not deleted when the blueprint is
deleted so in order to test this against lorax the blueprint must have
not been used/tested before. This id is created from a random int. The
test creates and deletes the same blueprint twice to check that each
creation updates the list of changes.
2019-11-13 14:51:06 +01:00
Jacob Kozol
080bd4968c store: add function to get blueprint changes
For a given blueprint name the store returns a list of the changes made
to that blueprint.
2019-11-13 14:51:06 +01:00
Jacob Kozol
7d2650a2e3 store: add blueprint changes
When a blueprint is pushed to the store it will also add a change to the
BlueprintChanges map. Each blueprint has a list of changes mapped to
their commit. This commmit is a hex string based off of the sha1 hash of
the current time so every commit is unique. The message and timestamp
follow the format of lorax-composer.
2019-11-13 14:51:06 +01:00
Jacob Kozol
5fe42f13d7 blueprint: add change object for blueprints
Add a struct to store changes made to a blueprint. Each change contains
a commit which is a hex string based off of an sha1 hash, a message
describing the change, a revision which will usually be null, a
timestamp, and the blueprint at the time of the change.
2019-11-13 14:51:06 +01:00
Jacob Kozol
11eb0b5226 rpmmd: sort fetched package list
When dnf-json dumps the packages from the repos passed to it, it does
not sort the packages. In order to properly list and search the
packages, the package list is now sorted before being returned by the
FetchPackageList function.
2019-11-13 14:24:58 +01:00
Lars Karlitski
41a2ef9b9a Revert "rpmmd: make dnf-json executable"
This is not really necessary right now. I needed it for testing rpmmd,
which we've postponed.

This reverts commit d05673afb1.
2019-11-13 00:36:50 +01:00
Tom Gundersen
1055d1167d 2
Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-11 21:13:43 +00:00
Tom Gundersen
9c34e6bbea spec: make python script executable
This is how the file is in git, install with the same permissions.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-11 21:13:43 +00:00
Tom Gundersen
6d20991e90 spec: update to golang packaging guidelines
The guidelines have changed for F32, so update to use the goprep and
gochecks macros.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-11 21:13:43 +00:00
Tom Gundersen
339e887693 spec: add systemd hooks
According to Fedora packaging guidelines, the rpm scriptlets must
call into systemd to make sure the services are enabled/disabled
corerctly on install and uninstall.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-11 21:13:43 +00:00
Tom Gundersen
88c0cf4b27 distro: move binaries to /usr/libexec to follow Fedora packaging guidelines
This makes no difference, so let's just put them where the Fedora
guidelines say they should be.

Also, make sure to own the containing directory.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-11 21:13:43 +00:00
Tom Gundersen
d87d9eb27b spec: fix a couple of rpmlint warnings
Addressing https://bugzilla.redhat.com/show_bug.cgi?id=1768774#c1

The review also points out that the Source0 URL is wrong, I fixed
this by pushing a new tag: `v1`, rather than just `1`.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-11-11 21:13:43 +00:00
msehnout
ce6854d781 Fill in the license template
Fixes #85
2019-11-11 18:31:17 +01:00
Lars Karlitski
d13e24a91e dnf-json: use dnf.Base.install_specs()
This method also accepts modules with the `@` syntax.
2019-11-11 18:30:44 +01:00
Lars Karlitski
d05673afb1 rpmmd: make dnf-json executable
This enables us to put it anywhere in `PATH`, because we don't call it
through `python3` anymore.
2019-11-11 18:30:44 +01:00
Martin Sehnoutka
77c2ab0e1c Introduce local boot test case for QCOW2
The tests works by executing osbuild with predefined pipeline. Then the
image boots and the testing script creates SSH connection to the running
VM. If everything goes fine `systemctl is-system-running` is executed
with result `running` and the test case passed.

The JSON definition of the test case contains also a blueprint that
should generate the desired pipeline, but it didn't work for me, so I'm
including it for future use from the golang unit tests.
2019-11-11 15:47:01 +01:00
Jacob Kozol
3aab64575b api: fix delete source route
The delete source handler now removes the leading "/" from the
parameters passed to it. Not removing the "/" caused sources to not
be deleted from the store since they could not be found when their name
contained a "/" as the first character.
2019-11-11 15:44:42 +01:00