Repository: osbuild/osbuild-composer
Pull request #850 (2020-07-13 14:50:36)

distro: enable cloud-init services for openstack and qcow2 images for fedora

Previously, cloud-init was installed on qcow and openstack images but was not enabled, preventing a user from logging in to these images. Cloud-init and cloud-config services are enabled in fedora 31 and fedora 32. The image tests have been updated to reflect these changes.

major: For what it's worth, I had to enable some additional cloud-config services to make it work: https://github.com/osbuild/osbuild-composer/blob/master/test/image-tests/qemu.sh#L137-L138

```toml
[customizations.services]
enabled = ["sshd", "cloud-init", "cloud-init-local", "cloud-config", "cloud-final"]
```

I'm not sure if all four are required, but the Fedora cloud images and the RHEL cloud images have all four of those enabled.
bcl: I don't think cloud-init should be installed or enabled on bare qcow2 images, people use qcow2 in a variety of environments where cloud-init isn't setup and the boot will get stuck. It makes sense for openstack because that's part of the target environment, and if people want cloud-init in plain qcow2 they can always add it to the blueprint and enable it themselves.
msehnout: > I don't think cloud-init should be installed or enabled on bare qcow2 images, people use qcow2 in a variety of environments where cloud-init isn't setup and the boot will get stuck. It makes sense for openstack because that's part of the target environment, and if people want cloud-init in plain qcow2 they can always add it to the blueprint and enable it themselves.

IMO this is a problem of defining the qcow2 image type. Lars mentioned in issue #698 that the image type should replicate Fedora cloud base, which is meant to be used in Openstack. The question is what is the difference from the openstack image type. In any case I'd move this discussion back to the issue.
larskarlitski: Thanks @chloenayon :partying_face: 

There are some whitespace issues that you can resolve by running `tools/prepare-source.sh` (you can see that tool fail one of the tests below).

Also, I think the other tests (fedora-32 and qcow2) have to be generated as well.

@major 
> I'm not sure if all four are required, but the Fedora cloud images and the RHEL cloud images have all four of those enabled.

Could it be that some of those are dependencies of the others? @chloenayon was able to log in with only those two enabled. Is there anything that might not work?

@bcl 
> I don't think cloud-init should be installed or enabled on bare qcow2 images, people use qcow2 in a variety of environments where cloud-init isn't setup and the boot will get stuck. [...]

I agree, but I think we should not deviate from the official image (Fedora Cloud Base). Let's try changing that via the right channels instead.

@msehnout 
> IMO this is a problem of defining the qcow2 image type. Lars mentioned in issue #698 that the image type should replicate Fedora cloud base, which is meant to be used in Openstack. The question is what is the difference from the openstack image type. In any case I'd move this discussion back to the issue.

The [site](https://alt.fedoraproject.org/cloud/) is a bit ambiguous, but I'm reading it as Fedora Cloud Base being meant to be a generic base image for cloud workloads. 


larskarlitski: Oh and I forgot: Please add the line
```Fixes #698```
to the end of the commit message. That will link the issue here and close it automatically when this pull request is merged. 
major: > @major
> 
> > I'm not sure if all four are required, but the Fedora cloud images and the RHEL cloud images have all four of those enabled.
> 
> Could it be that some of those are dependencies of the others? @chloenayon was able to log in with only those two enabled. Is there anything that might not work?

I'll have to give it a try and see. The Fedora + RHEL cloud images have all four services enabled and I figured there was a good reason to do that. 
teg: Thanks for this @chloenayon, and congrats on your first PR, very nice work!

To address the question from @major I suggest one or both of:
 1. clarify the commit message a tiny bit by pointing out that you compared, using image info, the official fedora 31 and 32 cloud images with the ones we now produce, and they have the same exact services enabled (assuming that is true ;) ). We aim to replicate the official images, so this alone should be sufficient justification for the patch.
 2. add a second patch that drops (if it is possible) the workarounds that @major pointed out that he had added to `qemu.sh`. The CI will then verify for you that this PR indeed makes those work-arounds redundant.
 3. (yes, yes, i know, I said two things, I lie) see if it is also possible (in a separate patch) to drop the blueprint customizations we add for these image types in our test-case generator (I believe we add a user with an ssh key and possibly enable some services).
