diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | cloudinit/distros/__init__.py | 9 | ||||
-rw-r--r-- | cloudinit/distros/arch.py | 7 | ||||
-rw-r--r-- | cloudinit/distros/debian.py | 7 | ||||
-rw-r--r-- | cloudinit/distros/freebsd.py | 5 | ||||
-rw-r--r-- | cloudinit/distros/gentoo.py | 7 | ||||
-rw-r--r-- | cloudinit/distros/sles.py | 7 | ||||
-rw-r--r-- | cloudinit/sources/DataSourceGCE.py | 10 | ||||
-rw-r--r-- | systemd/cloud-init.service | 2 | ||||
-rw-r--r-- | tests/unittests/test_datasource/test_gce.py | 7 |
10 files changed, 22 insertions, 43 deletions
@@ -16,6 +16,10 @@ types - Update to use newer/better OMNIBUS_URL for chef module - GCE: Allow base64 encoded user-data (LP: #1404311) [Wayne Witzell III] + - GCE: use short hostname rather than fqdn (LP: #1383794) [Ben Howard] + - systemd: make init stage run before login prompts shown [Steve Langasek] + - hostname: on first boot apply hostname to be same as is written for + persistent hostname. (LP: #1246485) 0.7.6: - open 0.7.6 - Enable vendordata on CloudSigma datasource (LP: #1303986) diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py index bf465442..5eab780b 100644 --- a/cloudinit/distros/__init__.py +++ b/cloudinit/distros/__init__.py @@ -86,7 +86,7 @@ class Distro(object): def set_hostname(self, hostname, fqdn=None): writeable_hostname = self._select_hostname(hostname, fqdn) self._write_hostname(writeable_hostname, self.hostname_conf_fn) - self._apply_hostname(hostname) + self._apply_hostname(writeable_hostname) @abc.abstractmethod def package_command(self, cmd, args=None, pkgs=None): @@ -160,9 +160,12 @@ class Distro(object): util.logexc(LOG, "Failed to non-persistently adjust the system " "hostname to %s", hostname) - @abc.abstractmethod def _select_hostname(self, hostname, fqdn): - raise NotImplementedError() + # Prefer the short hostname over the long + # fully qualified domain name + if not hostname: + return fqdn + return hostname @staticmethod def expand_osfamily(family_list): diff --git a/cloudinit/distros/arch.py b/cloudinit/distros/arch.py index 005a0dd4..68bf1aab 100644 --- a/cloudinit/distros/arch.py +++ b/cloudinit/distros/arch.py @@ -118,13 +118,6 @@ class Distro(distros.Distro): return False return True - def _select_hostname(self, hostname, fqdn): - # Prefer the short hostname over the long - # fully qualified domain name - if not hostname: - return fqdn - return hostname - def _write_hostname(self, your_hostname, out_fn): conf = None try: diff --git a/cloudinit/distros/debian.py b/cloudinit/distros/debian.py index 010be67d..b09eb094 100644 --- a/cloudinit/distros/debian.py +++ b/cloudinit/distros/debian.py @@ -86,13 +86,6 @@ class Distro(distros.Distro): else: return distros.Distro._bring_up_interfaces(self, device_names) - def _select_hostname(self, hostname, fqdn): - # Prefer the short hostname over the long - # fully qualified domain name - if not hostname: - return fqdn - return hostname - def _write_hostname(self, your_hostname, out_fn): conf = None try: diff --git a/cloudinit/distros/freebsd.py b/cloudinit/distros/freebsd.py index 9216510e..f1b4a256 100644 --- a/cloudinit/distros/freebsd.py +++ b/cloudinit/distros/freebsd.py @@ -150,11 +150,6 @@ class Distro(distros.Distro): return default return hostname - def _select_hostname(self, hostname, fqdn): - if not hostname: - return fqdn - return hostname - def _write_hostname(self, hostname, filename): self.updatercconf('hostname', hostname) diff --git a/cloudinit/distros/gentoo.py b/cloudinit/distros/gentoo.py index 45c2e658..09dd0d73 100644 --- a/cloudinit/distros/gentoo.py +++ b/cloudinit/distros/gentoo.py @@ -97,13 +97,6 @@ class Distro(distros.Distro): else: return distros.Distro._bring_up_interfaces(self, device_names) - def _select_hostname(self, hostname, fqdn): - # Prefer the short hostname over the long - # fully qualified domain name - if not hostname: - return fqdn - return hostname - def _write_hostname(self, your_hostname, out_fn): conf = None try: diff --git a/cloudinit/distros/sles.py b/cloudinit/distros/sles.py index 9788a1ba..43682a12 100644 --- a/cloudinit/distros/sles.py +++ b/cloudinit/distros/sles.py @@ -115,13 +115,6 @@ class Distro(distros.Distro): conf.set_hostname(hostname) util.write_file(out_fn, str(conf), 0644) - def _select_hostname(self, hostname, fqdn): - # Prefer the short hostname over the long - # fully qualified domain name - if not hostname: - return fqdn - return hostname - def _read_system_hostname(self): host_fn = self.hostname_conf_fn return (host_fn, self._read_hostname(host_fn)) diff --git a/cloudinit/sources/DataSourceGCE.py b/cloudinit/sources/DataSourceGCE.py index 92e5a28e..2cf8fdcd 100644 --- a/cloudinit/sources/DataSourceGCE.py +++ b/cloudinit/sources/DataSourceGCE.py @@ -29,6 +29,7 @@ BUILTIN_DS_CONFIG = { } REQUIRED_FIELDS = ('instance-id', 'availability-zone', 'local-hostname') + class DataSourceGCE(sources.DataSource): def __init__(self, sys_cfg, distro, paths): sources.DataSource.__init__(self, sys_cfg, distro, paths) @@ -59,7 +60,8 @@ class DataSourceGCE(sources.DataSource): ('local-hostname', 'instance/hostname', True), ('public-keys', 'project/attributes/sshKeys', False), ('user-data', 'instance/attributes/user-data', False), - ('user-data-encoding', 'instance/attributes/user-data-encoding', False), + ('user-data-encoding', 'instance/attributes/user-data-encoding', + False), ] # if we cannot resolve the metadata server, then no point in trying @@ -106,7 +108,8 @@ class DataSourceGCE(sources.DataSource): encoding = self.metadata.get('user-data-encoding') if encoding: if encoding == 'base64': - self.metadata['user-data'] = b64decode(self.metadata['user-data']) + self.metadata['user-data'] = b64decode( + self.metadata['user-data']) else: LOG.warn('unknown user-data-encoding: %s, ignoring', encoding) @@ -124,7 +127,8 @@ class DataSourceGCE(sources.DataSource): return self.metadata['public-keys'] def get_hostname(self, fqdn=False, _resolve_ip=False): - return self.metadata['local-hostname'] + # GCE has long FDQN's and has asked for short hostnames + return self.metadata['local-hostname'].split('.')[0] def get_userdata_raw(self): return self.metadata['user-data'] diff --git a/systemd/cloud-init.service b/systemd/cloud-init.service index 6b0c7229..398b90ea 100644 --- a/systemd/cloud-init.service +++ b/systemd/cloud-init.service @@ -1,7 +1,7 @@ [Unit] Description=Initial cloud-init job (metadata service crawler) After=local-fs.target network.target cloud-init-local.service -Before=sshd.service sshd-keygen.service +Before=sshd.service sshd-keygen.service systemd-user-sessions.service Requires=network.target Wants=local-fs.target cloud-init-local.service sshd.service sshd-keygen.service diff --git a/tests/unittests/test_datasource/test_gce.py b/tests/unittests/test_datasource/test_gce.py index 89251b0e..06050bb1 100644 --- a/tests/unittests/test_datasource/test_gce.py +++ b/tests/unittests/test_datasource/test_gce.py @@ -99,7 +99,8 @@ class TestDataSourceGCE(test_helpers.HttprettyTestCase): body=_new_request_callback()) self.ds.get_data() - self.assertEqual(GCE_META.get('instance/hostname'), + shostname = GCE_META.get('instance/hostname').split('.')[0] + self.assertEqual(shostname, self.ds.get_hostname()) self.assertEqual(GCE_META.get('instance/id'), @@ -126,8 +127,8 @@ class TestDataSourceGCE(test_helpers.HttprettyTestCase): self.assertEqual(GCE_META_PARTIAL.get('instance/id'), self.ds.get_instance_id()) - self.assertEqual(GCE_META_PARTIAL.get('instance/hostname'), - self.ds.get_hostname()) + shostname = GCE_META_PARTIAL.get('instance/hostname').split('.')[0] + self.assertEqual(shostname, self.ds.get_hostname()) @httpretty.activate def test_metadata_encoding(self): |