Activity log for bug #1849731

Date Who What changed Old value New value Message
2019-10-24 20:41:28 NoRefill bug added bug
2019-10-24 21:02:25 NoRefill attachment added patch for cloudinit/sources/DataSourceConfigDrive.py https://bugs.launchpad.net/cloud-init/+bug/1849731/+attachment/5299898/+files/patch.diff
2019-10-24 21:03:52 NoRefill attachment added cloud-init.tar.gz from failed container https://bugs.launchpad.net/cloud-init/+bug/1849731/+attachment/5299899/+files/cloud-init.tar.gz
2019-10-24 21:05:38 NoRefill description I create custom LXD images from Ubuntu minimal images for an OpenStack environment based on LXD containers and the images I created worked on Ubuntu 18.04 hosts until around the cloud-init v18.5 release where subplatform was introduced. My images produced this error: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 760, in find_source if s.update_metadata([EventType.BOOT_NEW_INSTANCE]): File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 649, in update_metadata result = self.get_data() File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 276, in get_data self.persist_instance_data() File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 306, in persist_instance_data self._get_standardized_metadata()) File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 246, in _get_standardized_metadata 'subplatform': self.subplatform}} File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 419, in subplatform self._subplatform = self._get_subplatform() File "/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceConfigDrive.py", line 170, in _get_subplatform return '%s (%s)' % (subplatform_type, self.source) This code uses and if/elif which leaves subplatform_type undefined on my image. I don't have any idea what this is supposed to be, but looking at other DataSources, they use an if/else so that subplatform_type is alway defined. This diff makes the code work for my image: diff --git a/cloudinit/sources/DataSourceConfigDrive.py b/cloudinit/sources/DataSourceConfigDrive.py index c3627152..f77923c2 100644 --- a/cloudinit/sources/DataSourceConfigDrive.py +++ b/cloudinit/sources/DataSourceConfigDrive.py @@ -163,10 +163,10 @@ class DataSourceConfigDrive(openstack.SourceMixin, sources.DataSource): def _get_subplatform(self): """Return the subplatform metadata source details.""" - if self.seed_dir in self.source: - subplatform_type = 'seed-dir' - elif self.source.startswith('/dev'): + if self.source.startswith('/dev'): subplatform_type = 'config-disk' + else: + subplatform_type = 'seed-dir' return '%s (%s)' % (subplatform_type, self.source) I create custom LXD images from Ubuntu minimal images for an OpenStack environment based on LXD containers and the images I created worked on Ubuntu 18.04 hosts until around the cloud-init v18.5 release where subplatform was introduced. My images produced this error: Traceback (most recent call last):   File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 760, in find_source     if s.update_metadata([EventType.BOOT_NEW_INSTANCE]):   File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 649, in update_metadata     result = self.get_data()   File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 276, in get_data     self.persist_instance_data()   File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 306, in persist_instance_data     self._get_standardized_metadata())   File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 246, in _get_standardized_metadata     'subplatform': self.subplatform}}   File "/usr/lib/python3/dist-packages/cloudinit/sources/__init__.py", line 419, in subplatform     self._subplatform = self._get_subplatform()   File "/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceConfigDrive.py", line 170, in _get_subplatform     return '%s (%s)' % (subplatform_type, self.source) This code uses and if/elif which leaves subplatform_type undefined on my image. I don't have any idea what this is supposed to be, but looking at other DataSources, they use an if/else so that subplatform_type is alway defined. The diff that makes this work for me and works like other DataSources is attached.
2019-10-25 13:48:26 Paride Legovini cloud-init: status New Triaged
2019-11-04 17:47:20 Chad Smith cloud-init: status Triaged In Progress
2019-11-04 17:48:18 Chad Smith cloud-init: assignee Chad Smith (chad.smith)
2019-11-04 19:45:35 Ryan Harper merge proposal linked https://code.launchpad.net/~david-kindred/cloud-init/+git/cloud-init/+merge/375113
2019-11-04 22:00:24 Server Team CI bot cloud-init: status In Progress Fix Committed
2019-11-05 19:14:29 NoRefill merge proposal unlinked https://code.launchpad.net/~david-kindred/cloud-init/+git/cloud-init/+merge/375113
2019-11-05 19:15:41 NoRefill merge proposal linked https://code.launchpad.net/~david-kindred/cloud-init/+git/cloud-init/+merge/375113
2019-12-19 22:58:06 Chad Smith cloud-init: status Fix Committed Fix Released
2023-05-12 01:13:20 James Falcon bug watch added https://github.com/canonical/cloud-init/issues/3483