diff --git a/examples/proxy.pp b/examples/proxy.pp new file mode 100644 index 0000000000..464090415c --- /dev/null +++ b/examples/proxy.pp @@ -0,0 +1 @@ +# TODO diff --git a/manifests/params.pp b/manifests/params.pp index 8f9d7e85f4..3c169e3fcf 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -31,6 +31,11 @@ } } + $proxy = { + 'host' => undef, + 'port' => 8080, + } + $file_defaults = { 'owner' => 'root', 'group' => 'root', diff --git a/manifests/ppa.pp b/manifests/ppa.pp index 4181b5811d..1dc8e26fce 100644 --- a/manifests/ppa.pp +++ b/manifests/ppa.pp @@ -5,6 +5,7 @@ $options = $::apt::ppa_options, $package_name = $::apt::ppa_package, $package_manage = false, + $proxy = {}, ) { if ! $release { fail('lsbdistcodename fact not available: release parameter required') @@ -19,6 +20,8 @@ $filename_without_ppa = regsubst($filename_without_dots, '^ppa:', '', 'G') $sources_list_d_filename = "${filename_without_ppa}-${release}.list" + $_proxy = merge($apt::proxy, $proxy) + if $ensure == 'present' { if $package_manage { package { $package_name: } @@ -28,12 +31,12 @@ $_require = File['sources.list.d'] } - case $::apt::proxy_host { + case $_proxy['host'] { false, '', undef: { $_proxy_env = [] } default: { - $_proxy_env = ["http_proxy=http://${::apt::proxy_host}:${::apt::proxy_port}", "https_proxy=http://${::apt::proxy_host}:${::apt::proxy_port}"] + $_proxy_env = ["http_proxy=http://${_proxy['host']}:${_proxy['port']}", "https_proxy=http://${_proxy['host']}:${_proxy['port']}"] } } diff --git a/spec/defines/ppa_spec.rb b/spec/defines/ppa_spec.rb index f3c76a3bde..6ca008b4ba 100644 --- a/spec/defines/ppa_spec.rb +++ b/spec/defines/ppa_spec.rb @@ -58,6 +58,70 @@ } end + describe 'apt included, proxy host' do + let :pre_condition do + 'class { "apt": }' + end + let :facts do + { + :lsbdistrelease => '14.04', + :lsbdistcodename => 'trusty', + :operatingsystem => 'Ubuntu', + :lsbdistid => 'Ubuntu', + :osfamily => 'Debian', + } + end + let :params do + { + 'options' => '', + 'package_manage' => true, + 'proxy' => { 'host' => 'localhost', } + } + end + let(:title) { 'ppa:foo' } + it { is_expected.to contain_package('software-properties-common') } + it { is_expected.to contain_exec('add-apt-repository-ppa:foo').that_notifies('Exec[apt_update]').with({ + 'environment' => ['http_proxy=http://localhost:8080', 'https_proxy=http://localhost:8080'], + 'command' => '/usr/bin/add-apt-repository ppa:foo', + 'unless' => '/usr/bin/test -s /etc/apt/sources.list.d/foo-trusty.list', + 'user' => 'root', + 'logoutput' => 'on_failure', + }) + } + end + + describe 'apt included, proxy host and port' do + let :pre_condition do + 'class { "apt": }' + end + let :facts do + { + :lsbdistrelease => '14.04', + :lsbdistcodename => 'trusty', + :operatingsystem => 'Ubuntu', + :lsbdistid => 'Ubuntu', + :osfamily => 'Debian', + } + end + let :params do + { + 'options' => '', + 'package_manage' => true, + 'proxy' => { 'host' => 'localhost', 'port' => 8180, } + } + end + let(:title) { 'ppa:foo' } + it { is_expected.to contain_package('software-properties-common') } + it { is_expected.to contain_exec('add-apt-repository-ppa:foo').that_notifies('Exec[apt_update]').with({ + 'environment' => ['http_proxy=http://localhost:8180', 'https_proxy=http://localhost:8180'], + 'command' => '/usr/bin/add-apt-repository ppa:foo', + 'unless' => '/usr/bin/test -s /etc/apt/sources.list.d/foo-trusty.list', + 'user' => 'root', + 'logoutput' => 'on_failure', + }) + } + end + describe 'ensure absent' do let :pre_condition do 'class { "apt": }'