Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cloudbase-init VMwareGuestInfoService Invalid yaml data provided #120

Open
andrey1pf opened this issue Jul 12, 2023 · 3 comments
Open

Cloudbase-init VMwareGuestInfoService Invalid yaml data provided #120

andrey1pf opened this issue Jul 12, 2023 · 3 comments

Comments

@andrey1pf
Copy link

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
Copy link
Member

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
Copy link
Author

andrey1pf commented Jul 12, 2023

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

<rpctool_path> "info-set guestinfo.metadata "
<rpctool_path> "info-set guestinfo.metadata.encoding base64"
<rpctool_path> "info-set guestinfo.userdata "
<rpctool_path> "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
Copy link
Member

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

<rpctool_path> "info-set guestinfo.metadata " <rpctool_path> "info-set guestinfo.metadata.encoding base64" <rpctool_path> "info-set guestinfo.userdata " <rpctool_path> "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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants