vagrant-proxyconf 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 89c3334da0f5ca851a92f23dc388327d47dee03a
4
- data.tar.gz: 743404cd2300188be2c8fccf0dda4894b2ba8523
2
+ SHA256:
3
+ metadata.gz: 0f389b148d8815b5a0f81a851900dbea47114c3f6b60597107d7815eb6ab0fa9
4
+ data.tar.gz: b3f551cedfd75ebb27d06d495b4bffee2e5832a1b45dec1065933b999939ef13
5
5
  SHA512:
6
- metadata.gz: 2298453a51c191d77e4b927ac5be44d4d15aff00fce6a14a4c532dfb85587f7686966ae374f538583fb3ece529724990e902be06af337979f54b0cf3af5c70af
7
- data.tar.gz: 375908939f9f242efcd9d4e3b41a610017be5b9e55680d4e09b71620561f55750d0de9508b257c7c8c271881835f28703d3ecfb6113bdbd9922ffd6f14bec728
6
+ metadata.gz: d8a521ab63ab244683f2027ae6dc5902f9f8ff9b08514f3099ff0fcfd9e3f1105a1518fdd924f2fcb57ca53a131a5510cb877eeaefd28b3bef47eab00fe265e6
7
+ data.tar.gz: 4cd46b6a73344a8d1ee2fe045d2c398c172298d6fa0c2fbda69785e76999d1748072bbf3cc832433494921b9d27dc19644125414198746cf0e236713f3ac06af
data/.travis.yml CHANGED
@@ -12,6 +12,8 @@ env:
12
12
  rvm: 2.4.4
13
13
  matrix:
14
14
  include:
15
+ - env: VAGRANT_VERSION=v2.2.4
16
+ - env: VAGRANT_VERSION=v2.2.3
15
17
  - env: VAGRANT_VERSION=v2.2.2
16
18
  - env: VAGRANT_VERSION=v2.1.5
17
19
  - env: VAGRANT_VERSION=v2.0.4
data/Gemfile CHANGED
@@ -18,8 +18,8 @@ end
18
18
  #### End Added due to https://groups.google.com/forum/#!topic/vagrant-up/J8J6LmhzBqM/discussion
19
19
 
20
20
  gem 'vagrant',
21
- git: 'https://github.com/mitchellh/vagrant.git',
22
- ref: ENV.fetch('VAGRANT_VERSION', 'v2.2.2')
21
+ git: 'https://github.com/hashicorp/vagrant.git',
22
+ ref: ENV.fetch('VAGRANT_VERSION', 'v2.2.4')
23
23
 
24
24
  gem 'rake'
25
25
  gem 'rspec', '~> 3.1'
@@ -27,6 +27,7 @@ gem 'rspec-its', '~> 1.0'
27
27
 
28
28
  group :development do
29
29
  gem 'guard-rspec'
30
+ gem 'mini_portile2'
30
31
  gem 'pry'
31
32
  gem 'rb-readline'
32
33
  gem 'redcarpet'
@@ -20,6 +20,7 @@ module VagrantPlugins
20
20
  detect_export
21
21
  write_docker_config
22
22
  update_docker_client_config
23
+ update_docker_systemd_config
23
24
 
24
25
  true
25
26
  end
@@ -33,6 +34,7 @@ module VagrantPlugins
33
34
 
34
35
  write_docker_config
35
36
  update_docker_client_config
37
+ update_docker_systemd_config
36
38
 
37
39
  true
38
40
  end
@@ -109,6 +111,64 @@ module VagrantPlugins
109
111
  config_json
110
112
  end
111
113
 
114
+ def update_docker_systemd_config
115
+ return if !supports_systemd?
116
+ changed = false
117
+
118
+ if disabled?
119
+ @machine.communicate.tap do |comm|
120
+ changed = true if comm.test('[ -f /etc/systemd/system/docker.service.d/http-proxy.conf ]')
121
+ changed = true if comm.test('[ -f /etc/systemd/system/docker.service.d/https-proxy.conf ]')
122
+
123
+ comm.sudo('rm -f /etc/systemd/system/docker.service.d/http-proxy.conf')
124
+ comm.sudo('rm -f /etc/systemd/system/docker.service.d/https-proxy.conf')
125
+ comm.sudo('systemctl daemon-reload')
126
+
127
+ if changed
128
+ comm.sudo("systemctl restart #{docker}")
129
+ end
130
+
131
+ end
132
+
133
+ changed = true
134
+ return changed
135
+ end
136
+
137
+ systemd_config = docker_systemd_config
138
+ @docker_systemd_config = tempfile(systemd_config).path
139
+
140
+ @machine.communicate.tap do |comm|
141
+
142
+ comm.sudo("mkdir -p /etc/systemd/system/docker.service.d")
143
+ comm.upload(@docker_systemd_config, "/tmp/vagrant-proxyconf-docker-systemd-config")
144
+
145
+ if comm.test("diff -Naur /etc/systemd/system/docker.service.d/http-proxy.conf /tmp/vagrant-proxyconf-docker-systemd-config")
146
+ # system config file is the same as the current config
147
+
148
+ changed = false
149
+ else
150
+ # system config file is not the same as the current config
151
+
152
+ comm.sudo("mv /tmp/vagrant-proxyconf-docker-systemd-config /etc/systemd/system/docker.service.d/http-proxy.conf")
153
+ changed = true
154
+ end
155
+
156
+ comm.sudo('chown -R 0:0 /etc/systemd/system/docker.service.d/')
157
+ comm.sudo('chmod 0644 /etc/systemd/system/docker.service.d/http-proxy.conf')
158
+
159
+ if changed
160
+ # there were changes so restart docker
161
+
162
+ comm.sudo('systemctl daemon-reload')
163
+ comm.sudo("systemctl restart #{docker}")
164
+ end
165
+
166
+ end
167
+
168
+ changed
169
+
170
+ end
171
+
112
172
  def docker
113
173
  if config_path && config_path.include?('docker.io')
114
174
  'docker.io'
@@ -143,6 +203,14 @@ module VagrantPlugins
143
203
  return false
144
204
  end
145
205
 
206
+ def supports_systemd?
207
+
208
+ @machine.communicate.tap do |comm|
209
+ comm.test('command -v systemctl') ? true : false
210
+ end
211
+
212
+ end
213
+
146
214
  def write_docker_config
