class Rummager::ClickContainer
Template to generate tasks for Container lifecycle
Attributes
allow_enter[RW]
args_create[RW]
args_start[RW]
binds[RW]
command[RW]
container_name[RW]
dep_jobs[RW]
enter_dep_jobs[RW]
exec_on_start[RW]
exposed_ports[RW]
image_name[RW]
image_nobuild[RW]
noclean[RW]
port_bindings[RW]
publishall[RW]
repo_base[RW]
volumes_from[RW]
Public Class Methods
new(container_name,args={}) { |self| ... }
click to toggle source
# File lib/rummager/containers.rb, line 263 def initialize(container_name,args={}) @container_name = container_name @image_name = args.delete(:image_name) || container_name @image_nobuild = args.delete(:image_nobuild) @repo_base = args.delete(:repo_base) || Rummager.repo_base @command = args.delete(:command) @args_create = args.delete(:args_create) || CNTNR_ARGS_CREATE @args_start = args.delete(:args_start) || {} @volumes_from = args.delete(:volumes_from) @binds = args.delete(:binds) @exposed_ports = args.delete(:exposed_ports) @port_bindings = args.delete(:port_bindings) if (!@exposed_ports.nil? && !@port_bindings.nil?) puts "WARNING: both 'exposed_ports' and 'port_bindings' are defined on #{@container_name}" end @publishall = args.delete(:publishall) @dep_jobs = args.delete(:dep_jobs) @exec_on_start = args.delete(:exec_on_start) @enter_dep_jobs = args.delete(:enter_dep_jobs) || [] @allow_enter = args.delete(:allow_enter) @noclean = args.delete(:noclean) if !args.empty? raise ArgumentError, "ClickContainer'#{@container_name}' defenition has unused/invalid key-values:#{args}" end yield self if block_given? define end
Public Instance Methods
define()
click to toggle source
# File lib/rummager/containers.rb, line 291 def define namespace "containers" do namespace @container_name do # create task realcreatetask = Rummager::ContainerCreateTask.define_task :create realcreatetask.container_name = @container_name realcreatetask.image_name = @image_name realcreatetask.repo_base = @repo_base realcreatetask.args_create = @args_create realcreatetask.command = @command realcreatetask.exposed_ports = @exposed_ports if @image_nobuild == true puts "skipping image build - assuming it exists" if Rake.verbose == true else Rake::Task["containers:#{@container_name}:create"].enhance( [ :"images:#{@image_name}:build" ] ) end if @dep_jobs @dep_jobs.each do |dj| Rake::Task["containers:#{@container_name}:create"].enhance( [ :"#{dj}" ] ) end end # start task starttask = Rummager::ContainerStartTask.define_task :start starttask.container_name = @container_name starttask.args_start = @args_start starttask.volumes_from = @volumes_from starttask.binds = @binds starttask.port_bindings = @port_bindings starttask.publishall = @publishall starttask.exec_on_start = @exec_on_start # ensure that containers from which volumes will be attached # are started before this container is started, otherwise # docker volumes_from will fail Rake::Task["containers:#{@container_name}:start"].enhance( [ :"containers:#{@container_name}:create" ] ) if @volumes_from @volumes_from.each do |vf| Rake::Task["containers:#{@container_name}:create"].enhance([:"containers:#{vf}:start" ]) end end # stop task stoptask = Rummager::ContainerStopTask.define_task :stop stoptask.container_name = @container_name Rake::Task[:"containers:stop"].enhance( [ :"containers:#{@container_name}:stop" ] ) # enter task if @allow_enter # build and jump into an environment entertask = Rummager::ContainerEnterTask.define_task :enter entertask.container_name = @container_name Rake::Task["containers:#{@container_name}:enter"].enhance([ :"containers:#{@container_name}:start" ]) # wire in any jobs marked as required to enter # jobs must be defined on this container @enter_dep_jobs.each do |edj| Rake::Task["containers:#{@container_name}:enter"].enhance([ :"containers:#{@container_name}:jobs:#{edj}" ]) end end # allow_enter # Remove task rmtask = Rummager::ContainerRMTask.define_task :rm rmtask.container_name = @container_name if @image_nobuild == true puts "skipping #{@image_name}:rmi dependency on #{@container_name}:rm" if Rake.verbose == true else Rake::Task["images:#{@image_name}:rmi"].enhance( [ "containers:#{@container_name}:rm" ] ) end Rake::Task["containers:#{@container_name}:rm"].enhance( [ :"containers:#{@container_name}:stop" ] ) if @noclean == true Rake::Task[:"containers:clobber"].enhance( [ :"containers:#{@container_name}:rm" ] ) else Rake::Task[:"containers:clean"].enhance( [ :"containers:#{@container_name}:rm" ] ) end end # namespace @container_name end # namespace "containers" Rake::Task["containers:#{@container_name}:rm"].enhance( [ :"containers:#{@container_name}:stop" ] ) Rake::Task[:"containers:stop"].enhance( [ :"containers:#{@container_name}:stop" ] ) end