dc-deck 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/deck +4 -0
- data/lib/deck.rb +12 -8
- data/lib/deck/command_line.rb +65 -0
- data/lib/deck/command_line/container_helper.rb +55 -0
- data/lib/deck/config.rb +21 -0
- data/lib/deck/container.rb +75 -0
- data/lib/deck/container/add.rb +22 -0
- data/lib/deck/{build → container}/archive.rb +14 -6
- data/lib/deck/container/cmd.rb +25 -0
- data/lib/deck/container/env.rb +25 -0
- data/lib/deck/container/expose.rb +17 -0
- data/lib/deck/{build → container}/from.rb +5 -5
- data/lib/deck/{build → container}/name.rb +3 -3
- data/lib/deck/container/publish.rb +14 -0
- data/lib/deck/{build → container}/repository.rb +3 -3
- data/lib/deck/{build → container}/start.rb +3 -3
- data/lib/deck/container/tag.rb +18 -0
- data/lib/deck/container/variable.rb +30 -0
- data/lib/deck/{build → container}/work_dir.rb +3 -3
- data/lib/deck/repeatable.rb +26 -0
- data/lib/deck/submodule.rb +40 -1
- metadata +70 -58
- data/lib/deck/build.rb +0 -34
- data/lib/deck/build/cmd.rb +0 -18
- data/lib/deck/build/expose.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 005566227f6f22c0e3623c54bfd82637b2a8bab8
|
4
|
+
data.tar.gz: ee82398dfbf26bfabdf60420b5b234d097b7e92c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1715957696c24eb1e0ac4bc7499e139da4b6b4f41208a0058df0b785254ef4a327a1d19f113c2a610a300558e1d9483cc160dd5609797f7f243d31606ea9280b
|
7
|
+
data.tar.gz: 6587a23e6cbabedbafe51c3d0d11dcd55ca9a09d1ad42008507e299022a3d2f7c9e2e9f28dcdcbbbb9d6d63a2a016f9c970658dd4c30a7ef27fd689096cd30bf
|
data/bin/deck
ADDED
data/lib/deck.rb
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
module Deck
|
2
|
-
autoload :
|
3
|
-
autoload :
|
4
|
-
autoload :
|
2
|
+
autoload :Config, 'deck/config'
|
3
|
+
autoload :Submodule, 'deck/submodule'
|
4
|
+
autoload :Repeatable, 'deck/repeatable'
|
5
|
+
autoload :Container, 'deck/container'
|
6
|
+
autoload :Run, 'deck/run'
|
7
|
+
autoload :CommandLine, 'deck/command_line'
|
5
8
|
|
6
9
|
class << self
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def design(name, tag: nil, &block)
|
11
|
+
container = Container.new
|
12
|
+
container.name name
|
13
|
+
container.tag tag unless tag.nil?
|
14
|
+
container.instance_eval &block
|
15
|
+
container
|
12
16
|
end
|
13
17
|
|
14
18
|
def run
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'yaml'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
class Deck::CommandLine < Thor
|
6
|
+
require_relative 'command_line/container_helper'
|
7
|
+
class_option :dir, aliases: [:d], desc: 'path to locate definitions', default: Deck::Config['dir']
|
8
|
+
|
9
|
+
desc 'design NAME', 'build a docker image'
|
10
|
+
option :value, aliases: [:V], banner: 'KEY=VALUE', desc: 'override variable. format: key=value,key=value[,key=value...]'
|
11
|
+
def design(name)
|
12
|
+
reload_local_config
|
13
|
+
ensure_user_config
|
14
|
+
|
15
|
+
helper = ContainerHelper.new name, options
|
16
|
+
|
17
|
+
system helper.build_command
|
18
|
+
system helper.update_latest_tag
|
19
|
+
end
|
20
|
+
|
21
|
+
=begin
|
22
|
+
desc 'load NAME', 'running a docker container from image'
|
23
|
+
option :value, aliases: [:V], banner: 'KEY=VALUE', desc: 'override variable. format: key=value,key=value[,key=value...]'
|
24
|
+
def load(name)
|
25
|
+
reload_local_config
|
26
|
+
|
27
|
+
helper = ContainerHelper.new name, options
|
28
|
+
|
29
|
+
puts helper.run_command
|
30
|
+
end
|
31
|
+
|
32
|
+
desc 'config [NAME [VALUE]]', 'get/set configuration value'
|
33
|
+
def config(name = nil, value = nil)
|
34
|
+
reload_local_config
|
35
|
+
|
36
|
+
return config_list if name.nil? and value.nil?
|
37
|
+
return if value.nil? and !Deck::Config.keys.include? name
|
38
|
+
return puts(Deck::Config[name.to_sym]) if value.nil?
|
39
|
+
write_config name, value
|
40
|
+
end
|
41
|
+
=end
|
42
|
+
|
43
|
+
private
|
44
|
+
def reload_local_config
|
45
|
+
dir = options[:dir]
|
46
|
+
Deck::Config.source "#{dir}/config.yml"
|
47
|
+
Deck::Config.reload!
|
48
|
+
end
|
49
|
+
|
50
|
+
def config_list
|
51
|
+
maximum_length = Deck::Config.keys.reduce(0) { |memo,k| k.length > memo ? k.length : memo}
|
52
|
+
Deck::Config.keys.each do |key|
|
53
|
+
printf " %#{maximum_length}s : %s\n", key, Deck::Config[key]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def write_config(name, value)
|
58
|
+
hash = YAML.load(ERB.new(File.read "#{options[:dir]}/config.yml").result)
|
59
|
+
hash = {} if hash.nil? or hash.empty?
|
60
|
+
hash[name] = value
|
61
|
+
File.open("#{options[:dir]}/config.yml", 'w') do |f|
|
62
|
+
f.write(YAML.dump(hash))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Deck::CommandLine::ContainerHelper
|
2
|
+
attr_reader :container
|
3
|
+
|
4
|
+
def initialize(name, options)
|
5
|
+
@options = options
|
6
|
+
|
7
|
+
load_blueprint name
|
8
|
+
end
|
9
|
+
|
10
|
+
def run_command
|
11
|
+
command = @container.run_command
|
12
|
+
process_meta command
|
13
|
+
end
|
14
|
+
|
15
|
+
def build_command
|
16
|
+
command = raw_build_command
|
17
|
+
process_meta command
|
18
|
+
end
|
19
|
+
|
20
|
+
def update_latest_tag
|
21
|
+
process_meta "docker tag -f #{@container.image_name} #{@container.repository}/#{@container.name}:latest"
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def load_blueprint(name)
|
26
|
+
@container = Deck.send(:eval, File.read("#{@options[:dir]}/#{name}.deck"))
|
27
|
+
|
28
|
+
process_variables
|
29
|
+
end
|
30
|
+
|
31
|
+
def process_meta(command)
|
32
|
+
result = command
|
33
|
+
@container.meta.each do |_, v|
|
34
|
+
result = v.process(result) if v.respond_to? :process
|
35
|
+
end
|
36
|
+
|
37
|
+
result
|
38
|
+
end
|
39
|
+
|
40
|
+
def process_variables
|
41
|
+
Hash[*(@options[:value].split(',').map { |item| item.split('=') }.flatten)].each do |key, value|
|
42
|
+
@container.meta[:variable].set key, value
|
43
|
+
end unless @options[:value].nil? or @options[:value].empty?
|
44
|
+
|
45
|
+
@container
|
46
|
+
end
|
47
|
+
|
48
|
+
def raw_build_command
|
49
|
+
<<-EOF
|
50
|
+
docker build --rm -t #{@container.image_name} - <<DOCKERFILE
|
51
|
+
#{@container.build_command}
|
52
|
+
DOCKERFILE
|
53
|
+
EOF
|
54
|
+
end
|
55
|
+
end
|
data/lib/deck/config.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'settingslogic'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
USER_CONF_LOCATION = "#{ENV['HOME']}/.deck.d"
|
5
|
+
DEFAULT_CONF_LOCATION = ['/etc/deck', USER_CONF_LOCATION]
|
6
|
+
|
7
|
+
class Deck::Config < Settingslogic
|
8
|
+
DEFAULT_CONF_LOCATION.each do |location|
|
9
|
+
source "#{location}/config.yml"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
if Deck::Config['dir'].nil?
|
14
|
+
Deck::Config['dir'] = USER_CONF_LOCATION
|
15
|
+
else
|
16
|
+
Deck::Config.source "#{Deck::Config.dir}/config.yml"
|
17
|
+
end
|
18
|
+
|
19
|
+
def ensure_user_config
|
20
|
+
FileUtils.mkdir_p USER_CONF_LOCATION
|
21
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
class Deck::Container
|
2
|
+
autoload :Repository, 'deck/container/repository'
|
3
|
+
autoload :Name, 'deck/container/name'
|
4
|
+
autoload :From, 'deck/container/from'
|
5
|
+
autoload :Expose, 'deck/container/expose'
|
6
|
+
autoload :Cmd, 'deck/container/cmd'
|
7
|
+
autoload :Archive, 'deck/container/archive'
|
8
|
+
autoload :Add, 'deck/container/add'
|
9
|
+
autoload :Start, 'deck/container/start'
|
10
|
+
autoload :WorkDir, 'deck/container/work_dir'
|
11
|
+
autoload :Tag, 'deck/container/tag'
|
12
|
+
autoload :Variable, 'deck/container/variable'
|
13
|
+
autoload :Publish, 'deck/container/publish'
|
14
|
+
autoload :Env, 'deck/container/env'
|
15
|
+
|
16
|
+
attr_reader :meta
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@information = {}
|
20
|
+
@meta = {}
|
21
|
+
@call_order = []
|
22
|
+
self.class.constants.each do |sub|
|
23
|
+
sub = self.class.const_get(sub).new
|
24
|
+
if sub.class.meta?
|
25
|
+
@meta[sub.class.register_name] = sub
|
26
|
+
else
|
27
|
+
@information[sub.class.register_name] = sub
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def build_command
|
33
|
+
dockerfile = ''
|
34
|
+
@call_order.each do |info|
|
35
|
+
command = @information[info].build_command(@information)
|
36
|
+
dockerfile += "#{command}\n" unless command.nil?
|
37
|
+
@information[info].next if @information[info].class.include? Deck::Repeatable
|
38
|
+
end
|
39
|
+
dockerfile
|
40
|
+
end
|
41
|
+
|
42
|
+
def image_name
|
43
|
+
"#{repository.to_s}/#{name.to_s}:#{tag.to_s}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def run_command
|
47
|
+
"docker run #{image_name}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def method_missing(name, *args, &block)
|
51
|
+
return handle_information(name, *args, &block) if @information.include? name.to_sym
|
52
|
+
return handle_meta(name, *args, &block) if @meta.include? name.to_sym
|
53
|
+
raise NoMethodError, "do not define such method : #{name.inspect}"
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
def handle_information(name, *args, &block)
|
58
|
+
if args.nil? || args.empty?
|
59
|
+
@information[name.to_sym].send :get
|
60
|
+
else
|
61
|
+
info = @information[name.to_sym]
|
62
|
+
value = info.send :set, *args
|
63
|
+
@call_order << name.to_sym unless @call_order.include? name.to_sym and not info.class.repeatable?
|
64
|
+
value
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def handle_meta(name, *args, &block)
|
69
|
+
if args.nil? || args.empty?
|
70
|
+
@meta[name.to_sym].send :get
|
71
|
+
else
|
72
|
+
@meta[name.to_sym].send :set, *args
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Deck::Container::Add
|
2
|
+
include Deck::Submodule
|
3
|
+
include Deck::Repeatable
|
4
|
+
|
5
|
+
repeatable true
|
6
|
+
register_name :add
|
7
|
+
|
8
|
+
def define(file, path: '/')
|
9
|
+
step do
|
10
|
+
attributes[:file] = file
|
11
|
+
attributes[:path] = path
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def export
|
16
|
+
attributes[:file]
|
17
|
+
end
|
18
|
+
|
19
|
+
def build_command(deps)
|
20
|
+
cmd = "ADD #{attributes[:file]} #{attributes[:path]}\n"
|
21
|
+
end
|
22
|
+
end
|
@@ -1,15 +1,19 @@
|
|
1
|
-
class Deck::
|
1
|
+
class Deck::Container::Archive
|
2
2
|
include Deck::Submodule
|
3
|
+
include Deck::Repeatable
|
3
4
|
|
5
|
+
repeatable true
|
4
6
|
register_name :archive
|
5
7
|
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
def define(file, path: '/', type: :tar)
|
9
|
+
step do
|
10
|
+
attributes[:file] = file
|
11
|
+
attributes[:path] = path
|
12
|
+
attributes[:type] = type
|
13
|
+
end
|
10
14
|
end
|
11
15
|
|
12
|
-
def
|
16
|
+
def export
|
13
17
|
attributes[:file]
|
14
18
|
end
|
15
19
|
|
@@ -26,6 +30,10 @@ class Deck::Build::Archive
|
|
26
30
|
"cd #{attributes[:path]} && tar zxf #{filename}"
|
27
31
|
end
|
28
32
|
|
33
|
+
def zip
|
34
|
+
"cd #{attributes[:path]} && unzip #{filename}"
|
35
|
+
end
|
36
|
+
|
29
37
|
def filename
|
30
38
|
File.basename attributes[:file]
|
31
39
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Deck::Container::Cmd
|
2
|
+
include Deck::Submodule
|
3
|
+
include Deck::Repeatable
|
4
|
+
|
5
|
+
register_name :cmd
|
6
|
+
repeatable true
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
end
|
10
|
+
|
11
|
+
def define(command, workdir: '/')
|
12
|
+
step do
|
13
|
+
attributes[:command] = command
|
14
|
+
attributes[:workdir] = workdir
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def export
|
19
|
+
attributes[:command]
|
20
|
+
end
|
21
|
+
|
22
|
+
def build_command(deps)
|
23
|
+
"RUN cd #{attributes[:workdir]} && #{attributes[:command]}"
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Deck::Container::Env
|
2
|
+
include Deck::Submodule
|
3
|
+
include Deck::Repeatable
|
4
|
+
|
5
|
+
register_name :env
|
6
|
+
repeatable true
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
end
|
10
|
+
|
11
|
+
def define(name, value)
|
12
|
+
step do
|
13
|
+
attributes[:name] = name
|
14
|
+
attributes[:value] = value
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def export
|
19
|
+
{attributes[:name].to_sym => attributes[:value]}
|
20
|
+
end
|
21
|
+
|
22
|
+
def build_command(deps)
|
23
|
+
"ENV #{attributes[:name]} #{attributes[:value]}"
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Deck::Container::Expose
|
2
|
+
include Deck::Submodule
|
3
|
+
|
4
|
+
register_name :expose
|
5
|
+
|
6
|
+
def define(*ports)
|
7
|
+
attributes[:port] = ports
|
8
|
+
end
|
9
|
+
|
10
|
+
def export
|
11
|
+
attributes[:port]
|
12
|
+
end
|
13
|
+
|
14
|
+
def build_command(deps)
|
15
|
+
"EXPOSE #{export.join(' ')}"
|
16
|
+
end
|
17
|
+
end
|
@@ -1,21 +1,21 @@
|
|
1
|
-
class Deck::
|
1
|
+
class Deck::Container::From
|
2
2
|
include Deck::Submodule
|
3
3
|
|
4
4
|
register_name :from
|
5
5
|
dependancies :repository
|
6
6
|
|
7
|
-
def
|
7
|
+
def define(name, of: nil)
|
8
8
|
attributes[:name] = name
|
9
9
|
attributes[:repository] = of
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def export
|
13
13
|
attributes[:name]
|
14
14
|
end
|
15
15
|
|
16
16
|
def build_command(deps)
|
17
17
|
repository = attributes[:repository]
|
18
|
-
repository = deps[:repository].
|
19
|
-
"FROM #{repository}/#{
|
18
|
+
repository = deps[:repository].get if repository.nil?
|
19
|
+
"FROM #{repository}/#{export}"
|
20
20
|
end
|
21
21
|
end
|
@@ -1,14 +1,14 @@
|
|
1
|
-
class Deck::
|
1
|
+
class Deck::Container::Name
|
2
2
|
include Deck::Submodule
|
3
3
|
|
4
4
|
register_name :name
|
5
5
|
dependancies :repository
|
6
6
|
|
7
|
-
def
|
7
|
+
def define(name)
|
8
8
|
attributes[:name] = name
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def export
|
12
12
|
attributes[:name]
|
13
13
|
end
|
14
14
|
|
@@ -1,13 +1,13 @@
|
|
1
|
-
class Deck::
|
1
|
+
class Deck::Container::Repository
|
2
2
|
include Deck::Submodule
|
3
3
|
|
4
4
|
register_name :repository
|
5
5
|
|
6
|
-
def
|
6
|
+
def define(name)
|
7
7
|
attributes[:repository] = name
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def export
|
11
11
|
attributes[:repository]
|
12
12
|
end
|
13
13
|
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
class Deck::
|
1
|
+
class Deck::Container::Start
|
2
2
|
include Deck::Submodule
|
3
3
|
|
4
4
|
register_name :start
|
5
5
|
|
6
|
-
def
|
6
|
+
def define(type, command, workdir: '.')
|
7
7
|
attributes[:type] = type
|
8
8
|
attributes[:command] = command
|
9
9
|
attributes[:workdir] = workdir
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def export
|
13
13
|
attributes[:command]
|
14
14
|
end
|
15
15
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Deck::Container::Variable
|
2
|
+
include Deck::Submodule
|
3
|
+
|
4
|
+
register_name :variable
|
5
|
+
type :meta
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@variables = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def define(name, value)
|
12
|
+
@variables[name.to_sym] = value
|
13
|
+
end
|
14
|
+
|
15
|
+
def prepare
|
16
|
+
Hash[*@variables.map { |k,v| [k, "::#{k}::"]}.flatten].dup.freeze
|
17
|
+
end
|
18
|
+
|
19
|
+
def process(command)
|
20
|
+
@variables.each do |k,v|
|
21
|
+
command.gsub! "::#{k}::", v.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
command
|
25
|
+
end
|
26
|
+
|
27
|
+
def meta
|
28
|
+
@variables.dup.freeze
|
29
|
+
end
|
30
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
class Deck::
|
1
|
+
class Deck::Container::WorkDir
|
2
2
|
include Deck::Submodule
|
3
3
|
|
4
4
|
register_name :workdir
|
5
5
|
|
6
|
-
def
|
6
|
+
def define(workdir)
|
7
7
|
attributes[:workdir] = workdir
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def export
|
11
11
|
attributes[:workdir]
|
12
12
|
end
|
13
13
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Deck::Repeatable
|
2
|
+
class Step
|
3
|
+
attr_reader :attributes
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@attributes = {}
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def step(&block)
|
11
|
+
@repeatable_attr ||= []
|
12
|
+
step = Step.new
|
13
|
+
step.instance_eval(&block) if block_given?
|
14
|
+
|
15
|
+
@repeatable_attr << step.attributes
|
16
|
+
end
|
17
|
+
|
18
|
+
def attributes
|
19
|
+
@index ||= 0
|
20
|
+
@repeatable_attr[@index]
|
21
|
+
end
|
22
|
+
|
23
|
+
def next
|
24
|
+
@index += 1
|
25
|
+
end
|
26
|
+
end
|
data/lib/deck/submodule.rb
CHANGED
@@ -1,4 +1,17 @@
|
|
1
1
|
module Deck::Submodule
|
2
|
+
def map
|
3
|
+
{
|
4
|
+
build: {
|
5
|
+
set: :define,
|
6
|
+
get: :export
|
7
|
+
},
|
8
|
+
meta: {
|
9
|
+
set: :define,
|
10
|
+
get: :prepare
|
11
|
+
}
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
2
15
|
def attributes
|
3
16
|
@attributes ||= {}
|
4
17
|
@attributes
|
@@ -8,13 +21,39 @@ module Deck::Submodule
|
|
8
21
|
attributes
|
9
22
|
end
|
10
23
|
|
11
|
-
def
|
24
|
+
def set(*args)
|
25
|
+
method = map[self.class.type][:set]
|
26
|
+
public_send method, *args if respond_to? method
|
27
|
+
end
|
28
|
+
|
29
|
+
def get
|
30
|
+
method = map[self.class.type][:get]
|
31
|
+
public_send method if respond_to? method
|
12
32
|
end
|
13
33
|
|
14
34
|
def build_command(deps)
|
15
35
|
end
|
16
36
|
|
17
37
|
module ClassMethods
|
38
|
+
def meta?
|
39
|
+
type == :meta
|
40
|
+
end
|
41
|
+
|
42
|
+
def repeatable?
|
43
|
+
@repeatable
|
44
|
+
end
|
45
|
+
|
46
|
+
def type(type=nil)
|
47
|
+
@type ||= :build
|
48
|
+
@type = type unless type.nil?
|
49
|
+
@type
|
50
|
+
end
|
51
|
+
|
52
|
+
def repeatable(value=nil)
|
53
|
+
@repeatable = value unless type.nil?
|
54
|
+
@repeatable
|
55
|
+
end
|
56
|
+
|
18
57
|
def register_name(name=nil)
|
19
58
|
@name = name unless name.nil?
|
20
59
|
@name
|
metadata
CHANGED
@@ -1,166 +1,177 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dc-deck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeong, Jiung
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.19.1
|
20
17
|
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: '0.19'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.19.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.19'
|
27
30
|
- - ">="
|
28
31
|
- !ruby/object:Gem::Version
|
29
32
|
version: 0.19.1
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: dc-settingslogic
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
30
37
|
- - "~>"
|
31
38
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
39
|
+
version: '2.1'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.1'
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: rake
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|
36
50
|
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 10.3.2
|
40
51
|
- - "~>"
|
41
52
|
- !ruby/object:Gem::Version
|
42
53
|
version: '10.3'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 10.3.2
|
43
57
|
type: :runtime
|
44
58
|
prerelease: false
|
45
59
|
version_requirements: !ruby/object:Gem::Requirement
|
46
60
|
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 10.3.2
|
50
61
|
- - "~>"
|
51
62
|
- !ruby/object:Gem::Version
|
52
63
|
version: '10.3'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 10.3.2
|
53
67
|
- !ruby/object:Gem::Dependency
|
54
68
|
name: wirble
|
55
69
|
requirement: !ruby/object:Gem::Requirement
|
56
70
|
requirements:
|
57
|
-
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: 0.1.3
|
60
71
|
- - "~>"
|
61
72
|
- !ruby/object:Gem::Version
|
62
73
|
version: '0.1'
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.1.3
|
63
77
|
type: :development
|
64
78
|
prerelease: false
|
65
79
|
version_requirements: !ruby/object:Gem::Requirement
|
66
80
|
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 0.1.3
|
70
81
|
- - "~>"
|
71
82
|
- !ruby/object:Gem::Version
|
72
83
|
version: '0.1'
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 0.1.3
|
73
87
|
- !ruby/object:Gem::Dependency
|
74
88
|
name: bundler
|
75
89
|
requirement: !ruby/object:Gem::Requirement
|
76
90
|
requirements:
|
77
|
-
- - ">="
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: 1.5.3
|
80
91
|
- - "~>"
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '1.5'
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.5.3
|
83
97
|
type: :development
|
84
98
|
prerelease: false
|
85
99
|
version_requirements: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.5.3
|
90
101
|
- - "~>"
|
91
102
|
- !ruby/object:Gem::Version
|
92
103
|
version: '1.5'
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 1.5.3
|
93
107
|
- !ruby/object:Gem::Dependency
|
94
108
|
name: pry
|
95
109
|
requirement: !ruby/object:Gem::Requirement
|
96
110
|
requirements:
|
97
|
-
- - ">="
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: 0.9.12
|
100
111
|
- - "~>"
|
101
112
|
- !ruby/object:Gem::Version
|
102
113
|
version: '0.9'
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.9.12
|
103
117
|
type: :development
|
104
118
|
prerelease: false
|
105
119
|
version_requirements: !ruby/object:Gem::Requirement
|
106
120
|
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 0.9.12
|
110
121
|
- - "~>"
|
111
122
|
- !ruby/object:Gem::Version
|
112
123
|
version: '0.9'
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 0.9.12
|
113
127
|
- !ruby/object:Gem::Dependency
|
114
128
|
name: yard
|
115
129
|
requirement: !ruby/object:Gem::Requirement
|
116
130
|
requirements:
|
117
|
-
- - ">="
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: 0.8.7
|
120
131
|
- - "~>"
|
121
132
|
- !ruby/object:Gem::Version
|
122
133
|
version: '0.8'
|
123
|
-
type: :development
|
124
|
-
prerelease: false
|
125
|
-
version_requirements: !ruby/object:Gem::Requirement
|
126
|
-
requirements:
|
127
134
|
- - ">="
|
128
135
|
- !ruby/object:Gem::Version
|
129
136
|
version: 0.8.7
|
130
|
-
- - "~>"
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: '0.8'
|
133
|
-
- !ruby/object:Gem::Dependency
|
134
|
-
name: rspec
|
135
|
-
requirement: !ruby/object:Gem::Requirement
|
136
|
-
requirements:
|
137
|
-
- - "~>"
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
version: '2.99'
|
140
137
|
type: :development
|
141
138
|
prerelease: false
|
142
139
|
version_requirements: !ruby/object:Gem::Requirement
|
143
140
|
requirements:
|
144
141
|
- - "~>"
|
145
142
|
- !ruby/object:Gem::Version
|
146
|
-
version: '
|
143
|
+
version: '0.8'
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 0.8.7
|
147
147
|
description: Docker CLI helper
|
148
148
|
email:
|
149
149
|
- ethernuiel@gmail.com
|
150
|
-
executables:
|
150
|
+
executables:
|
151
|
+
- deck
|
151
152
|
extensions: []
|
152
153
|
extra_rdoc_files: []
|
153
154
|
files:
|
155
|
+
- bin/deck
|
154
156
|
- lib/deck.rb
|
155
|
-
- lib/deck/
|
156
|
-
- lib/deck/
|
157
|
-
- lib/deck/
|
158
|
-
- lib/deck/
|
159
|
-
- lib/deck/
|
160
|
-
- lib/deck/
|
161
|
-
- lib/deck/
|
162
|
-
- lib/deck/
|
163
|
-
- lib/deck/
|
157
|
+
- lib/deck/command_line.rb
|
158
|
+
- lib/deck/command_line/container_helper.rb
|
159
|
+
- lib/deck/config.rb
|
160
|
+
- lib/deck/container.rb
|
161
|
+
- lib/deck/container/add.rb
|
162
|
+
- lib/deck/container/archive.rb
|
163
|
+
- lib/deck/container/cmd.rb
|
164
|
+
- lib/deck/container/env.rb
|
165
|
+
- lib/deck/container/expose.rb
|
166
|
+
- lib/deck/container/from.rb
|
167
|
+
- lib/deck/container/name.rb
|
168
|
+
- lib/deck/container/publish.rb
|
169
|
+
- lib/deck/container/repository.rb
|
170
|
+
- lib/deck/container/start.rb
|
171
|
+
- lib/deck/container/tag.rb
|
172
|
+
- lib/deck/container/variable.rb
|
173
|
+
- lib/deck/container/work_dir.rb
|
174
|
+
- lib/deck/repeatable.rb
|
164
175
|
- lib/deck/run.rb
|
165
176
|
- lib/deck/submodule.rb
|
166
177
|
homepage:
|
@@ -188,3 +199,4 @@ signing_key:
|
|
188
199
|
specification_version: 4
|
189
200
|
summary: Docker Command line helper
|
190
201
|
test_files: []
|
202
|
+
has_rdoc:
|
data/lib/deck/build.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
class Deck::Build
|
2
|
-
autoload :Repository, 'deck/build/repository'
|
3
|
-
autoload :Name, 'deck/build/name'
|
4
|
-
autoload :From, 'deck/build/from'
|
5
|
-
autoload :Expose, 'deck/build/expose'
|
6
|
-
autoload :Cmd, 'deck/build/cmd'
|
7
|
-
autoload :Archive, 'deck/build/archive'
|
8
|
-
autoload :Start, 'deck/build/start'
|
9
|
-
autoload :WorkDir, 'deck/build/work_dir'
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@informations = {}
|
13
|
-
@call_order = []
|
14
|
-
self.class.constants.each do |sub|
|
15
|
-
sub = self.class.const_get(sub).new
|
16
|
-
@informations[sub.class.register_name] = sub
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def build_command
|
21
|
-
@call_order.each do |info|
|
22
|
-
puts @informations[info].build_command(@informations) unless @informations[info].build_command(@informations).nil?
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def execute
|
27
|
-
end
|
28
|
-
|
29
|
-
def method_missing(name, *args, &block)
|
30
|
-
raise NoMethodError, 'do not define such method' unless @informations.include? name.to_sym
|
31
|
-
@informations[name.to_sym].send :execute, *args
|
32
|
-
@call_order << name.to_sym unless @call_order.include? name.to_sym
|
33
|
-
end
|
34
|
-
end
|
data/lib/deck/build/cmd.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
class Deck::Build::Cmd
|
2
|
-
include Deck::Submodule
|
3
|
-
|
4
|
-
register_name :cmd
|
5
|
-
|
6
|
-
def execute(command, workdir: '/')
|
7
|
-
attributes[:command] = command
|
8
|
-
attributes[:workdir] = workdir
|
9
|
-
end
|
10
|
-
|
11
|
-
def value
|
12
|
-
attributes[:command]
|
13
|
-
end
|
14
|
-
|
15
|
-
def build_command(deps)
|
16
|
-
"RUN cd #{attributes[:workdir]} && #{attributes[:command]}"
|
17
|
-
end
|
18
|
-
end
|
data/lib/deck/build/expose.rb
DELETED