Commit graph

2522 commits

Author SHA1 Message Date
Irene Diez
6cb8216f09 internal: update firewall stage to allow zones
Updates firewall stage customizations to allow zones
as per the changes made on osbuild/osbuild#1157

Relevant tests and pipelines for rhel8+9 updated.

Signed-off-by: Irene Diez <idiez@redhat.com>
2022-12-06 16:39:00 +01:00
Antonio Murdaca
80a6b1bd23 Extend firewall customizations to add sources
Signed-off-by: Antonio Murdaca <runcom@linux.com>
Co-authored-by: Irene Diez <idiez@redhat.com>
2022-12-06 16:39:00 +01:00
Sayan Paul
6f56bee611 build:add journald stage to thel 8/9 pipeline
Adds the new journald stage to rhel 8/9
rpmostree commit pipeline.This will add
the dropin file `10-persitent.conf` with
the storage option set as persistent.

Co-authored-by: Sayan Paul <paul.sayan@gmail.com>
Co-authored-by: Irene Diez <idiez@redhat.com>
Signed-off-by: Sayan Paul <saypaul@redhat.com>
2022-12-06 12:15:09 +01:00
Sayan Paul
5ce3de214d build:create systemd_journald stage
Creates new stage to configure
journald to persist the journal.
Instead of creating the `/var/log/journal`
directory we explicitly configure journald
via the new stage.This is done in
according to the FCOS norms.
Unit tests also added for functionality
check.

Co-authored-by: Irene Diez <idiez@redhat.com>
Signed-off-by: Sayan Paul <saypaul@redhat.com>
2022-12-06 12:15:09 +01:00
Achilleas Koutsou
8c75975917 osbuild: add masked services to systemd stage 2022-12-02 19:04:26 +00:00
Gianluca Zuccarelli
5457b9fba2 metrics: update status metrics label
Openshift overrides the `service` label for
all metrics in the cluster. Update the label
from `service` to `subsystem` for the status
metrics query. This helps us differentiate
between requests from composer and the worker
server.
2022-12-02 09:25:40 +01:00
Gianluca Zuccarelli
113cda7d39 internal/worker: register status middleware
Register the custom middleware function to the worker
server. This function is responsible for recording all
the status codes of all the server's endpoints.

Due to a bug with echo/v4, a request to an endpoint using
the incorrect method should return a `405` error but returns
a `404` error instead when a middleware function is registered.
The worker `server_test` has been updated to reflect this.
2022-11-30 11:14:29 +01:00
Gianluca Zuccarelli
8b5458ae83 internal/cloudapi: register status code middleware
Register the custom middleware function to the cloudapi
server. This function is responsible for recording all
the status codes of all the server's endpoints.
2022-11-30 11:14:29 +01:00
Gianluca Zuccarelli
8756ea717d prometheus: middleware to record 5xx errors
Create a custom middleware function
to measure 5xx requests for all composer
& worker routes and not just the `/composer`
endpoint. The result is a prometheus metric
that contains info on the request status code,
path & method.

A helper function has been added to clean the
dynamic parameters in the path routes to reduce
metric cardinality
2022-11-30 11:14:29 +01:00
Gianluca Zuccarelli
33e53398a6 prometheus: add status metrics
Add a helper function to register the same metrics
for both the worker and composer - the only difference
being the subsystem name. The function checks if the
metric has already been registered and, if so, returns
the already registered metric.
2022-11-30 11:14:29 +01:00
Gianluca Zuccarelli
8e82b223af prometheus: move constants to a single file
Move the constants to a single file and export them.
These can then later be used externally for future use
with the ocm metrics.
2022-11-30 11:14:29 +01:00
Colin Walters
a3a733a638 gcp: Cross-reference to coreos-assembler code
At the moment we have duplicate logic here; ideally of course
we consolidate (since both codebases are Go, perhaps we could
create a tiny little Go library for "RHEL GCP stuff"?) but
for now let's just cross-link for awareness.
2022-11-30 11:13:31 +01:00
Tomáš Hozza
d0a3ad470d internal/rpmmd: replace RepositoryError with plain error
The `RepositoryError` structure was weirdly used instead of a plan
`error` type and added no value. Delete it and replace its only use with
plain `error`.

Signed-off-by: Tomáš Hozza <thozza@redhat.com>
2022-11-30 11:04:24 +01:00
Tomáš Hozza
2c794c9e94 internal/rpmmd: delete unused interfaces and structures
Clean up the `rpmmd` package from unused interfaces and data structures.
These are leftovers after the last dnfjson rework.