147
215
  tmp = "/tmp/vagrant-proxyconf"
148
216
  path = config_path
@@ -173,7 +241,7 @@ module VagrantPlugins
173
241
 
174
242
  def detect_export
175
243
  @machine.communicate.tap do |comm|
176
- comm.test('command -v systemctl') ? @export = '' : @export = 'export '
244
+ supports_systemd? ? @export = '' : @export = 'export '
177
245
  end
178
246
  end
179
247
 
@@ -207,6 +275,23 @@ module VagrantPlugins
207
275
  #{@export}no_proxy=\"#{config.no_proxy || ''}\"
208
276
  CONFIG
209
277
  end
278
+
279
+ def docker_systemd_config
280
+ return if disabled?
281
+
282
+ environment = []
283
+ environment << 'Environment="HTTP_PROXY=' + config.http + '"' if config.http
284
+ environment << 'Environment="HTTPS_PROXY=' + config.https + '"' if config.https
285
+ environment << 'Environment="NO_PROXY=' + config.no_proxy + '"' if config.no_proxy
286
+
287
+ return if !environment.any?
288
+
289
+ <<-SYSTEMD.gsub(/^\s+/, '')
290
+ [Service]
291
+ #{environment.join("\n")}
292
+ SYSTEMD
293
+ end
294
+
210
295
  end
211
296
  end
212
297
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module ProxyConf
3
- VERSION = '2.0.1'
3
+ VERSION = '2.0.2'
4
4
  end
5
5
  end
@@ -27,6 +27,8 @@ def mock_update_docker_client_config(machine)
27
27
  allow(machine).to receive_message_chain(:communicate, :sudo).with("chown root:root /etc/docker")
28
28
  end
29
29
 
30
+ def mock_update_docker_systemd_config(machine)
31
+ end
30
32
 
31
33
  describe VagrantPlugins::ProxyConf::Action::ConfigureDockerProxy do
32
34
 
@@ -93,6 +95,7 @@ describe VagrantPlugins::ProxyConf::Action::ConfigureDockerProxy do
93
95
 
94
96
  # update_docker_client_config mock
95
97
  allow(docker_proxy).to receive(:supports_config_json?).and_return(true)
98
+ allow(docker_proxy).to receive(:supports_systemd?).and_return(false)
96
99
 
97
100
  @docker_proxy = docker_proxy
98
101
  end
@@ -101,14 +104,80 @@ describe VagrantPlugins::ProxyConf::Action::ConfigureDockerProxy do
101
104
  before :each do
102
105
  fixture = fixture_file("docker_client_config_json_enabled_proxy")
103
106
  configure_docker_proxy(fixture)
107
+ allow(machine).to receive_message_chain(:communicate, :sudo).with(
108
+ "sed -e '/^export HTTP_PROXY=/ d\n/^export http_proxy=/ d\n/^export HTTPS_PROXY=/ d\n/^export https_proxy=/ d\n/^export NO_PROXY=/ d\n/^export no_proxy=/ d\n' /etc/default/docker > /etc/default/docker.new"
109
+ )
104
110
  end
105
111
 
106
112
  it 'update /etc/docker/config.json' do
107
- allow(machine).to receive_message_chain(:communicate, :test).with('command -v systemctl').and_return('')
113
+ expect(@docker_proxy.send(:configure_machine)).to eq true
114
+ end
115
+ end
116
+
117
+ context 'and when configuring systemd' do
118
+ let(:app) { OpenStruct.new }
119
+ let(:env) { OpenStruct.new }
120
+ let(:machine) { double('machine') }
121
+
122
+ def configure_docker_proxy(fixture)
123
+ docker_proxy = described_class.new(app, env)
124
+ docker_proxy.instance_variable_set(:@machine, machine)
125
+
126
+ # #docker_client_config_path mock
127
+ fixture = docker_proxy.send(:tempfile, load_fixture(fixture)).path
128
+ docker_proxy.instance_variable_set(:@docker_client_config_path, fixture)
129
+
130
+ # #supported? mock
131
+ allow(machine).to receive_message_chain(:guest, :capability?).with(:docker_proxy_conf).and_return(true)
132
+ allow(machine).to receive_message_chain(:guest, :capability).with(:docker_proxy_conf).and_return('/etc/default/docker')
133
+
134
+ # #config mock
135
+ config = create_config_proxy(
136
+ :enabled => true,
137
+ :http => 'http://proxy-server-01.example.com:8080',
138
+ :https => 'https://proxy-server-01.example.com:8080',
139
+ :no_proxy => 'localhost',
140
+ )
141
+
142
+ allow(machine).to receive_message_chain(:config, :proxy).and_return(config)
143
+ allow(machine).to receive_message_chain(:config, :public_send).with(:docker_proxy).and_return(config)
144
+ allow(machine).to receive_message_chain(:communicate, :test).with('command -v systemctl').and_return(true)
145
+
146
+ mock_write_docker_config(machine)
147
+ mock_update_docker_client_config(machine)
148
+
149
+ @docker_proxy = docker_proxy
150
+ end
151
+
152
+ context 'when directory: /etc/systemd/system/docker.service.d does not exist' do
153
+
154
+ before :each do
155
+ fixture = fixture_file("docker_client_config_json_enabled_proxy")
156
+ configure_docker_proxy(fixture)
157
+
158
+ # update_docker_client_config mock
159
+ allow(@docker_proxy).to receive(:supports_config_json?).and_return(false)
160
+ allow(@docker_proxy).to receive(:supports_systemd?).and_return(true)
161
+
162
+ # systemd_config mocking
163
+ allow(machine).to receive_message_chain(:communicate, :sudo).with("mkdir -p /etc/systemd/system/docker.service.d")
164
+ allow(machine).to receive_message_chain(:communicate, :upload).with(@docker_proxy.instance_variable_get(:@docker_systemd_config), "/tmp")
165
+ allow(machine).to receive_message_chain(:communicate, :sudo).with('chown -R 0:0 /etc/systemd/system/docker.service.d/')
166
+ allow(machine).to receive_message_chain(:communicate, :sudo).with('chmod 0644 /etc/systemd/system/docker.service.d/http-proxy.conf')
167
+ allow(machine).to receive_message_chain(:communicate, :test).with('command -v systemctl').and_return(false)
168
+ allow(machine).to receive_message_chain(:communicate, :test).with('diff -Naur /etc/systemd/system/docker.service.d/http-proxy.conf /tmp/vagrant-proxyconf-docker-systemd-config').and_return(false)
169
+ allow(machine).to receive_message_chain(:communicate, :sudo).with('mv /tmp/vagrant-proxyconf-docker-systemd-config /etc/systemd/system/docker.service.d/http-proxy.conf')
170
+ allow(machine).to receive_message_chain(:communicate, :sudo).with('systemctl daemon-reload')
171
+ allow(machine).to receive_message_chain(:communicate, :sudo).with('systemctl restart docker')
172
+ end
173
+
174
+ it 'should create directory: /etc/systemd/system/docker.service.d' do
175
+ expect(@docker_proxy.send(:update_docker_systemd_config)).to eq true
176
+ end
108
177
 
