This bug was fixed in the package cloud-init - 0.7.6~bzr1022-0ubuntu2 --------------- cloud-init (0.7.6~bzr1022-0ubuntu2) utopic; urgency=medium
[ Ben Howard ] * d/patches/lp-1383794-gce-short_name.patch: Use short hostname for GCE (LP: #1383794). [ Wayne Witzel III ] * d/patches/lp-1404311-gce-data_encoding.patch: Enable user-data encoding support for GCE (LP: #1404311). [ Daniel Watkins ] * d/patches/lp-1422919-azure-g5_ephemeral.patch: Properly format G5 series cloud instances (LP: #1422919). -- Ben Howard <ben.how...@ubuntu.com> Tue, 17 Feb 2015 15:15:33 -0700 ** Changed in: cloud-init (Ubuntu Utopic) Status: Fix Committed => Fix Released -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to cloud-init. https://bugs.launchpad.net/bugs/1404311 Title: [SRU] gce metadata api doesn't properly stream binary data Status in Init scripts for use on cloud images: Fix Committed Status in cloud-init package in Ubuntu: Fix Released Status in cloud-init source package in Precise: Fix Released Status in cloud-init source package in Trusty: Fix Released Status in cloud-init source package in Utopic: Fix Released Status in cloud-init source package in Vivid: Fix Released Bug description: [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. To manage notifications about this bug go to: https://bugs.launchpad.net/cloud-init/+bug/1404311/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp