diff --git a/knife-docker.gemspec b/knife-docker.gemspec index 841d0a9..bbb01e8 100644 --- a/knife-docker.gemspec +++ b/knife-docker.gemspec @@ -18,4 +18,5 @@ Gem::Specification.new do |s| s.homepage = "http://github.com/ema/knife-docker" s.require_paths = ["lib"] s.add_dependency(%q, [">= 0.10.0"]) + s.add_runtime_dependency("docker-api", "~> 1.13", ">= 1.13.2") end diff --git a/lib/chef/knife/docker_delete.rb b/lib/chef/knife/docker_delete.rb index 5569101..e526e7b 100644 --- a/lib/chef/knife/docker_delete.rb +++ b/lib/chef/knife/docker_delete.rb @@ -18,6 +18,7 @@ require 'chef/knife' require 'chef/node' require 'chef/api_client' +require 'docker' module ChefDocker class DockerDelete < Chef::Knife @@ -38,21 +39,15 @@ def run exit 1 end - running_containers = [] - - `docker ps`.split(/\n/).each do |c| - if c =~ /^[\d\w]{12}\s/ - running_containers.push c.split[0] - end - end - @name_args.each do |name| - unless running_containers.include? name + begin + container = Docker::Container.get(name) + rescue Docker::Error::NotFoundError => error ui.warn("Container #{name} does not exist") next end - delete name + delete(container) end end @@ -67,12 +62,12 @@ def destroy_item(klass, name, type_name) end def delete(container) - `docker stop #{container}` - `docker rm #{container}` + container.stop() + container.delete() if config[:_purge] - destroy_item(Chef::Node, container, "node") - destroy_item(Chef::ApiClient, container, "client") + destroy_item(Chef::Node, container.id, "node") + destroy_item(Chef::ApiClient, container.id, "client") end end end