109
- expect(@docker_proxy.send(:configure_machine)).to eq true
110
178
  end
111
179
  end
180
+
112
181
  end
113
182
  end
114
183
 
@@ -323,6 +392,9 @@ describe VagrantPlugins::ProxyConf::Action::ConfigureDockerProxy do
323
392
  config_path = docker_proxy.send(:tempfile, load_fixture(fixture)).path
324
393
  docker_proxy.instance_variable_set(:@docker_client_config_path, config_path)
325
394
 
395
+ # to isolate this test, we turn of support for systemd
396
+ allow(docker_proxy).to receive(:supports_systemd?).and_return(false)
397
+
326
398
  allow(machine).to receive_message_chain(:guest, :capability?).with(:docker_proxy_conf).and_return(true)
327
399
  allow(machine).to receive_message_chain(:guest, :capability).with(:docker_proxy_conf).and_return('/etc/default/docker')
328
400
 
@@ -337,6 +409,7 @@ describe VagrantPlugins::ProxyConf::Action::ConfigureDockerProxy do
337
409
  allow(machine).to receive_message_chain(:config, :proxy).and_return(config)
338
410
  allow(machine).to receive_message_chain(:config, :public_send).with(:docker_proxy).and_return(config)
339
411
 
412
+
340
413
  # mock write_docker_config
341
414
  mock_write_docker_config(machine)
342
415
 
@@ -361,6 +434,9 @@ describe VagrantPlugins::ProxyConf::Action::ConfigureDockerProxy do
361
434
  docker_proxy.instance_variable_set(:@machine, machine)
362
435
  docker_proxy.instance_variable_set(:@version, [18, 9, 0])
363
436
 
437
+ # to isolate this test, we turn of support for systemd
438
+ allow(docker_proxy).to receive(:supports_systemd?).and_return(false)
439
+
364
440
  fixture = fixture_file("docker_client_config_json_enabled_proxy")
365
441
  config_path = docker_proxy.send(:tempfile, load_fixture(fixture)).path
