lib/minke/tasks/task.rb in minke-1.10.0 vs lib/minke/tasks/task.rb in minke-1.11.0
- old
+ new
@@ -2,112 +2,86 @@
module Tasks
##
# Task is a base implementation of a rake task such as fetch, build, etc
class Task
- def initialize config, task, generator_settings, docker_runner, docker_compose_factory, service_discovery, logger, helper, system_runner
- @config = config
- @task = task
- @generator_settings = generator_settings
- @docker_runner = docker_runner
- @service_discovery = service_discovery
- @logger = logger
- @helper = helper
- @task_settings = config.send(task)
- @system_runner = system_runner
-
- @build_image = @generator_settings.build_settings.docker_settings.image
- @build_image = config.build_image_for(task) unless config.build_image_for(task) == nil
-
- @build_file = config.build_docker_file_for(task)
-
- @compose_file = config.compose_file_for(task)
-
- @compose = docker_compose_factory.create @compose_file unless @compose_file == nil
+ def initialize args
+ @config = args[:config]
+ @task_name = args[:task_name]
+ @docker_runner = args[:docker_runner]
+ @task_runner = args[:task_runner]
+ @error_helper = args[:error_helper]
+ @shell_helper = args[:shell_helper]
+ @logger_helper = args[:logger_helper]
+ @generator_config = args[:generator_config]
+ @docker_compose_factory = args[:docker_compose_factory]
+ @consul = args[:consul]
+ @docker_network = args[:docker_network]
+ @health_check = args[:health_check]
+ @service_discovery = args[:service_discovery]
+ @task_settings = @config.send(@task_name)
end
##
# run_with_config executes the task steps for the given
# - block containing custom actions
def run_with_block
- #TODO: Need to add some tests for this stuff
- run_steps @task_settings.pre unless @task_settings == nil || @task_settings.pre == nil
+ puts "Starting Consul"
+ begin
+ @docker_network.create
+ @consul.start_and_load_data @task_settings.consul_loader unless @task_settings.consul_loader == nil
+ @task_runner.run_steps(@task_settings.pre) unless @task_settings == nil || @task_settings.pre == nil
- yield if block_given?
+ yield if block_given?
- run_steps @task_settings.post unless @task_settings == nil || @task_settings.post == nil
+ @task_runner.run_steps(@task_settings.post) unless @task_settings == nil || @task_settings.post == nil
+ ensure
+ puts "Stopping Consul"
+ @consul.stop unless @task_settings.consul_loader == nil
+ @docker_network.remove
+ end
end
##
- # execute the defined steps in the given Minke::Config::TaskRunSettings
- def run_steps steps
- execute_rake_tasks steps.tasks unless steps.tasks == nil
- load_consul_data steps.consul_loader unless steps.consul_loader == nil
- wait_for_health_check steps.health_check unless steps.health_check == nil
- copy_assets steps.copy unless steps.copy == nil
- end
-
- ##
- # execute an array of rake tasks
- def execute_rake_tasks tasks
- tasks.each { |t| @helper.invoke_task t }
- end
-
- ##
- # load consul config
- def load_consul_data config
- @helper.load_consul_data build_address(config.url), config.config_file
- end
-
- def wait_for_health_check url
- @helper.wait_for_HTTPOK build_address(url), 0, 3
- end
-
- def copy_assets assets
- assets.each { |a| @helper.copy_assets a.from, a.to }
- end
-
+ # runs the given command in a docker container
def run_command_in_container command
begin
- settings = @generator_settings.build_settings.docker_settings
- if @build_file != nil
- @build_image = "#{@config.application_name}-buildimage"
- @docker_runner.build_image @build_file, @build_image
- else
- @docker_runner.pull_image @build_image unless @docker_runner.find_image @build_image
- end
+ settings = @generator_config.build_settings.docker_settings
+ build_image = create_container_image
- container, success = @docker_runner.create_and_run_container @build_image, settings.binds, settings.env, settings.working_directory, command
+ args = {
+ :image => build_image,
+ :command => command,
+ :volumes => settings.binds,
+ :environment => settings.env,
+ :working_directory => settings.working_directory
+ }
+ container, success = @docker_runner.create_and_run_container args
# throw exception if failed
- @helper.fatal_error "Unable to run command #{command}" unless success
+ @error_helper.fatal_error "Unable to run command #{command}" unless success
ensure
@docker_runner.delete_container container
end
end
- def build_address url
- if url.type == 'external'
- "#{url.protocol}://#{url.address}:#{url.port}#{url.path}"
- elsif url.type == 'bridge'
- address = @service_discovery.bridge_address_for ENV['DOCKER_NETWORK'], url.address, url.port
- "#{url.protocol}://#{address}#{url.path}"
- elsif url.type == 'public'
- address = @service_discovery.public_address_for url.address, url.port
- "#{url.protocol}://#{address}#{url.path}"
- end
- end
+ ##
+ # Pulls the build image for the container from the registry if one is supplied,
+ # if a build file is specified an image is built.
+ def create_container_image
+ build_image = @generator_config.build_settings.docker_settings.image
+ build_image = @config.build_image_for(@task_name) unless @config.build_image_for(@task_name) == nil
- def log message, level
- ## implement logger implementation
- case level
- when :error
- @logger.error message
- when :info
- @logger.info message
- when :debug
- @logger.debug message
+ build_file = @config.build_docker_file_for(@task_name)
+
+ if build_file != nil
+ build_image = "#{@config.application_name}-buildimage"
+ @docker_runner.build_image build_file, build_image
+ else
+ @docker_runner.pull_image build_image unless @docker_runner.find_image build_image
end
+
+ build_image
end
end
end
end