mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 15:36:27 +00:00

Check if the specified APT proxy server can be reached, informing the user if this can't be done. That will help them to debug the errors that will be raised by `apt-get` because of the misleading proxy configuration. This closes #95.
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from bootstrapvz.base import Task
|
|
from bootstrapvz.common import phases
|
|
from bootstrapvz.common.tasks import apt
|
|
import os
|
|
import urllib2
|
|
|
|
|
|
class CheckAptProxy(Task):
|
|
description = 'Checking APT proxy server'
|
|
phase = phases.package_installation
|
|
|
|
@classmethod
|
|
def run(cls, info):
|
|
proxy_address = info.manifest.plugins['apt_proxy']['address']
|
|
proxy_port = info.manifest.plugins['apt_proxy']['port']
|
|
proxy_url = 'http://{address}:{port}'.format(address=proxy_address, port=proxy_port)
|
|
try:
|
|
urllib2.urlopen(proxy_url, timeout=5)
|
|
except Exception as e:
|
|
# Default response from `apt-cacher-ng`
|
|
if isinstance(e, urllib2.HTTPError) and e.code == 404 and e.msg == 'Usage Information':
|
|
pass
|
|
else:
|
|
import logging
|
|
log = logging.getLogger(__name__)
|
|
log.error('The APT proxy server couldn\'t be reached. `apt-get` commands may fail from now on.')
|
|
|
|
|
|
class SetAptProxy(Task):
|
|
description = 'Setting proxy for APT'
|
|
phase = phases.package_installation
|
|
successors = [apt.AptUpdate, CheckAptProxy]
|
|
|
|
@classmethod
|
|
def run(cls, info):
|
|
proxy_path = os.path.join(info.root, 'etc/apt/apt.conf.d/02proxy')
|
|
proxy_address = info.manifest.plugins['apt_proxy']['address']
|
|
proxy_port = info.manifest.plugins['apt_proxy']['port']
|
|
with open(proxy_path, 'w') as proxy_file:
|
|
proxy_file.write('Acquire::http {{ Proxy "http://{address}:{port}"; }};\n'
|
|
.format(address=proxy_address, port=proxy_port))
|
|
|
|
|
|
class RemoveAptProxy(Task):
|
|
description = 'Removing APT proxy configuration file'
|
|
phase = phases.system_cleaning
|
|
|
|
@classmethod
|
|
def run(cls, info):
|
|
os.remove(os.path.join(info.root, 'etc/apt/apt.conf.d/02proxy'))
|