Signed-off-by: Tomáš Hozza <thozza@redhat.com>
2022-11-30 11:04:24 +01:00
Achilleas Koutsou
75758aee52 distro/test: set RHSM Fact API Type when testing manifests 2022-11-30 10:04:16 +01:00
Achilleas Koutsou
5cf0c336d3 distro/rhel9: add RHSM fact to RHEL 9 images
Set the API type RHSM fact in OS customizations for RHEL 9 images.
2022-11-30 10:04:16 +01:00
Achilleas Koutsou
3cff4d0c1d manifest: support RHSM facts in OSCustomizations
Add the RHSM fact to the OSCustomizations and add the stage to the OS
pipeline if the value is set.
2022-11-30 10:04:16 +01:00
Tomáš Hozza
c6570f6c94 CloudAPI: add description for Repository definition
Specifically describe that at least one of `baseurl`, `mirrorlist` or
`metalink` properties must be specified. Although this is not enforced
by the schema, it is the reality. Modifying the schema to enforce this
results in the generated data structure for `Repository` to be simply
an `interface{}`, which would just make the code more ugly, Therefore
this is covered by the API implementation logic.

Signed-off-by: Tomáš Hozza <thozza@redhat.com>
2022-11-28 17:30:56 +01:00
Achilleas Koutsou
b3f4d75699 image: panic if unknown compression option is specified
Currently we only support "xz", but keeping it as a `switch` to easily
support more types in the future.
The empty string is also supported as a no-op.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
6374ec022d distro/rhel9: define qcow2 image type in function
The global qcow2ImgType was unconfigured and meant to be used by calling
the mkQcow2ImgType() function.  In the distro initialisation code, the
new variable created from the mkQcow2ImgType() function with the
configuration was shadowing the global variable.  This can lead to
errors in the future where it's not clear which variable is used where.

Putting the definition in a function makes it impossible to use without
configuring.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
fa948b9e0b distro: set the workload for the image installer pipelines 2022-11-28 17:20:49 +01:00
Achilleas Koutsou
c6bfb22f54 manifest: support specifying kickstart file location
Add support for specifying where the kickstart file will be created:
either in the default location in the anaconda tree or at the root of
the ISO like we did so far in RHEL.

From the distro level, this is controlled by a boolean that when set to
true puts the kickstart file in the root of the ISO tree at /osbuild.ks
(the old behaviour) and if unset falls back to the default location
/usr/share/anaconda/interactive-defaults.ks.

Changed the name of the kickstart file for ostree back to osbuild.ks
Was ostree.ks for a while since a1bfcfe91c.

For Fedora we use the default and for RHEL we maintain the old behaviour
for now.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
5d55ccf109 manifest: support specifying squashfs compression for ISOs
Add support for specifying the squashfs compression method for ISOTree
pipelines from the caller.
Build Fedora ISOs with lz4 compression and RHEL with xz.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
cb0280c8c9 image: always enable users module in anaconda
Unconditionally enable the users module in Anaconda.
The module serves two purposes:
- It will create a user that's defined in the blueprint by adding the
  user creation stage in the kickstart file.
- It allows users to create user accounts interactively during
  installation.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
11b08da7a5 distro/rhel9: cleanup: delete unused functions 2022-11-28 17:20:49 +01:00
Achilleas Koutsou
42274fd6a7 distro_test_common: refactor the kernel count test
- Add a list of image type names to skip with explanations.
- Run the test in two configurations: empty blueprint and blueprint with
  named kernel (kernel, kernel-debug).
- Count only unique kernel names.  Specifying the same kernel twice
  isn't an issue.  We might change this in the future, but for now the
  kernel selection logic is a bit messy.
- Temporarily skip the image-installer until we settle on a common rule
  for both Fedora and RHEL.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
d66bc11bc7 distro/rhel9: update tar image type to new definition
Add the image function and remove the pipeline function.
Remove the build package set.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
e100c57e58 image: new ImageKind: archive 2022-11-28 17:20:49 +01:00
Achilleas Koutsou
108ac3931b distro/rhel9: update image-installer to new definition
Add the image function and remove the pipeline function.
Remove the build package set.

The image function (imageInstallerImage) was adapted from the same one
in Fedora.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
e031b45377 distro: set ostree ref during package collection
Similar to 194351e681 and
9ae47b6843cace3c9bef55d40a33fa11d8de391a.

Manifest initialisation during package collection uses options and
customizations to determine build root packages.  Just like adding a
fake ostree checksum and an unresolved container list, we also need to
add the ostree ref, which is used to determine if a pipeline is being
generated for an ostree-based image type.