msehnout: 
> The [site](https://alt.fedoraproject.org/cloud/) is a bit ambiguous, but I'm reading it as Fedora Cloud Base being meant to be a generic base image for cloud workloads.

Exactly, it's not easy to understand because I understand it the opposite way and Czech translation suggests the opposite way also. qcow2 => Openstack, raw.xz => general purpose
```
Fedora Cloud Base images are for creating general purpose virtual machines (VMs). You can use the Qcow 2 image for use with Openstack or the compressed raw image. If you are not sure what to use, try the raw image.
```

chloenayon: Thanks for the feedback!
I've made updates to address some good points brought up by @major and @teg 
msehnout: There is something wrong with the test cases:
```
2020-07-14T13:26:53.5722363Z --- FAIL: TestDistro_Manifest (8.26s)
2020-07-14T13:26:53.5723087Z     --- PASS: TestDistro_Manifest/ami (0.17s)
2020-07-14T13:26:53.5723805Z     --- FAIL: TestDistro_Manifest/openstack (0.38s)
2020-07-14T13:26:53.5724878Z         distro_test_common.go:97: 
2020-07-14T13:26:53.5727989Z             	Error Trace:	distro_test_common.go:97
2020-07-14T13:26:53.5728409Z             	Error:      	Not equal: 
2020-07-14T13:26:53.5728764Z             	Test:       	TestDistro_Manifest/openstack
2020-07-14T13:26:53.5729904Z     --- FAIL: TestDistro_Manifest/qcow2 (0.37s)
2020-07-14T13:26:53.5730794Z         distro_test_common.go:97: 
2020-07-14T13:26:53.5731186Z             	Error Trace:	distro_test_common.go:97
2020-07-14T13:26:53.5731521Z             	Error:      	Not equal: 
2020-07-14T13:26:53.5732041Z             	Test:       	TestDistro_Manifest/qcow2
2020-07-14T13:26:53.5732592Z     --- PASS: TestDistro_Manifest/ami#01 (0.11s)
2020-07-14T13:26:53.5733329Z     --- FAIL: TestDistro_Manifest/openstack#01 (0.39s)
2020-07-14T13:26:53.5748581Z         distro_test_common.go:97: 
2020-07-14T13:26:53.5771551Z             	Error Trace:	distro_test_common.go:97
2020-07-14T13:26:53.5771753Z             	Error:      	Not equal: 
2020-07-14T13:26:53.5771940Z             	Test:       	TestDistro_Manifest/openstack#01
2020-07-14T13:26:53.5772751Z     --- FAIL: TestDistro_Manifest/qcow2#01 (0.37s)
2020-07-14T13:26:53.5810335Z         distro_test_common.go:97: 
2020-07-14T13:26:53.5810540Z             	Error Trace:	distro_test_common.go:97
2020-07-14T13:26:53.5810691Z             	Error:      	Not equal: 
2020-07-14T13:26:53.5810845Z             	Test:       	TestDistro_Manifest/qcow2#01
2020-07-14T13:26:53.5811311Z     --- FAIL: TestDistro_Manifest/qcow2#02 (0.37s)
2020-07-14T13:26:53.5811736Z         distro_test_common.go:97: 
2020-07-14T13:26:53.5811894Z             	Error Trace:	distro_test_common.go:97
2020-07-14T13:26:53.5812039Z             	Error:      	Not equal: 
2020-07-14T13:26:53.5812195Z             	Test:       	TestDistro_Manifest/qcow2#02
2020-07-14T13:26:53.5812531Z     --- PASS: TestDistro_Manifest/vhd (0.10s)
2020-07-14T13:26:53.5812809Z     --- PASS: TestDistro_Manifest/vmdk (0.10s)
2020-07-14T13:26:53.5813523Z     --- PASS: TestDistro_Manifest/ami#02 (0.09s)
2020-07-14T13:26:53.5813830Z     --- PASS: TestDistro_Manifest/fedora-iot-commit (0.10s)
2020-07-14T13:26:53.5814113Z     --- FAIL: TestDistro_Manifest/openstack#02 (0.33s)
2020-07-14T13:26:53.5814429Z         distro_test_common.go:97: 
2020-07-14T13:26:53.5814582Z             	Error Trace:	distro_test_common.go:97
2020-07-14T13:26:53.5814732Z             	Error:      	Not equal: 
2020-07-14T13:26:53.5814991Z             	Test:       	TestDistro_Manifest/openstack#02
2020-07-14T13:26:53.5815520Z     --- FAIL: TestDistro_Manifest/qcow2#03 (0.35s)
2020-07-14T13:26:53.5815916Z         distro_test_common.go:97: 
2020-07-14T13:26:53.5816081Z             	Error Trace:	distro_test_common.go:97
2020-07-14T13:26:53.5816233Z             	Error:      	Not equal: 
2020-07-14T13:26:53.5816397Z             	Test:       	TestDistro_Manifest/qcow2#03
2020-07-14T13:26:53.5817199Z     --- FAIL: TestDistro_Manifest/qcow2#04 (0.32s)
2020-07-14T13:26:53.5817476Z         distro_test_common.go:97: 
2020-07-14T13:26:53.5817631Z             	Error Trace:	distro_test_common.go:97
2020-07-14T13:26:53.5817779Z             	Error:      	Not equal: 
2020-07-14T13:26:53.5817939Z             	Test:       	TestDistro_Manifest/qcow2#04
```
but the error log does not contain the diff, I think that is the issue with golang output buffer being too small so you have to run the test case by hand and compare the image-infos.
jkozol: I believe the tests are failing because the `cloud-final` and `cloud-init-local` services are not included in the test cases. It looks like the test cases were generated for the initial PR but not regenerated for the additional enabled services recommended by @major.
chloenayon: > I believe the tests are failing because the `cloud-final` and `cloud-init-local` services are not included in the test cases. It looks like the test cases were generated for the initial PR but not regenerated for the additional enabled services recommended by @major.

Thanks, that sounds right, I'm looking into it!

larskarlitski: Force pushed to rebase, because @major landed additional test cases. Amended the `aarch64` test cases as well. 
larskarlitski: Rebased again to pull in @teg's `/var/tmp` fix and @major's parallel pipeline work.

Patch:
diff --git a/internal/distro/fedora31/distro.go b/internal/distro/fedora31/distro.go
index b4bec1d62..d4d21c6fc 100644
--- a/internal/distro/fedora31/distro.go
+++ b/internal/distro/fedora31/distro.go
@@ -242,6 +242,12 @@ func New() *Fedora31 {
 			"gobject-introspection",
 			"plymouth",
 		},
+		enabledServices: []string{
+			"cloud-init.service",
+			"cloud-config.service",
+			"cloud-final.service",
+			"cloud-init-local.service",
+		},
 		kernelOptions: "ro biosdevname=0 net.ifnames=0",
 		bootable:      true,
 		defaultSize:   2 * GigaByte,
@@ -269,6 +275,12 @@ func New() *Fedora31 {
 		excludedPackages: []string{
 			"dracut-config-rescue",
 		},
+		enabledServices: []string{
+			"cloud-init.service",
+			"cloud-config.service",
+			"cloud-final.service",
+			"cloud-init-local.service",
+		},
 		kernelOptions: "ro biosdevname=0 net.ifnames=0",
 		bootable:      true,
 		defaultSize:   2 * GigaByte,
diff --git a/internal/distro/fedora32/distro.go b/internal/distro/fedora32/distro.go
index 8ce7f88f0..b5f679604 100644
--- a/internal/distro/fedora32/distro.go
+++ b/internal/distro/fedora32/distro.go
@@ -626,6 +626,12 @@ func New() distro.Distro {
 			"gobject-introspection",
 			"plymouth",
 		},
+		enabledServices: []string{
+			"cloud-init.service",
+			"cloud-config.service",
+			"cloud-final.service",
+			"cloud-init-local.service",
+		},
 		kernelOptions: "ro biosdevname=0 net.ifnames=0",
 		bootable:      true,
 		defaultSize:   2 * GigaByte,
@@ -653,6 +659,12 @@ func New() distro.Distro {
 		excludedPackages: []string{
 			"dracut-config-rescue",
 		},
+		enabledServices: []string{
+			"cloud-init.service",
+			"cloud-config.service",
+			"cloud-final.service",
+			"cloud-init-local.service",
+		},
 		kernelOptions: "ro biosdevname=0 net.ifnames=0",
 		bootable:      true,
 		defaultSize:   2 * GigaByte,
diff --git a/schutzbot/Jenkinsfile b/schutzbot/Jenkinsfile
index 57ff44263..4008c48de 100644
--- a/schutzbot/Jenkinsfile
+++ b/schutzbot/Jenkinsfile
@@ -303,6 +303,18 @@ pipeline {
             }
         }
     }
+
+    post {
+        success {
+            when { branch 'master' }
+            telegramSend "💚 CI passed for osbuild-composer master branch!. ${env.BUILD_URL}"
+        }
+        unsuccessful {
+            when { branch 'master' }
+            telegramSend "💣 CI failed for osbuild-composer master branch! ${env.BUILD_URL}"
+        }
+    }
+
 }
 
 // Set up a function to hold the steps needed to run the tests so we don't


