Repository: osbuild/osbuild-composer
Pull request #173 (2019-12-15 12:53:54)

Make error handling in the worker more robust
This depends on https://github.com/osbuild/osbuild-composer/pull/172


Patch:
diff --git a/cmd/osbuild-worker/main.go b/cmd/osbuild-worker/main.go
index 841496a0d..25ed464c5 100644
--- a/cmd/osbuild-worker/main.go
+++ b/cmd/osbuild-worker/main.go
@@ -10,7 +10,6 @@ import (
 	"net"
 	"net/http"
 
-	"github.com/osbuild/osbuild-composer/internal/distro"
 	"github.com/osbuild/osbuild-composer/internal/jobqueue"
 	"github.com/osbuild/osbuild-composer/internal/store"
 )
@@ -77,7 +76,7 @@ func (c *ComposerClient) UpdateJob(job *jobqueue.Job, status string, image *stor
 	return nil
 }
 
-func handleJob(client *ComposerClient, distro distro.Distro) error {
+func handleJob(client *ComposerClient) error {
 	fmt.Println("Waiting for a new job...")
 	job, err := client.AddJob()
 	if err != nil {
@@ -90,13 +89,15 @@ func handleJob(client *ComposerClient, distro distro.Distro) error {
 	}
 
 	fmt.Printf("Running job %s\n", job.ID.String())
-	image, err, errs := job.Run(distro)
+	image, err, errs := job.Run()
 	if err != nil {
+		log.Printf("  Job failed: %v", err)
 		return client.UpdateJob(job, "FAILED", nil)
 	}
 
 	for _, err := range errs {
 		if err != nil {
+			log.Printf("  Job target error: %v", err)
 			return client.UpdateJob(job, "FAILED", nil)
 		}
 	}
@@ -105,14 +106,10 @@ func handleJob(client *ComposerClient, distro distro.Distro) error {
 }
 
 func main() {
-	distro, err := distro.FromHost()
-	if err != nil {
-		log.Fatalf("Could not determine distro from host: " + err.Error())
-	}
-
 	client := NewClient()
 	for {
-		err = handleJob(client, distro)
-		log.Fatalf("Failed to handle job: " + err.Error())
+		if err := handleJob(client); err != nil {
+			log.Fatalf("Failed to handle job: " + err.Error())
+		}
 	}
 }
diff --git a/internal/distro/distro.go b/internal/distro/distro.go
index acc24c4e1..e0f715433 100644
--- a/internal/distro/distro.go
+++ b/internal/distro/distro.go
@@ -16,6 +16,10 @@ import (
 )
 
 type Distro interface {
+	// Returns the name of the distro. This is the same name that was
+	// passed to New().
+	Name() string
+
 	// Returns a list of repositories from which this distribution gets its
 	// content.
 	Repositories(arch string) []rpmmd.RepoConfig
@@ -40,8 +44,8 @@ var registered map[string]Distro
 
 func init() {
 	registered = map[string]Distro{
-		"fedora-30": fedora30.New(),
-		"rhel-8.2":  rhel82.New(),
+		fedora30.Name: fedora30.New(),
+		rhel82.Name:   rhel82.New(),
 	}
 }
 
diff --git a/internal/distro/fedora30/distro.go b/internal/distro/fedora30/distro.go
index 8d7f4c1f6..42f485d45 100644
--- a/internal/distro/fedora30/distro.go
+++ b/internal/distro/fedora30/distro.go
@@ -37,6 +37,8 @@ type output struct {
 	Assembler        func(uefi bool) *pipeline.Assembler
 }
 
+const Name = "fedora-30"
+
 func New() *Fedora30 {
 	r := Fedora30{
 		arches:  map[string]arch{},
@@ -240,6 +242,10 @@ func New() *Fedora30 {
 	return &r
 }
 
+func (r *Fedora30) Name() string {
+	return Name
+}
+
 func (r *Fedora30) Repositories(arch string) []rpmmd.RepoConfig {
 	return []rpmmd.RepoConfig{
 		{
diff --git a/internal/distro/rhel82/distro.go b/internal/distro/rhel82/distro.go
index 11d05336e..389591229 100644
--- a/internal/distro/rhel82/distro.go
+++ b/internal/distro/rhel82/distro.go
@@ -38,6 +38,8 @@ type output struct {
 	Assembler        func(uefi bool) *pipeline.Assembler
 }
 
+const Name = "rhel-8.2"
+
 func New() *RHEL82 {
 	const GigaByte = 1024 * 1024 * 1024
 
@@ -196,27 +198,80 @@ func New() *RHEL82 {
 		Name:     "disk.qcow2",
 		MimeType: "application/x-qemu-disk",
 		Packages: []string{
-			"kernel-core",
+			"@core",
 			"chrony",
+			"dnf",
+			"kernel",
+			"yum",
+			"nfs-utils",
+			"dnf-utils",
+			"cloud-init",
+			"python3-jsonschema",
+			"qemu-guest-agent",
+			"cloud-utils-growpart",
 			"dracut-config-generic",
-			"polkit",
-			"systemd-udev",
-			"selinux-policy-targeted",
-			"langpacks-en",
+			"dracut-norescue",
+			"tar",
+			"tcpdump",
+			"rsync",
+			"dnf-plugin-spacewalk",
+			"rhn-client-tools",
+			"rhnlib",
+			"rhnsd",
+			"rhn-setup",
+			"NetworkManager",
+			"dhcp-client",
+			"cockpit-ws",
+			"cockpit-system",
+			"subscription-manager-cockpit",
+			"redhat-release",
+			"redhat-release-eula",
+			"rng-tools",
+			"insights-client",
+			// TODO: rh-amazon-rhui-client
 		},
 		ExcludedPackages: []string{
 			"dracut-config-rescue",
-			"etables",
+			"aic94xx-firmware",
+			"alsa-firmware",
+			"alsa-lib",
+			"alsa-tools-firmware",
 			"firewalld",
-			"gobject-introspection",
+			"ivtv-firmware",
+			"iwl1000-firmware",
+			"iwl100-firmware",
+			"iwl105-firmware",
+			"iwl135-firmware",
+			"iwl2000-firmware",
+			"iwl2030-firmware",
+			"iwl3160-firmware",
+			"iwl3945-firmware",
+			"iwl4965-firmware",
+			"iwl5000-firmware",
+			"iwl5150-firmware",
+			"iwl6000-firmware",
+			"iwl6000g2a-firmware",
+			"iwl6000g2b-firmware",
+			"iwl6050-firmware",
+			"iwl7260-firmware",
+			"libertas-sd8686-firmware",
+			"libertas-sd8787-firmware",
+			"libertas-usb8388-firmware",
+			"langpacks-*",
+			"langpacks-en",
+			"biosdevname",
 			"plymouth",
+			"iprutils",
+			"langpacks-en",
+			"fedora-release",
+			"fedora-repos",
 
 			// TODO setfiles failes because of usr/sbin/timedatex. Exlude until
 			// https://errata.devel.redhat.com/advisory/47339 lands
 			"timedatex",
 		},
 		Bootable:      true,
-		KernelOptions: "ro net.ifnames=0",
+		KernelOptions: "console=ttyS0 console=ttyS0,115200n8 no_timer_check crashkernel=auto net.ifnames=0",
 		Assembler:     func(uefi bool) *pipeline.Assembler { return r.qemuAssembler("qcow2", "disk.qcow2", 3*GigaByte, uefi) },
 	}
 
@@ -339,6 +394,10 @@ func New() *RHEL82 {
 	return &r
 }
 
+func (r *RHEL82) Name() string {
+	return Name
+}
+
 func (r *RHEL82) Repositories(arch string) []rpmmd.RepoConfig {
 	return []rpmmd.RepoConfig{
 		{
diff --git a/internal/jobqueue/api.go b/internal/jobqueue/api.go
index f00256fb6..3aec611c8 100644
--- a/internal/jobqueue/api.go
+++ b/internal/jobqueue/api.go
@@ -75,7 +75,6 @@ func statusResponseError(writer http.ResponseWriter, code int, errors ...string)
 func (api *API) addJobHandler(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) {
 	type requestBody struct {
 	}
-	type replyBody Job
 
 	contentType := request.Header["Content-Type"]
 	if len(contentType) != 1 || contentType[0] != "application/json" {
@@ -93,7 +92,13 @@ func (api *API) addJobHandler(writer http.ResponseWriter, request *http.Request,
 	nextJob := api.store.PopCompose()
 
 	writer.WriteHeader(http.StatusCreated)
-	json.NewEncoder(writer).Encode(replyBody{nextJob.ComposeID, nextJob.Pipeline, nextJob.Targets, nextJob.OutputType})
+	json.NewEncoder(writer).Encode(Job{
+		ID: nextJob.ComposeID,
+		Distro: nextJob.Distro,
+		Pipeline: nextJob.Pipeline,
+		Targets: nextJob.Targets,
+		OutputType: nextJob.OutputType,
+	})
 }
 
 func (api *API) updateJobHandler(writer http.ResponseWriter, request *http.Request, params httprouter.Params) {
diff --git a/internal/jobqueue/job.go b/internal/jobqueue/job.go
index b5807f3c6..7af970aa8 100644
--- a/internal/jobqueue/job.go
+++ b/internal/jobqueue/job.go
@@ -18,6 +18,7 @@ import (
 
 type Job struct {
 	ID         uuid.UUID          `json:"id"`
+	Distro     string             `json:"distro"`
 	Pipeline   *pipeline.Pipeline `json:"pipeline"`
 	Targets    []*target.Target   `json:"targets"`
 	OutputType string             `json:"output_type"`
@@ -28,7 +29,12 @@ type JobStatus struct {
 	Image  *store.Image `json:"image"`
 }
 
-func (job *Job) Run(d distro.Distro) (*store.Image, error, []error) {
+func (job *Job) Run() (*store.Image, error, []error) {
+	d := distro.New(job.Distro)
+	if d == nil {
+		return nil, fmt.Errorf("unknown distro: %s", job.Distro), nil
+	}
+
 	build := pipeline.Build{
 		Runner: d.Runner(),
 	}
@@ -41,12 +47,12 @@ func (job *Job) Run(d distro.Distro) (*store.Image, error, []error) {
 
 	err = json.NewEncoder(buildFile).Encode(build)
 	if err != nil {
-		return nil, err, nil
+		return nil, fmt.Errorf("error encoding build environment: %v", err), nil
 	}
 
 	tmpStore, err := ioutil.TempDir("/var/tmp", "osbuild-store")
 	if err != nil {
-		return nil, err, nil
+		return nil, fmt.Errorf("error setting up osbuild store: %v", err), nil
 	}
 	defer os.RemoveAll(tmpStore)
 
@@ -60,42 +66,43 @@ func (job *Job) Run(d distro.Distro) (*store.Image, error, []error) {
 
 	stdin, err := cmd.StdinPipe()
 	if err != nil {
-		return nil, err, nil
+		return nil, fmt.Errorf("error setting up stdin for osbuild: %v", err), nil
 	}
 
 	stdout, err := cmd.StdoutPipe()
 	if err != nil {
-		return nil, err, nil
+		return nil, fmt.Errorf("error setting up stdout for osbuild: %v", err), nil
 	}
 
 	err = cmd.Start()
 	if err != nil {
-		return nil, err, nil
+		return nil, fmt.Errorf("error starting osbuild: %v", err), nil
 	}
 
 	err = json.NewEncoder(stdin).Encode(job.Pipeline)
 	if err != nil {
-		return nil, err, nil
+		return nil, fmt.Errorf("error encoding osbuild pipeline: %v", err), nil
 	}
 	stdin.Close()
 
 	var result struct {
-		TreeID   string `json:"tree_id"`
-		OutputID string `json:"output_id"`
+		TreeID    string           `json:"tree_id"`
+		OutputID  string           `json:"output_id"`
+		Build     *json.RawMessage `json:"build,omitempty"`
+		Stages    *json.RawMessage `json:"stages,omitempty"`
+		Assembler *json.RawMessage `json:"assembler,omitempty"`
+		Success   *json.RawMessage `json:"success,omitempty"`
 	}
 	err = json.NewDecoder(stdout).Decode(&result)
 	if err != nil {
-		return nil, err, nil
+		return nil, fmt.Errorf("error decoding osbuild output: %#v", err), nil
 	}
 
-	err = cmd.Wait()
-	if err != nil {
-		return nil, err, nil
-	}
+	cmdError := cmd.Wait()
 
 	filename, mimeType, err := d.FilenameFromType(job.OutputType)
 	if err != nil {
-		return nil, err, nil
+		return nil, fmt.Errorf("cannot fetch information about output type %s: %v", job.OutputType, err), nil
 	}
 
 	var image store.Image
@@ -105,6 +112,28 @@ func (job *Job) Run(d distro.Distro) (*store.Image, error, []error) {
 	for _, t := range job.Targets {
 		switch options := t.Options.(type) {
 		case *target.LocalTargetOptions:
+			err := os.MkdirAll(options.Location, 0755)
+			if err != nil {
+				r = append(r, err)
+				continue
+			}
+
+			jobFile, err := os.Create(options.Location + "/result.json")
+			if err != nil {
+				r = append(r, err)
+				continue
+			}
+
+			err = json.NewEncoder(jobFile).Encode(result)
+			if err != nil {
+				r = append(r, err)
+				continue
+			}
+
+			if cmdError != nil {
+				continue
+			}
+
 			err = runCommand("cp", "-a", "-L", tmpStore+"/refs/"+result.OutputID+"/.", options.Location)
 			if err != nil {
 				r = append(r, err)
@@ -136,6 +165,10 @@ func (job *Job) Run(d distro.Distro) (*store.Image, error, []error) {
 			}
 
 		case *target.AWSTargetOptions:
+			if cmdError != nil {
+				continue
+			}
+
 			a, err := awsupload.New(options.Region, options.AccessKeyID, options.SecretAccessKey)
 			if err != nil {
 				r = append(r, err)
@@ -165,6 +198,10 @@ func (job *Job) Run(d distro.Distro) (*store.Image, error, []error) {
 		r = append(r, nil)
 	}
 
+	if cmdError != nil {
+		return nil, cmdError, nil
+	}
+
 	return &image, nil, r
 }
 
diff --git a/internal/store/store.go b/internal/store/store.go
index 65cd3cab6..48a87089f 100644
--- a/internal/store/store.go
+++ b/internal/store/store.go
@@ -58,6 +58,7 @@ type Compose struct {
 // A Job contains the information about a compose a worker needs to process it.
 type Job struct {
 	ComposeID  uuid.UUID
+	Distro     string
 	Pipeline   *pipeline.Pipeline
 	Targets    []*target.Target
 	OutputType string
@@ -451,6 +452,7 @@ func (s *Store) PushCompose(composeID uuid.UUID, bp *blueprint.Blueprint, checks
 	})
 	s.pendingJobs <- Job{
 		ComposeID:  composeID,
+		Distro:     s.distro.Name(),
 		Pipeline:   pipeline,
 		Targets:    targets,
 		OutputType: composeType,


Test patch:
diff --git a/internal/distro/test/distro.go b/internal/distro/test/distro.go
index 30f72447d..c56c1df11 100644
--- a/internal/distro/test/distro.go
+++ b/internal/distro/test/distro.go
@@ -11,8 +11,14 @@ import (
 
 type TestDistro struct{}
 
+const Name = "test"
+
 func init() {
-	distro.Register("test", &TestDistro{})
+	distro.Register(Name, &TestDistro{})
+}
+
+func (d *TestDistro) Name() string {
+	return Name
 }
 
 func (d *TestDistro) Repositories(arch string) []rpmmd.RepoConfig {
diff --git a/internal/jobqueue/api_test.go b/internal/jobqueue/api_test.go
index c834f974f..80e75e221 100644
--- a/internal/jobqueue/api_test.go
+++ b/internal/jobqueue/api_test.go
@@ -49,7 +49,7 @@ func TestCreate(t *testing.T) {
 	}
 
 	test.TestRoute(t, api, false, "POST", "/job-queue/v1/jobs", `{}`, http.StatusCreated,
-		`{"id":"ffffffff-ffff-ffff-ffff-ffffffffffff","pipeline":{"build":{"pipeline":{"stages":[{"name":"org.osbuild.dnf","options":{"repos":[{"metalink":"https://mirrors.fedoraproject.org/metalink?repo=fedora-30\u0026arch=x86_64","gpgkey":"-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBFturGcBEACv0xBo91V2n0uEC2vh69ywCiSyvUgN/AQH8EZpCVtM7NyjKgKm\nbbY4G3R0M3ir1xXmvUDvK0493/qOiFrjkplvzXFTGpPTi0ypqGgxc5d0ohRA1M75\nL+0AIlXoOgHQ358/c4uO8X0JAA1NYxCkAW1KSJgFJ3RjukrfqSHWthS1d4o8fhHy\nKJKEnirE5hHqB50dafXrBfgZdaOs3C6ppRIePFe2o4vUEapMTCHFw0woQR8Ah4/R\nn7Z9G9Ln+0Cinmy0nbIDiZJ+pgLAXCOWBfDUzcOjDGKvcpoZharA07c0q1/5ojzO\n4F0Fh4g/BUmtrASwHfcIbjHyCSr1j/3Iz883iy07gJY5Yhiuaqmp0o0f9fgHkG53\n2xCU1owmACqaIBNQMukvXRDtB2GJMuKa/asTZDP6R5re+iXs7+s9ohcRRAKGyAyc\nYKIQKcaA+6M8T7/G+TPHZX6HJWqJJiYB+EC2ERblpvq9TPlLguEWcmvjbVc31nyq\nSDoO3ncFWKFmVsbQPTbP+pKUmlLfJwtb5XqxNR5GEXSwVv4I7IqBmJz1MmRafnBZ\ng0FJUtH668GnldO20XbnSVBr820F5SISMXVwCXDXEvGwwiB8Lt8PvqzXnGIFDAu3\nDlQI5sxSqpPVWSyw08ppKT2Tpmy8adiBotLfaCFl2VTHwOae48X2dMPBvQARAQAB\ntDFGZWRvcmEgKDMwKSA8ZmVkb3JhLTMwLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v\ncmc+iQI4BBMBAgAiBQJbbqxnAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK\nCRDvPBEfz8ZZudTnD/9170LL3nyTVUCFmBjT9wZ4gYnpwtKVPa/pKnxbbS+Bmmac\ng9TrT9pZbqOHrNJLiZ3Zx1Hp+8uxr3Lo6kbYwImLhkOEDrf4aP17HfQ6VYFbQZI8\nf79OFxWJ7si9+3gfzeh9UYFEqOQfzIjLWFyfnas0OnV/P+RMQ1Zr+vPRqO7AR2va\nN9wg+Xl7157dhXPCGYnGMNSoxCbpRs0JNlzvJMuAea5nTTznRaJZtK/xKsqLn51D\nK07k9MHVFXakOH8QtMCUglbwfTfIpO5YRq5imxlWbqsYWVQy1WGJFyW6hWC0+RcJ\nOx5zGtOfi4/dN+xJ+ibnbyvy/il7Qm+vyFhCYqIPyS5m2UVJUuao3eApE38k78/o\n8aQOTnFQZ+U1Sw+6woFTxjqRQBXlQm2+7Bt3bqGATg4sXXWPbmwdL87Ic+mxn/ml\nSMfQux/5k6iAu1kQhwkO2YJn9eII6HIPkW+2m5N1JsUyJQe4cbtZE5Yh3TRA0dm7\n+zoBRfCXkOW4krchbgww/ptVmzMMP7GINJdROrJnsGl5FVeid9qHzV7aZycWSma7\nCxBYB1J8HCbty5NjtD6XMYRrMLxXugvX6Q4NPPH+2NKjzX4SIDejS6JjgrP3KA3O\npMuo7ZHMfveBngv8yP+ZD/1sS6l+dfExvdaJdOdgFCnp4p3gPbw5+Lv70HrMjA==\n=BfZ/\n-----END PGP PUBLIC KEY BLOCK-----\n","checksum":"test:foo"}],"packages":["dnf","dosfstools","e2fsprogs","grub2-pc","policycoreutils","qemu-img","systemd","tar"],"releasever":"30","basearch":"x86_64","module_platform_id":"platform:f30"}}]},"runner":"org.osbuild.fedora30"},"stages":[{"name":"org.osbuild.dnf","options":{"repos":[{"metalink":"https://mirrors.fedoraproject.org/metalink?repo=fedora-30\u0026arch=x86_64","gpgkey":"-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBFturGcBEACv0xBo91V2n0uEC2vh69ywCiSyvUgN/AQH8EZpCVtM7NyjKgKm\nbbY4G3R0M3ir1xXmvUDvK0493/qOiFrjkplvzXFTGpPTi0ypqGgxc5d0ohRA1M75\nL+0AIlXoOgHQ358/c4uO8X0JAA1NYxCkAW1KSJgFJ3RjukrfqSHWthS1d4o8fhHy\nKJKEnirE5hHqB50dafXrBfgZdaOs3C6ppRIePFe2o4vUEapMTCHFw0woQR8Ah4/R\nn7Z9G9Ln+0Cinmy0nbIDiZJ+pgLAXCOWBfDUzcOjDGKvcpoZharA07c0q1/5ojzO\n4F0Fh4g/BUmtrASwHfcIbjHyCSr1j/3Iz883iy07gJY5Yhiuaqmp0o0f9fgHkG53\n2xCU1owmACqaIBNQMukvXRDtB2GJMuKa/asTZDP6R5re+iXs7+s9ohcRRAKGyAyc\nYKIQKcaA+6M8T7/G+TPHZX6HJWqJJiYB+EC2ERblpvq9TPlLguEWcmvjbVc31nyq\nSDoO3ncFWKFmVsbQPTbP+pKUmlLfJwtb5XqxNR5GEXSwVv4I7IqBmJz1MmRafnBZ\ng0FJUtH668GnldO20XbnSVBr820F5SISMXVwCXDXEvGwwiB8Lt8PvqzXnGIFDAu3\nDlQI5sxSqpPVWSyw08ppKT2Tpmy8adiBotLfaCFl2VTHwOae48X2dMPBvQARAQAB\ntDFGZWRvcmEgKDMwKSA8ZmVkb3JhLTMwLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v\ncmc+iQI4BBMBAgAiBQJbbqxnAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK\nCRDvPBEfz8ZZudTnD/9170LL3nyTVUCFmBjT9wZ4gYnpwtKVPa/pKnxbbS+Bmmac\ng9TrT9pZbqOHrNJLiZ3Zx1Hp+8uxr3Lo6kbYwImLhkOEDrf4aP17HfQ6VYFbQZI8\nf79OFxWJ7si9+3gfzeh9UYFEqOQfzIjLWFyfnas0OnV/P+RMQ1Zr+vPRqO7AR2va\nN9wg+Xl7157dhXPCGYnGMNSoxCbpRs0JNlzvJMuAea5nTTznRaJZtK/xKsqLn51D\nK07k9MHVFXakOH8QtMCUglbwfTfIpO5YRq5imxlWbqsYWVQy1WGJFyW6hWC0+RcJ\nOx5zGtOfi4/dN+xJ+ibnbyvy/il7Qm+vyFhCYqIPyS5m2UVJUuao3eApE38k78/o\n8aQOTnFQZ+U1Sw+6woFTxjqRQBXlQm2+7Bt3bqGATg4sXXWPbmwdL87Ic+mxn/ml\nSMfQux/5k6iAu1kQhwkO2YJn9eII6HIPkW+2m5N1JsUyJQe4cbtZE5Yh3TRA0dm7\n+zoBRfCXkOW4krchbgww/ptVmzMMP7GINJdROrJnsGl5FVeid9qHzV7aZycWSma7\nCxBYB1J8HCbty5NjtD6XMYRrMLxXugvX6Q4NPPH+2NKjzX4SIDejS6JjgrP3KA3O\npMuo7ZHMfveBngv8yP+ZD/1sS6l+dfExvdaJdOdgFCnp4p3gPbw5+Lv70HrMjA==\n=BfZ/\n-----END PGP PUBLIC KEY BLOCK-----\n","checksum":"test:foo"}],"packages":["chrony","firewalld","kernel","langpacks-en","policycoreutils","selinux-policy-targeted"],"exclude_packages":["dracut-config-rescue"],"releasever":"30","basearch":"x86_64","module_platform_id":"platform:f30"}},{"name":"org.osbuild.fix-bls","options":{}},{"name":"org.osbuild.locale","options":{"language":"en_US"}},{"name":"org.osbuild.grub2","options":{"root_fs_uuid":"76a22bf4-f153-4541-b6c7-0332c0dfaeac","kernel_opts":"ro biosdevname=0 net.ifnames=0","legacy":true}},{"name":"org.osbuild.selinux","options":{"file_contexts":"etc/selinux/targeted/contexts/files/file_contexts"}}],"assembler":{"name":"org.osbuild.tar","options":{"filename":"root.tar.xz","compression":"xz"}}},"targets":[],"output_type":"tar"}`, "created", "uuid")
+		`{"distro":"fedora-30","id":"ffffffff-ffff-ffff-ffff-ffffffffffff","pipeline":{"build":{"pipeline":{"stages":[{"name":"org.osbuild.dnf","options":{"repos":[{"metalink":"https://mirrors.fedoraproject.org/metalink?repo=fedora-30\u0026arch=x86_64","gpgkey":"-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBFturGcBEACv0xBo91V2n0uEC2vh69ywCiSyvUgN/AQH8EZpCVtM7NyjKgKm\nbbY4G3R0M3ir1xXmvUDvK0493/qOiFrjkplvzXFTGpPTi0ypqGgxc5d0ohRA1M75\nL+0AIlXoOgHQ358/c4uO8X0JAA1NYxCkAW1KSJgFJ3RjukrfqSHWthS1d4o8fhHy\nKJKEnirE5hHqB50dafXrBfgZdaOs3C6ppRIePFe2o4vUEapMTCHFw0woQR8Ah4/R\nn7Z9G9Ln+0Cinmy0nbIDiZJ+pgLAXCOWBfDUzcOjDGKvcpoZharA07c0q1/5ojzO\n4F0Fh4g/BUmtrASwHfcIbjHyCSr1j/3Iz883iy07gJY5Yhiuaqmp0o0f9fgHkG53\n2xCU1owmACqaIBNQMukvXRDtB2GJMuKa/asTZDP6R5re+iXs7+s9ohcRRAKGyAyc\nYKIQKcaA+6M8T7/G+TPHZX6HJWqJJiYB+EC2ERblpvq9TPlLguEWcmvjbVc31nyq\nSDoO3ncFWKFmVsbQPTbP+pKUmlLfJwtb5XqxNR5GEXSwVv4I7IqBmJz1MmRafnBZ\ng0FJUtH668GnldO20XbnSVBr820F5SISMXVwCXDXEvGwwiB8Lt8PvqzXnGIFDAu3\nDlQI5sxSqpPVWSyw08ppKT2Tpmy8adiBotLfaCFl2VTHwOae48X2dMPBvQARAQAB\ntDFGZWRvcmEgKDMwKSA8ZmVkb3JhLTMwLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v\ncmc+iQI4BBMBAgAiBQJbbqxnAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK\nCRDvPBEfz8ZZudTnD/9170LL3nyTVUCFmBjT9wZ4gYnpwtKVPa/pKnxbbS+Bmmac\ng9TrT9pZbqOHrNJLiZ3Zx1Hp+8uxr3Lo6kbYwImLhkOEDrf4aP17HfQ6VYFbQZI8\nf79OFxWJ7si9+3gfzeh9UYFEqOQfzIjLWFyfnas0OnV/P+RMQ1Zr+vPRqO7AR2va\nN9wg+Xl7157dhXPCGYnGMNSoxCbpRs0JNlzvJMuAea5nTTznRaJZtK/xKsqLn51D\nK07k9MHVFXakOH8QtMCUglbwfTfIpO5YRq5imxlWbqsYWVQy1WGJFyW6hWC0+RcJ\nOx5zGtOfi4/dN+xJ+ibnbyvy/il7Qm+vyFhCYqIPyS5m2UVJUuao3eApE38k78/o\n8aQOTnFQZ+U1Sw+6woFTxjqRQBXlQm2+7Bt3bqGATg4sXXWPbmwdL87Ic+mxn/ml\nSMfQux/5k6iAu1kQhwkO2YJn9eII6HIPkW+2m5N1JsUyJQe4cbtZE5Yh3TRA0dm7\n+zoBRfCXkOW4krchbgww/ptVmzMMP7GINJdROrJnsGl5FVeid9qHzV7aZycWSma7\nCxBYB1J8HCbty5NjtD6XMYRrMLxXugvX6Q4NPPH+2NKjzX4SIDejS6JjgrP3KA3O\npMuo7ZHMfveBngv8yP+ZD/1sS6l+dfExvdaJdOdgFCnp4p3gPbw5+Lv70HrMjA==\n=BfZ/\n-----END PGP PUBLIC KEY BLOCK-----\n","checksum":"test:foo"}],"packages":["dnf","dosfstools","e2fsprogs","grub2-pc","policycoreutils","qemu-img","systemd","tar"],"releasever":"30","basearch":"x86_64","module_platform_id":"platform:f30"}}]},"runner":"org.osbuild.fedora30"},"stages":[{"name":"org.osbuild.dnf","options":{"repos":[{"metalink":"https://mirrors.fedoraproject.org/metalink?repo=fedora-30\u0026arch=x86_64","gpgkey":"-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBFturGcBEACv0xBo91V2n0uEC2vh69ywCiSyvUgN/AQH8EZpCVtM7NyjKgKm\nbbY4G3R0M3ir1xXmvUDvK0493/qOiFrjkplvzXFTGpPTi0ypqGgxc5d0ohRA1M75\nL+0AIlXoOgHQ358/c4uO8X0JAA1NYxCkAW1KSJgFJ3RjukrfqSHWthS1d4o8fhHy\nKJKEnirE5hHqB50dafXrBfgZdaOs3C6ppRIePFe2o4vUEapMTCHFw0woQR8Ah4/R\nn7Z9G9Ln+0Cinmy0nbIDiZJ+pgLAXCOWBfDUzcOjDGKvcpoZharA07c0q1/5ojzO\n4F0Fh4g/BUmtrASwHfcIbjHyCSr1j/3Iz883iy07gJY5Yhiuaqmp0o0f9fgHkG53\n2xCU1owmACqaIBNQMukvXRDtB2GJMuKa/asTZDP6R5re+iXs7+s9ohcRRAKGyAyc\nYKIQKcaA+6M8T7/G+TPHZX6HJWqJJiYB+EC2ERblpvq9TPlLguEWcmvjbVc31nyq\nSDoO3ncFWKFmVsbQPTbP+pKUmlLfJwtb5XqxNR5GEXSwVv4I7IqBmJz1MmRafnBZ\ng0FJUtH668GnldO20XbnSVBr820F5SISMXVwCXDXEvGwwiB8Lt8PvqzXnGIFDAu3\nDlQI5sxSqpPVWSyw08ppKT2Tpmy8adiBotLfaCFl2VTHwOae48X2dMPBvQARAQAB\ntDFGZWRvcmEgKDMwKSA8ZmVkb3JhLTMwLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v\ncmc+iQI4BBMBAgAiBQJbbqxnAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK\nCRDvPBEfz8ZZudTnD/9170LL3nyTVUCFmBjT9wZ4gYnpwtKVPa/pKnxbbS+Bmmac\ng9TrT9pZbqOHrNJLiZ3Zx1Hp+8uxr3Lo6kbYwImLhkOEDrf4aP17HfQ6VYFbQZI8\nf79OFxWJ7si9+3gfzeh9UYFEqOQfzIjLWFyfnas0OnV/P+RMQ1Zr+vPRqO7AR2va\nN9wg+Xl7157dhXPCGYnGMNSoxCbpRs0JNlzvJMuAea5nTTznRaJZtK/xKsqLn51D\nK07k9MHVFXakOH8QtMCUglbwfTfIpO5YRq5imxlWbqsYWVQy1WGJFyW6hWC0+RcJ\nOx5zGtOfi4/dN+xJ+ibnbyvy/il7Qm+vyFhCYqIPyS5m2UVJUuao3eApE38k78/o\n8aQOTnFQZ+U1Sw+6woFTxjqRQBXlQm2+7Bt3bqGATg4sXXWPbmwdL87Ic+mxn/ml\nSMfQux/5k6iAu1kQhwkO2YJn9eII6HIPkW+2m5N1JsUyJQe4cbtZE5Yh3TRA0dm7\n+zoBRfCXkOW4krchbgww/ptVmzMMP7GINJdROrJnsGl5FVeid9qHzV7aZycWSma7\nCxBYB1J8HCbty5NjtD6XMYRrMLxXugvX6Q4NPPH+2NKjzX4SIDejS6JjgrP3KA3O\npMuo7ZHMfveBngv8yP+ZD/1sS6l+dfExvdaJdOdgFCnp4p3gPbw5+Lv70HrMjA==\n=BfZ/\n-----END PGP PUBLIC KEY BLOCK-----\n","checksum":"test:foo"}],"packages":["chrony","firewalld","kernel","langpacks-en","policycoreutils","selinux-policy-targeted"],"exclude_packages":["dracut-config-rescue"],"releasever":"30","basearch":"x86_64","module_platform_id":"platform:f30"}},{"name":"org.osbuild.fix-bls","options":{}},{"name":"org.osbuild.locale","options":{"language":"en_US"}},{"name":"org.osbuild.grub2","options":{"root_fs_uuid":"76a22bf4-f153-4541-b6c7-0332c0dfaeac","kernel_opts":"ro biosdevname=0 net.ifnames=0","legacy":true}},{"name":"org.osbuild.selinux","options":{"file_contexts":"etc/selinux/targeted/contexts/files/file_contexts"}}],"assembler":{"name":"org.osbuild.tar","options":{"filename":"root.tar.xz","compression":"xz"}}},"targets":[],"output_type":"tar"}`, "created", "uuid")
 }
 
 func testUpdateTransition(t *testing.T, from, to string, expectedStatus int) {
diff --git a/test/cases/rhel82_qcow2.json b/test/cases/rhel82_qcow2.json
index f88d17cf1..bcc0fed68 100644
--- a/test/cases/rhel82_qcow2.json
+++ b/test/cases/rhel82_qcow2.json
@@ -1,4 +1,7 @@
 {
+  "boot": {
+    "type": "qemu"
+  },
   "compose": {
     "distro": "rhel-8.2",
     "arch": "x86_64",
@@ -8,22 +11,7 @@
     },
     "filename": "disk.qcow2",
     "output-format": "qcow2",
-    "blueprint": {
-      "packages": [
-        {
-          "name": "openssh-server",
-          "version": "*"
-        }
-      ],
-      "customizations": {
-        "user": [
-          {
-            "name": "redhat",
-            "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod"
-          }
-        ]
-      }
-    }
+    "blueprint": {}
   },
   "pipeline": {
     "build": {
@@ -80,21 +68,72 @@
             }
           ],
           "packages": [
+            "@core",
+            "NetworkManager",
             "chrony",
+            "cloud-init",
+            "cloud-utils-growpart",
+            "cockpit-system",
+            "cockpit-ws",
+            "dhcp-client",
+            "dnf",
+            "dnf-plugin-spacewalk",
+            "dnf-utils",
             "dracut-config-generic",
+            "dracut-norescue",
             "grub2-pc",
-            "kernel-core",
-            "langpacks-en",
-            "openssh-server",
-            "polkit",
-            "selinux-policy-targeted",
-            "systemd-udev"
+            "insights-client",
+            "kernel",
+            "nfs-utils",
+            "python3-jsonschema",
+            "qemu-guest-agent",
+            "redhat-release",
+            "redhat-release-eula",
+            "rhn-client-tools",
+            "rhn-setup",
+            "rhnlib",
+            "rhnsd",
+            "rng-tools",
+            "rsync",
+            "subscription-manager-cockpit",
+            "tar",
+            "tcpdump",
+            "yum"
           ],
           "exclude_packages": [
+            "aic94xx-firmware",
+            "alsa-firmware",
+            "alsa-lib",
+            "alsa-tools-firmware",
+            "biosdevname",
             "dracut-config-rescue",
-            "etables",
+            "fedora-release",
+            "fedora-repos",
             "firewalld",
-            "gobject-introspection",
+            "iprutils",
+            "ivtv-firmware",
+            "iwl100-firmware",
+            "iwl1000-firmware",
+            "iwl105-firmware",
+            "iwl135-firmware",
+            "iwl2000-firmware",
+            "iwl2030-firmware",
+            "iwl3160-firmware",
+            "iwl3945-firmware",
+            "iwl4965-firmware",
+            "iwl5000-firmware",
+            "iwl5150-firmware",
+            "iwl6000-firmware",
+            "iwl6000g2a-firmware",
+            "iwl6000g2b-firmware",
+            "iwl6050-firmware",
+            "iwl7260-firmware",
+            "langpacks-*",
+            "langpacks-en",
+            "langpacks-en",
+            "libertas-sd8686-firmware",
+            "libertas-sd8787-firmware",
+            "libertas-usb8388-firmware",
             "plymouth",
             "timedatex"
           ],
@@ -124,7 +163,7 @@
         "name": "org.osbuild.grub2",
         "options": {
           "root_fs_uuid": "0bd700f8-090f-4556-b797-b340297ea1bd",
-          "kernel_opts": "ro net.ifnames=0",
+          "kernel_opts": "console=ttyS0 console=ttyS0,115200n8 no_timer_check crashkernel=auto net.ifnames=0",
           "legacy": true
         }
       },
@@ -134,16 +173,6 @@
           "language": "en_US"
         }
       },
-      {
-        "name": "org.osbuild.users",
-        "options": {
-          "users": {
-            "redhat": {
-              "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod"
-            }
-          }
-        }
-      },
       {
         "name": "org.osbuild.selinux",
         "options": {
@@ -172,5 +201,694 @@
         ]
       }
     }
+  },
+  "image-info": {
+    "boot-environment": {
+      "GRUB2_BOOT_FS_UUID": "0bd700f8-090f-4556-b797-b340297ea1bd",
+      "GRUB2_ROOT_FS_UUID": "0bd700f8-090f-4556-b797-b340297ea1bd",
+      "kernelopts": "root=UUID=0bd700f8-090f-4556-b797-b340297ea1bd console=ttyS0 console=ttyS0,115200n8 no_timer_check crashkernel=auto net.ifnames=0"
+    },
+    "bootloader": "grub",
+    "bootmenu": [
+      {
+        "grub_arg": "--unrestricted",
+        "grub_class": "kernel",
+        "grub_users": "$grub_users",
+        "id": "rhel-20191211164051-4.18.0-164.el8.x86_64",
+        "initrd": "/boot/initramfs-4.18.0-164.el8.x86_64.img $tuned_initrd",
+        "linux": "/boot/vmlinuz-4.18.0-164.el8.x86_64",
+        "options": "$kernelopts $tuned_params",
+        "title": "Red Hat Enterprise Linux (4.18.0-164.el8.x86_64) 8.2 (Ootpa)",
+        "version": "4.18.0-164.el8.x86_64"
+      }
+    ],
+    "fstab": [
+      [
+        "UUID=0bd700f8-090f-4556-b797-b340297ea1bd",
+        "/",
+        "xfs",
+        "defaults",
+        "0",
+        "0"
+      ]
+    ],
+    "groups": [
+      "adm:x:4:",
+      "audio:x:63:",
+      "bin:x:1:",
+      "cdrom:x:11:",
+      "chrony:x:989:",
+      "cockpit-ws:x:991:",
+      "cockpit-wsinstance:x:990:",
+      "daemon:x:2:",
+      "dbus:x:81:",
+      "dialout:x:18:",
+      "disk:x:6:",
+      "floppy:x:19:",
+      "ftp:x:50:",
+      "games:x:20:",
+      "input:x:999:",
+      "kmem:x:9:",
+      "kvm:x:36:",
+      "lock:x:54:",
+      "lp:x:7:",
+      "mail:x:12:",
+      "man:x:15:",
+      "mem:x:8:",
+      "nobody:x:65534:",
+      "polkitd:x:996:",
+      "render:x:998:",
+      "rngd:x:988:",
+      "root:x:0:",
+      "rpc:x:32:",
+      "rpcuser:x:29:",
+      "setroubleshoot:x:992:",
+      "ssh_keys:x:994:",
+      "sshd:x:74:",
+      "sssd:x:993:",
+      "sys:x:3:",
+      "systemd-coredump:x:997:",
+      "systemd-journal:x:190:",
+      "systemd-resolve:x:193:",
+      "tape:x:33:",
+      "tcpdump:x:72:",
+      "tss:x:59:",
+      "tty:x:5:",
+      "unbound:x:995:",
+      "users:x:100:",
+      "utempter:x:35:",
+      "utmp:x:22:",
+      "video:x:39:",
+      "wheel:x:10:"
+    ],
+    "image-format": "qcow2",
+    "os-release": {
+      "ANSI_COLOR": "0;31",
+      "BUG_REPORT_URL": "https://bugzilla.redhat.com/",
+      "CPE_NAME": "cpe:/o:redhat:enterprise_linux:8.2:beta",
+      "HOME_URL": "https://www.redhat.com/",
+      "ID": "rhel",
+      "ID_LIKE": "fedora",
+      "NAME": "Red Hat Enterprise Linux",
+      "PLATFORM_ID": "platform:el8",
+      "PRETTY_NAME": "Red Hat Enterprise Linux 8.2 Beta (Ootpa)",
+      "REDHAT_BUGZILLA_PRODUCT": "Red Hat Enterprise Linux 8",
+      "REDHAT_BUGZILLA_PRODUCT_VERSION": "8.2",
+      "REDHAT_SUPPORT_PRODUCT": "Red Hat Enterprise Linux",
+      "REDHAT_SUPPORT_PRODUCT_VERSION": "8.2 Beta",
+      "VERSION": "8.2 (Ootpa)",
+      "VERSION_ID": "8.2"
+    },
+    "packages": [
+      "NetworkManager-1.22.0-0.2.el8.x86_64",
+      "NetworkManager-libnm-1.22.0-0.2.el8.x86_64",
+      "NetworkManager-team-1.22.0-0.2.el8.x86_64",
+      "NetworkManager-tui-1.22.0-0.2.el8.x86_64",
+      "abattis-cantarell-fonts-0.0.25-4.el8.noarch",
+      "acl-2.2.53-1.el8.x86_64",
+      "audit-3.0-0.16.20191104git1c2f876.el8.x86_64",
+      "audit-libs-3.0-0.16.20191104git1c2f876.el8.x86_64",
+      "authselect-1.1-2.el8.x86_64",
+      "authselect-libs-1.1-2.el8.x86_64",
+      "basesystem-11-5.el8.noarch",
+      "bash-4.4.19-10.el8.x86_64",
+      "bind-export-libs-9.11.13-1.el8.x86_64",
+      "brotli-1.0.6-1.el8.x86_64",
+      "bzip2-libs-1.0.6-26.el8.x86_64",
+      "c-ares-1.13.0-5.el8.x86_64",
+      "ca-certificates-2019.2.32-81.el8.noarch",
+      "cairo-1.15.12-3.el8.x86_64",
+      "cairo-gobject-1.15.12-3.el8.x86_64",
+      "checkpolicy-2.9-1.el8.x86_64",
+      "chkconfig-1.11-1.el8.x86_64",
+      "chrony-3.5-1.el8.x86_64",
+      "cloud-init-18.5-8.el8.noarch",
+      "cloud-utils-growpart-0.29-3.el8.noarch",
+      "cockpit-bridge-208-1.el8.x86_64",
+      "cockpit-system-208-1.el8.noarch",
+      "cockpit-ws-208-1.el8.x86_64",
+      "coreutils-8.30-6.el8.x86_64",
+      "coreutils-common-8.30-6.el8.x86_64",
+      "cpio-2.12-8.el8.x86_64",
+      "cracklib-2.9.6-15.el8.x86_64",
+      "cracklib-dicts-2.9.6-15.el8.x86_64",
+      "cronie-1.5.2-4.el8.x86_64",
+      "cronie-anacron-1.5.2-4.el8.x86_64",
+      "crontabs-1.11-16.20150630git.el8.noarch",
+      "crypto-policies-20191128-1.git23e1bf1.el8.noarch",
+      "cryptsetup-libs-2.2.2-1.el8.x86_64",
+      "curl-7.61.1-12.el8.x86_64",
+      "cyrus-sasl-lib-2.1.27-1.el8.x86_64",
+      "dbus-1.12.8-9.el8.x86_64",
+      "dbus-common-1.12.8-9.el8.noarch",
+      "dbus-daemon-1.12.8-9.el8.x86_64",
+      "dbus-glib-0.110-2.el8.x86_64",
+      "dbus-libs-1.12.8-9.el8.x86_64",
+      "dbus-tools-1.12.8-9.el8.x86_64",
+      "device-mapper-1.02.167-1.el8.x86_64",
+      "device-mapper-libs-1.02.167-1.el8.x86_64",
+      "dhcp-client-4.3.6-40.el8.x86_64",
+      "dhcp-common-4.3.6-40.el8.noarch",
+      "dhcp-libs-4.3.6-40.el8.x86_64",
+      "diffutils-3.6-6.el8.x86_64",
+      "dmidecode-3.2-5.el8.x86_64",
+      "dnf-4.2.17-2.el8.noarch",
+      "dnf-data-4.2.17-2.el8.noarch",
+      "dnf-plugin-spacewalk-2.8.5-11.module+el8.1.0+3455+3ddf2832.noarch",
+      "dnf-plugin-subscription-manager-1.26.8-1.el8.x86_64",
+      "dnf-plugins-core-4.0.12-1.el8.noarch",
+      "dracut-049-60.git20191129.el8.x86_64",
+      "dracut-config-generic-049-60.git20191129.el8.x86_64",
+      "dracut-network-049-60.git20191129.el8.x86_64",
+      "dracut-squash-049-60.git20191129.el8.x86_64",
+      "e2fsprogs-1.44.6-3.el8.x86_64",
+      "e2fsprogs-libs-1.44.6-3.el8.x86_64",
+      "elfutils-debuginfod-client-0.178-5.el8.x86_64",
+      "elfutils-default-yama-scope-0.178-5.el8.noarch",
+      "elfutils-libelf-0.178-5.el8.x86_64",
+      "elfutils-libs-0.178-5.el8.x86_64",
+      "ethtool-5.0-2.el8.x86_64",
+      "expat-2.2.5-3.el8.x86_64",
+      "file-5.33-13.el8.x86_64",
+      "file-libs-5.33-13.el8.x86_64",
+      "filesystem-3.8-2.el8.x86_64",
+      "findutils-4.6.0-20.el8.x86_64",
+      "fipscheck-1.5.0-4.el8.x86_64",
+      "fipscheck-lib-1.5.0-4.el8.x86_64",
+      "fontconfig-2.13.1-3.el8.x86_64",
+      "fontpackages-filesystem-1.44-22.el8.noarch",
+      "freetype-2.9.1-4.el8.x86_64",
+      "fuse-libs-2.9.7-12.el8.x86_64",
+      "gawk-4.2.1-1.el8.x86_64",
+      "gdbm-1.18-1.el8.x86_64",
+      "gdbm-libs-1.18-1.el8.x86_64",
+      "geolite2-city-20180605-1.el8.noarch",
+      "geolite2-country-20180605-1.el8.noarch",
+      "gettext-0.19.8.1-17.el8.x86_64",
+      "gettext-libs-0.19.8.1-17.el8.x86_64",
+      "glib-networking-2.56.1-1.1.el8.x86_64",
+      "glib2-2.56.4-7.el8.x86_64",
+      "glibc-2.28-99.el8.x86_64",
+      "glibc-all-langpacks-2.28-99.el8.x86_64",
+      "glibc-common-2.28-99.el8.x86_64",
+      "gmp-6.1.2-10.el8.x86_64",
+      "gnupg2-2.2.9-1.el8.x86_64",
+      "gnupg2-smime-2.2.9-1.el8.x86_64",
+      "gnutls-3.6.8-9.el8.x86_64",
+      "gobject-introspection-1.56.1-1.el8.x86_64",
+      "gpgme-1.10.0-6.el8.x86_64",
+      "grep-3.1-6.el8.x86_64",
+      "groff-base-1.22.3-18.el8.x86_64",
+      "grub2-common-2.02-81.el8.noarch",
+      "grub2-pc-2.02-81.el8.x86_64",
+      "grub2-pc-modules-2.02-81.el8.noarch",
+      "grub2-tools-2.02-81.el8.x86_64",
+      "grub2-tools-extra-2.02-81.el8.x86_64",
+      "grub2-tools-minimal-2.02-81.el8.x86_64",
+      "grubby-8.40-38.el8.x86_64",
+      "gsettings-desktop-schemas-3.32.0-4.el8.x86_64",
+      "gssproxy-0.8.0-15.el8.x86_64",
+      "gzip-1.9-9.el8.x86_64",
+      "hardlink-1.3-6.el8.x86_64",
+      "hdparm-9.54-2.el8.x86_64",
+      "hostname-3.20-6.el8.x86_64",
+      "hwdata-0.314-8.3.el8.noarch",
+      "ima-evm-utils-1.1-5.el8.x86_64",
+      "info-6.5-5.el8.x86_64",
+      "initscripts-10.00.6-1.el8.x86_64",
+      "insights-client-3.0.8-4.el8_1.noarch",
+      "ipcalc-0.2.4-4.el8.x86_64",
+      "iproute-5.3.0-1.el8.x86_64",
+      "iptables-libs-1.8.4-6.el8.x86_64",
+      "iputils-20180629-2.el8.x86_64",
+      "irqbalance-1.4.0-4.el8.x86_64",
+      "jansson-2.11-3.el8.x86_64",
+      "json-c-0.13.1-0.2.el8.x86_64",
+      "json-glib-1.4.4-1.el8.x86_64",
+      "kbd-2.0.4-8.el8.x86_64",
+      "kbd-legacy-2.0.4-8.el8.noarch",
+      "kbd-misc-2.0.4-8.el8.noarch",
+      "kernel-4.18.0-164.el8.x86_64",
+      "kernel-core-4.18.0-164.el8.x86_64",
+      "kernel-modules-4.18.0-164.el8.x86_64",
+      "kernel-tools-4.18.0-164.el8.x86_64",
+      "kernel-tools-libs-4.18.0-164.el8.x86_64",
+      "kexec-tools-2.0.20-8.el8.x86_64",
+      "keyutils-1.5.10-6.el8.x86_64",
+      "keyutils-libs-1.5.10-6.el8.x86_64",
+      "kmod-25-16.el8.x86_64",
+      "kmod-libs-25-16.el8.x86_64",
+      "kpartx-0.8.3-2.el8.x86_64",
+      "krb5-libs-1.17-17.el8.x86_64",
+      "less-530-1.el8.x86_64",
+      "libX11-1.6.7-1.el8.x86_64",
+      "libX11-common-1.6.7-1.el8.noarch",
+      "libXau-1.0.8-13.el8.x86_64",
+      "libXext-1.3.3-9.el8.x86_64",
+      "libXrender-0.9.10-7.el8.x86_64",
+      "libacl-2.2.53-1.el8.x86_64",
+      "libarchive-3.3.2-7.el8.x86_64",
+      "libassuan-2.5.1-3.el8.x86_64",
+      "libattr-2.4.48-3.el8.x86_64",
+      "libbasicobjects-0.1.1-39.el8.x86_64",
+      "libblkid-2.32.1-17.el8.x86_64",
+      "libcap-2.26-3.el8.x86_64",
+      "libcap-ng-0.7.9-5.el8.x86_64",
+      "libcollection-0.7.0-39.el8.x86_64",
+      "libcom_err-1.44.6-3.el8.x86_64",
+      "libcomps-0.1.11-3.el8.x86_64",
+      "libcroco-0.6.12-4.el8.x86_64",
+      "libcurl-7.61.1-12.el8.x86_64",
+      "libdaemon-0.14-15.el8.x86_64",
+      "libdb-5.3.28-37.el8.x86_64",
+      "libdb-utils-5.3.28-37.el8.x86_64",
+      "libdhash-0.5.0-39.el8.x86_64",
+      "libdnf-0.39.1-1.el8.x86_64",
+      "libedit-3.1-23.20170329cvs.el8.x86_64",
+      "libestr-0.1.10-1.el8.x86_64",
+      "libevent-2.1.8-5.el8.x86_64",
+      "libfastjson-0.99.8-2.el8.x86_64",
+      "libfdisk-2.32.1-17.el8.x86_64",
+      "libffi-3.1-21.el8.x86_64",
+      "libgcc-8.3.1-5.el8.x86_64",
+      "libgcrypt-1.8.3-4.el8.x86_64",
+      "libgomp-8.3.1-5.el8.x86_64",
+      "libgpg-error-1.31-1.el8.x86_64",
+      "libgudev-232-4.el8.x86_64",
+      "libidn2-2.2.0-1.el8.x86_64",
+      "libini_config-1.3.1-39.el8.x86_64",
+      "libkcapi-1.1.1-16_1.el8.x86_64",
+      "libkcapi-hmaccalc-1.1.1-16_1.el8.x86_64",
+      "libksba-1.3.5-7.el8.x86_64",
+      "libldb-2.0.7-3.el8.x86_64",
+      "libmaxminddb-1.2.0-6.el8.x86_64",
+      "libmetalink-0.1.3-7.el8.x86_64",
+      "libmnl-1.0.4-6.el8.x86_64",
+      "libmodman-2.0.1-17.el8.x86_64",
+      "libmodulemd1-1.8.16-0.2.8.2.1.x86_64",
+      "libmount-2.32.1-17.el8.x86_64",
+      "libndp-1.7-3.el8.x86_64",
+      "libnfsidmap-2.3.3-28.el8.x86_64",
+      "libnghttp2-1.33.0-1.el8_0.1.x86_64",
+      "libnl3-3.5.0-1.el8.x86_64",
+      "libnl3-cli-3.5.0-1.el8.x86_64",
+      "libnsl2-1.2.0-2.20180605git4a062cf.el8.x86_64",
+      "libpath_utils-0.2.1-39.el8.x86_64",
+      "libpcap-1.9.0-3.el8.x86_64",
+      "libpipeline-1.5.0-2.el8.x86_64",
+      "libpng-1.6.34-7.el8.x86_64",
+      "libproxy-0.4.15-5.2.el8.x86_64",
+      "libpsl-0.20.2-5.el8.x86_64",
+      "libpwquality-1.4.0-9.el8.x86_64",
+      "libref_array-0.1.5-39.el8.x86_64",
+      "librepo-1.11.0-2.el8.x86_64",
+      "libreport-filesystem-2.9.5-9.el8.x86_64",
+      "librhsm-0.0.3-3.el8.x86_64",
+      "libseccomp-2.4.1-1.el8.x86_64",
+      "libsecret-0.18.6-1.el8.x86_64",
+      "libselinux-2.9-3.el8.x86_64",
+      "libselinux-utils-2.9-3.el8.x86_64",
+      "libsemanage-2.9-2.el8.x86_64",
+      "libsepol-2.9-1.el8.x86_64",
+      "libsigsegv-2.11-5.el8.x86_64",
+      "libsmartcols-2.32.1-17.el8.x86_64",
+      "libsolv-0.7.7-1.el8.x86_64",
+      "libss-1.44.6-3.el8.x86_64",
+      "libssh-0.9.0-4.el8.x86_64",
+      "libssh-config-0.9.0-4.el8.noarch",
+      "libsss_autofs-2.2.3-3.el8.x86_64",
+      "libsss_certmap-2.2.3-3.el8.x86_64",
+      "libsss_idmap-2.2.3-3.el8.x86_64",
+      "libsss_nss_idmap-2.2.3-3.el8.x86_64",
+      "libsss_sudo-2.2.3-3.el8.x86_64",
+      "libstdc++-8.3.1-5.el8.x86_64",
+      "libsysfs-2.1.0-24.el8.x86_64",
+      "libtalloc-2.2.0-7.el8.x86_64",
+      "libtasn1-4.13-3.el8.x86_64",
+      "libtdb-1.4.2-2.el8.x86_64",
+      "libteam-1.29-1.el8.x86_64",
+      "libtevent-0.10.0-2.el8.x86_64",
+      "libtirpc-1.1.4-4.el8.x86_64",
+      "libunistring-0.9.9-3.el8.x86_64",
+      "libusbx-1.0.22-1.el8.x86_64",
+      "libuser-0.62-23.el8.x86_64",
+      "libutempter-1.1.6-14.el8.x86_64",
+      "libuuid-2.32.1-17.el8.x86_64",
+      "libverto-0.3.0-5.el8.x86_64",
+      "libverto-libevent-0.3.0-5.el8.x86_64",
+      "libxcb-1.13.1-1.el8.x86_64",
+      "libxcrypt-4.1.1-4.el8.x86_64",
+      "libxkbcommon-0.9.1-1.el8.x86_64",
+      "libxml2-2.9.7-7.el8.x86_64",
+      "libyaml-0.1.7-5.el8.x86_64",
+      "libzstd-1.4.2-2.el8.x86_64",
+      "linux-firmware-20191202-96.gite8a0f4c9.el8.noarch",
+      "logrotate-3.14.0-3.el8.x86_64",
+      "lshw-B.02.18-22.el8.x86_64",
+      "lsscsi-0.30-1.el8.x86_64",
+      "lua-libs-5.3.4-11.el8.x86_64",
+      "lz4-libs-1.8.1.2-4.el8.x86_64",
+      "lzo-2.08-14.el8.x86_64",
+      "man-db-2.7.6.1-17.el8.x86_64",
+      "microcode_ctl-20191115-3.el8.x86_64",
+      "mozjs60-60.9.0-3.el8.x86_64",
+      "mpfr-3.1.6-1.el8.x86_64",
+      "ncurses-6.1-7.20180224.el8.x86_64",
+      "ncurses-base-6.1-7.20180224.el8.noarch",
+      "ncurses-libs-6.1-7.20180224.el8.x86_64",
+      "net-tools-2.0-0.51.20160912git.el8.x86_64",
+      "nettle-3.4.1-1.el8.x86_64",
+      "newt-0.52.20-11.el8.x86_64",
+      "nfs-utils-2.3.3-28.el8.x86_64",
+      "npth-1.5-4.el8.x86_64",
+      "numactl-libs-2.0.12-9.el8.x86_64",
+      "openldap-2.4.46-10.el8.x86_64",
+      "openssh-8.0p1-3.el8.x86_64",
+      "openssh-clients-8.0p1-3.el8.x86_64",
+      "openssh-server-8.0p1-3.el8.x86_64",
+      "openssl-1.1.1c-12.el8.x86_64",
+      "openssl-libs-1.1.1c-12.el8.x86_64",
+      "openssl-pkcs11-0.4.10-2.el8.x86_64",
+      "os-prober-1.74-6.el8.x86_64",
+      "p11-kit-0.23.14-5.el8_0.x86_64",
+      "p11-kit-trust-0.23.14-5.el8_0.x86_64",
+      "pam-1.3.1-5.el8.x86_64",
+      "parted-3.2-38.el8.x86_64",
+      "passwd-0.80-2.el8.x86_64",
+      "pciutils-3.5.6-4.el8.x86_64",
+      "pciutils-libs-3.5.6-4.el8.x86_64",
+      "pcre-8.42-4.el8.x86_64",
+      "pcre2-10.32-1.el8.x86_64",
+      "pigz-2.4-4.el8.x86_64",
+      "pinentry-1.1.0-2.el8.x86_64",
+      "pixman-0.38.4-1.el8.x86_64",
+      "platform-python-3.6.8-23.el8.x86_64",
+      "platform-python-pip-9.0.3-15.el8.noarch",
+      "platform-python-setuptools-39.2.0-5.el8.noarch",
+      "policycoreutils-2.9-8.el8.x86_64",
+      "policycoreutils-python-utils-2.9-8.el8.noarch",
+      "polkit-0.115-11.el8.x86_64",
+      "polkit-libs-0.115-11.el8.x86_64",
+      "polkit-pkla-compat-0.1-12.el8.x86_64",
+      "popt-1.16-14.el8.x86_64",
+      "prefixdevname-0.1.0-6.el8.x86_64",
+      "procps-ng-3.3.15-1.el8.x86_64",
+      "publicsuffix-list-dafsa-20180723-1.el8.noarch",
+      "python3-asn1crypto-0.24.0-3.el8.noarch",
+      "python3-audit-3.0-0.16.20191104git1c2f876.el8.x86_64",
+      "python3-babel-2.5.1-5.el8.noarch",
+      "python3-cairo-1.16.3-6.el8.x86_64",
+      "python3-cffi-1.11.5-5.el8.x86_64",
+      "python3-chardet-3.0.4-7.el8.noarch",
+      "python3-configobj-5.0.6-11.el8.noarch",
+      "python3-cryptography-2.3-3.el8.x86_64",
+      "python3-dateutil-2.6.1-6.el8.noarch",
+      "python3-dbus-1.2.4-15.el8.x86_64",
+      "python3-decorator-4.2.1-2.el8.noarch",
+      "python3-dmidecode-3.12.2-15.el8.x86_64",
+      "python3-dnf-4.2.17-2.el8.noarch",
+      "python3-dnf-plugin-spacewalk-2.8.5-11.module+el8.1.0+3455+3ddf2832.noarch",
+      "python3-dnf-plugins-core-4.0.12-1.el8.noarch",
+      "python3-ethtool-0.14-3.el8.x86_64",
+      "python3-gobject-3.28.3-1.el8.x86_64",
+      "python3-gobject-base-3.28.3-1.el8.x86_64",
+      "python3-gpg-1.10.0-6.el8.x86_64",
+      "python3-hawkey-0.39.1-1.el8.x86_64",
+      "python3-hwdata-2.3.6-3.el8.noarch",
+      "python3-idna-2.5-5.el8.noarch",
+      "python3-iniparse-0.4-31.el8.noarch",
+      "python3-inotify-0.9.6-13.el8.noarch",
+      "python3-jinja2-2.10.1-2.el8_0.noarch",
+      "python3-jsonpatch-1.21-2.el8.noarch",
+      "python3-jsonpointer-1.10-11.el8.noarch",
+      "python3-jsonschema-2.6.0-4.el8.noarch",
+      "python3-jwt-1.6.1-2.el8.noarch",
+      "python3-libcomps-0.1.11-3.el8.x86_64",
+      "python3-libdnf-0.39.1-1.el8.x86_64",
+      "python3-librepo-1.11.0-2.el8.x86_64",
+      "python3-libs-3.6.8-23.el8.x86_64",
+      "python3-libselinux-2.9-3.el8.x86_64",
+      "python3-libsemanage-2.9-2.el8.x86_64",
+      "python3-libxml2-2.9.7-7.el8.x86_64",
+      "python3-linux-procfs-0.6-7.el8.noarch",
+      "python3-magic-5.33-13.el8.noarch",
+      "python3-markupsafe-0.23-19.el8.x86_64",
+      "python3-netifaces-0.10.6-4.el8.x86_64",
+      "python3-newt-0.52.20-11.el8.x86_64",
+      "python3-oauthlib-2.1.0-1.el8.noarch",
+      "python3-perf-4.18.0-164.el8.x86_64",
+      "python3-pip-wheel-9.0.3-15.el8.noarch",
+      "python3-ply-3.9-8.el8.noarch",
+      "python3-policycoreutils-2.9-8.el8.noarch",
+      "python3-prettytable-0.7.2-14.el8.noarch",
+      "python3-pyOpenSSL-18.0.0-1.el8.noarch",
+      "python3-pycparser-2.14-14.el8.noarch",
+      "python3-pyserial-3.1.1-8.el8.noarch",
+      "python3-pysocks-1.6.8-3.el8.noarch",
+      "python3-pytz-2017.2-9.el8.noarch",
+      "python3-pyudev-0.21.0-7.el8.noarch",
+      "python3-pyyaml-3.12-12.el8.x86_64",
+      "python3-requests-2.20.0-2.1.el8_1.noarch",
+      "python3-rhn-check-2.8.16-13.module+el8.1.0+3455+3ddf2832.x86_64",
+      "python3-rhn-client-tools-2.8.16-13.module+el8.1.0+3455+3ddf2832.x86_64",
+      "python3-rhn-setup-2.8.16-13.module+el8.1.0+3455+3ddf2832.x86_64",
+      "python3-rhnlib-2.8.6-8.module+el8.1.0+3455+3ddf2832.noarch",
+      "python3-rpm-4.14.2-35.el8.x86_64",
+      "python3-schedutils-0.6-6.el8.x86_64",
+      "python3-setools-4.2.2-2.el8.x86_64",
+      "python3-setuptools-wheel-39.2.0-5.el8.noarch",
+      "python3-six-1.11.0-8.el8.noarch",
+      "python3-slip-0.6.4-11.el8.noarch",
+      "python3-slip-dbus-0.6.4-11.el8.noarch",
+      "python3-subscription-manager-rhsm-1.26.8-1.el8.x86_64",
+      "python3-syspurpose-1.26.8-1.el8.x86_64",
+      "python3-systemd-234-8.el8.x86_64",
+      "python3-unbound-1.7.3-10.el8.x86_64",
+      "python3-urllib3-1.24.2-4.el8.noarch",
+      "qemu-guest-agent-2.12.0-93.module+el8.2.0+5173+94838aaa.x86_64",
+      "quota-4.04-10.el8.x86_64",
+      "quota-nls-4.04-10.el8.noarch",
+      "readline-7.0-10.el8.x86_64",
+      "redhat-logos-81.1-1.el8.x86_64",
+      "redhat-release-8.2-0.5.el8.x86_64",
+      "redhat-release-eula-8.2-0.5.el8.x86_64",
+      "rhn-check-2.8.16-13.module+el8.1.0+3455+3ddf2832.x86_64",
+      "rhn-client-tools-2.8.16-13.module+el8.1.0+3455+3ddf2832.x86_64",
+      "rhn-setup-2.8.16-13.module+el8.1.0+3455+3ddf2832.x86_64",
+      "rhnlib-2.8.6-8.module+el8.1.0+3455+3ddf2832.noarch",
+      "rhnsd-5.0.35-3.module+el8.1.0+3455+3ddf2832.x86_64",
+      "rhsm-icons-1.26.8-1.el8.noarch",
+      "rng-tools-6.8-2.el8.x86_64",
+      "rootfiles-8.1-22.el8.noarch",
+      "rpcbind-1.2.5-5.el8.x86_64",
+      "rpm-4.14.2-35.el8.x86_64",
+      "rpm-build-libs-4.14.2-35.el8.x86_64",
+      "rpm-libs-4.14.2-35.el8.x86_64",
+      "rpm-plugin-selinux-4.14.2-35.el8.x86_64",
+      "rpm-plugin-systemd-inhibit-4.14.2-35.el8.x86_64",
+      "rsync-3.1.3-7.el8.x86_64",
+      "rsyslog-8.1911.0-2.el8.x86_64",
+      "sed-4.5-1.el8.x86_64",
+      "selinux-policy-3.14.3-29.el8.noarch",
+      "selinux-policy-targeted-3.14.3-29.el8.noarch",
+      "setroubleshoot-plugins-3.3.11-1.el8.noarch",
+      "setroubleshoot-server-3.3.20-2.el8.x86_64",
+      "setup-2.12.2-5.el8.noarch",
+      "sg3_utils-1.44-4.el8.x86_64",
+      "sg3_utils-libs-1.44-4.el8.x86_64",
+      "shadow-utils-4.6-8.el8.x86_64",
+      "shared-mime-info-1.9-3.el8.x86_64",
+      "slang-2.3.2-3.el8.x86_64",
+      "snappy-1.1.7-5.el8.x86_64",
+      "sqlite-libs-3.26.0-4.el8.x86_64",
+      "squashfs-tools-4.3-19.el8.x86_64",
+      "sscg-2.3.3-8.el8.x86_64",
+      "sssd-client-2.2.3-3.el8.x86_64",
+      "sssd-common-2.2.3-3.el8.x86_64",
+      "sssd-kcm-2.2.3-3.el8.x86_64",
+      "sssd-nfs-idmap-2.2.3-3.el8.x86_64",
+      "subscription-manager-1.26.8-1.el8.x86_64",
+      "subscription-manager-cockpit-1.26.8-1.el8.noarch",
+      "subscription-manager-rhsm-certificates-1.26.8-1.el8.x86_64",
+      "sudo-1.8.29-2.el8.x86_64",
+      "systemd-239-21.el8.x86_64",
+      "systemd-libs-239-21.el8.x86_64",
+      "systemd-pam-239-21.el8.x86_64",
+      "systemd-udev-239-21.el8.x86_64",
+      "tar-1.30-4.el8.x86_64",
+      "tcpdump-4.9.2-6.el8.x86_64",
+      "teamd-1.29-1.el8.x86_64",
+      "trousers-0.3.14-4.el8.x86_64",
+      "trousers-lib-0.3.14-4.el8.x86_64",
+      "tuned-2.13.0-1.el8.noarch",
+      "tzdata-2019c-1.el8.noarch",
+      "unbound-libs-1.7.3-10.el8.x86_64",
+      "usermode-1.113-1.el8.x86_64",
+      "util-linux-2.32.1-17.el8.x86_64",
+      "vim-minimal-8.0.1763-13.el8.x86_64",
+      "virt-what-1.18-8.el8.x86_64",
+      "which-2.21-12.el8.x86_64",
+      "xfsprogs-5.0.0-1.el8.x86_64",
+      "xkeyboard-config-2.28-1.el8.noarch",
+      "xz-5.2.4-3.el8.x86_64",
+      "xz-libs-5.2.4-3.el8.x86_64",
+      "yum-4.2.17-2.el8.noarch",
+      "yum-utils-4.0.12-1.el8.noarch",
+      "zlib-1.2.11-13.el8.x86_64"
+    ],
+    "partition-table": "dos",
+    "partition-table-id": "0x14fc63d2",
+    "partitions": [
+      {
+        "bootable": true,
+        "fstype": "xfs",
+        "label": null,
+        "partuuid": "14fc63d2-01",
+        "size": 3220176896,
+        "start": 1048576,
+        "type": "83",
+        "uuid": "0bd700f8-090f-4556-b797-b340297ea1bd"
+      }
+    ],
+    "passwd": [
+      "adm:x:3:4:adm:/var/adm:/sbin/nologin",
+      "bin:x:1:1:bin:/bin:/sbin/nologin",
+      "chrony:x:992:989::/var/lib/chrony:/sbin/nologin",
+      "cockpit-ws:x:994:991:User for cockpit web service:/nonexisting:/sbin/nologin",
+      "cockpit-wsinstance:x:993:990:User for cockpit-ws instances:/nonexisting:/sbin/nologin",
+      "daemon:x:2:2:daemon:/sbin:/sbin/nologin",
+      "dbus:x:81:81:System message bus:/:/sbin/nologin",
+      "ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin",
+      "games:x:12:100:games:/usr/games:/sbin/nologin",
+      "halt:x:7:0:halt:/sbin:/sbin/halt",
+      "lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin",
+      "mail:x:8:12:mail:/var/spool/mail:/sbin/nologin",
+      "nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin",
+      "operator:x:11:0:operator:/root:/sbin/nologin",
+      "polkitd:x:998:996:User for polkitd:/:/sbin/nologin",
+      "rngd:x:991:988:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin",
+      "root:x:0:0:root:/root:/bin/bash",
+      "rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin",
+      "rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin",
+      "setroubleshoot:x:995:992::/var/lib/setroubleshoot:/sbin/nologin",
+      "shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown",
+      "sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin",
+      "sssd:x:996:993:User for sssd:/:/sbin/nologin",
+      "sync:x:5:0:sync:/sbin:/bin/sync",
+      "systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin",
+      "systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin",
+      "tcpdump:x:72:72::/:/sbin/nologin",
+      "tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin",
+      "unbound:x:997:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin"
+    ],
+    "rpm-verify": {
+      "changed": {
+        "/etc/selinux/targeted/contexts/files/file_contexts.local": "S.5....T.",
+        "/etc/udev/hwdb.bin": ".M.......",
+        "/proc": ".M.......",
+        "/sys": ".M.......",
+        "/usr/share/info/dir.old": ".M.......",
+        "/var/cache/private": ".M.......",
+        "/var/lib/private": ".M.......",
+        "/var/lib/selinux/targeted/active/commit_num": "..5....T.",
+        "/var/lib/selinux/targeted/active/file_contexts": ".......T.",
+        "/var/lib/selinux/targeted/active/homedir_template": ".......T.",
+        "/var/lib/selinux/targeted/active/policy.kern": "S.5....T.",
+        "/var/lib/selinux/targeted/active/seusers": ".......T.",
+        "/var/lib/selinux/targeted/active/users_extra": ".......T.",
+        "/var/log/btmp": ".M.......",
+        "/var/log/lastlog": ".M....G..",
+        "/var/log/private": ".M.......",
+        "/var/spool/anacron/cron.daily": ".M.......",
+        "/var/spool/anacron/cron.monthly": ".M.......",
+        "/var/spool/anacron/cron.weekly": ".M......."
+      },
+      "missing": [
+        "/etc/systemd/system/dbus-org.freedesktop.resolve1.service"
+      ]
+    },
+    "services-disabled": [
+      "tmp.mount",
+      "arp-ethers.service",
+      "chrony-wait.service",
+      "console-getty.service",
+      "cpupower.service",
+      "debug-shell.service",
+      "gssproxy.service",
+      "nfs-blkmap.service",
+      "nfs-server.service",
+      "qemu-guest-agent.service",
+      "rdisc.service",
+      "rhnsd.service",
+      "rhsm-facts.service",
+      "rhsm.service",
+      "rngd-wake-threshold.service",
+      "serial-getty@.service",
+      "sshd-keygen@.service",
+      "systemd-resolved.service",
+      "tcsd.service",
+      "cockpit.socket",
+      "sshd.socket",
+      "sssd-autofs.socket",
+      "sssd-nss.socket",
+      "sssd-pac.socket",
+      "sssd-pam-priv.socket",
+      "sssd-pam.socket",
+      "sssd-ssh.socket",
+      "sssd-sudo.socket",
+      "ctrl-alt-del.target",
+      "exit.target",
+      "halt.target",
+      "kexec.target",
+      "poweroff.target",
+      "reboot.target",
+      "remote-cryptsetup.target",
+      "runlevel0.target",
+      "runlevel6.target",
+      "chrony-dnssrv@.timer",
+      "fstrim.timer",
+      "insights-client.timer"
+    ],
+    "services-enabled": [
+      "auditd.service",
+      "autovt@.service",
+      "chronyd.service",
+      "cloud-config.service",
+      "cloud-final.service",
+      "cloud-init-local.service",
+      "cloud-init.service",
+      "crond.service",
+      "dbus-org.freedesktop.nm-dispatcher.service",
+      "getty@.service",
+      "import-state.service",
+      "irqbalance.service",
+      "kdump.service",
+      "loadmodules.service",
+      "microcode.service",
+      "NetworkManager-dispatcher.service",
+      "NetworkManager-wait-online.service",
+      "NetworkManager.service",
+      "nfs-convert.service",
+      "nis-domainname.service",
+      "rhsmcertd.service",
+      "rngd.service",
+      "rpcbind.service",
+      "rsyslog.service",
+      "selinux-autorelabel-mark.service",
+      "sshd.service",
+      "sssd.service",
+      "syslog.service",
+      "tuned.service",
+      "rpcbind.socket",
+      "sssd-kcm.socket",
+      "nfs-client.target",
+      "remote-fs.target",
+      "dnf-makecache.timer",
+      "unbound-anchor.timer",
+      "unbound-anchor.timer",
+      "unbound-anchor.timer",
+      "unbound-anchor.timer"
+    ],
+    "timezone": "UTC"
   }
 }