tongueroo/docksync

View on GitHub
lib/docksync/rsync/install.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'fileutils'

module Docksync
  class Rsync
    class Install
      def initialize(options)
        @options = options
        @cid = @options[:cid]
      end

      def run
        copy_script
        run_script
      end

      # hacky way to copy file to the container
      def copy_script
        puts "Copying install-rsync.sh script to container"
        # temporarily use home since boot2docker host mounts /Users
        src = File.expand_path("../../bash/install-rsync.sh", __FILE__)
        tmp = "#{ENV['HOME']}/#{File.basename(src)}"
        FileUtils.cp(src, tmp)

        # copy to actual container
        system(container_copy_command(tmp))

        # clean up
        FileUtils.rm_f(tmp)
      end

      def container_copy_command(src)
        full_cid = docker_inspect
        dest = "/var/lib/docker/aufs/mnt/#{full_cid}/tmp/"
        cmd = %Q|boot2docker ssh "cp #{src} #{dest}"|
        puts "Running: #{cmd}" unless @options[:mute]
        cmd
      end

      def docker_inspect
        `docker inspect -f '{{.Id}}' #{@cid}`.strip
      end

      def run_script
        puts "Installing rsync to container"
        puts `docker exec #{@cid} /bin/bash -e /tmp/install-rsync.sh #{app_root}`
      end

      def app_root
        dockerfile = @options[:cwd] + "/Dockerfile"
        data = File.read(dockerfile).split("\n").grep(/WORKDIR/)
        workdir = data.first.split(' ').last
      end

    end
  end
end