add option apt_pipelining to cloud-config to address s3 mirrors (LP: #948461)

Thanks to Ben Howard.
This commit is contained in:
Scott Moser 2012-03-09 09:54:44 -05:00
commit 17d2e7c0b9
4 changed files with 65 additions and 0 deletions

View File

@ -28,6 +28,8 @@
- DataSourceNoCloud: support seed from external disk of ISO or vfat (LP: #857378)
- DataSourceNoCloud: support inserting /etc/network/interfaces
- DataSourceMaaS: add data source for Ubuntu Machines as a Service (MaaS) (LP: #942061)
- add option 'apt_pipelining' to address issue with S3 mirrors
(LP: #948461) [Ben Howard]
0.6.2:
- fix bug where update was not done unless update was explicitly set.
It would not be run if 'upgrade' or packages were set to be installed

View File

@ -0,0 +1,53 @@
# vi: ts=4 expandtab
#
# Copyright (C) 2011 Canonical Ltd.
#
# Author: Ben Howard <ben.howard@canonical.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3, as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import cloudinit.util as util
from cloudinit.CloudConfig import per_instance
frequency = per_instance
default_file = "/etc/apt/apt.conf.d/90cloud-init-pipeling"
def handle(_name, cfg, _cloud, log, _args):
apt_pipe_value = util.get_cfg_option_str(cfg, "apt_pipelining", False)
apt_pipe_value = str(apt_pipe_value).lower()
if apt_pipe_value == "false":
write_apt_snippet("0", log)
elif apt_pipe_value in ("none", "unchanged", "os"):
return
elif apt_pipe_value in str(range(0, 6)):
write_apt_snippet(apt_pipe_value, log)
else:
log.warn("Invalid option for apt_pipeling: %s" % apt_pipe_value)
def write_apt_snippet(setting, log, f_name=default_file):
""" Writes f_name with apt pipeline depth 'setting' """
acquire_pipeline_depth = 'Acquire::http::Pipeline-Depth "%s";\n'
file_contents = ("//Written by cloud-init per 'apt_pipelining'\n"
+ (acquire_pipeline_depth % setting))
util.write_file(f_name, file_contents)
log.debug("Wrote %s with APT pipeline setting" % f_name)

View File

@ -19,6 +19,7 @@ cloud_config_modules:
- locale
- set-passwords
- grub-dpkg
- apt-pipelining
- apt-update-upgrade
- landscape
- timezone

View File

@ -45,6 +45,15 @@ apt_mirror_search:
# apt_proxy (configure Acquire::HTTP::Proxy)
apt_proxy: http://my.apt.proxy:3128
# apt_pipelining (configure Acquire::http::Pipeline-Depth)
# Default: disables HTTP pipelining. Certain web servers, such
# as S3 do not pipeline properly (LP: #948461).
# Valid options:
# False/default: Disables pipelining for APT
# None/Unchanged: Use OS default
# Number: Set pipelining to some number (not recommended)
apt_pipelining: False
# Preserve existing /etc/apt/sources.list
# Default: overwrite sources_list with mirror. If this is true
# then apt_mirror above will have no effect