add option apt_pipelining to cloud-config to address s3 mirrors (LP: #948461)
Thanks to Ben Howard.
This commit is contained in:
commit
17d2e7c0b9
@ -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
|
||||
|
53
cloudinit/CloudConfig/cc_apt_pipelining.py
Normal file
53
cloudinit/CloudConfig/cc_apt_pipelining.py
Normal 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)
|
@ -19,6 +19,7 @@ cloud_config_modules:
|
||||
- locale
|
||||
- set-passwords
|
||||
- grub-dpkg
|
||||
- apt-pipelining
|
||||
- apt-update-upgrade
|
||||
- landscape
|
||||
- timezone
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user