cloudbase / cloudbase-init

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

Metadata OvfService - Unsupported user_data format #61

Closed MnrGreg closed 3 years ago

MnrGreg commented 3 years ago

UserData is not being interpreted correctly when using OvfService: WARNING cloudbaseinit.plugins.common.userdatautils [-] Unsupported user_data format

cloudbase-init.log

2020-10-20 20:30:56.659 2324 INFO cloudbaseinit.init [-] Executing plugin 'UserDataPlugin'
2020-10-20 20:30:56.659 2324 DEBUG cloudbaseinit.plugins.common.userdata [-] User data content length: 97 execute C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\lib\site-packages\cloudbaseinit\plugins\common\userdata.py:50
2020-10-20 20:30:56.659 2324 DEBUG cloudbaseinit.utils.classloader [-] Loading class 'cloudbaseinit.utils.template_engine.jinja2_template.Jinja2TemplateEngine' load_class C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\lib\site-packages\cloudbaseinit\utils\classloader.py:27
2020-10-20 20:30:57.034 2324 WARNING cloudbaseinit.plugins.common.userdatautils [-] Unsupported user_data format
2020-10-20 20:30:57.034 2324 INFO cloudbaseinit.init [-] Plugins execution done
2020-10-20 20:30:57.034 2324 INFO cloudbaseinit.init [-] Stopping Cloudbase-Init service

ovf-env.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Environment
     xmlns="http://schemas.dmtf.org/ovf/environment/1"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:oe="http://schemas.dmtf.org/ovf/environment/1"
     xmlns:ve="http://www.vmware.com/schema/ovfenv"
     oe:id=""
     ve:vCenterId="vm-584159">
   <PlatformSection>
      <Kind>VMware ESXi</Kind>
      <Version>6.7.0</Version>
      <Vendor>VMware, Inc.</Vendor>
      <Locale>en</Locale>
   </PlatformSection>
   <PropertySection>
         <Property oe:key="password" oe:value="Password1234!"/>
         <Property oe:key="user-data" oe:value="eyJ3cml0ZV9maWxlcyI6eyJjb250ZW50IjoiQ2xvdWRiYXNlLUluaXQtdGVzdCIsInBhdGgiOiJDOlxcdGVzdC50eHQifSwic2V0X2hvc3RuYW1lIjoidGVzdG5hbWUifQ=="/>
         <Property oe:key="username" oe:value="Administrator"/>
   </PropertySection>
   <ve:EthernetAdapterSection>
      <ve:Adapter ve:mac="00:50:56:bb:a0:3c" ve:network="rck3236trunk" ve:unitNumber="7"/>
   </ve:EthernetAdapterSection>
</Environment>

base64 decoded user-data seems valid.

"write_files":{"content":"Cloudbase-Init-test","path":"C:\\test.txt"},"set_hostname":"testname"}

the above is generated by VMware vRealize 8.1 blueprint yaml:

      cloudConfig:
        #cloud-config
        write_files:
          content: Cloudbase-Init-test
          path: 'C:\test.txt'
        set_hostname: testname
MnrGreg commented 3 years ago

Another data point- UserData is able to be read, decoded and saved with userdata_save_path:

[DEFAULT]
userdata_save_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\CloudbaseInitUserData.bin

cloudbase-init.log

2020-10-20 22:59:43.538 2972 DEBUG cloudbaseinit.plugins.common.userdata [-] User data content length: 97 execute C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\lib\site-packages\cloudbaseinit\plugins\common\userdata.py:50
2020-10-20 22:59:43.538 2972 DEBUG cloudbaseinit.utils.classloader [-] Loading class 'cloudbaseinit.osutils.windows.WindowsUtils' load_class C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\lib\site-packages\cloudbaseinit\utils\classloader.py:27
2020-10-20 22:59:43.538 2972 DEBUG cloudbaseinit.osutils.windows [-] Assigning admin ACLs on path: C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log set_path_admin_acls C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\lib\site-packages\cloudbaseinit\osutils\windows.py:1760
2020-10-20 22:59:43.569 2972 DEBUG cloudbaseinit.plugins.common.userdata [-] Writing userdata to: C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\CloudbaseInitUserData.bin _write_userdata C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\lib\site-packages\cloudbaseinit\plugins\common\userdata.py:77
2020-10-20 22:59:43.569 2972 DEBUG cloudbaseinit.utils.classloader [-] Loading class 'cloudbaseinit.utils.template_engine.jinja2_template.Jinja2TemplateEngine' load_class C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\lib\site-packages\cloudbaseinit\utils\classloader.py:27
2020-10-20 22:59:43.944 2972 WARNING cloudbaseinit.plugins.common.userdatautils [-] Unsupported user_data format
C:\Users\Administrator>type "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\CloudbaseInitUserData.bin"
{"write_files":{"content":"Cloudbase-Init-test","path":"C:\\test.txt"},"set_hostname":"testname"}
ader1990 commented 3 years ago

Hello,

The base64 user-data does not contain the required header line #cloud-config.

Thank you, Adrian Vladu

MnrGreg commented 3 years ago

This issue was due to the vRealize Automation blueprint cloudConfig syntax

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

cloudConfig: should have an | after it:

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