summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--cloudinit/distros/debian.py28
-rw-r--r--doc/examples/cloud-config.txt9
-rwxr-xr-xpackages/bddeb2
-rw-r--r--packages/debian/control.in1
5 files changed, 38 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 1f4ca198..1286e7c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,10 @@
- Add a debug log message around import failures
- add a 'debug' module for easily printing out some information about
datasource and cloud-init [Shraddha Pandhe]
+ - support running apt with 'eatmydata' via configuration token
+ apt_get_wrapper (LP: #1236531).
+ - convert paths provided in config-drive 'files' to string before writing
+ (LP: #1260072).
0.7.4:
- fix issue mounting 'ephemeral0' if ephemeral0 was an alias for a
partitioned block device with target filesystem on ephemeral0.1.
diff --git a/cloudinit/distros/debian.py b/cloudinit/distros/debian.py
index 8fe49cbe..1ae232fd 100644
--- a/cloudinit/distros/debian.py
+++ b/cloudinit/distros/debian.py
@@ -36,6 +36,10 @@ LOG = logging.getLogger(__name__)
APT_GET_COMMAND = ('apt-get', '--option=Dpkg::Options::=--force-confold',
'--option=Dpkg::options::=--force-unsafe-io',
'--assume-yes', '--quiet')
+APT_GET_WRAPPER = {
+ 'command': 'eatmydata',
+ 'enabled': 'auto',
+}
class Distro(distros.Distro):
@@ -148,7 +152,13 @@ class Distro(distros.Distro):
# See: http://tiny.cc/kg91fw
# Or: http://tiny.cc/mh91fw
e['DEBIAN_FRONTEND'] = 'noninteractive'
- cmd = list(self.get_option("apt_get_command", APT_GET_COMMAND))
+
+ wcfg = self.get_option("apt_get_wrapper", APT_GET_WRAPPER)
+ cmd = _get_wrapper_prefix(
+ wcfg.get('command', APT_GET_WRAPPER['command']),
+ wcfg.get('enabled', APT_GET_WRAPPER['enabled']))
+
+ cmd.extend(list(self.get_option("apt_get_command", APT_GET_COMMAND)))
if args and isinstance(args, str):
cmd.append(args)
@@ -166,7 +176,9 @@ class Distro(distros.Distro):
cmd.extend(pkglist)
# Allow the output of this to flow outwards (ie not be captured)
- util.subp(cmd, env=e, capture=False)
+ util.log_time(logfunc=LOG.debug,
+ msg="apt-%s [%s]" % (command, ' '.join(cmd)), func=util.subp,
+ args=(cmd,), kwargs={'env': e, 'capture': False})
def update_package_sources(self):
self._runner.run("update-sources", self.package_command,
@@ -175,3 +187,15 @@ class Distro(distros.Distro):
def get_primary_arch(self):
(arch, _err) = util.subp(['dpkg', '--print-architecture'])
return str(arch).strip()
+
+
+def _get_wrapper_prefix(cmd, mode):
+ if isinstance(cmd, str):
+ cmd = [str(cmd)]
+
+ if (util.is_true(mode) or
+ (str(mode).lower() == "auto" and cmd[0] and
+ util.which(cmd[0]))):
+ return cmd
+ else:
+ return []
diff --git a/doc/examples/cloud-config.txt b/doc/examples/cloud-config.txt
index 8d756c61..61fa6065 100644
--- a/doc/examples/cloud-config.txt
+++ b/doc/examples/cloud-config.txt
@@ -147,8 +147,13 @@ apt_sources:
# '--option=Dpkg::options::=--force-unsafe-io', '--assume-yes', '--quiet']
#
# apt_get_upgrade_subcommand:
-# Specify a different subcommand for 'upgrade. The default is 'dist-upgrade'.
-# This is the subcommand that is invoked if package_upgrade is set to true above.
+# Specify a different subcommand for 'upgrade. The default is 'dist-upgrade'.
+# This is the subcommand that is invoked if package_upgrade is set to true above.
+#
+# apt_get_wrapper:
+# command: eatmydata
+# enabled: [True, False, "auto"]
+#
# Install additional packages on first boot
#
diff --git a/packages/bddeb b/packages/bddeb
index 8de4d466..f52eb55f 100755
--- a/packages/bddeb
+++ b/packages/bddeb
@@ -32,7 +32,7 @@ PKG_MP = {
'boto': 'python-boto',
'cheetah': 'python-cheetah',
'configobj': 'python-configobj',
- 'jsonpatch': 'python-json-patch',
+ 'jsonpatch': 'python-jsonpatch | python-json-patch',
'oauth': 'python-oauth',
'prettytable': 'python-prettytable',
'pyserial': 'python-serial',
diff --git a/packages/debian/control.in b/packages/debian/control.in
index b9352f5b..fd9f3ffd 100644
--- a/packages/debian/control.in
+++ b/packages/debian/control.in
@@ -25,7 +25,6 @@ Depends: procps,
#end for
python-software-properties | software-properties-common,
\${misc:Depends},
- \${python:Depends}
XB-Python-Version: \${python:Versions}
Description: Init scripts for cloud instances
Cloud instances need special scripts to run during initialisation