diff options
author | Scott Moser <smoser@ubuntu.com> | 2016-07-14 14:25:09 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2016-07-14 14:25:09 -0400 |
commit | 74e4dff3774075b4e471df0258c8584feeb352bb (patch) | |
tree | 5815cfa2ec4f9035753e904f30116fdd5b872553 /cloudinit/sources/DataSourceConfigDrive.py | |
parent | 660e04e658381ee52c9dc5f877745614cee15c42 (diff) | |
parent | 9a0189ccda40e366517c0690e0ea2833e533bf1a (diff) | |
download | vyos-cloud-init-74e4dff3774075b4e471df0258c8584feeb352bb.tar.gz vyos-cloud-init-74e4dff3774075b4e471df0258c8584feeb352bb.zip |
ConfigDrive: fix writing of 'injected' files and legacy networking
Previous commit inadvertently disabled the consumption of 'injected' files
in configdrive (openstack server boot --file=/target/file=local-file)
unless the datasource was in 'pass' mode. The default mode is 'net' so
that was not likely to happen.
Also here are:
a.) some comments to apply_network_config
b.) add backwards compatibility for distros that do not yet implement
apply_network_config by converting the network config into ENI format
and calling apply_network.
This is required because prior to the previous commit, those distros
would have had 'apply_network' called with the openstack provided
ENI file. But after this change they will have apply_network_config
called by cloudinit's main.
c.) add network_state_to_eni for converting net config to eni
it supports the not-actually-correct 'hwaddress' field in ENI
LP: #1602373
Diffstat (limited to 'cloudinit/sources/DataSourceConfigDrive.py')
-rw-r--r-- | cloudinit/sources/DataSourceConfigDrive.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/cloudinit/sources/DataSourceConfigDrive.py b/cloudinit/sources/DataSourceConfigDrive.py index 3130e618..91d6ff13 100644 --- a/cloudinit/sources/DataSourceConfigDrive.py +++ b/cloudinit/sources/DataSourceConfigDrive.py @@ -107,12 +107,19 @@ class DataSourceConfigDrive(openstack.SourceMixin, sources.DataSource): if self.dsmode == sources.DSMODE_DISABLED: return False - # This is legacy and sneaky. If dsmode is 'pass' then write - # 'injected files' and apply legacy ENI network format. prev_iid = get_previous_iid(self.paths) cur_iid = md['instance-id'] - if prev_iid != cur_iid and self.dsmode == sources.DSMODE_PASS: - on_first_boot(results, distro=self.distro) + if prev_iid != cur_iid: + # better would be to handle this centrally, allowing + # the datasource to do something on new instance id + # note, networking is only rendered here if dsmode is DSMODE_PASS + # which means "DISABLED, but render files and networking" + on_first_boot(results, distro=self.distro, + network=self.dsmode == sources.DSMODE_PASS) + + # This is legacy and sneaky. If dsmode is 'pass' then do not claim + # the datasource was used, even though we did run on_first_boot above. + if self.dsmode == sources.DSMODE_PASS: LOG.debug("%s: not claiming datasource, dsmode=%s", self, self.dsmode) return False @@ -184,15 +191,16 @@ def get_previous_iid(paths): return None -def on_first_boot(data, distro=None): +def on_first_boot(data, distro=None, network=True): """Performs any first-boot actions using data read from a config-drive.""" if not isinstance(data, dict): raise TypeError("Config-drive data expected to be a dict; not %s" % (type(data))) - net_conf = data.get("network_config", '') - if net_conf and distro: - LOG.warn("Updating network interfaces from config drive") - distro.apply_network(net_conf) + if network: + net_conf = data.get("network_config", '') + if net_conf and distro: + LOG.warn("Updating network interfaces from config drive") + distro.apply_network(net_conf) write_injected_files(data.get('files')) |