diff --git a/bootstrapvz/plugins/apt_proxy/__init__.py b/bootstrapvz/plugins/apt_proxy/__init__.py index a5b086c..6ca8f71 100644 --- a/bootstrapvz/plugins/apt_proxy/__init__.py +++ b/bootstrapvz/plugins/apt_proxy/__init__.py @@ -6,6 +6,7 @@ def validate_manifest(data, validator, error): def resolve_tasks(taskset, manifest): import tasks + taskset.add(tasks.CheckAptProxy) taskset.add(tasks.SetAptProxy) if not manifest.plugins['apt_proxy'].get('persistent', False): taskset.add(tasks.RemoveAptProxy) diff --git a/bootstrapvz/plugins/apt_proxy/tasks.py b/bootstrapvz/plugins/apt_proxy/tasks.py index 9d8dbc3..22ac4d9 100644 --- a/bootstrapvz/plugins/apt_proxy/tasks.py +++ b/bootstrapvz/plugins/apt_proxy/tasks.py @@ -2,12 +2,34 @@ 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] + successors = [apt.AptUpdate, CheckAptProxy] @classmethod def run(cls, info):