Test patch:
diff --git a/internal/distro/distro_test_common/distro_test_common.go b/internal/distro/distro_test_common/distro_test_common.go
index 8a2d95bca..56db3c971 100644
--- a/internal/distro/distro_test_common/distro_test_common.go
+++ b/internal/distro/distro_test_common/distro_test_common.go
@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"io/ioutil"
+	"path"
 	"path/filepath"
 	"testing"
 
@@ -63,7 +64,7 @@ func TestDistro_Manifest(t *testing.T, pipelinePath string, prefix string, distr
 				CheckGPG:   repo.CheckGPG,
 			}
 		}
-		t.Run(tt.ComposeRequest.ImageType, func(t *testing.T) {
+		t.Run(path.Base(fileName), func(t *testing.T) {
 			distros, err := distro.NewRegistry(distros...)
 			require.NoError(t, err)
 			d := distros.GetDistro(tt.ComposeRequest.Distro)
diff --git a/test/cases/fedora_31-aarch64-openstack-boot.json b/test/cases/fedora_31-aarch64-openstack-boot.json
index 061830e8f..baf795dec 100644
--- a/test/cases/fedora_31-aarch64-openstack-boot.json
+++ b/test/cases/fedora_31-aarch64-openstack-boot.json
@@ -4128,6 +4128,17 @@
             }
           }
         },
+        {
+          "name": "org.osbuild.systemd",
+          "options": {
+            "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service"
+            ]
+          }
+        },
         {
           "name": "org.osbuild.selinux",
           "options": {
@@ -11639,4 +11650,4 @@
       "unbound-anchor.timer"
     ]
   }
