From 2581fbd11929a0bf60bf1fa913e7c98caacd13bb Mon Sep 17 00:00:00 2001 From: Adrian Vladu Date: Fri, 21 Jun 2024 12:05:22 +0300 Subject: [PATCH 1/3] nocloud: enable Pester create and mount ISO and added the same userdata as the OpenStack ConfigDrive Signed-off-by: Adrian Vladu --- functional-tests/CloudbaseInit.Tests.ps1 | 16 ++++++++- nocloud/cloudbase-init-metadata/meta-data | 2 +- nocloud/cloudbase-init-metadata/user-data | 41 +++++++++++++++++++++-- 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/functional-tests/CloudbaseInit.Tests.ps1 b/functional-tests/CloudbaseInit.Tests.ps1 index 4102aa1..eaeae9c 100644 --- a/functional-tests/CloudbaseInit.Tests.ps1 +++ b/functional-tests/CloudbaseInit.Tests.ps1 @@ -20,7 +20,6 @@ function after.cloudbaseinit.plugins.common.mtu.MTUPlugin { # in the test environment } - function before.cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin { It "w32time service should exist" { { Get-Service "w32time" -ErrorAction Stop } | Should -Not -Throw @@ -272,6 +271,21 @@ function prepare.openstack { popd } +function prepare.nocloud { + pushd "$here/../$($env:CLOUD)" + try { + Dismount-DiskImage -ErrorAction SilentlyContinue (Resolve-Path "../cloudbase-init-config-drive.iso") + Remove-Item -Force -ErrorAction SilentlyContinue "../cloudbase-init-config-drive.iso" + } catch {} + try { + & "$here/../bin/mkisofs.exe" -o "../cloudbase-init-config-drive.iso" -ignore-error -ldots -allow-lowercase -allow-multidot -l -publisher "cbsl" -quiet -J -r -V "cidata" "cloudbase-init-metadata" 2>&1 + } catch {} + Mount-DiskImage -ImagePath (Resolve-Path "../cloudbase-init-config-drive.iso") | Out-Null + Get-PsDrive | Out-Null + + popd +} + BeforeDiscovery { $env:CLOUD | Should -Not -Be $null $metadataServiceConfigFile = Resolve-Path "$here/../$($env:CLOUD)/cloudbase-init.conf" diff --git a/nocloud/cloudbase-init-metadata/meta-data b/nocloud/cloudbase-init-metadata/meta-data index 6ea1e14..8e25979 100644 --- a/nocloud/cloudbase-init-metadata/meta-data +++ b/nocloud/cloudbase-init-metadata/meta-data @@ -1 +1 @@ -{"reservation-id": "r-yze3jupp", "hostname": "v4.novalocal", "security-groups": [], "public-ipv4": "", "ami-manifest-path": "FIXME", "instance-type": "windowsoff", "instance-id": "i-00000039", "local-ipv4": "10.0.0.50", "local-hostname": "v4.novalocal", "placement": {"availability-zone": "nova"}, "ami-launch-index": 0, "public-hostname": "v4.novalocal", "public-keys": {"0": {"openssh-key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDp6TTydco9e6c0a+kqrITGdeMoAJrK3yFknvvp8g4PTPFSCAWhlQ2xQYaLRyHw4ytHdcubvffh2dtt7XlgUpPlrc1SaaB0PbkmZt5r2opMiC1Yx00Wd9YbgOK6aFAHkovFnbTQlyhBomIY0j55EkfuUibALeK5qPMW3bNldqkZTXtX6goBPdIgNoXsvSfeDnmsVYVZzoNAMll74ryeJtiRJQUUEbd2VU5yZiuBW0EWLCImfb8L6FmVfot5lHII1HBhKHfRwJtapucdkIYEpIc1q3w26Jh/TwiCl8474dTOXn50v12OqKeQKCdKwNJnwQlvm772ZZSu0k4WVcsBDDhr root@localhost.localdomain\n", "_name": "0=userkey"}}, "ami-id": "ami-00000008", "instance-action": "none", "block-device-mapping": {"ami": "vda", "root": "/dev/vda"}} \ No newline at end of file +{"reservation-id": "r-yze3jupp", "hostname": "v4.novalocal", "security-groups": [], "public-ipv4": "", "ami-manifest-path": "FIXME", "instance-type": "windowsoff", "instance-id": "b9517879-4e93-4a1a-9073-4ae0ddfac27c", "local-ipv4": "10.0.0.50", "local-hostname": "v4.novalocal", "placement": {"availability-zone": "nova"}, "ami-launch-index": 0, "public-hostname": "v4.novalocal", "public-keys": {"0": {"openssh-key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDp6TTydco9e6c0a+kqrITGdeMoAJrK3yFknvvp8g4PTPFSCAWhlQ2xQYaLRyHw4ytHdcubvffh2dtt7XlgUpPlrc1SaaB0PbkmZt5r2opMiC1Yx00Wd9YbgOK6aFAHkovFnbTQlyhBomIY0j55EkfuUibALeK5qPMW3bNldqkZTXtX6goBPdIgNoXsvSfeDnmsVYVZzoNAMll74ryeJtiRJQUUEbd2VU5yZiuBW0EWLCImfb8L6FmVfot5lHII1HBhKHfRwJtapucdkIYEpIc1q3w26Jh/TwiCl8474dTOXn50v12OqKeQKCdKwNJnwQlvm772ZZSu0k4WVcsBDDhr root@localhost.localdomain\n", "_name": "0=userkey"}}, "ami-id": "ami-00000008", "instance-action": "none", "block-device-mapping": {"ami": "vda", "root": "/dev/vda"}} \ No newline at end of file diff --git a/nocloud/cloudbase-init-metadata/user-data b/nocloud/cloudbase-init-metadata/user-data index aed00f8..c047ce9 100644 --- a/nocloud/cloudbase-init-metadata/user-data +++ b/nocloud/cloudbase-init-metadata/user-data @@ -1,5 +1,40 @@ -#ps1 +#cloud-config +groups: + - + windows: + - Admin + - cloud-users -mkdir C:\helloworld +users: + - + name: cloud-config-user + gecos: 'Created by cloudbase-init' + primary_group: cloud-users + groups: windows -exit 0 +write_files: + - + encoding: b64 + content: CiMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4 + path: 'C:\test_file' + permissions: '0644' + - + content: "# Example ps1 file\necho 'test'\n" + path: 'C:\test_append.ps1' + permissions: '0644' + - + content: "added to file\n" + path: 'C:\test_append.ps1' + permissions: '0644' + append: true +runcmd: + - + - dir + - 'c:\' + - 'mkdir c:\runcmd' +ntp: + enabled: true + pools: + - 1.pool.ntp.org + servers: + - 0.pool.ntp.org From 391d6775ffa52daef67b0d3d3129c1c2c24b2c2f Mon Sep 17 00:00:00 2001 From: Adrian Vladu Date: Fri, 21 Jun 2024 12:19:12 +0300 Subject: [PATCH 2/3] plugin list does not work with nelines --- empty/cloudbase-init.conf | 12 +----------- functional-tests/CloudbaseInit.Tests.ps1 | 12 ++++++++++++ nocloud/cloudbase-init.conf | 16 +--------------- 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/empty/cloudbase-init.conf b/empty/cloudbase-init.conf index a378d61..544f460 100644 --- a/empty/cloudbase-init.conf +++ b/empty/cloudbase-init.conf @@ -136,17 +136,7 @@ metadata_services = cloudbaseinit.metadata.services.base.EmptyMetadataService # List of enabled plugin classes, to be executed in the provided order (list # value) -plugins = cloudbaseinit.plugins.common.mtu.MTUPlugin, - cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin, - cloudbaseinit.plugins.windows.sanpolicy.SANPolicyPlugin, - cloudbaseinit.plugins.windows.displayidletimeout.DisplayIdleTimeoutConfigPlugin, - cloudbaseinit.plugins.windows.bootconfig.BootStatusPolicyPlugin, - cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin, - cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin, - cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin, - cloudbaseinit.plugins.common.trim.TrimConfigPlugin, - cloudbaseinit.plugins.windows.bootconfig.BCDConfigPlugin, - cloudbaseinit.plugins.windows.bootconfig.BootStatusPolicyPlugin +plugins = cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin,cloudbaseinit.plugins.windows.sanpolicy.SANPolicyPlugin,cloudbaseinit.plugins.windows.displayidletimeout.DisplayIdleTimeoutConfigPlugin,cloudbaseinit.plugins.windows.bootconfig.BootStatusPolicyPlugin,cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin,cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin,cloudbaseinit.plugins.common.trim.TrimConfigPlugin,cloudbaseinit.plugins.windows.bootconfig.BCDConfigPlugin,cloudbaseinit.plugins.windows.bootconfig.BootStatusPolicyPlugin # List of enabled userdata content plugins (list value) #user_data_plugins = cloudbaseinit.plugins.common.userdataplugins.parthandler.PartHandlerPlugin,cloudbaseinit.plugins.common.userdataplugins.cloudconfig.CloudConfigPlugin,cloudbaseinit.plugins.common.userdataplugins.cloudboothook.CloudBootHookPlugin,cloudbaseinit.plugins.common.userdataplugins.shellscript.ShellScriptPlugin,cloudbaseinit.plugins.common.userdataplugins.multipartmixed.MultipartMixedPlugin,cloudbaseinit.plugins.common.userdataplugins.heat.HeatPlugin diff --git a/functional-tests/CloudbaseInit.Tests.ps1 b/functional-tests/CloudbaseInit.Tests.ps1 index eaeae9c..0b5a5fe 100644 --- a/functional-tests/CloudbaseInit.Tests.ps1 +++ b/functional-tests/CloudbaseInit.Tests.ps1 @@ -297,6 +297,12 @@ BeforeDiscovery { } Describe "TestVerifyBeforeAllPlugins" { + $env:CLOUD | Should -Not -Be $null + $metadataServiceConfigFile = Resolve-Path "$here/../$($env:CLOUD)/cloudbase-init.conf" + $pluginList = Get-IniFileValue -Path $metadataServiceConfigFile -Section "DEFAULT" ` + -Key "plugins" ` + -Default "" + $pluginList = $pluginList.Split(",") Context "Verify state before running plugin" -ForEach $pluginList { $plugin = $_ if (!$plugin) { @@ -319,6 +325,12 @@ Describe "TestVerifyBeforeAllPlugins" { } Describe "TestVerifyAfterAllPlugins" { + $env:CLOUD | Should -Not -Be $null + $metadataServiceConfigFile = Resolve-Path "$here/../$($env:CLOUD)/cloudbase-init.conf" + $pluginList = Get-IniFileValue -Path $metadataServiceConfigFile -Section "DEFAULT" ` + -Key "plugins" ` + -Default "" + $pluginList = $pluginList.Split(",") Context "Verify state after running plugin" -ForEach $pluginList { $plugin = $_ if (!$plugin) { diff --git a/nocloud/cloudbase-init.conf b/nocloud/cloudbase-init.conf index 90e22de..8931a44 100644 --- a/nocloud/cloudbase-init.conf +++ b/nocloud/cloudbase-init.conf @@ -136,21 +136,7 @@ metadata_services = cloudbaseinit.metadata.services.nocloudservice.NoCloudConfig # List of enabled plugin classes, to be executed in the provided order (list # value) -plugins = cloudbaseinit.plugins.common.mtu.MTUPlugin, - cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin, - cloudbaseinit.plugins.windows.sanpolicy.SANPolicyPlugin, - cloudbaseinit.plugins.windows.displayidletimeout.DisplayIdleTimeoutConfigPlugin, - cloudbaseinit.plugins.windows.bootconfig.BootStatusPolicyPlugin, - cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin, - cloudbaseinit.plugins.windows.createuser.CreateUserPlugin, - cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin, - cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin, - cloudbaseinit.plugins.common.userdata.UserDataPlugin, - cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin, - cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin, - cloudbaseinit.plugins.windows.winrmcertificateauth.ConfigWinRMCertificateAuthPlugin, - cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin, - cloudbaseinit.plugins.common.trim.TrimConfigPlugin, +plugins = cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin,cloudbaseinit.plugins.windows.sanpolicy.SANPolicyPlugin,cloudbaseinit.plugins.windows.displayidletimeout.DisplayIdleTimeoutConfigPlugin,cloudbaseinit.plugins.windows.bootconfig.BootStatusPolicyPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin,cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin,cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin,cloudbaseinit.plugins.windows.winrmcertificateauth.ConfigWinRMCertificateAuthPlugin,cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin,cloudbaseinit.plugins.common.trim.TrimConfigPlugin, # List of enabled userdata content plugins (list value) #user_data_plugins = cloudbaseinit.plugins.common.userdataplugins.parthandler.PartHandlerPlugin,cloudbaseinit.plugins.common.userdataplugins.cloudconfig.CloudConfigPlugin,cloudbaseinit.plugins.common.userdataplugins.cloudboothook.CloudBootHookPlugin,cloudbaseinit.plugins.common.userdataplugins.shellscript.ShellScriptPlugin,cloudbaseinit.plugins.common.userdataplugins.multipartmixed.MultipartMixedPlugin,cloudbaseinit.plugins.common.userdataplugins.heat.HeatPlugin From 327c6e36a42d0057b8a8f80d09bb9883e788e1c8 Mon Sep 17 00:00:00 2001 From: Adrian Vladu Date: Fri, 21 Jun 2024 12:26:21 +0300 Subject: [PATCH 3/3] nocloud:add boilerplate for the bcdconfig plugins --- functional-tests/CloudbaseInit.Tests.ps1 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/functional-tests/CloudbaseInit.Tests.ps1 b/functional-tests/CloudbaseInit.Tests.ps1 index 0b5a5fe..96580ca 100644 --- a/functional-tests/CloudbaseInit.Tests.ps1 +++ b/functional-tests/CloudbaseInit.Tests.ps1 @@ -271,6 +271,20 @@ function prepare.openstack { popd } +function before.cloudbaseinit.plugins.windows.bootconfig.BCDConfigPlugin { + # TBD +} +function after.cloudbaseinit.plugins.windows.bootconfig.BCDConfigPlugin { + # TBD +} + +function before.cloudbaseinit.plugins.windows.bootconfig.BootStatusPolicyPlugin { + # TBD +} +function after.cloudbaseinit.plugins.windows.bootconfig.BootStatusPolicyPlugin { + # TBD +} + function prepare.nocloud { pushd "$here/../$($env:CLOUD)" try {