~ubuntu-branches/ubuntu/quantal/cloud-init/quantal

« back to all changes in this revision

Viewing changes to cloudinit/config/cc_apt_pipelining.py

  • Committer: Package Import Robot
  • Author(s): Scott Moser
  • Date: 2012-07-06 17:31:01 UTC
  • Revision ID: package-import@ubuntu.com-20120706173101-pwe5umm30p5j62ys
* New upstream snapshot.
  Thanks to Joshua Harlow for hard work.
* depend on software-properties-common rather than
  python-software-properties (LP: #1021418)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# vi: ts=4 expandtab
 
2
#
 
3
#    Copyright (C) 2011 Canonical Ltd.
 
4
#
 
5
#    Author: Ben Howard <ben.howard@canonical.com>
 
6
#
 
7
#    This program is free software: you can redistribute it and/or modify
 
8
#    it under the terms of the GNU General Public License version 3, as
 
9
#    published by the Free Software Foundation.
 
10
#
 
11
#    This program is distributed in the hope that it will be useful,
 
12
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
#    GNU General Public License for more details.
 
15
#
 
16
#    You should have received a copy of the GNU General Public License
 
17
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
18
 
 
19
from cloudinit import util
 
20
from cloudinit.settings import PER_INSTANCE
 
21
 
 
22
frequency = PER_INSTANCE
 
23
 
 
24
distros = ['ubuntu', 'debian']
 
25
 
 
26
DEFAULT_FILE = "/etc/apt/apt.conf.d/90cloud-init-pipelining"
 
27
 
 
28
APT_PIPE_TPL = ("//Written by cloud-init per 'apt_pipelining'\n"
 
29
                'Acquire::http::Pipeline-Depth "%s";\n')
 
30
 
 
31
# Acquire::http::Pipeline-Depth can be a value
 
32
# from 0 to 5 indicating how many outstanding requests APT should send.
 
33
# A value of zero MUST be specified if the remote host does not properly linger
 
34
# on TCP connections - otherwise data corruption will occur.
 
35
 
 
36
 
 
37
def handle(_name, cfg, cloud, log, _args):
 
38
 
 
39
    apt_pipe_value = util.get_cfg_option_str(cfg, "apt_pipelining", False)
 
40
    apt_pipe_value_s = str(apt_pipe_value).lower().strip()
 
41
 
 
42
    if apt_pipe_value_s == "false":
 
43
        write_apt_snippet(cloud, "0", log, DEFAULT_FILE)
 
44
    elif apt_pipe_value_s in ("none", "unchanged", "os"):
 
45
        return
 
46
    elif apt_pipe_value_s in [str(b) for b in xrange(0, 6)]:
 
47
        write_apt_snippet(cloud, apt_pipe_value_s, log, DEFAULT_FILE)
 
48
    else:
 
49
        log.warn("Invalid option for apt_pipeling: %s", apt_pipe_value)
 
50
 
 
51
 
 
52
def write_apt_snippet(cloud, setting, log, f_name):
 
53
    """ Writes f_name with apt pipeline depth 'setting' """
 
54
 
 
55
    file_contents = APT_PIPE_TPL % (setting)
 
56
 
 
57
    util.write_file(cloud.paths.join(False, f_name), file_contents)
 
58
 
 
59
    log.debug("Wrote %s with apt pipeline depth setting %s", f_name, setting)