-}
\ No newline at end of file
+}
diff --git a/test/cases/fedora_31-aarch64-qcow2-boot.json b/test/cases/fedora_31-aarch64-qcow2-boot.json
index 3004c7555..543733069 100644
--- a/test/cases/fedora_31-aarch64-qcow2-boot.json
+++ b/test/cases/fedora_31-aarch64-qcow2-boot.json
@@ -4009,6 +4009,17 @@
             }
           }
         },
+        {
+          "name": "org.osbuild.systemd",
+          "options": {
+            "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service"
+            ]
+          }
+        },
         {
           "name": "org.osbuild.selinux",
           "options": {
@@ -11328,4 +11339,4 @@
       "unbound-anchor.timer"
     ]
   }
-}
\ No newline at end of file
+}
diff --git a/test/cases/fedora_31-x86_64-openstack-boot.json b/test/cases/fedora_31-x86_64-openstack-boot.json
index eb1144bfa..f7346f786 100644
--- a/test/cases/fedora_31-x86_64-openstack-boot.json
+++ b/test/cases/fedora_31-x86_64-openstack-boot.json
@@ -4139,6 +4139,17 @@
             "legacy": "i386-pc"
           }
         },
+        {
+          "name": "org.osbuild.systemd",
+          "options": {
+            "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service"
+            ]
+          }
+        },
         {
           "name": "org.osbuild.selinux",
           "options": {
@@ -11688,10 +11699,6 @@
       "arp-ethers.service",
       "chrony-dnssrv@.timer",
       "chrony-wait.service",
-      "cloud-config.service",
-      "cloud-final.service",
-      "cloud-init-local.service",
-      "cloud-init.service",
       "console-getty.service",
       "debug-shell.service",
       "exit.target",
@@ -11735,6 +11742,10 @@
       "auditd.service",
       "autovt@.service",
       "chronyd.service",
+      "cloud-config.service",
+      "cloud-final.service",
+      "cloud-init-local.service",
+      "cloud-init.service",
       "ctrl-alt-del.target",
       "dbus-broker.service",
       "dbus-org.fedoraproject.FirewallD1.service",
diff --git a/test/cases/fedora_31-x86_64-qcow2-boot.json b/test/cases/fedora_31-x86_64-qcow2-boot.json
index 5d5783f4c..7a5a983ef 100644
--- a/test/cases/fedora_31-x86_64-qcow2-boot.json
+++ b/test/cases/fedora_31-x86_64-qcow2-boot.json
@@ -4069,6 +4069,17 @@
             "legacy": "i386-pc"
           }
         },
