Last active
June 15, 2017 15:42
-
-
Save tylerjohnst/aa338d96437a0d509273e7ba4415977b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Command | |
def initialize(command, target, script, uses_bash) | |
@command, @target, @script, @uses_bash = command, target, script, uses_bash | |
end | |
def result | |
command == :exec ? exec_command : run_command | |
end | |
def exec_command | |
"docker exec -it `docker-compose ps -q #{target}` #{script}" | |
end | |
def run_command | |
"docker run -it #{volumes} #{links} #{environment} #{image} #{script}" | |
end | |
private | |
attr_reader :target, :uses_bash, :command | |
def script | |
uses_bash ? "bash -l -c \"#{script_with_working_dir.gsub('"', '\"')}\"" : @script | |
end | |
def script_with_working_dir | |
working_dir ? "cd #{working_dir} && #{@script}" : @script | |
end | |
def image | |
service["image"] | |
end | |
def working_dir | |
service["working_dir"] | |
end | |
def volumes | |
service['volumes'].map do |volume| | |
"-v " + volume \ | |
.gsub('./', Dir.pwd + "/") \ | |
.gsub(named_volumes_regexp, 'fulcrumdocker_\1') | |
end.join(' ') | |
end | |
def links | |
service['depends_on'].map { |l| "--link #{l}" }.join(' ') | |
end | |
def environment | |
service['environment'].map { |key, value| "-e #{key}='#{value}'" }.join(' ') | |
end | |
def named_volumes_regexp | |
/(#{docker_compose_config['volumes'].keys.join('|')})/ | |
end | |
def service | |
docker_compose_config['services'][target.to_s] | |
end | |
def docker_compose_config | |
@docker_compose_config ||= YAML.load(File.read 'docker-compose.yml') | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment