From fb22d9f60b08fe877adc29f94041a6d2e79d76f2 Mon Sep 17 00:00:00 2001 From: Tobias Macey Date: Wed, 2 Oct 2013 15:43:08 -0400 Subject: [PATCH 1/5] Added timeout argument to container and image providers that gets passed to shell_out command. --- providers/container.rb | 12 ++++++------ providers/image.rb | 8 ++++---- resources/container.rb | 1 + resources/image.rb | 1 + 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/providers/container.rb b/providers/container.rb index cd400abd30..0107f0eeb2 100644 --- a/providers/container.rb +++ b/providers/container.rb @@ -22,7 +22,7 @@ def load_current_resource @current_resource = Chef::Resource::DockerContainer.new(new_resource) - dps = shell_out("docker ps -a -notrunc") + dps = shell_out("docker ps -a -notrunc", :timeout => new_resource.timeout || 60) dps.stdout.each_line do |dps_line| next unless dps_line.include?(new_resource.image) && dps_line.include?(new_resource.command) container_ps = dps_line.split(%r{\s\s+}) @@ -62,7 +62,7 @@ def load_current_resource run_args += " -privileged" if new_resource.privileged run_args += " -u #{new_resource.user}" if new_resource.user run_args += " -v #{new_resource.volume}" if new_resource.volume - dr = shell_out("docker run #{run_args} #{new_resource.image} #{new_resource.command}") + dr = shell_out("docker run #{run_args} #{new_resource.image} #{new_resource.command}", :timeout => new_resource.timeout || 60) new_resource.id(dr.stdout.chomp) new_resource.updated_by_last_action(true) end @@ -79,11 +79,11 @@ def load_current_resource end def remove - shell_out("docker rm #{current_resource.id}") + shell_out("docker rm #{current_resource.id}", :timeout => new_resource.timeout || 60) end def restart - shell_out("docker restart #{current_resource.id}") + shell_out("docker restart #{current_resource.id}", :timeout => new_resource.timeout || 60) end def running? @@ -91,9 +91,9 @@ def running? end def start - shell_out("docker start #{current_resource.id}") + shell_out("docker start #{current_resource.id}", :timeout => new_resource.timeout || 60) end def stop - shell_out("docker stop #{current_resource.id}") + shell_out("docker stop #{current_resource.id}", :timeout => new_resource.timeout || 60) end diff --git a/providers/image.rb b/providers/image.rb index 06f9a82140..969f75c6bf 100644 --- a/providers/image.rb +++ b/providers/image.rb @@ -22,7 +22,7 @@ def load_current_resource @current_resource = Chef::Resource::DockerImage.new(new_resource) - di = shell_out("docker images -a") + di = shell_out("docker images -a", :timeout => new_resource.timeout || 60) if di.stdout.include?(new_resource.image_name) di.stdout.each_line do |di_line| next unless di_line.include?(new_resource.image_name) @@ -42,7 +42,7 @@ def load_current_resource pull_args = "" pull_args += " -registry #{new_resource.registry}" if new_resource.registry pull_args += " -t #{new_resource.tag}" if new_resource.tag - shell_out("docker pull #{new_resource.image_name} #{pull_args}") + shell_out("docker pull #{new_resource.image_name} #{pull_args}", :timeout => new_resource.timeout || 60) new_resource.updated_by_last_action(true) end end @@ -51,7 +51,7 @@ def load_current_resource unless installed? full_image_name = new_resource.image_name full_image_name += ":#{new_resource.tag}" if new_resource.tag - shell_out("docker build -t #{full_image_name} - < #{new_resource.dockerfile}") + shell_out("docker build -t #{full_image_name} - < #{new_resource.dockerfile}", :timeout => new_resource.timeout || 60) new_resource.updated_by_last_action(true) end end @@ -62,7 +62,7 @@ def load_current_resource end def remove - shell_out("docker rmi #{new_resource.image_name}") + shell_out("docker rmi #{new_resource.image_name}", :timeout => new_resource.timeout || 60) end def installed? diff --git a/resources/container.rb b/resources/container.rb index 05981e4f55..db04b2df6b 100644 --- a/resources/container.rb +++ b/resources/container.rb @@ -36,3 +36,4 @@ attribute :privileged, :kind_of => [TrueClass, FalseClass] attribute :user, :kind_of => [String] attribute :volume, :kind_of => [String] +attribute :timeout, :kind_of => [Integer] diff --git a/resources/image.rb b/resources/image.rb index 205331ad70..741b04e6d8 100644 --- a/resources/image.rb +++ b/resources/image.rb @@ -29,3 +29,4 @@ attribute :repository, :kind_of => [String] attribute :tag, :kind_of => [String] attribute :dockerfile, :kind_of => [String] +attribute :timeout, :kind_of => [Integer] From 828a72563c6c232f0dc759b9a780dc63183191fd Mon Sep 17 00:00:00 2001 From: Tobias Macey Date: Wed, 2 Oct 2013 16:00:04 -0400 Subject: [PATCH 2/5] Changed timeout resource attribute to be cmd_timeout to prevent collisions --- providers/container.rb | 12 ++++++------ providers/image.rb | 8 ++++---- resources/container.rb | 2 +- resources/image.rb | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/providers/container.rb b/providers/container.rb index 0107f0eeb2..0964c0cc53 100644 --- a/providers/container.rb +++ b/providers/container.rb @@ -22,7 +22,7 @@ def load_current_resource @current_resource = Chef::Resource::DockerContainer.new(new_resource) - dps = shell_out("docker ps -a -notrunc", :timeout => new_resource.timeout || 60) + dps = shell_out("docker ps -a -notrunc", :timeout => new_resource.cmd_timeout || 60) dps.stdout.each_line do |dps_line| next unless dps_line.include?(new_resource.image) && dps_line.include?(new_resource.command) container_ps = dps_line.split(%r{\s\s+}) @@ -62,7 +62,7 @@ def load_current_resource run_args += " -privileged" if new_resource.privileged run_args += " -u #{new_resource.user}" if new_resource.user run_args += " -v #{new_resource.volume}" if new_resource.volume - dr = shell_out("docker run #{run_args} #{new_resource.image} #{new_resource.command}", :timeout => new_resource.timeout || 60) + dr = shell_out("docker run #{run_args} #{new_resource.image} #{new_resource.command}", :timeout => new_resource.cmd_timeout || 60) new_resource.id(dr.stdout.chomp) new_resource.updated_by_last_action(true) end @@ -79,11 +79,11 @@ def load_current_resource end def remove - shell_out("docker rm #{current_resource.id}", :timeout => new_resource.timeout || 60) + shell_out("docker rm #{current_resource.id}", :timeout => new_resource.cmd_timeout || 60) end def restart - shell_out("docker restart #{current_resource.id}", :timeout => new_resource.timeout || 60) + shell_out("docker restart #{current_resource.id}", :timeout => new_resource.cmd_timeout || 60) end def running? @@ -91,9 +91,9 @@ def running? end def start - shell_out("docker start #{current_resource.id}", :timeout => new_resource.timeout || 60) + shell_out("docker start #{current_resource.id}", :timeout => new_resource.cmd_timeout || 60) end def stop - shell_out("docker stop #{current_resource.id}", :timeout => new_resource.timeout || 60) + shell_out("docker stop #{current_resource.id}", :timeout => new_resource.cmd_timeout || 60) end diff --git a/providers/image.rb b/providers/image.rb index 969f75c6bf..691e0949d2 100644 --- a/providers/image.rb +++ b/providers/image.rb @@ -22,7 +22,7 @@ def load_current_resource @current_resource = Chef::Resource::DockerImage.new(new_resource) - di = shell_out("docker images -a", :timeout => new_resource.timeout || 60) + di = shell_out("docker images -a", :timeout => new_resource.cmd_timeout || 60) if di.stdout.include?(new_resource.image_name) di.stdout.each_line do |di_line| next unless di_line.include?(new_resource.image_name) @@ -42,7 +42,7 @@ def load_current_resource pull_args = "" pull_args += " -registry #{new_resource.registry}" if new_resource.registry pull_args += " -t #{new_resource.tag}" if new_resource.tag - shell_out("docker pull #{new_resource.image_name} #{pull_args}", :timeout => new_resource.timeout || 60) + shell_out("docker pull #{new_resource.image_name} #{pull_args}", :timeout => new_resource.cmd_timeout || 60) new_resource.updated_by_last_action(true) end end @@ -51,7 +51,7 @@ def load_current_resource unless installed? full_image_name = new_resource.image_name full_image_name += ":#{new_resource.tag}" if new_resource.tag - shell_out("docker build -t #{full_image_name} - < #{new_resource.dockerfile}", :timeout => new_resource.timeout || 60) + shell_out("docker build -t #{full_image_name} - < #{new_resource.dockerfile}", :timeout => new_resource.cmd_timeout || 60) new_resource.updated_by_last_action(true) end end @@ -62,7 +62,7 @@ def load_current_resource end def remove - shell_out("docker rmi #{new_resource.image_name}", :timeout => new_resource.timeout || 60) + shell_out("docker rmi #{new_resource.image_name}", :timeout => new_resource.cmd_timeout || 60) end def installed? diff --git a/resources/container.rb b/resources/container.rb index db04b2df6b..c7fc1b0729 100644 --- a/resources/container.rb +++ b/resources/container.rb @@ -36,4 +36,4 @@ attribute :privileged, :kind_of => [TrueClass, FalseClass] attribute :user, :kind_of => [String] attribute :volume, :kind_of => [String] -attribute :timeout, :kind_of => [Integer] +attribute :cmd_timeout, :kind_of => [Integer] diff --git a/resources/image.rb b/resources/image.rb index 741b04e6d8..e40813de65 100644 --- a/resources/image.rb +++ b/resources/image.rb @@ -29,4 +29,4 @@ attribute :repository, :kind_of => [String] attribute :tag, :kind_of => [String] attribute :dockerfile, :kind_of => [String] -attribute :timeout, :kind_of => [Integer] +attribute :cmd_timeout, :kind_of => [Integer] From c850a9666b28e5977512fded09c52f6135c21d3e Mon Sep 17 00:00:00 2001 From: Tobias Macey Date: Tue, 8 Oct 2013 10:39:30 -0400 Subject: [PATCH 3/5] Added option to perform a docker build by passing the directory that contains the dockerfile --- providers/image.rb | 6 +++++- resources/image.rb | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/providers/image.rb b/providers/image.rb index 691e0949d2..46ac5c4ba3 100644 --- a/providers/image.rb +++ b/providers/image.rb @@ -51,7 +51,11 @@ def load_current_resource unless installed? full_image_name = new_resource.image_name full_image_name += ":#{new_resource.tag}" if new_resource.tag - shell_out("docker build -t #{full_image_name} - < #{new_resource.dockerfile}", :timeout => new_resource.cmd_timeout || 60) + if new_resource.dockerfile + command = "- < #{new_resource.dockerfile}" + elsif new_resource.dockerfile_directory + command = "#{new_resource.dockerfile_directory}" + shell_out("docker build -t #{full_image_name} #{command}", :timeout => new_resource.cmd_timeout || 60) new_resource.updated_by_last_action(true) end end diff --git a/resources/image.rb b/resources/image.rb index e40813de65..690d881a43 100644 --- a/resources/image.rb +++ b/resources/image.rb @@ -30,3 +30,4 @@ attribute :tag, :kind_of => [String] attribute :dockerfile, :kind_of => [String] attribute :cmd_timeout, :kind_of => [Integer] +attribute :dockerfile_directory, :kind_of => [String] From 568ffccab6ed0ce24b853a0fd64c21902834816d Mon Sep 17 00:00:00 2001 From: Tobias Macey Date: Tue, 8 Oct 2013 11:52:44 -0400 Subject: [PATCH 4/5] Added missing close of if block --- providers/image.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/providers/image.rb b/providers/image.rb index 46ac5c4ba3..37e4020698 100644 --- a/providers/image.rb +++ b/providers/image.rb @@ -55,6 +55,7 @@ def load_current_resource command = "- < #{new_resource.dockerfile}" elsif new_resource.dockerfile_directory command = "#{new_resource.dockerfile_directory}" + end shell_out("docker build -t #{full_image_name} #{command}", :timeout => new_resource.cmd_timeout || 60) new_resource.updated_by_last_action(true) end From 21e7a2dca8b16b32e0f6628aca632cbddc27e891 Mon Sep 17 00:00:00 2001 From: Tobias Macey Date: Mon, 21 Oct 2013 09:04:06 -0400 Subject: [PATCH 5/5] Updated timeout value to have a default instead of using ||. Updated dockerfile_directory attribute to be path instead. --- providers/container.rb | 13 +++++++------ providers/image.rb | 12 ++++++------ resources/container.rb | 3 ++- resources/image.rb | 4 ++-- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/providers/container.rb b/providers/container.rb index 0964c0cc53..921dd5f0b9 100644 --- a/providers/container.rb +++ b/providers/container.rb @@ -22,7 +22,7 @@ def load_current_resource @current_resource = Chef::Resource::DockerContainer.new(new_resource) - dps = shell_out("docker ps -a -notrunc", :timeout => new_resource.cmd_timeout || 60) + dps = shell_out("docker ps -a -notrunc", :timeout => new_resource.cmd_timeout) dps.stdout.each_line do |dps_line| next unless dps_line.include?(new_resource.image) && dps_line.include?(new_resource.command) container_ps = dps_line.split(%r{\s\s+}) @@ -62,7 +62,8 @@ def load_current_resource run_args += " -privileged" if new_resource.privileged run_args += " -u #{new_resource.user}" if new_resource.user run_args += " -v #{new_resource.volume}" if new_resource.volume - dr = shell_out("docker run #{run_args} #{new_resource.image} #{new_resource.command}", :timeout => new_resource.cmd_timeout || 60) + run_args += " -w #{new_resource.working_directory}" if new_resource.working_directory + dr = shell_out("docker run #{run_args} #{new_resource.image} #{new_resource.command}", :timeout => new_resource.cmd_timeout) new_resource.id(dr.stdout.chomp) new_resource.updated_by_last_action(true) end @@ -79,11 +80,11 @@ def load_current_resource end def remove - shell_out("docker rm #{current_resource.id}", :timeout => new_resource.cmd_timeout || 60) + shell_out("docker rm #{current_resource.id}", :timeout => new_resource.cmd_timeout) end def restart - shell_out("docker restart #{current_resource.id}", :timeout => new_resource.cmd_timeout || 60) + shell_out("docker restart #{current_resource.id}", :timeout => new_resource.cmd_timeout) end def running? @@ -91,9 +92,9 @@ def running? end def start - shell_out("docker start #{current_resource.id}", :timeout => new_resource.cmd_timeout || 60) + shell_out("docker start #{current_resource.id}", :timeout => new_resource.cmd_timeout) end def stop - shell_out("docker stop #{current_resource.id}", :timeout => new_resource.cmd_timeout || 60) + shell_out("docker stop #{current_resource.id}", :timeout => new_resource.cmd_timeout) end diff --git a/providers/image.rb b/providers/image.rb index 37e4020698..d75ba28d2e 100644 --- a/providers/image.rb +++ b/providers/image.rb @@ -22,7 +22,7 @@ def load_current_resource @current_resource = Chef::Resource::DockerImage.new(new_resource) - di = shell_out("docker images -a", :timeout => new_resource.cmd_timeout || 60) + di = shell_out("docker images -a", :timeout => new_resource.cmd_timeout) if di.stdout.include?(new_resource.image_name) di.stdout.each_line do |di_line| next unless di_line.include?(new_resource.image_name) @@ -42,7 +42,7 @@ def load_current_resource pull_args = "" pull_args += " -registry #{new_resource.registry}" if new_resource.registry pull_args += " -t #{new_resource.tag}" if new_resource.tag - shell_out("docker pull #{new_resource.image_name} #{pull_args}", :timeout => new_resource.cmd_timeout || 60) + shell_out("docker pull #{new_resource.image_name} #{pull_args}", :timeout => new_resource.cmd_timeout) new_resource.updated_by_last_action(true) end end @@ -53,10 +53,10 @@ def load_current_resource full_image_name += ":#{new_resource.tag}" if new_resource.tag if new_resource.dockerfile command = "- < #{new_resource.dockerfile}" - elsif new_resource.dockerfile_directory - command = "#{new_resource.dockerfile_directory}" + elsif new_resource.path + command = "#{new_resource.path}" end - shell_out("docker build -t #{full_image_name} #{command}", :timeout => new_resource.cmd_timeout || 60) + shell_out("docker build -t #{full_image_name} #{command}", :timeout => new_resource.cmd_timeout) new_resource.updated_by_last_action(true) end end @@ -67,7 +67,7 @@ def load_current_resource end def remove - shell_out("docker rmi #{new_resource.image_name}", :timeout => new_resource.cmd_timeout || 60) + shell_out("docker rmi #{new_resource.image_name}", :timeout => new_resource.cmd_timeout) end def installed? diff --git a/resources/container.rb b/resources/container.rb index c7fc1b0729..5063bbd5cd 100644 --- a/resources/container.rb +++ b/resources/container.rb @@ -36,4 +36,5 @@ attribute :privileged, :kind_of => [TrueClass, FalseClass] attribute :user, :kind_of => [String] attribute :volume, :kind_of => [String] -attribute :cmd_timeout, :kind_of => [Integer] +attribute :working_directory, :kind_of => [String] +attribute :cmd_timeout, :kind_of => [Integer], :default => 60 diff --git a/resources/image.rb b/resources/image.rb index 690d881a43..9a1f769663 100644 --- a/resources/image.rb +++ b/resources/image.rb @@ -29,5 +29,5 @@ attribute :repository, :kind_of => [String] attribute :tag, :kind_of => [String] attribute :dockerfile, :kind_of => [String] -attribute :cmd_timeout, :kind_of => [Integer] -attribute :dockerfile_directory, :kind_of => [String] +attribute :cmd_timeout, :kind_of => [Integer], :default => 60 +attribute :path, :kind_of => [String]