cloudbase / cloudbase-init

Cross-platform instance initialization
http://openstack.org
Apache License 2.0
408 stars 149 forks source link

Cloudbase-init VMwareGuestInfoService Invalid yaml data provided #120

Open andrey1pf opened 1 year ago

andrey1pf commented 1 year ago

Hello! I have task with stack: VMWare Cloud Director(10.3), Windows Server 2016, Terraform

  1. Create VM with WS iso, Instal VMWare Tool and install Cloudbase-init util. After install change config file cloudbase-init.conf: [DEFAULT] username=Administrator groups=Administrators inject_user_password=true first_logon_behaviour=always config_drive_raw_hhd=true config_drive_cdrom=true config_drive_vfat=true bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\ verbose=true debug=true logdir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\ logfile=cloudbase-init.log default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN logging_serial_port_settings= mtu_use_dhcp_config=true ntp_use_dhcp_config=true local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\ metadata_services=cloudbaseinit.metadata.services.vmwareguestinfoservice.VMwareGuestInfoService plugins=cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin

cloudbase-init-unattend.conf: [DEFAULT] username=Administrator groups=Administrators inject_user_password=true config_drive_raw_hhd=true config_drive_cdrom=true config_drive_vfat=true bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\ verbose=true debug=true logdir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\ logfile=cloudbase-init-unattend.log default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN logging_serial_port_settings= mtu_use_dhcp_config=true ntp_use_dhcp_config=true local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\ metadata_services=cloudbaseinit.metadata.services.vmwareguestinfoservice.VMwareGuestInfoService plugins=cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin allow_reboot=false stop_service_on_exit=false check_latest_version=false

  1. sysprep.exe /generalize /oobe /shutdown after that without error my VM shutdown
  2. In VMWare Cloud Director create template from this VM
  3. With Terraform create new VM from template with guest properties: guest_properties = { "user-data" = base64encode(file("cloudbase-init-windows.yaml")) }

cloudbase-init-windows.yaml:

cloud-config

cloudConfig: write_files: content: Cloudbase-Init-test path: 'C:\test.txt'

  1. When VM created test.txt doesnt created and i have only cloudbase-init log file

cloudbase-init.log: ... ERROR cloudbaseinit.metadata.factory [-] Failed to load metadata service 'cloudbase-init.metadata.services.vmwareguestinfoservice.VMwareGuestInfoService': cloudbaseinit.utils.serialization.YamlParserConfigError: INvalid yaml data provided ERROR cloudbaseinit.metadata.factory [-] Invalid yaml data provided.: cloudbaseinit.utils.serialization.YamlParserConfigError: Invalid yaml data provided. ...

ader1990 commented 1 year ago

Hello,

cloudbase-init implements the same interface for cloud-config userdata as does cloud-init: https://cloudinit.readthedocs.io/en/latest/reference/examples.html#writing-out-arbitrary-files

Cloudbase-init userdata documentation and examples can be found here: https://cloudbase-init.readthedocs.io/en/latest/userdata.html#cloud-config

In your case, cloudbase-init-windows.yaml should have this content (indentation is important):

#cloud-config
write_files:
  content: Cloudbase-Init-test
  path: 'C:\test.txt'

Thank you, Adrian.

andrey1pf commented 1 year ago

Thank you for your reply! I've changed the configuration a bit. write in cmd

"info-set guestinfo.metadata " "info-set guestinfo.metadata.encoding base64" "info-set guestinfo.userdata " "info-set guestinfo.userdata.encoding base64" but now: Failed to load metadata service 'cloudbase-init.metadata.services.vmwareguestinfoservice.VMwareGuestInfoService': binascii.Error: Invalid base64-encode string: number of data characters (21) cannot be 1 more than a multiple of 4 but character count is a multiple of 4
ader1990 commented 1 year ago

Thank you for your reply! I've changed the configuration a bit. write in cmd

"info-set guestinfo.metadata " "info-set guestinfo.metadata.encoding base64" "info-set guestinfo.userdata " "info-set guestinfo.userdata.encoding base64" but now: Failed to load metadata service 'cloudbase-init.metadata.services.vmwareguestinfoservice.VMwareGuestInfoService': binascii.Error: Invalid base64-encode string: number of data characters (21) cannot be 1 more than a multiple of 4 but character count is a multiple of 4

Hello,

Is this another issue from the initial one? is it possible to give more details on what exactly is the base64 string that does not get decoded?