366
442
  docker_proxy.instance_variable_set(:@docker_client_config_path, config_path)
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
@@ -0,0 +1,47 @@
1
+ FROM centos:7
2
+
3
+ ENV CI_USERNAME vagrant
4
+ ENV CI_PASSWORD vagrant
5
+ ENV CI_HOMEDIR /home/vagrant
6
+ ENV CI_SHELL /bin/bash
7
+
8
+ EXPOSE 8888
9
+
10
+ RUN yum clean all && \
11
+ yum makecache fast && \
12
+ yum -y install epel-release && \
13
+ yum clean expire-cache && \
14
+ yum -y install \
15
+ curl \
16
+ initscripts \
17
+ openssh-clients \
18
+ openssh-server \
19
+ sudo \
20
+ tinyproxy
21
+
22
+ RUN /usr/sbin/sshd-keygen && \
23
+ mkdir -p /var/run/sshd && \
24
+ rm -f /usr/lib/tmpfiles.d/systemd-nologin.conf
25
+
26
+ RUN if ! getent passwd $CI_USERNAME; then \
27
+ useradd -m -d ${CI_HOMEDIR} -s ${CI_SHELL} $CI_USERNAME; \
28
+ fi && \
29
+ echo "${CI_USERNAME}:${CI_PASSWORD}" | chpasswd && \
30
+ echo "${CI_USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
31
+ mkdir -p /etc/sudoers.d && \
32
+ echo "${CI_USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/${CI_USERNAME} && \
33
+ chmod 0440 /etc/sudoers.d/${CI_USERNAME} && \
34
+ mkdir -p ${CI_HOMEDIR}/.ssh && \
35
+ chown -R ${CI_USERNAME}:${CI_USERNAME} ${CI_HOMEDIR}/.ssh && \
36
+ chmod 0700 ${CI_HOMEDIR}/.ssh && \
37
+ curl -L https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub > ${CI_HOMEDIR}/.ssh/vagrant.pub && \
38
+ touch ${CI_HOMEDIR}/.ssh/authorized_keys && \
39
+ grep -q "$(cat ${CI_HOMEDIR}/.ssh/vagrant.pub | awk '{print $2}')" ${CI_HOMEDIR}/.ssh/authorized_keys || cat ${CI_HOMEDIR}/.ssh/vagrant.pub >> ${CI_HOMEDIR}/.ssh/authorized_keys && \
40
+ chown ${CI_USERNAME}:${CI_USERNAME} ${CI_HOMEDIR}/.ssh/authorized_keys && \
41
+ chmod 0600 ${CI_HOMEDIR}/.ssh/authorized_keys
42
+
43
+ COPY tinyproxy.conf /etc/tinyproxy/tinyproxy.conf
44
+ COPY entrypoint.sh /entrypoint.sh
45
+
46
+ ENTRYPOINT ["/entrypoint.sh"]
47
+ CMD [ "start" ]
@@ -0,0 +1,31 @@
1
+ Tests
2
+ -----
3
+
4
+ If you are testing the current release of this plugin via bundler
5
+
6
+ ```
7
+ bundle exec vagrant up default
8
+ ```
9
+
10
+ ## Expect
11
+
12
+
13
+ ### Box `default``
14
+
15
+ - The box `default` is a docker container that will be a reverse
16
+ proxy. It should provision itself and work without errors.
17
+
18
+ - You can check that the proxy is working by
19
+ `tail -f /var/log/tinyproxy/tinyproxy.log` inside the container
20
+
21
+ - **NOTE**: You'll need to use `docker exec <hash> -it bash` to get into the container
22
+
23
+
24
+ ### Box `docker-host`
25
+
26
+ - Vagrant should automatically instally docker-ce.
27
+ - The box should come up and provision itself with the proxy settings
28
+ configured in your Vagrantfile.
29
+
30
+
31
+ - **NOTE**: You can use `ssh` to connect to this container.
@@ -0,0 +1,27 @@
1
+ require 'rake'
2
+ require 'rspec/core/rake_task'
3
+
4
+ task :spec => 'spec:all'
5
+ task :default => :spec
6
+
7
+ namespace :spec do
8
+ targets = []
9
+ Dir.glob('./spec/*').each do |dir|
10
+ next unless File.directory?(dir)
11
+ target = File.basename(dir)
12
+ target = "_#{target}" if target == "default"
13
+ targets << target
14
+ end
15
+
16
+ task :all => targets
17
+ task :default => :all
18
+
19
+ targets.each do |target|
20
+ original_target = target == "_default" ? target[1..-1] : target
21
+ desc "Run serverspec tests to #{original_target}"
22
+ RSpec::Core::RakeTask.new(target.to_sym) do |t|
23
+ ENV['TARGET_HOST'] = original_target
24
+ t.pattern = "spec/#{original_target}/*_spec.rb"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,48 @@
1
+ # this should be the IP address of the :default box
2
+ $PROXY_HOST ="10.0.2.2"
3
+ $PROXY_PORT="8888"
4
+ $PROXY_NO_PROXY=[
5
+ 'localhost',
6
+ ]
7
+
8
+ ENV['HTTP_PROXY'] = ENV.fetch('HTTP_PROXY', "http://#{$PROXY_HOST}:#{$PROXY_PORT}")
9
+ ENV['HTTPS_PROXY'] = ENV.fetch('HTTPS_PROXY', "https://#{$PROXY_HOST}:#{$PROXY_PORT}")
10
+ ENV['NO_PROXY'] = ENV.fetch('NO_PROXY', $PROXY_NO_PROXY.join(","))
11
+
12
+ puts "HTTP_PROXY = '#{ENV["HTTP_PROXY"]}'"
13
+ puts "HTTPS_PROXY = '#{ENV["HTTPS_PROXY"]}'"
14
+ puts "NO_PROXY = '#{ENV["NO_PROXY"]}'"
15
+
16
+ puts "vagrant-proxyconf is installed? #{Vagrant.has_plugin?('vagrant-proxyconf')}"
17
+
18
+
19
+ Vagrant.configure("2") do |config|
20
+
21
+ config.vm.define 'default' do |c|
22
+ c.vm.box = nil
23
+
24
+ if Vagrant.has_plugin?('vagrant-proxyconf')
25
+ c.proxy.enabled = false
26
+ end
27
+
28
+ c.vm.provider "docker" do |d|
29
+ d.build_dir = "."
30
+ d.expose = ["#{$PROXY_PORT}"]
31
+ d.has_ssh = true
32
+ d.ports = ["#{$PROXY_PORT}", "#{$PROXY_PORT}"].join(':')
33
+ end
34
+ end
35
+
36
+ config.vm.define 'docker_host' do |c|
37
+ c.vm.box = "centos/7"
38
+
39
+ if Vagrant.has_plugin?('vagrant-proxyconf')
40
+ c.proxy.http = ENV['HTTP_PROXY']
41
+ c.proxy.https = ENV['HTTPS_PROXY']
42
+ c.proxy.no_proxy = ENV['NO_PROXY']
43
+ end
44
+
45
+ c.vm.provision "docker"
46
+ end
47
+
48
+ end
@@ -0,0 +1,50 @@
1
+ #!/bin/bash
2
+ set -ex
3
+
4
+ export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
5
+
6
+ start() {
7
+ # start ssh if sshd is installed
8
+ if [ -f /usr/sbin/sshd ]; then
9
+
10
+ /usr/sbin/sshd-keygen
11
+ /usr/sbin/sshd -t
12
+ /usr/sbin/sshd
13
+
14
+ else
15
+
16
+ true
17
+
18
+ fi
19
+
20
+ # start tinyproxy
21
+ /usr/sbin/tinyproxy \
22
+ -d \
23
+ -c "/etc/tinyproxy/tinyproxy.conf"
24
+ }
25
+
26
+ stop() {
27
+
28
+ pgrep -f 'sshd' | while read _pid
29
+ do
30
+ kill -9 $_pid
31
+ done
32
+
33
+ pgrep -f 'tinyproxy' | while read _pid
34
+ do
35
+ kill -9 $_pid
36
+ done
37
+
38
+ }
39
+
40
+ case "${1}" in
41
+
42
+ start)
43
+ start
44
+ ;;
45
+
46
+ stop)
47
+ stop
48
+ ;;
49
+
50
+ esac
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe package('tinyproxy') do
4
+ it { should be_installed }
5
+ end
6
+
7
+ describe service('tinyproxy') do
8
+ it { should be_enabled }
9
+ it { should be_running }
10
+ end
11
+
12
+
13
+ describe port(8888) do
14
+ it { should be_listening }
15
+ end
@@ -0,0 +1,250 @@
1
+ require 'spec_helper'
2
+
3
+ PROXY_HOST = "10.0.2.2"
4
+
5
+ describe service('docker') do
6
+ it { should be_running }
7
+ it { should be_enabled }
8
+ end
9
+
10
+ describe file('/etc/docker/config.json') do
11
+ it { should be_file }
12
+ it { should exist }
13
+ it { should be_mode 600 }
14
+ it { should be_owned_by "root" }
15
+ it { should be_grouped_into "root" }
16
+ end
17
+
18
+ context 'when proxy is enabled' do
19
+
20
+ before(:context) do
21
+ ENV['HTTP_PROXY'] = "http://#{PROXY_HOST}:8888"
22
+ ENV['HTTPS_PROXY'] = "https://#{PROXY_HOST}:8888"
23
+ ENV['NO_PROXY'] = "*.example.com"
24
+
25
+ `vagrant provision #{ENV['TARGET_HOST']}`
26
+ `sleep 3`
27
+ end
28
+
29
+ describe file('/etc/docker/config.json') do
30
+ let(:expected_content) do
31
+ {
32
+ "proxies" => {
33
+ "default" => {
34
+ "httpProxy" => "http://10.0.2.2:8888",
35
+ "httpsProxy" => "https://10.0.2.2:8888",
36
+ "noProxy" => "*.example.com",
37
+ }
38
+ }
39
+ }
40
+ end
41
+
42
+ its(:content_as_json) do
43
+ should include(expected_content)
44
+ end
45
+ end
46
+
47
+ describe file('/etc/systemd/system/docker.service.d/http-proxy.conf') do
48
+ let(:expected_content) do
49
+ <<-CONFIG.gsub(/^\s+/, "")
50
+ [Service]
51
+ Environment="HTTP_PROXY=http://10.0.2.2:8888"
52
+ Environment="HTTPS_PROXY=https://10.0.2.2:8888"
53
+ Environment="NO_PROXY=*.example.com"
54
+ CONFIG
55
+ end
56
+
57
+ it { should be_file }
58
+ it { should exist }
59
+ it { should be_mode 644 }
60
+ it { should be_owned_by "root" }
61
+ it { should be_grouped_into "root" }
62
+ its(:content) { should include(expected_content) }
63
+ end
64
+
65
+ end
66
+
67
+ context 'when HTTP_PROXY=""' do
68
+
69
+ before(:context) do
70
+ ENV['HTTP_PROXY'] = ""
71
+ ENV['HTTPS_PROXY'] = "https://#{PROXY_HOST}:8888"
72
+ ENV['NO_PROXY'] = "*.example.com"
73
+
74
+ `vagrant provision #{ENV['TARGET_HOST']}`
75
+ `sleep 3`
76
+ end
77
+
78
+ describe file('/etc/docker/config.json') do
79
+ let(:expected_content) do
80
+ {
81
+ "proxies" => {
82
+ "default" => {
83
+ "httpsProxy" => "https://#{PROXY_HOST}:8888",
84
+ "noProxy" => "*.example.com",
85
+ }
86
+ }
87
+ }
88
+ end
89
+
90
+ its(:content_as_json) do
91
+ should include(expected_content)
92
+ end
93
+ end
94
+
95
+ describe file('/etc/systemd/system/docker.service.d/http-proxy.conf') do
96
+ let(:expected_content) do
97
+ <<-CONFIG.gsub(/^\s+/, "")
98
+ [Service]
99
+ Environment="HTTPS_PROXY=https://10.0.2.2:8888"
100
+ Environment="NO_PROXY=*.example.com"
101
+ CONFIG
102
+ end
103
+
104
+ it { should be_file }
105
+ it { should exist }
106
+ it { should be_mode 644 }
107
+ it { should be_owned_by "root" }
108
+ it { should be_grouped_into "root" }
109
+ its(:content) { should include(expected_content) }
110
+ end
111
+
112
+ end
113
+
114
+ context 'when HTTPS_PROXY=""' do
115
+
116
+ before(:context) do
117
+ ENV['HTTP_PROXY'] = "http://#{PROXY_HOST}:8888"
118
+ ENV['HTTPS_PROXY'] = ""
119
+ ENV['NO_PROXY'] = "*.example.com"
120
+
121
+ `vagrant provision #{ENV['TARGET_HOST']}`
122
+ end
123
+
124
+ describe file('/etc/docker/config.json') do
125
+ let(:expected_content) do
126
+ {
127
+ "proxies" => {
128
+ "default" => {
129
+ "httpProxy" => "http://#{PROXY_HOST}:8888",
130
+ "noProxy" => "*.example.com",
131
+ }
132
+ }
133
+ }
134
+ end
135
+
136
+ its(:content_as_json) do
137
+ should include(expected_content)
138
+ end
139
+ end
140
+
141
+ describe file('/etc/systemd/system/docker.service.d/http-proxy.conf') do
142
+ let(:expected_content) do
143
+ <<-CONFIG.gsub(/^\s+/, "")
144
+ [Service]
145
+ Environment="HTTP_PROXY=http://10.0.2.2:8888"
146
+ Environment="NO_PROXY=*.example.com"
147
+ CONFIG
148
+ end
149
+
150
+ it { should be_file }
151
+ it { should exist }
152
+ it { should be_mode 644 }
153
+ it { should be_owned_by "root" }
154
+ it { should be_grouped_into "root" }
155
+ its(:content) { should include(expected_content) }
156
+ end
157
+
158
+ end
159
+
160
+ context 'when HTTPS_PROXY="" and HTTP_PROXY=""' do
161
+
162
+ before(:context) do
163
+ ENV['HTTP_PROXY'] = ""
164
+ ENV['HTTPS_PROXY'] = ""
165
+ ENV['NO_PROXY'] = "*.example.com"
166
+
167
+ `vagrant provision #{ENV['TARGET_HOST']}`
168
+ `sleep 3`
169
+ end
170
+
171
+ describe file('/etc/docker/config.json') do
172
+ let(:expected_content) do
173
+ {
174
+ "proxies" => {
175
+ "default" => {
176
+ "noProxy" => "*.example.com",
177
+ }
178
+ }
179
+ }
180
+ end
181
+
182
+ its(:content_as_json) do
183
+ should include(expected_content)
184
+ end
185
+ end
186
+
187
+ describe file('/etc/systemd/system/docker.service.d/http-proxy.conf') do
188
+ let(:expected_content) do
189
+ <<-CONFIG.gsub(/^\s+/, "")
190
+ [Service]
191
+ Environment="NO_PROXY=*.example.com"
192
+ CONFIG
193
+ end
194
+
195
+ it { should be_file }
196
+ it { should exist }
197
+ it { should be_mode 644 }
198
+ it { should be_owned_by "root" }
199
+ it { should be_grouped_into "root" }
200
+ its(:content) { should include(expected_content) }
201
+ end
202
+
203
+ end
204
+
205
+ context 'when NO_PROXY=""' do
206
+
207
+ before(:context) do
208
+ ENV['HTTP_PROXY'] = "http://#{PROXY_HOST}:8888"
209
+ ENV['HTTPS_PROXY'] = "https://#{PROXY_HOST}:8888"
210
+ ENV['NO_PROXY'] = ""
211
+
212
+ `vagrant provision #{ENV['TARGET_HOST']}`
213
+ `sleep 3`
214
+ end
215
+
216
+ describe file('/etc/docker/config.json') do
217
+ let(:expected_content) do
218
+ {
219
+ "proxies" => {
220
+ "default" => {
221
+ "httpProxy" => "http://#{PROXY_HOST}:8888",
222
+ "httpsProxy" => "https://#{PROXY_HOST}:8888",
223
+ }
224
+ }
225
+ }
226
+ end
227
+
228
+ its(:content_as_json) do
229
+ should include(expected_content)
230
+ end
231
+ end
232
+
233
+ describe file('/etc/systemd/system/docker.service.d/http-proxy.conf') do
234
+ let(:expected_content) do
235
+ <<-CONFIG.gsub(/^\s+/, "")
236
+ [Service]
237
+ Environment="HTTP_PROXY=http://10.0.2.2:8888"
238
+ Environment="HTTPS_PROXY=https://10.0.2.2:8888"
239
+ CONFIG
240
+ end
241
+
242
+ it { should be_file }
243
+ it { should exist }
244
+ it { should be_mode 644 }
245
+ it { should be_owned_by "root" }
246
+ it { should be_grouped_into "root" }
247
+ its(:content) { should include(expected_content) }
248
+ end
249
+
250
+ end
@@ -0,0 +1,52 @@
1
+ require 'serverspec'
2
+ require 'net/ssh'
3
+ require 'tempfile'
4
+
5
+ set :backend, :ssh
6
+
7
+ if ENV['ASK_SUDO_PASSWORD']
8
+ begin
9
+ require 'highline/import'
10
+ rescue LoadError
11
+ fail "highline is not available. Try installing it."
12
+ end
13
+ set :sudo_password, ask("Enter sudo password: ") { |q| q.echo = false }
14
+ else
15
+ set :sudo_password, ENV['SUDO_PASSWORD'] || "vagrant"
16
+ end
17
+
18
+ host = ENV['TARGET_HOST']
19
+
20
+ `vagrant up #{host}`
21
+
22
+ config = Tempfile.new('', Dir.tmpdir)
23
+ config.write(`vagrant ssh-config #{host}`)
24
+ config.close
25
+
26
+ options = Net::SSH::Config.for(host, [config.path])
27
+
28
+ options[:user] ||= Etc.getlogin
29
+
30
+ set :host, options[:host_name] || host
31
+ set :ssh_options, options
32
+
33
+ # Disable sudo
34
+ # set :disable_sudo, true
35
+
36
+
37
+ # Set environment variables
38
+ set :env,
39
+ :LANG => 'C',
40
+ :LC_MESSAGES => 'C'
41
+
42
+ # Set PATH
43
+ # set :path, '/sbin:/usr/local/sbin:$PATH'
44
+ set :path, [
45
+ '/usr/local/bin',
46
+ '/usr/local/sbin',
47
+ '/usr/bin',
48
+ '/usr/sbin',
49
+ '/bin',
50
+ '/sbin',
51
+ '$PATH',
52
+ ].join(':')
@@ -0,0 +1,333 @@
1
+ ##
2
+ ## tinyproxy.conf -- tinyproxy daemon configuration file
3
+ ##
4
+ ## This example tinyproxy.conf file contains example settings
5
+ ## with explanations in comments. For decriptions of all
6
+ ## parameters, see the tinproxy.conf(5) manual page.
7
+ ##
8
+
9
+ #
10
+ # User/Group: This allows you to set the user and group that will be
11
+ # used for tinyproxy after the initial binding to the port has been done
12
+ # as the root user. Either the user or group name or the UID or GID
13
+ # number may be used.
14
+ #
15
+ User tinyproxy
16
+ Group tinyproxy
17
+
18
+ #
19
+ # Port: Specify the port which tinyproxy will listen on. Please note
20
+ # that should you choose to run on a port lower than 1024 you will need
21
+ # to start tinyproxy using root.
22
+ #
23
+ Port 8888
24
+
25
+ #
26
+ # Listen: If you have multiple interfaces this allows you to bind to
27
+ # only one. If this is commented out, tinyproxy will bind to all
28
+ # interfaces present.
29
+ #
30
+ #Listen 192.168.0.1
31
+
32
+ #
33
+ # Bind: This allows you to specify which interface will be used for
34
+ # outgoing connections. This is useful for multi-home'd machines where
35
+ # you want all traffic to appear outgoing from one particular interface.
36
+ #
37
+ #Bind 192.168.0.1
38
+
39
+ #
40
+ # BindSame: If enabled, tinyproxy will bind the outgoing connection to the
41
+ # ip address of the incoming connection.
42
+ #
43
+ #BindSame yes
44
+
45
+ #
46
+ # Timeout: The maximum number of seconds of inactivity a connection is
47
+ # allowed to have before it is closed by tinyproxy.
48
+ #
49
+ Timeout 600
50
+
51
+ #
52
+ # ErrorFile: Defines the HTML file to send when a given HTTP error
53
+ # occurs. You will probably need to customize the location to your
54
+ # particular install. The usual locations to check are:
55
+ # /usr/local/share/tinyproxy
56
+ # /usr/share/tinyproxy
57
+ # /etc/tinyproxy
58
+ #
59
+ #ErrorFile 404 "/usr/share/tinyproxy/404.html"
60
+ #ErrorFile 400 "/usr/share/tinyproxy/400.html"
61
+ #ErrorFile 503 "/usr/share/tinyproxy/503.html"
62
+ #ErrorFile 403 "/usr/share/tinyproxy/403.html"
63
+ #ErrorFile 408 "/usr/share/tinyproxy/408.html"
64
+
65
+ #
66
+ # DefaultErrorFile: The HTML file that gets sent if there is no
67
+ # HTML file defined with an ErrorFile keyword for the HTTP error
68
+ # that has occured.
69
+ #
70
+ DefaultErrorFile "/usr/share/tinyproxy/default.html"
71
+
72
+ #
73
+ # StatHost: This configures the host name or IP address that is treated
74
+ # as the stat host: Whenever a request for this host is received,
75
+ # Tinyproxy will return an internal statistics page instead of
76
+ # forwarding the request to that host. The default value of StatHost is
77
+ # tinyproxy.stats.
78
+ #
79
+ #StatHost "tinyproxy.stats"
80
+ #
81
+
82
+ #
83
+ # StatFile: The HTML file that gets sent when a request is made
84
+ # for the stathost. If this file doesn't exist a basic page is
85
+ # hardcoded in tinyproxy.
86
+ #
87
+ StatFile "/usr/share/tinyproxy/stats.html"
88
+
89
+ #
90
+ # LogFile: Allows you to specify the location where information should
91
+ # be logged to. If you would prefer to log to syslog, then disable this
92
+ # and enable the Syslog directive. These directives are mutually
93
+ # exclusive.
94
+ #
95
+ LogFile "/var/log/tinyproxy/tinyproxy.log"
96
+
97
+ #
98
+ # Syslog: Tell tinyproxy to use syslog instead of a logfile. This
99
+ # option must not be enabled if the Logfile directive is being used.
100
+ # These two directives are mutually exclusive.
101
+ #
102
+ #Syslog On
103
+
104
+ #
105
+ # LogLevel:
106
+ #
107
+ # Set the logging level. Allowed settings are:
108
+ # Critical (least verbose)
109
+ # Error
110
+ # Warning
111
+ # Notice
112
+ # Connect (to log connections without Info's noise)
113
+ # Info (most verbose)
114
+ #
115
+ # The LogLevel logs from the set level and above. For example, if the
116
+ # LogLevel was set to Warning, then all log messages from Warning to
117
+ # Critical would be output, but Notice and below would be suppressed.
118
+ #
119
+ LogLevel Info
120
+
121
+ #
122
+ # PidFile: Write the PID of the main tinyproxy thread to this file so it
123
+ # can be used for signalling purposes.
124
+ #
125
+ PidFile "/var/run/tinyproxy/tinyproxy.pid"
126
+
127
+ #
128
+ # XTinyproxy: Tell Tinyproxy to include the X-Tinyproxy header, which
129
+ # contains the client's IP address.
130
+ #
131
+ #XTinyproxy Yes
132
+
133
+ #
134
+ # Upstream:
135
+ #
136
+ # Turns on upstream proxy support.
137
+ #
138
+ # The upstream rules allow you to selectively route upstream connections
139
+ # based on the host/domain of the site being accessed.
140
+ #
141
+ # For example:
142
+ # # connection to test domain goes through testproxy
143
+ # upstream testproxy:8008 ".test.domain.invalid"
144
+ # upstream testproxy:8008 ".our_testbed.example.com"
145
+ # upstream testproxy:8008 "192.168.128.0/255.255.254.0"
146
+ #
147
+ # # no upstream proxy for internal websites and unqualified hosts
148
+ # no upstream ".internal.example.com"
149
+ # no upstream "www.example.com"
150
+ # no upstream "10.0.0.0/8"
151
+ # no upstream "192.168.0.0/255.255.254.0"
152
+ # no upstream "."
153
+ #
154
+ # # connection to these boxes go through their DMZ firewalls
155
+ # upstream cust1_firewall:8008 "testbed_for_cust1"
156
+ # upstream cust2_firewall:8008 "testbed_for_cust2"
157
+ #
158
+ # # default upstream is internet firewall
159
+ # upstream firewall.internal.example.com:80
160
+ #
161
+ # The LAST matching rule wins the route decision. As you can see, you
162
+ # can use a host, or a domain:
163
+ # name matches host exactly
164
+ # .name matches any host in domain "name"
165
+ # . matches any host with no domain (in 'empty' domain)
166
+ # IP/bits matches network/mask
167
+ # IP/mask matches network/mask
168
+ #
169
+ #Upstream some.remote.proxy:port
170
+
171
+ #
172
+ # MaxClients: This is the absolute highest number of threads which will
173
+ # be created. In other words, only MaxClients number of clients can be
174
+ # connected at the same time.
175
+ #
176
+ MaxClients 100
177
+
178
+ #
179
+ # MinSpareServers/MaxSpareServers: These settings set the upper and
180
+ # lower limit for the number of spare servers which should be available.
181
+ #
182
+ # If the number of spare servers falls below MinSpareServers then new
183
+ # server processes will be spawned. If the number of servers exceeds
184
+ # MaxSpareServers then the extras will be killed off.
185
+ #
186
+ MinSpareServers 5
187
+ MaxSpareServers 20
188
+
189
+ #
190
+ # StartServers: The number of servers to start initially.
191
+ #
192
+ StartServers 10
193
+
194
+ #
195
+ # MaxRequestsPerChild: The number of connections a thread will handle
196
+ # before it is killed. In practise this should be set to 0, which
197
+ # disables thread reaping. If you do notice problems with memory
198
+ # leakage, then set this to something like 10000.
199
+ #
200
+ MaxRequestsPerChild 0
201
+
202
+ #
203
+ # Allow: Customization of authorization controls. If there are any
204
+ # access control keywords then the default action is to DENY. Otherwise,
205
+ # the default action is ALLOW.
206
+ #
207
+ # The order of the controls are important. All incoming connections are
208
+ # tested against the controls based on order.
209
+ #
210
+ Allow 127.0.0.1
211
+ Allow 0.0.0.0/0
212
+
213
+ #
214
+ # AddHeader: Adds the specified headers to outgoing HTTP requests that
215
+ # Tinyproxy makes. Note that this option will not work for HTTPS
216
+ # traffic, as Tinyproxy has no control over what headers are exchanged.
217
+ #
218
+ #AddHeader "X-My-Header" "Powered by Tinyproxy"
219
+
220
+ #
221
+ # ViaProxyName: The "Via" header is required by the HTTP RFC, but using
222
+ # the real host name is a security concern. If the following directive
223
+ # is enabled, the string supplied will be used as the host name in the
224
+ # Via header; otherwise, the server's host name will be used.
225
+ #
226
+ ViaProxyName "tinyproxy"
227
+
228
+ #
229
+ # DisableViaHeader: When this is set to yes, Tinyproxy does NOT add
230
+ # the Via header to the requests. This virtually puts Tinyproxy into
231
+ # stealth mode. Note that RFC 2616 requires proxies to set the Via
232
+ # header, so by enabling this option, you break compliance.
233
+ # Don't disable the Via header unless you know what you are doing...
234
+ #
235
+ #DisableViaHeader Yes
236
+
237
+ #
238
+ # Filter: This allows you to specify the location of the filter file.
239
+ #
240
+ #Filter "/etc/tinyproxy/filter"
241
+
242
+ #
243
+ # FilterURLs: Filter based on URLs rather than domains.
244
+ #
245
+ #FilterURLs On
246
+
247
+ #
248
+ # FilterExtended: Use POSIX Extended regular expressions rather than
249
+ # basic.
250
+ #
251
+ #FilterExtended On
252
+
253
+ #
254
+ # FilterCaseSensitive: Use case sensitive regular expressions.
255
+ #
256
+ #FilterCaseSensitive On
257
+
258
+ #
259
+ # FilterDefaultDeny: Change the default policy of the filtering system.
260
+ # If this directive is commented out, or is set to "No" then the default
261
+ # policy is to allow everything which is not specifically denied by the
262
+ # filter file.
263
+ #
264
+ # However, by setting this directive to "Yes" the default policy becomes
265
+ # to deny everything which is _not_ specifically allowed by the filter
266
+ # file.
267
+ #
268
+ #FilterDefaultDeny Yes
269
+
270
+ #
271
+ # Anonymous: If an Anonymous keyword is present, then anonymous proxying
272
+ # is enabled. The headers listed are allowed through, while all others
273
+ # are denied. If no Anonymous keyword is present, then all headers are
274
+ # allowed through. You must include quotes around the headers.
275
+ #
276
+ # Most sites require cookies to be enabled for them to work correctly, so
277
+ # you will need to allow Cookies through if you access those sites.
278
+ #
279
+ #Anonymous "Host"
280
+ #Anonymous "Authorization"
281
+ #Anonymous "Cookie"
282
+
283
+ #
284
+ # ConnectPort: This is a list of ports allowed by tinyproxy when the
285
+ # CONNECT method is used. To disable the CONNECT method altogether, set
286
+ # the value to 0. If no ConnectPort line is found, all ports are
287
+ # allowed (which is not very secure.)
288
+ #
289
+ # The following two ports are used by SSL.
290
+ #
291
+ ConnectPort 443
292
+ ConnectPort 563
293
+
294
+ #
295
+ # Configure one or more ReversePath directives to enable reverse proxy
296
+ # support. With reverse proxying it's possible to make a number of
297
+ # sites appear as if they were part of a single site.
298
+ #
299
+ # If you uncomment the following two directives and run tinyproxy
300
+ # on your own computer at port 8888, you can access Google using
301
+ # http://localhost:8888/google/ and Wired News using
302
+ # http://localhost:8888/wired/news/. Neither will actually work
303
+ # until you uncomment ReverseMagic as they use absolute linking.
304
+ #
305
+ #ReversePath "/google/" "http://www.google.com/"
306
+ #ReversePath "/wired/" "http://www.wired.com/"
307
+
308
+ #
309
+ # When using tinyproxy as a reverse proxy, it is STRONGLY recommended
310
+ # that the normal proxy is turned off by uncommenting the next directive.
311
+ #
312
+ #ReverseOnly Yes
313
+
314
+ #
315
+ # Use a cookie to track reverse proxy mappings. If you need to reverse
316
+ # proxy sites which have absolute links you must uncomment this.
317
+ #
318
+ #ReverseMagic Yes
319
+
320
+ #
321
+ # The URL that's used to access this reverse proxy. The URL is used to
322
+ # rewrite HTTP redirects so that they won't escape the proxy. If you
323
+ # have a chain of reverse proxies, you'll need to put the outermost
324
+ # URL here (the address which the end user types into his/her browser).
325
+ #
326
+ # If not set then no rewriting occurs.
327
+ #
328
+ #ReverseBaseURL "http://localhost:8888/"
329
+
330
+
331
+
332
+
333
+ ### foo
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-proxyconf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Teemu Matilainen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-31 00:00:00.000000000 Z
11
+ date: 2019-07-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A Vagrant plugin that configures the virtual machine to use proxy servers
14
14
  email:
