** Description changed: - While implementing the GCE provider for Juju we found that the metadata - API breaks when trying to retrieve certain binary formats. In our case - the gz of user-data. The API only streams out the first 5 bytes, - encounters what it preceives as a EOF/nil character and truncates the - rest of the request. + [IMPACT] Due to limitations in GCE, binary user-data is mangled when + sent as user-data. + + [FIX] Allow user to declare binary encoding on user-data. + + [VERIFICATION] + 1. Create pristine image from -proposed + 2. For step 6 + 3. Boot GCE instance w/ normal user-data, i.e.: + $ cat user-data + #cloud-config + ssh_import_id: [utlemming] + $ gcloud compute instances create <image from step 1> \ + --metadata-from-file user-data=user-data + 4. Confirm that user-data was parsed properly + 5. GZIP user-data, and encode using base64: + gzip -c user-data.txt | base64 > user-data.b64 + 6. Boot GCE instance w/ user-data.b64 and character encoding meta-data + set: + $ gcloud compute instances create <image from step 1> \ + --metadata-from-file user-data=user-data.b64 \ + --metadata user-data-encoding=base64 + 7. Confirm that user-data was consumed; attach /var/log/cloud-init.log + to report. + + [RISK] If a user sets the user-data-encoding to base64, but does not + provide base64 data the instance will fail to provision. However, since + the user has to explicitly setup the circumstances, it is low risk. + + [ORIGINAL REPORT] + The GCE datasource uses the long hostname. Hostnames longer than 64 characters can break several tools. + While implementing the GCE provider for Juju we found that the metadata API breaks when trying to retrieve certain binary formats. In our case the gz of user-data. The API only streams out the first 5 bytes, encounters what it preceives as a EOF/nil character and truncates the rest of the request. We've opened an issue with Google directly, but in the meantime a work around is to allow an explicit encoding to be set for the user-data field of the GCE metadata. This will allow use to base64 encode the binary blob, which the API returns the entire contents of without issue.
** Summary changed: - gce metadata api doesn't properly stream binary data + [SRU] gce metadata api doesn't properly stream binary data -- You received this bug notification because you are a member of Ubuntu Server Team, which is subscribed to cloud-init in Ubuntu. https://bugs.launchpad.net/bugs/1404311 Title: [SRU] gce metadata api doesn't properly stream binary data To manage notifications about this bug go to: https://bugs.launchpad.net/cloud-init/+bug/1404311/+subscriptions -- Ubuntu-server-bugs mailing list Ubuntu-server-bugs@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-server-bugs