class DkComposer::Stack
Attributes
name[RW]
networks[RW]
services[RW]
version[RW]
volumes[RW]
Public Class Methods
create(name, *params, **opts, &block)
click to toggle source
# File lib/dkcomposer/stack.rb, line 93 def self.create(name, *params, **opts, &block) ret = Stack.new(name) ret.config(opts) ret.instance_exec(*params, &block) if block ret end
load_compose_file(file, name = :auto_generated)
click to toggle source
# File lib/dkcomposer/stack.rb, line 127 def self.load_compose_file(file, name = :auto_generated) opts = YAML.load_file(file) ret = create(name) ret.from_h(opts.symbolize_key) ret end
new(name)
click to toggle source
# File lib/dkcomposer/stack.rb, line 5 def initialize(name) @name = name @services = [] @volumes = {} @networks = {} @version = '2' end
Public Instance Methods
from_h(h)
click to toggle source
# File lib/dkcomposer/stack.rb, line 112 def from_h(h) version h[:version] h[:volumes].each do |k, v| volume(k, v || {}) end h[:networks].each do |k, v| network(k, v || {}) end h[:services].each do |k, v| service(k, v) end end
network(name, **opts, &block)
click to toggle source
# File lib/dkcomposer/stack.rb, line 37 def network(name, **opts, &block) ret = if NETWORK[name] NETWORK[name].deep_clone else Network.create(name) end ret.config(opts) ret.instance_exec(&block) if block @networks[name] = ret ret end
run(*opts, path: build_path)
click to toggle source
# File lib/dkcomposer/stack.rb, line 53 def run(*opts, path: build_path) composefile = tempfile(to_yaml, 'docker-compose.yml', path) up_cmd = [ "pushd #{path}", "docker-compose -f #{composefile} up #{opts.join(' ')}", 'popd' ].join('&&') run_command(up_cmd) end
service(name, **opts, &block)
click to toggle source
# File lib/dkcomposer/stack.rb, line 13 def service(name, **opts, &block) ret = if SERVICE[name] SERVICE[name].deep_clone else Service.create(name) end ret.config(opts) ret.instance_exec(&block) if block @services << ret ret end
stop(*opts, path: build_path)
click to toggle source
# File lib/dkcomposer/stack.rb, line 63 def stop(*opts, path: build_path) composefile = tempfile(to_yaml, 'docker-compose.yml', path) up_cmd = [ "pushd #{path}", "docker-compose -f #{composefile} down #{opts.join(' ')}", 'popd' ].join('&&') run_command(up_cmd) end
to_h()
click to toggle source
# File lib/dkcomposer/stack.rb, line 73 def to_h ret = { version: @version, volumes: @volumes.each_with_object({}) do |(_, v), r| r.merge! v.to_h end.stringfy_key, networks: @networks.each_with_object({}) do |(_, v), r| r.merge! v.to_h end.stringfy_key, services: @services.each_with_object({}) do |s, r| r.merge! s.to_h end } ret end
to_s()
click to toggle source
# File lib/dkcomposer/stack.rb, line 100 def to_s ret = <<-DUMP stack(:#{name}, version: '#{version}',build_path:"#{build_path}") do #{@volumes.map { |(_, v)| v.to_s }.join("\n")} #{@networks.map { |(_, v)| v.to_s }.join("\n")} #{@services.map(&:to_s).join("\n")} end DUMP ret end
Also aliased as: dump
to_yaml()
click to toggle source
# File lib/dkcomposer/stack.rb, line 89 def to_yaml Hash[to_h.collect { |k, v| [k.to_s, v] }].to_yaml end
volume(name, **opts, &block)
click to toggle source
# File lib/dkcomposer/stack.rb, line 25 def volume(name, **opts, &block) ret = if VOLUME[name] VOLUME[name].deep_clone else Volume.create(name) end ret.config(opts) ret.instance_exec(&block) if block @volumes[name] = ret ret end