+        {
+          "name": "org.osbuild.systemd",
+          "options": {
+            "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service"
+            ]
+          }
+        },
         {
           "name": "org.osbuild.selinux",
           "options": {
@@ -11507,10 +11518,6 @@
       "arp-ethers.service",
       "chrony-dnssrv@.timer",
       "chrony-wait.service",
-      "cloud-config.service",
-      "cloud-final.service",
-      "cloud-init-local.service",
-      "cloud-init.service",
       "console-getty.service",
       "debug-shell.service",
       "exit.target",
@@ -11553,6 +11560,10 @@
       "auditd.service",
       "autovt@.service",
       "chronyd.service",
+      "cloud-config.service",
+      "cloud-final.service",
+      "cloud-init-local.service",
+      "cloud-init.service",
       "ctrl-alt-del.target",
       "dbus-broker.service",
       "dbus-org.freedesktop.nm-dispatcher.service",
diff --git a/test/cases/fedora_31-x86_64-qcow2-customize.json b/test/cases/fedora_31-x86_64-qcow2-customize.json
index 5273942f7..c1e1403d9 100644
--- a/test/cases/fedora_31-x86_64-qcow2-customize.json
+++ b/test/cases/fedora_31-x86_64-qcow2-customize.json
@@ -4172,6 +4172,10 @@
           "name": "org.osbuild.systemd",
           "options": {
             "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service",
               "sshd.socket"
             ],
             "disabled_services": [
@@ -11621,10 +11625,6 @@
       "arp-ethers.service",
       "chrony-dnssrv@.timer",
       "chrony-wait.service",
-      "cloud-config.service",
-      "cloud-final.service",
-      "cloud-init-local.service",
-      "cloud-init.service",
       "console-getty.service",
       "debug-shell.service",
       "exit.target",
@@ -11666,6 +11666,10 @@
       "auditd.service",
       "autovt@.service",
       "chronyd.service",
+      "cloud-config.service",
+      "cloud-final.service",
+      "cloud-init-local.service",
+      "cloud-init.service",
       "ctrl-alt-del.target",
       "dbus-broker.service",
       "dbus-org.freedesktop.nm-dispatcher.service",
diff --git a/test/cases/fedora_32-aarch64-openstack-boot.json b/test/cases/fedora_32-aarch64-openstack-boot.json
index 7631d4ce4..8b8ff17c9 100644
--- a/test/cases/fedora_32-aarch64-openstack-boot.json
+++ b/test/cases/fedora_32-aarch64-openstack-boot.json
@@ -3590,6 +3590,17 @@
             }
           }
         },
+        {
+          "name": "org.osbuild.systemd",
+          "options": {
+            "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service"
+            ]
+          }
+        },
         {
           "name": "org.osbuild.selinux",
           "options": {
@@ -10108,4 +10119,4 @@
       "unbound-anchor.timer"
     ]
   }
-}
\ No newline at end of file
+}
diff --git a/test/cases/fedora_32-aarch64-qcow2-boot.json b/test/cases/fedora_32-aarch64-qcow2-boot.json
index 5c5e12949..eda9574f4 100644
--- a/test/cases/fedora_32-aarch64-qcow2-boot.json
+++ b/test/cases/fedora_32-aarch64-qcow2-boot.json
@@ -3380,6 +3380,17 @@
             }
           }
         },
+        {
+          "name": "org.osbuild.systemd",
+          "options": {
+            "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service"
+            ]
+          }
+        },
         {
           "name": "org.osbuild.selinux",
           "options": {
@@ -9565,4 +9576,4 @@
       "unbound-anchor.timer"
     ]
   }