This fixes manifest generation when an ostree commit or container is
being built with an embedded container through the cloud API.  Without
this change, the python toml module is not installed in the build root
and the container storage stage fails.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
60d2a88d4f distro/test: add containers to manifest test
Read the containers from the test manifests when regenerating for the
test.
Also move the ostree option handling higher and make it cleaner.  Only
apply the values if they're specified and needed.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
8612131351 store: add containers to test 2022-11-28 17:20:49 +01:00
Achilleas Koutsou
09903bd0db manifest: support for container embedding
Adding support for container embedding.
The containers need to be specified in the image function (imageFunc)
arguments and when specified, propagate down to the OS pipeline
generator to add the necessary stages.

Support is added for RHEL 9.x and Fedora.

Requires a temporary container spec array with the info from the
blueprint for the first initialization of the manifest that's needed
when collecting required packages.
This should be simplified in the future.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
c4b5c229fb distro/rhel9: delete unused pipeline functions 2022-11-28 17:20:49 +01:00
Achilleas Koutsou
2369869db7 distro/rhel9: update gce images to new definitions
add the image function and remove the pipeline function.
Remove the build package set.

Parameterise image config creation functions so that RHSM is added
conditionally based on distro name, like we did for AMI/EC2.

image: set the raw filename for the GCE image type

GCP requires that the raw image file inside the archive be named
'disk.raw'.  We set it on the imagePipeline while instantiating the
manifest as a workaround for now.

This should be changed to be configurable on the image type when
necessary, the same way the final filename is defined.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
a1332c5b82 manifest: add more customizations to live image
Extend the OSCustomizations to include options for dnf-automatic,
yum.repos, and gcp.guest-agent.
Propagate these options from the image configs in rhel9 down to the
OSCustomizations and add the stages to the os pipeline when they're
specified.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
581dde4215 manifest: use osbuild firewall options on os customization
OSCustomizations defined firewall options as blueprint firewall
customizations.  Changed it to instead be osbuild firewall stage
options.
This is swapping out one messy thing for another, but at least now we're
consistent in our mess.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
f0e29ab697 image: handle the GCE format in the live image
Add the options required by GCE to a tar pipeline at the end of the
manifest for images defined on the GCE format.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
8c361e510d platform: add special GCE platform format
GCE requires an archive with specific (tar) options, so we should have a
platform format defined separately for it.
Add the GCE image types to the x86_64 arch using the new platform
format.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
3fc8fd2cb9 manifest: support all tar options in tar pipeline
Make the tar pipeline take any implementation of the Pipeline interface
as an input argument.
Add support for all the tar stage options.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
1d1523828a distro/rhel9: update azure images to new definitions
Add the new image function and remove the pipeline function.
Remove the build package set.
Rename the last pipeline to xz for the RHUI image type.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
ae37ebb286 image: support compression on all live image types
Apply "xz" compression to any artifact pipeline if it's specified in the
image type.  The image filename should be applied to the pipeline only
if it's the last one, so we need to skip this assignment if we're going
to add a compression pipeline at the end.

This is a bit dirty but the plan is to remove artifact compression from
manifests and perform it during the export in osbuild-composer, so this
should go away soon.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
458f51128a manifest: set default VPC filename to image.vhd 2022-11-28 17:20:49 +01:00
Achilleas Koutsou
4f60aa3c1d distro/rhel9: move azure image definitions to the top of the file 2022-11-28 17:20:49 +01:00
Achilleas Koutsou
db88c734c1 manifest: add support for waagent and udevrules to liveImage
Extend the OSCustomizations to include the WAAgentConfig and UdevRules
options.
Propagate those options from the image's config down to the
OSCustomizations and add the stages to the os pipeline when they're
specified.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
370a0d1b29 manifest: add packages required by osbuild stages
Add python3-pyyaml to the build root when the OS pipeline includes the
cloud-init stage.
Add python3-iniparse to the build root when the OS pipeline includes
the dnf.config or rhsm stage.
The addition of the stages is detected using the corresponding
customizations.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
c35c4784a4 distro/rhel9: update ec2 and ec2-ha to new definitions
Add the image function and remove the pipeline function.
Remove the build package set.
Add "xz" compression and rename the last pipeline.
Propagate the compression option down to the liveImage() image creation
function.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
6fed422972 image: xz compress a pipeline if the image specifies it
If an image specifies xz compression, add an xz pipeline to the end of
the manifest.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
631b133352 manifest: make NewXZ() take any kind of pipeline for input
The XZ pipeline was initially only for the ostree raw image but now it
can be applied to the output of any pipeline.
2022-11-28 17:20:49 +01:00
Achilleas Koutsou
bc219c825e distro/rhel9: add compression option to imageType
The compression field defines the compression type for the final image,
if any.
This is a temporary change.  We should design a better way to specify
"transport compression" for images, compression that is not required by
the image type or platform, but simply done for transport convenience or
storage.
2022-11-28 17:20:49 +01:00