~cloud-init-dev/cloud-init/trunk

« back to all changes in this revision

Viewing changes to cloudinit/config/cc_apt_pipelining.py

  • Committer: Scott Moser
  • Date: 2016-08-10 15:06:15 UTC
  • Revision ID: smoser@ubuntu.com-20160810150615-ma2fv107w3suy1ma
README: Mention move of revision control to git.

cloud-init development has moved its revision control to git.
It is available at 
  https://code.launchpad.net/cloud-init

Clone with 
  git clone https://git.launchpad.net/cloud-init
or
  git clone git+ssh://git.launchpad.net/cloud-init

For more information see
  https://git.launchpad.net/cloud-init/tree/HACKING.rst

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.settings import PER_INSTANCE
20
 
from cloudinit import util
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("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 range(0, 6)]:
47
 
        write_apt_snippet(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(setting, log, f_name):
53
 
    """Writes f_name with apt pipeline depth 'setting'."""
54
 
 
55
 
    file_contents = APT_PIPE_TPL % (setting)
56
 
    util.write_file(f_name, file_contents)
57
 
    log.debug("Wrote %s with apt pipeline depth setting %s", f_name, setting)