-}
\ No newline at end of file
+}
diff --git a/test/cases/fedora_32-x86_64-openstack-boot.json b/test/cases/fedora_32-x86_64-openstack-boot.json
index 2d5be1f82..6d30601d9 100644
--- a/test/cases/fedora_32-x86_64-openstack-boot.json
+++ b/test/cases/fedora_32-x86_64-openstack-boot.json
@@ -3557,6 +3557,17 @@
             "legacy": "i386-pc"
           }
         },
+        {
+          "name": "org.osbuild.systemd",
+          "options": {
+            "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service"
+            ]
+          }
+        },
         {
           "name": "org.osbuild.selinux",
           "options": {
@@ -9950,10 +9961,6 @@
       "arp-ethers.service",
       "chrony-dnssrv@.timer",
       "chrony-wait.service",
-      "cloud-config.service",
-      "cloud-final.service",
-      "cloud-init-local.service",
-      "cloud-init.service",
       "console-getty.service",
       "debug-shell.service",
       "exit.target",
@@ -9996,6 +10003,10 @@
       "auditd.service",
       "autovt@.service",
       "chronyd.service",
+      "cloud-config.service",
+      "cloud-final.service",
+      "cloud-init-local.service",
+      "cloud-init.service",
       "ctrl-alt-del.target",
       "dbus-broker.service",
       "dbus-org.fedoraproject.FirewallD1.service",
diff --git a/test/cases/fedora_32-x86_64-qcow2-boot.json b/test/cases/fedora_32-x86_64-qcow2-boot.json
index 43ea86495..86a28f03d 100644
--- a/test/cases/fedora_32-x86_64-qcow2-boot.json
+++ b/test/cases/fedora_32-x86_64-qcow2-boot.json
@@ -3396,6 +3396,17 @@
             "legacy": "i386-pc"
           }
         },
+        {
+          "name": "org.osbuild.systemd",
+          "options": {
+            "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service"
+            ]
+          }
+        },
         {
           "name": "org.osbuild.selinux",
           "options": {
@@ -9535,10 +9546,6 @@
       "arp-ethers.service",
       "chrony-dnssrv@.timer",
       "chrony-wait.service",
-      "cloud-config.service",
-      "cloud-final.service",
-      "cloud-init-local.service",
-      "cloud-init.service",
       "console-getty.service",
       "console-login-helper-messages-issuegen.service",
       "console-login-helper-messages-motdgen.service",
@@ -9582,6 +9589,10 @@
       "auditd.service",
       "autovt@.service",
       "chronyd.service",
+      "cloud-config.service",
+      "cloud-final.service",
+      "cloud-init-local.service",
+      "cloud-init.service",
       "ctrl-alt-del.target",
       "dbus-broker.service",
       "dbus-org.freedesktop.nm-dispatcher.service",
diff --git a/test/cases/fedora_32-x86_64-qcow2-customize.json b/test/cases/fedora_32-x86_64-qcow2-customize.json
index 3fd4c5a79..35d597d27 100644
--- a/test/cases/fedora_32-x86_64-qcow2-customize.json
+++ b/test/cases/fedora_32-x86_64-qcow2-customize.json
@@ -3499,6 +3499,10 @@
           "name": "org.osbuild.systemd",
           "options": {
             "enabled_services": [
+              "cloud-init.service",
+              "cloud-config.service",
+              "cloud-final.service",
+              "cloud-init-local.service",
               "sshd.socket"
             ],
             "disabled_services": [
@@ -9649,10 +9653,6 @@
       "arp-ethers.service",
       "chrony-dnssrv@.timer",
       "chrony-wait.service",
-      "cloud-config.service",
-      "cloud-final.service",
-      "cloud-init-local.service",
-      "cloud-init.service",
       "console-getty.service",
       "console-login-helper-messages-issuegen.service",
       "console-login-helper-messages-motdgen.service",
@@ -9695,6 +9695,10 @@
       "auditd.service",
       "autovt@.service",
       "chronyd.service",
+      "cloud-config.service",
+      "cloud-final.service",
+      "cloud-init-local.service",
+      "cloud-init.service",
       "ctrl-alt-del.target",
       "dbus-broker.service",
       "dbus-org.freedesktop.nm-dispatcher.service",