From c8b04173d932cb57891117b96f19d9257c91057d Mon Sep 17 00:00:00 2001 From: Michael Polenchuk Date: Fri, 3 Mar 2017 16:36:06 +0400 Subject: [PATCH] Support a "mirror" method of apt-get apt-get supports a "mirror" method that will automatically select a closest mirror based on geographical location. So extend URI library to handle repository sources with mirror:// Change-Id: I7b8018af50e431614d0d5c87ad3f1c8bad94e4d9 Closes-Bug: #1669751 --- .../puppet/parser/functions/url_available.rb | 19 ++++++++++--------- .../spec/functions/url_available_spec.rb | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/url_available.rb b/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/url_available.rb index 6baf9591a0..42cd3f39f2 100644 --- a/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/url_available.rb +++ b/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/url_available.rb @@ -4,7 +4,13 @@ require 'net/http' require 'open-uri' require 'uri' -Puppet::Parser::Functions::newfunction(:url_available, :doc => <<-EOS +module URI + # Define 'mirror:' scheme + class MIRROR < HTTP; end + @@schemes['MIRROR'] = MIRROR +end + +Puppet::Parser::Functions::newfunction(:url_available, :arity => -2, :doc => <<-EOS The url_available function attempts to make a http request to a url and throws a puppet error if the URL is unavailable. The url_available function can take up to two paramters. The first paramter is the URL which is required and can be @@ -39,8 +45,7 @@ url_available({ 'uri' => 'http://www.google.com', EOS ) do |argv| - url = argv[0] - http_proxy = argv[1] + url, http_proxy = argv threads_count = 16 Thread.abort_on_exception=true @@ -54,12 +59,8 @@ EOS # check the type of url being passed, if hash look for the uri key if url.instance_of? Hash - if url.has_key?('uri') - uri = url['uri'] - end - if url.has_key?('proxy') - http_proxy = url['proxy'] - end + uri = url.fetch 'uri', nil + http_proxy = url.fetch 'proxy', nil elsif url.instance_of? String uri = url else diff --git a/deployment/puppet/osnailyfacter/spec/functions/url_available_spec.rb b/deployment/puppet/osnailyfacter/spec/functions/url_available_spec.rb index 2308c76ea8..3ee693225a 100644 --- a/deployment/puppet/osnailyfacter/spec/functions/url_available_spec.rb +++ b/deployment/puppet/osnailyfacter/spec/functions/url_available_spec.rb @@ -7,6 +7,7 @@ describe 'url_available' do http://archive.ubuntu.com/ubuntu/ http://mirror.fuel-infra.org/mos/ubuntu/ http://apt.postgresql.org/pub/repos/apt/ + http://mirrors.ubuntu.com/mirrors.txt ) end