summaryrefslogtreecommitdiff
path: root/cloudinit/sources/DataSourceHetzner.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/sources/DataSourceHetzner.py')
-rw-r--r--cloudinit/sources/DataSourceHetzner.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/cloudinit/sources/DataSourceHetzner.py b/cloudinit/sources/DataSourceHetzner.py
index 50298330..a86035e0 100644
--- a/cloudinit/sources/DataSourceHetzner.py
+++ b/cloudinit/sources/DataSourceHetzner.py
@@ -59,12 +59,19 @@ class DataSourceHetzner(sources.DataSource):
self.userdata_address, timeout=self.timeout,
sec_between=self.wait_retry, retries=self.retries)
- self.userdata_raw = ud
+ # Hetzner cloud does not support binary user-data. So here, do a
+ # base64 decode of the data if we can. The end result being that a
+ # user can provide base64 encoded (possibly gzipped) data as user-data.
+ #
+ # The fallout is that in the event of b64 encoded user-data,
+ # /var/lib/cloud-init/cloud-config.txt will not be identical to the
+ # user-data provided. It will be decoded.
+ self.userdata_raw = hc_helper.maybe_b64decode(ud)
self.metadata_full = md
- """hostname is name provided by user at launch. The API enforces
- it is a valid hostname, but it is not guaranteed to be resolvable
- in dns or fully qualified."""
+ # hostname is name provided by user at launch. The API enforces it is
+ # a valid hostname, but it is not guaranteed to be resolvable in dns or
+ # fully qualified.
self.metadata['instance-id'] = md['instance-id']
self.metadata['local-hostname'] = md['hostname']
self.metadata['network-config'] = md.get('network-config', None)