@@ -138,6 +138,16 @@ files:
138
138
  - spec/unit/vagrant-proxyconf/resource_spec.rb
139
139
  - spec/unit/vagrant-proxyconf/resources/yum_config_spec.rb
140
140
  - spec/unit/vagrant-proxyconf/userinfo_uri_spec.rb
141
+ - test/issues/172/.rspec
142
+ - test/issues/172/Dockerfile
143
+ - test/issues/172/README.md
144
+ - test/issues/172/Rakefile
145
+ - test/issues/172/Vagrantfile
146
+ - test/issues/172/entrypoint.sh
147
+ - test/issues/172/spec/default/redhat_spec.rb
148
+ - test/issues/172/spec/docker_host/redhat_spec.rb
149
+ - test/issues/172/spec/spec_helper.rb
150
+ - test/issues/172/tinyproxy.conf
141
151
  - test/issues/180/.rspec
142
152
  - test/issues/180/Dockerfile
143
153
  - test/issues/180/README.md
@@ -170,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
180
  version: '0'
171
181
  requirements: []
172
182
  rubyforge_project:
173
- rubygems_version: 2.6.14.1
183
+ rubygems_version: 2.7.6
174
184
  signing_key:
175
185
  specification_version: 4
176
186
  summary: A Vagrant plugin that configures the virtual machine to use proxy servers
@@ -230,6 +240,16 @@ test_files:
230
240
  - spec/unit/vagrant-proxyconf/resource_spec.rb
231
241
  - spec/unit/vagrant-proxyconf/resources/yum_config_spec.rb
232
242
  - spec/unit/vagrant-proxyconf/userinfo_uri_spec.rb
243
+ - test/issues/172/.rspec
244
+ - test/issues/172/Dockerfile
245
+ - test/issues/172/README.md
246
+ - test/issues/172/Rakefile
247
+ - test/issues/172/Vagrantfile
248
+ - test/issues/172/entrypoint.sh
249
+ - test/issues/172/spec/default/redhat_spec.rb
250
+ - test/issues/172/spec/docker_host/redhat_spec.rb
251
+ - test/issues/172/spec/spec_helper.rb
252
+ - test/issues/172/tinyproxy.conf
233
253
  - test/issues/180/.rspec
234
254
  - test/issues/180/Dockerfile
235
255
  - test/issues/180/README.md