Sha256: 15c2d371966422b40fa7927e60f96e6f77ddbe152d4bd8f2463dcbd48ebd62a6

Contents?: true

Size: 1.56 KB

Versions: 1

Compression:

Stored size: 1.56 KB

Contents

require 'digest/sha1'

module VagrantPlugins
  module Vocker
    class DockerClient
      def initialize(machine)
        @machine = machine
      end

      def pull_images(*images)
        @machine.communicate.tap do |comm|
          images.each do |image|
            comm.sudo("docker images | grep -q #{image} || docker pull #{image}")
          end
        end
      end

      def daemon_running?
        @machine.communicate.test('test -f /var/run/docker.pid')
      end

      def run(containers)
        containers.each do |name, config|
          cids_dir = "/var/lib/vocker/cids"
          config[:cidfile] ||= "#{cids_dir}/#{Digest::SHA1.hexdigest name}"

          @machine.communicate.sudo("mkdir -p #{cids_dir}")
          run_container(config)
        end
      end

      def run_container(config)
        raise "Container's cidfile was not provided!" unless config[:cidfile]

        id = "$(cat #{config[:cidfile]})"

        if container_exist?(id)
          start_container(id)
        else
          create_container(config)
        end
      end

      def container_exist?(id)
        @machine.communicate.test("sudo docker ps -a -q | grep -q #{id}")
      end

      def start_container(id)
        @machine.communicate.sudo("docker start #{id}")
      end

      def create_container(config)
        args = "-cidfile=#{config[:cidfile]} -d"
        args << " -dns=#{config[:dns]}" if config[:dns]
        @machine.communicate.sudo %[
          rm -f #{config[:cidfile]}
          docker run #{args} #{config[:image]} #{config[:cmd]}
        ]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vocker-0.3.0 lib/vocker/docker_client.rb