Activity log for bug #1616831

Date Who What changed Old value New value Message
2016-08-25 09:42:42 Andres Rodriguez bug added bug
2016-08-25 09:42:56 Andres Rodriguez bug task added cloud-init (Ubuntu)
2016-08-25 09:46:53 Andres Rodriguez description Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key)
2016-08-25 09:52:44 Andres Rodriguez description Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key)
2016-08-25 14:48:04 Christian Ehrhardt  cloud-init (Ubuntu): assignee ChristianEhrhardt (paelzer)
2016-08-25 14:50:16 Scott Moser cloud-init: status New Confirmed
2016-08-25 14:50:19 Scott Moser cloud-init: importance Undecided High
2016-08-25 14:50:22 Scott Moser cloud-init (Ubuntu): status New Confirmed
2016-08-25 14:50:24 Scott Moser cloud-init (Ubuntu): importance Undecided High
2016-08-25 14:50:46 Scott Moser cloud-init: assignee Christian Ehrhardt (der-schoenne)
2016-08-25 14:51:04 Scott Moser cloud-init: assignee Christian Ehrhardt (der-schoenne) ChristianEhrhardt (paelzer)
2016-08-25 16:20:44 Paolo de Rosa tags 4010
2016-08-26 12:07:55 Christian Ehrhardt  cloud-init (Ubuntu): status Confirmed In Progress
2016-08-26 18:48:08 Jon Grimm bug added subscriber Jon Grimm
2016-08-26 20:55:40 Launchpad Janitor cloud-init (Ubuntu): status In Progress Fix Released
2016-08-30 14:07:37 Andres Rodriguez cloud-init (Ubuntu): status Fix Released New
2016-08-30 14:25:34 Andres Rodriguez cloud-init (Ubuntu): status New Incomplete
2016-08-30 14:25:36 Andres Rodriguez cloud-init (Ubuntu): status Incomplete Fix Released
2016-08-30 17:27:43 Scott Moser cloud-init: status Confirmed Fix Committed
2016-09-12 20:50:27 Scott Moser cloud-init: status Fix Committed Fix Released
2016-09-12 21:08:39 Scott Moser nominated for series Ubuntu Xenial
2016-09-12 21:08:39 Scott Moser bug task added cloud-init (Ubuntu Xenial)
2016-09-12 21:09:36 Scott Moser cloud-init (Ubuntu Xenial): status New In Progress
2016-09-12 21:09:40 Scott Moser cloud-init (Ubuntu Xenial): importance Undecided Medium
2016-09-13 20:18:09 Chris J Arges cloud-init (Ubuntu Xenial): status In Progress Fix Committed
2016-09-13 20:18:12 Chris J Arges bug added subscriber Ubuntu Stable Release Updates Team
2016-09-13 20:18:15 Chris J Arges bug added subscriber SRU Verification
2016-09-13 20:18:24 Chris J Arges tags 4010 4010 verification-needed
2016-09-14 01:20:44 Scott Moser description Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key) ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure $ cat >user-data <<EOF #cloud-config apt: preserve_sources_list: false primary: - arches: [default] uri: http://us.archive.ubuntu.com/ubuntu proxy: http://192.168.122.1:8000/ security: - arches: [default] uri: http://us.archive.ubuntu.com/ubuntu sources: launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu main'} apt_proxy: http://192.168.122.1:8000/ EOF $ lxc launch ubuntu-daily:xenial x1 "--config=user.user-data=$(cat user-data)" $ lxc exec x1 -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec x1 -- sh -c ' p=/etc/apt/sources.list.d/proposed.list echo deb http://archive.ubuntu.com/ubuntu xenial-proposed main > "$p" && apt-get update -q && apt-get -qy install cloud-init' $ lxc exec x1 -- sh -c ' cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done rm -Rf /var/log/cloud-init*' $ lxc exec x1 reboot $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec x1 -- grep us.archive /etc/apt/sources.list [Regression Potential] The apt feature itself could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key)
2016-09-14 01:21:56 Scott Moser description ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure $ cat >user-data <<EOF #cloud-config apt: preserve_sources_list: false primary: - arches: [default] uri: http://us.archive.ubuntu.com/ubuntu proxy: http://192.168.122.1:8000/ security: - arches: [default] uri: http://us.archive.ubuntu.com/ubuntu sources: launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu main'} apt_proxy: http://192.168.122.1:8000/ EOF $ lxc launch ubuntu-daily:xenial x1 "--config=user.user-data=$(cat user-data)" $ lxc exec x1 -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec x1 -- sh -c ' p=/etc/apt/sources.list.d/proposed.list echo deb http://archive.ubuntu.com/ubuntu xenial-proposed main > "$p" && apt-get update -q && apt-get -qy install cloud-init' $ lxc exec x1 -- sh -c ' cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done rm -Rf /var/log/cloud-init*' $ lxc exec x1 reboot $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec x1 -- grep us.archive /etc/apt/sources.list [Regression Potential] The apt feature itself could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key) ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure $ cat >user-data <<EOF #cloud-config apt:   preserve_sources_list: false   primary:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   proxy: http://192.168.122.1:8000/   security:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   sources:     launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu main'} apt_proxy: http://192.168.122.1:8000/ EOF $ lxc launch ubuntu-daily:xenial x1 "--config=user.user-data=$(cat user-data)" $ lxc exec x1 -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec x1 -- sh -c '     p=/etc/apt/sources.list.d/proposed.list     echo deb http://archive.ubuntu.com/ubuntu xenial-proposed main > "$p" &&     apt-get update -q && apt-get -qy install cloud-init' $ lxc exec x1 -- sh -c '     cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done     rm -Rf /var/log/cloud-init*' $ lxc exec x1 reboot $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec x1 -- grep us.archive /etc/apt/sources.list [Regression Potential] The apt feature itself (added under bug 1574113) could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key)
2016-09-14 20:20:48 Scott Moser description ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure $ cat >user-data <<EOF #cloud-config apt:   preserve_sources_list: false   primary:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   proxy: http://192.168.122.1:8000/   security:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   sources:     launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu main'} apt_proxy: http://192.168.122.1:8000/ EOF $ lxc launch ubuntu-daily:xenial x1 "--config=user.user-data=$(cat user-data)" $ lxc exec x1 -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec x1 -- sh -c '     p=/etc/apt/sources.list.d/proposed.list     echo deb http://archive.ubuntu.com/ubuntu xenial-proposed main > "$p" &&     apt-get update -q && apt-get -qy install cloud-init' $ lxc exec x1 -- sh -c '     cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done     rm -Rf /var/log/cloud-init*' $ lxc exec x1 reboot $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec x1 -- grep us.archive /etc/apt/sources.list [Regression Potential] The apt feature itself (added under bug 1574113) could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key) ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure (this would recreate on intermediate versions of # cloud-init that were in trusty, but will not on xenial version. # testing the working path is still valid though to ensure it functions. $ cat >user-data <<EOF #cloud-config apt:   preserve_sources_list: false   primary:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   proxy: http://192.168.122.1:8000/   security:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   sources:     launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu main'} apt_proxy: http://192.168.122.1:8000/ EOF $ lxc launch ubuntu-daily:xenial x1 "--config=user.user-data=$(cat user-data)" $ lxc exec x1 -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec x1 -- sh -c '     p=/etc/apt/sources.list.d/proposed.list     echo deb http://archive.ubuntu.com/ubuntu xenial-proposed main > "$p" &&     apt-get update -q && apt-get -qy install cloud-init' $ lxc exec x1 -- sh -c '     cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done     rm -Rf /var/log/cloud-init*' $ lxc exec x1 reboot $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec x1 -- grep us.archive /etc/apt/sources.list [Regression Potential] The apt feature itself (added under bug 1574113) could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key)
2016-09-14 20:22:13 Scott Moser description ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure (this would recreate on intermediate versions of # cloud-init that were in trusty, but will not on xenial version. # testing the working path is still valid though to ensure it functions. $ cat >user-data <<EOF #cloud-config apt:   preserve_sources_list: false   primary:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   proxy: http://192.168.122.1:8000/   security:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   sources:     launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu main'} apt_proxy: http://192.168.122.1:8000/ EOF $ lxc launch ubuntu-daily:xenial x1 "--config=user.user-data=$(cat user-data)" $ lxc exec x1 -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec x1 -- sh -c '     p=/etc/apt/sources.list.d/proposed.list     echo deb http://archive.ubuntu.com/ubuntu xenial-proposed main > "$p" &&     apt-get update -q && apt-get -qy install cloud-init' $ lxc exec x1 -- sh -c '     cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done     rm -Rf /var/log/cloud-init*' $ lxc exec x1 reboot $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec x1 -- grep us.archive /etc/apt/sources.list [Regression Potential] The apt feature itself (added under bug 1574113) could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key) ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure (this would recreate on intermediate versions of # cloud-init that were in trusty, but will not on xenial version. # testing the working path is still valid though to ensure it functions. $ cat >user-data <<"EOF" #cloud-config apt:   preserve_sources_list: false   primary:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   proxy: http://192.168.122.1:8000/   security:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   sources:     launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu $RELEASE main'} apt_proxy: http://192.168.122.1:8000/ EOF $ lxc launch ubuntu-daily:xenial x1 "--config=user.user-data=$(cat user-data)" $ lxc exec x1 -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec x1 -- sh -c '     p=/etc/apt/sources.list.d/proposed.list     echo deb http://archive.ubuntu.com/ubuntu xenial-proposed main > "$p" &&     apt-get update -q && apt-get -qy install cloud-init' $ lxc exec x1 -- sh -c '     cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done     rm -Rf /var/log/cloud-init*' $ lxc exec x1 reboot $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec x1 -- grep us.archive /etc/apt/sources.list [Regression Potential] The apt feature itself (added under bug 1574113) could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key)
2016-09-21 17:55:56 Scott Moser description ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure (this would recreate on intermediate versions of # cloud-init that were in trusty, but will not on xenial version. # testing the working path is still valid though to ensure it functions. $ cat >user-data <<"EOF" #cloud-config apt:   preserve_sources_list: false   primary:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   proxy: http://192.168.122.1:8000/   security:   - arches: [default]     uri: http://us.archive.ubuntu.com/ubuntu   sources:     launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu $RELEASE main'} apt_proxy: http://192.168.122.1:8000/ EOF $ lxc launch ubuntu-daily:xenial x1 "--config=user.user-data=$(cat user-data)" $ lxc exec x1 -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec x1 -- sh -c '     p=/etc/apt/sources.list.d/proposed.list     echo deb http://archive.ubuntu.com/ubuntu xenial-proposed main > "$p" &&     apt-get update -q && apt-get -qy install cloud-init' $ lxc exec x1 -- sh -c '     cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done     rm -Rf /var/log/cloud-init*' $ lxc exec x1 reboot $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec x1 -- grep us.archive /etc/apt/sources.list [Regression Potential] The apt feature itself (added under bug 1574113) could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key) ==== Begin SRU Template ==== [Impact] New apt configuration was enabled, but if the user provided both new configuration format and old configuration format, then then cloud-init would error. The fixed behavior is to allow new and old and warn if they differ. This allows a user to provide the same data for older releases and newer release. [Test Case] # Recreate failure (this would recreate on intermediate versions of # cloud-init that were in trusty, but will not on xenial version. # testing the working path is still valid though to ensure it functions. # you will need to adjust both proxy settings to a local proxy. $ cat >user-data <<EOF #cloud-config apt: preserve_sources_list: false primary: - arches: [default] uri: http://us.archive.ubuntu.com/ubuntu proxy: http://192.168.122.1:8000/ security: - arches: [default] uri: http://us.archive.ubuntu.com/ubuntu sources: launchpad_3: {source: 'deb http://ppa.launchpad.net/maas/next/ubuntu main'} apt_proxy: http://192.168.122.1:8000/ EOF $ release=xenial $ name=x1 $ lxc launch ubuntu-daily:$release $name "--config=user.user-data=$(cat user-data)" $ while ! lxc exec "$name" -- [ -f /run/cloud-init/result.json ]; do sleep 1; done $ lxc exec $name -- grep WARN /var/log/cloud-init.log ## Now update container, clean and reboot to show first boot $ lxc exec $name -- sh -c ' p=/etc/apt/sources.list.d/proposed.list echo deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc)-proposed main > "$p" && apt-get update -q && apt-get -qy install cloud-init' $ lxc exec $name -- sh -c ' cd /var/lib/cloud && for d in *; do [ "$d" = "seed" ] || rm -Rf "$d"; done rm -Rf /var/log/cloud-init*' $ lxc exec $name reboot $ lxc exec $name -- grep WARN /var/log/cloud-init.log || echo no warn # this should show us archive used. $ lxc exec $name -- grep us.archive /etc/apt/sources.list | grep deb | tail -n 3 $ lxc exec $name -- cat /etc/apt/apt.conf.d/95cloud-init-proxy [Regression Potential] The apt feature itself (added under bug 1574113) could have regressions, as seen in bug 1621180. This fix specifically relaxed cloud-init's behavior, making it more backwards compatible. It should not be too prone to regression itself. ==== End SRU Template ==== Trying to use the new configuration format of APT configuration while still providing the OLD format, causes cloud-init fails to configure APT. cloud-init should be ignoring the old format if the new format is provided to ensure backwards compat. This is a problem for MAAS provided that we cannot safely differentiate / determine what cloud-init version we are using for a specific release we are deploying, and as such, we still need to send the old config while still providing the new one because: 1. Yakkety uses newer cloud-init with new format above 2. Xenial, Trusty, Precise use older cloud-init that doesn't support new format. And this is a problem because: 1. MAAS won't be able to use derived repositories in Xenial, Trusty, Precise until this gets backported into cloud-init. 2. Commission is done in Xenial, while deployment in Yakkety, but both may require the same config, but it is only supported in Yakkety's cloud-init. 3. Users may be using old images that may not contain new cloud-init at all, and even though the release already supports it, the image they are using doesn't and they have to continue to use the old format. 4. MAAS cannot differentiate/identify which cloud-init version its being used, as such, needs to sends both old and new config. Aug 25 09:44:17 node02 [CLOUDINIT] cc_apt_configure.py[ERROR]: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'primary': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'preserve_sources_list': True, 'security': [{'arches': ['default'], 'uri': 'http://us.archive.ubuntu.com/ubuntu'}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy' key) Aug 25 09:51:58 node02 [CLOUDINIT] util.py[DEBUG]: Running module apt-configure (<module 'cloudinit.config.cc_apt_configure' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py'>) failed#012Traceback (most recent call last):#012 File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 785, in _run_modules#012 freq=freq)#012 File "/usr/lib/python3/dist-packages/cloudinit/cloud.py", line 70, in run#012 return self._runners.run(name, functor, args, freq, clear_on_fail)#012 File "/usr/lib/python3/dist-packages/cloudinit/helpers.py", line 199, in run#012 results = functor(*args)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 77, in handle#012 ocfg = convert_to_v3_apt_format(ocfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 527, in convert_to_v3_apt_format#012 cfg = convert_v2_to_v3_apt_format(cfg)#012 File "/usr/lib/python3/dist-packages/cloudinit/config/cc_apt_configure.py", line 489, in convert_v2_to_v3_apt_format#012 raise ValueError(msg)#012ValueError: Error in apt configuration: old and new format of apt features are mutually exclusive ('apt':'{'preserve_sources_list': True, 'primary': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'security': [{'uri': 'http://us.archive.ubuntu.com/ubuntu', 'arches': ['default']}], 'sources': {'launchpad_3': {'source': 'deb http://ppa.launchpad.net/maas/next/ubuntu yakkety main'}}}' vs 'apt_proxy, apt_preserve_sources_list' key)
2016-09-21 17:56:09 Scott Moser tags 4010 verification-needed 4010 verification-done
2016-09-22 17:34:08 Launchpad Janitor cloud-init (Ubuntu Xenial): status Fix Committed Fix Released
2016-09-22 17:35:38 Chris J Arges removed subscriber Ubuntu Stable Release Updates Team
2023-05-10 16:21:34 James Falcon bug watch added https://github.com/canonical/cloud-init/issues/2711