require ‘centurion/docker_registry’

task :list do

invoke 'list:tags'
invoke 'list:running_containers'

end

namespace :list do

task :running_container_tags do

  tags = get_current_tags_for(fetch(:image))

  $stderr.puts "\n\nCurrent #{current_environment} tags for #{fetch(:image)}:\n\n"
  tags.each do |info|
    if info && !info[:tags].empty?
      $stderr.puts "#{'%-20s' % info[:server]}: #{info[:tags].join(', ')}"
    else
      $stderr.puts "#{'%-20s' % info[:server]}: NO TAGS!"
    end
  end

  $stderr.puts "\nAll tags for this image: #{tags.map { |t| t[:tags] }.flatten.uniq.join(', ')}"
end

task :tags do
  begin
    registry = Centurion::DockerRegistry.new(
      fetch(:docker_registry),
      fetch(:registry_user),
      fetch(:registry_password)
    )
    tags = registry.repository_tags(fetch(:image))
    tags.each do |tag|
      puts "\t#{tag[0]}\t-> #{tag[1][0..11]}"
    end
  rescue StandardError => e
    error "Couldn't communicate with Registry: #{e.message}"
  end
  puts
end

task :running_containers do
  on_each_docker_host do |target_server|
    begin
      running_containers = target_server.ps
      running_containers.each do |container|
        puts container.inspect
      end
    rescue StandardError => e
      error "Couldn't communicate with Docker on #{target_server.hostname}: #{e.message}"
      raise
    end
    puts
  end
end

end