From 690cb777a93abcca2a8090f3c95450558577fe94 Mon Sep 17 00:00:00 2001 From: Mark Hughes Date: Fri, 11 Sep 2015 17:12:37 +0100 Subject: [PATCH 1/8] Use the coreOS style configuration for systemd-based Ubuntu/Deb hosts. --- .../cap/linux/docker_proxy_conf.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/vagrant-proxyconf/cap/linux/docker_proxy_conf.rb b/lib/vagrant-proxyconf/cap/linux/docker_proxy_conf.rb index ece2c3a..61d6c01 100644 --- a/lib/vagrant-proxyconf/cap/linux/docker_proxy_conf.rb +++ b/lib/vagrant-proxyconf/cap/linux/docker_proxy_conf.rb @@ -17,6 +17,21 @@ def self.docker_proxy_conf(machine) "/etc/sysconfig/#{docker_command}" elsif machine.communicate.test('ls /var/lib/boot2docker/') "/var/lib/boot2docker/profile" + elsif machine.communicate.test('ps -p1 | grep systemd') + machine.communicate.tap do |comm| + src_file = "/lib/systemd/system/#{docker_command}.service" + dst_file = "/etc/systemd/system/#{docker_command}.service" + tmp_file = "/tmp/#{docker_command}.service" + env_file = "EnvironmentFile=-\\/etc\\/default\\/#{docker_command}" + comm.sudo("sed -e 's/\\[Service\\]/[Service]\\n#{env_file}/g' #{src_file} > #{tmp_file}") + unless comm.test("diff #{tmp_file} #{dst_file}") + # update config and restart docker when config changed + comm.sudo("mv -f #{tmp_file} #{dst_file}") + comm.sudo('systemctl daemon-reload') + end + comm.sudo("rm -f #{tmp_file}") + end + "/etc/default/#{docker_command}" else "/etc/default/#{docker_command}" end From b4f8689100fc8cdfe814e2acf71b8e8a054228e9 Mon Sep 17 00:00:00 2001 From: Hiroshi Ota Date: Wed, 16 Sep 2015 10:16:42 +0900 Subject: [PATCH 2/8] Add Debian docker capability for Docker's official packege /lib/systemd/system/docker.service in Docker's officaial package does not include /etc/default/docker. --- .../cap/debian/docker_proxy_conf.rb | 32 +++++++++++++++++++ lib/vagrant-proxyconf/capability.rb | 5 +++ 2 files changed, 37 insertions(+) create mode 100644 lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb diff --git a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb new file mode 100644 index 0000000..035e478 --- /dev/null +++ b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb @@ -0,0 +1,32 @@ +require_relative '../util' + +module VagrantPlugins + module ProxyConf + module Cap + module Debian + # Capability for docker proxy configuration + module DockerProxyConf + # @return [String, false] the path to docker or `false` if not found + def self.docker_proxy_conf(machine) + return false unless Util.which(machine, 'docker') + + machine.communicate.tap do |comm| + src_file = '/lib/systemd/system/docker.service' + dst_file = '/etc/systemd/system/docker.service' + tmp_file = '/tmp/docker.service' + env_file = 'EnvironmentFile=-\/etc\/default\/docker' + comm.sudo("sed -e 's/\\[Service\\]/[Service]\\n#{env_file}/g' #{src_file} > #{tmp_file}") + unless comm.test("diff #{tmp_file} #{dst_file}") + # update config and restart docker when config changed + comm.sudo("mv -f #{tmp_file} #{dst_file}") + comm.sudo('systemctl daemon-reload') + end + comm.sudo("rm -f #{tmp_file}") + end + '/etc/default/docker' + end + end + end + end + end +end diff --git a/lib/vagrant-proxyconf/capability.rb b/lib/vagrant-proxyconf/capability.rb index 4b9d8ec..67b271b 100644 --- a/lib/vagrant-proxyconf/capability.rb +++ b/lib/vagrant-proxyconf/capability.rb @@ -18,6 +18,11 @@ class Plugin < Vagrant.plugin('2') Cap::CoreOS::DockerProxyConf end + guest_capability 'debian', 'docker_proxy_conf' do + require_relative 'cap/debian/docker_proxy_conf' + Cap::Debian::DockerProxyConf + end + guest_capability 'linux', 'env_proxy_conf' do require_relative 'cap/linux/env_proxy_conf' Cap::Linux::EnvProxyConf From 59c79d4c853129ebca4bedd69ed18e071f51f757 Mon Sep 17 00:00:00 2001 From: Hiroshi Ota Date: Thu, 17 Sep 2015 09:42:34 +0900 Subject: [PATCH 3/8] Check if systemd is used on guest machine --- lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb index 035e478..80f16a1 100644 --- a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb +++ b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb @@ -6,9 +6,11 @@ module Cap module Debian # Capability for docker proxy configuration module DockerProxyConf + CONFIG_PATH = '/etc/default/docker' # @return [String, false] the path to docker or `false` if not found def self.docker_proxy_conf(machine) return false unless Util.which(machine, 'docker') + return CONFIG_PATH unless Util.which(machine, 'systemctl') machine.communicate.tap do |comm| src_file = '/lib/systemd/system/docker.service' @@ -23,7 +25,7 @@ def self.docker_proxy_conf(machine) end comm.sudo("rm -f #{tmp_file}") end - '/etc/default/docker' + CONFIG_PATH end end end From 3eb9d30552f3d48112a0854be2a3423b920e1053 Mon Sep 17 00:00:00 2001 From: Hiroshi Ota Date: Fri, 18 Sep 2015 06:08:31 +0900 Subject: [PATCH 4/8] Check if EnvironmentFile description in src_file to avoid duplicated description --- lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb index 80f16a1..fea755f 100644 --- a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb +++ b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb @@ -17,7 +17,11 @@ def self.docker_proxy_conf(machine) dst_file = '/etc/systemd/system/docker.service' tmp_file = '/tmp/docker.service' env_file = 'EnvironmentFile=-\/etc\/default\/docker' - comm.sudo("sed -e 's/\\[Service\\]/[Service]\\n#{env_file}/g' #{src_file} > #{tmp_file}") + if comm.test("grep -q -e '#{env_file}' #{src_file}") + comm.sudo("cp -p #{src_file} #{tmp_file}") + else + comm.sudo("sed -e 's/\\[Service\\]/[Service]\\n#{env_file}/g' #{src_file} > #{tmp_file}") + end unless comm.test("diff #{tmp_file} #{dst_file}") # update config and restart docker when config changed comm.sudo("mv -f #{tmp_file} #{dst_file}") From 15582a5dd831e841da480bb1caa56a74864a1c8f Mon Sep 17 00:00:00 2001 From: Hiroshi Ota Date: Fri, 18 Sep 2015 08:43:41 +0900 Subject: [PATCH 5/8] Support docker.io command --- .../cap/debian/docker_proxy_conf.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb index fea755f..7e811ef 100644 --- a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb +++ b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb @@ -6,11 +6,17 @@ module Cap module Debian # Capability for docker proxy configuration module DockerProxyConf - CONFIG_PATH = '/etc/default/docker' + CONFIG_DIR = '/etc/default/' + # @return [String, false] the path to docker or `false` if not found def self.docker_proxy_conf(machine) - return false unless Util.which(machine, 'docker') - return CONFIG_PATH unless Util.which(machine, 'systemctl') + docker_command = 'docker' if Util.which(machine, 'docker') + docker_command = 'docker.io' if Util.which(machine, 'docker.io') + + return false if docker_command.nil? + + config_path = CONFIG_DIR + docker_command + return config_path unless Util.which(machine, 'systemctl') machine.communicate.tap do |comm| src_file = '/lib/systemd/system/docker.service' @@ -29,7 +35,7 @@ def self.docker_proxy_conf(machine) end comm.sudo("rm -f #{tmp_file}") end - CONFIG_PATH + config_path end end end From fd6e1ed15aea9702a4b5bc87c4fb93d46dc8cc9b Mon Sep 17 00:00:00 2001 From: Hiroshi Ota Date: Sat, 19 Sep 2015 07:17:07 +0900 Subject: [PATCH 6/8] Refactor too complex docker_proxy_conf method --- .../cap/debian/docker_proxy_conf.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb index 7e811ef..e659dde 100644 --- a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb +++ b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb @@ -10,9 +10,7 @@ module DockerProxyConf # @return [String, false] the path to docker or `false` if not found def self.docker_proxy_conf(machine) - docker_command = 'docker' if Util.which(machine, 'docker') - docker_command = 'docker.io' if Util.which(machine, 'docker.io') - + docker_command = find_docker_command(machine) return false if docker_command.nil? config_path = CONFIG_DIR + docker_command @@ -37,6 +35,14 @@ def self.docker_proxy_conf(machine) end config_path end + + private + + def self.find_docker_command(machine) + return 'docker' if Util.which(machine, 'docker') + return 'docker.io' if Util.which(machine, 'docker.io') + nil + end end end end From 89b8bac9a93d7866754a4ab8c3f501a5a74c5d7f Mon Sep 17 00:00:00 2001 From: Hiroshi Ota Date: Sat, 19 Sep 2015 07:36:08 +0900 Subject: [PATCH 7/8] Fix incorrect configure file name for docker.io package --- lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb index e659dde..6a68cb8 100644 --- a/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb +++ b/lib/vagrant-proxyconf/cap/debian/docker_proxy_conf.rb @@ -17,10 +17,10 @@ def self.docker_proxy_conf(machine) return config_path unless Util.which(machine, 'systemctl') machine.communicate.tap do |comm| - src_file = '/lib/systemd/system/docker.service' - dst_file = '/etc/systemd/system/docker.service' - tmp_file = '/tmp/docker.service' - env_file = 'EnvironmentFile=-\/etc\/default\/docker' + src_file = "/lib/systemd/system/#{docker_command}.service" + dst_file = "/etc/systemd/system/#{docker_command}.service" + tmp_file = "/tmp/#{docker_command}.service" + env_file = "EnvironmentFile=-\\/etc\\/default\\/#{docker_command}" if comm.test("grep -q -e '#{env_file}' #{src_file}") comm.sudo("cp -p #{src_file} #{tmp_file}") else From 8e130b475999dbfcc026bd8a65ef239e03c85e19 Mon Sep 17 00:00:00 2001 From: Mark Hughes Date: Sat, 19 Sep 2015 23:13:43 +0100 Subject: [PATCH 8/8] Revert "Use the coreOS style configuration for systemd-based Ubuntu/Deb hosts.". This has been superceded by the pull request from @otahi. This reverts commit 690cb777a93abcca2a8090f3c95450558577fe94. --- .../cap/linux/docker_proxy_conf.rb | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/lib/vagrant-proxyconf/cap/linux/docker_proxy_conf.rb b/lib/vagrant-proxyconf/cap/linux/docker_proxy_conf.rb index 61d6c01..ece2c3a 100644 --- a/lib/vagrant-proxyconf/cap/linux/docker_proxy_conf.rb +++ b/lib/vagrant-proxyconf/cap/linux/docker_proxy_conf.rb @@ -17,21 +17,6 @@ def self.docker_proxy_conf(machine) "/etc/sysconfig/#{docker_command}" elsif machine.communicate.test('ls /var/lib/boot2docker/') "/var/lib/boot2docker/profile" - elsif machine.communicate.test('ps -p1 | grep systemd') - machine.communicate.tap do |comm| - src_file = "/lib/systemd/system/#{docker_command}.service" - dst_file = "/etc/systemd/system/#{docker_command}.service" - tmp_file = "/tmp/#{docker_command}.service" - env_file = "EnvironmentFile=-\\/etc\\/default\\/#{docker_command}" - comm.sudo("sed -e 's/\\[Service\\]/[Service]\\n#{env_file}/g' #{src_file} > #{tmp_file}") - unless comm.test("diff #{tmp_file} #{dst_file}") - # update config and restart docker when config changed - comm.sudo("mv -f #{tmp_file} #{dst_file}") - comm.sudo('systemctl daemon-reload') - end - comm.sudo("rm -f #{tmp_file}") - end - "/etc/default/#{docker_command}" else "/etc/default/#{docker_command}" end