verified as per sru template description.

** Description changed:

  ==== 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"
+ $ 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'}
+   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
+ $ 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 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 $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 x1 reboot
+ $ lxc exec $name reboot
  
- $ lxc exec x1 -- grep WARN /var/log/cloud-init.log || echo no warn
+ $ lxc exec $name -- 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
+ $ 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)

** Tags removed: verification-needed
** Tags added: verification-done

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1616831

Title:
  cloud-init doesn't prefer new APT config format when old and new are
  provided

To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-init/+bug/1616831/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to