dapp 0.2.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +8 -8
  2. data/config/en/common.yml +3 -1
  3. data/config/en/net_status.yml +5 -2
  4. data/lib/dapp.rb +9 -6
  5. data/lib/dapp/application.rb +30 -5
  6. data/lib/dapp/application/logging.rb +2 -2
  7. data/lib/dapp/application/path.rb +10 -6
  8. data/lib/dapp/build/stage/base.rb +77 -9
  9. data/lib/dapp/build/stage/chef_cookbooks.rb +1 -1
  10. data/lib/dapp/build/stage/from.rb +2 -1
  11. data/lib/dapp/build/stage/infra_install.rb +1 -1
  12. data/lib/dapp/build/stage/source_1.rb +1 -1
  13. data/lib/dapp/build/stage/source_1_archive.rb +0 -4
  14. data/lib/dapp/build/stage/source_2.rb +1 -1
  15. data/lib/dapp/build/stage/source_3.rb +1 -1
  16. data/lib/dapp/build/stage/source_base.rb +3 -3
  17. data/lib/dapp/builder/chef.rb +160 -140
  18. data/lib/dapp/cli.rb +2 -1
  19. data/lib/dapp/cli/base.rb +1 -1
  20. data/lib/dapp/cli/build.rb +7 -7
  21. data/lib/dapp/cli/flush.rb +3 -3
  22. data/lib/dapp/cli/flush/{build_cache.rb → metadata.rb} +7 -7
  23. data/lib/dapp/cli/flush/{stage_cache.rb → stages.rb} +4 -4
  24. data/lib/dapp/cli/push.rb +3 -3
  25. data/lib/dapp/cli/run.rb +59 -0
  26. data/lib/dapp/config/application.rb +20 -2
  27. data/lib/dapp/config/artifact.rb +69 -0
  28. data/lib/dapp/config/chef.rb +27 -0
  29. data/lib/dapp/config/docker.rb +1 -1
  30. data/lib/dapp/config/git_artifact.rb +3 -29
  31. data/lib/dapp/config/shell.rb +20 -0
  32. data/lib/dapp/controller.rb +21 -22
  33. data/lib/dapp/exception/base.rb +1 -5
  34. data/lib/dapp/filelock.rb +1 -1
  35. data/lib/dapp/git_artifact.rb +2 -2
  36. data/lib/dapp/git_repo/base.rb +5 -5
  37. data/lib/dapp/git_repo/own.rb +6 -2
  38. data/lib/dapp/git_repo/remote.rb +5 -3
  39. data/lib/dapp/helper/cli.rb +7 -1
  40. data/lib/dapp/helper/log.rb +2 -2
  41. data/lib/dapp/helper/shellout.rb +1 -1
  42. data/lib/dapp/helper/trivia.rb +0 -4
  43. data/lib/dapp/image/arguments.rb +115 -0
  44. data/lib/dapp/image/docker.rb +76 -0
  45. data/lib/dapp/image/stage.rb +74 -0
  46. data/lib/dapp/version.rb +1 -1
  47. metadata +9 -6
  48. data/lib/dapp/docker_image.rb +0 -51
  49. data/lib/dapp/stage_image.rb +0 -160
@@ -1,5 +1,5 @@
1
1
  # Version
2
2
  module Dapp
3
- VERSION = '0.2.8'.freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  BUILD_CACHE_VERSION = 1
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Stolyarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-02 00:00:00.000000000 Z
11
+ date: 2016-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -354,19 +354,20 @@ files:
354
354
  - lib/dapp/cli/base.rb
355
355
  - lib/dapp/cli/build.rb
356
356
  - lib/dapp/cli/flush.rb
357
- - lib/dapp/cli/flush/build_cache.rb
358
- - lib/dapp/cli/flush/stage_cache.rb
357
+ - lib/dapp/cli/flush/metadata.rb
358
+ - lib/dapp/cli/flush/stages.rb
359
359
  - lib/dapp/cli/list.rb
360
360
  - lib/dapp/cli/push.rb
361
+ - lib/dapp/cli/run.rb
361
362
  - lib/dapp/cli/smartpush.rb
362
363
  - lib/dapp/config/application.rb
364
+ - lib/dapp/config/artifact.rb
363
365
  - lib/dapp/config/chef.rb
364
366
  - lib/dapp/config/docker.rb
365
367
  - lib/dapp/config/git_artifact.rb
366
368
  - lib/dapp/config/main.rb
367
369
  - lib/dapp/config/shell.rb
368
370
  - lib/dapp/controller.rb
369
- - lib/dapp/docker_image.rb
370
371
  - lib/dapp/error/application.rb
371
372
  - lib/dapp/error/base.rb
372
373
  - lib/dapp/error/build.rb
@@ -389,7 +390,9 @@ files:
389
390
  - lib/dapp/helper/shellout.rb
390
391
  - lib/dapp/helper/streaming.rb
391
392
  - lib/dapp/helper/trivia.rb
392
- - lib/dapp/stage_image.rb
393
+ - lib/dapp/image/arguments.rb
394
+ - lib/dapp/image/docker.rb
395
+ - lib/dapp/image/stage.rb
393
396
  - lib/dapp/version.rb
394
397
  homepage: https://github.com/flant/dapp
395
398
  licenses:
@@ -1,51 +0,0 @@
1
- module Dapp
2
- # DockerImage
3
- class DockerImage
4
- include Helper::Shellout
5
-
6
- attr_reader :from
7
- attr_reader :name
8
-
9
- def initialize(name:, from: nil)
10
- @from = from
11
- @name = name
12
- end
13
-
14
- def id
15
- @id || begin
16
- unless (output = shellout!("docker images -q --no-trunc=true #{name}").stdout.strip).empty?
17
- output
18
- end
19
- end
20
- end
21
-
22
- def untag!
23
- raise Error::Build, code: :image_already_untagged, data: { name: name } unless tagged?
24
- shellout!("docker rmi #{name}")
25
- end
26
-
27
- def push!(log_verbose: false, log_time: false)
28
- raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
29
- shellout!("docker push #{name}", log_verbose: log_verbose, log_time: log_time)
30
- end
31
-
32
- def pull!(log_verbose: false, log_time: false)
33
- return if tagged?
34
- shellout!("docker pull #{name}", log_verbose: log_verbose, log_time: log_time)
35
- @pulled = true
36
- end
37
-
38
- def tagged?
39
- !!id
40
- end
41
-
42
- def pulled?
43
- !!@pulled
44
- end
45
-
46
- def info
47
- raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
48
- shellout!("docker inspect --format='{{.Created}} {{.Size}}' #{name}").stdout.strip.split
49
- end
50
- end # DockerImage
51
- end # Dapp
@@ -1,160 +0,0 @@
1
- module Dapp
2
- # StageImage
3
- class StageImage < DockerImage
4
- def initialize(name:, built_id: nil, from: nil)
5
- @bash_commands = []
6
- @options = {}
7
- @change_options = {}
8
- @container_name = SecureRandom.hex
9
- @built_id = built_id
10
- super(name: name, from: from)
11
- end
12
-
13
- def add_change_volume(value)
14
- add_change_option(:volume, value)
15
- end
16
-
17
- def add_change_expose(value)
18
- add_change_option(:expose, value)
19
- end
20
-
21
- def add_change_env(value)
22
- add_change_option(:env, value)
23
- end
24
-
25
- def add_change_label(value)
26
- add_change_option(:label, value)
27
- end
28
-
29
- def add_change_cmd(value)
30
- add_change_option(:cmd, value)
31
- end
32
-
33
- def add_change_onbuild(value)
34
- add_change_option(:onbuild, value)
35
- end
36
-
37
- def add_change_workdir(value)
38
- add_change_option(:workdir, value)
39
- end
40
-
41
- def add_change_entrypoint(value)
42
- add_change_option(:entrypoint, value)
43
- end
44
-
45
- def add_change_user(value)
46
- add_change_option(:user, value)
47
- end
48
-
49
- def add_volume(value)
50
- add_option(:volume, value)
51
- end
52
-
53
- def add_volumes_from(value)
54
- add_option(:'volumes-from', value)
55
- end
56
-
57
- def add_commands(*commands)
58
- @bash_commands.concat(commands.flatten)
59
- end
60
-
61
- def built_id
62
- @built_id ||= id
63
- end
64
-
65
- def build!(**kvargs)
66
- @built_id = if should_be_built?
67
- begin
68
- run!(**kvargs)
69
- commit!
70
- ensure
71
- shellout("docker rm #{container_name}")
72
- end
73
- else
74
- from.built_id
75
- end
76
- end
77
-
78
- def export!(name, log_verbose: false, log_time: false, force: false)
79
- image = self.class.new(built_id: built_id, name: name)
80
- image.tag!(log_verbose: log_verbose, log_time: log_time, force: force)
81
- image.push!(log_verbose: log_verbose, log_time: log_time)
82
- image.untag!
83
- end
84
-
85
- def tag!(log_verbose: false, log_time: false, force: false)
86
- if !(existed_id = id).nil? && !force
87
- raise Error::Build, code: :another_image_already_tagged if built_id != existed_id
88
- return
89
- end
90
- shellout!("docker tag #{built_id} #{name}", log_verbose: log_verbose, log_time: log_time)
91
- end
92
-
93
- protected
94
-
95
- attr_reader :container_name
96
- attr_reader :bash_commands
97
- attr_reader :options, :change_options
98
-
99
- def add_option(key, value)
100
- add_option_default(options, key, value)
101
- end
102
-
103
- def add_change_option(key, value)
104
- add_option_default(change_options, key, value)
105
- end
106
-
107
- def add_option_default(hash, key, value)
108
- hash[key] = (hash[key].nil? ? value : (Array(hash[key]) << value).flatten)
109
- end
110
-
111
- def run!(log_verbose: false, log_time: false, introspect_error: false, introspect_before_error: false)
112
- raise Error::Build, code: :built_id_not_defined if from.built_id.nil?
113
- shellout!("docker run #{prepared_options} --name=#{container_name} #{from.built_id} #{prepared_bash_command}",
114
- log_verbose: log_verbose, log_time: log_time)
115
- rescue Error::Shellout => e
116
- raise unless introspect_error || introspect_before_error
117
- built_id = introspect_error ? commit! : from.built_id
118
- raise Exception::IntrospectImage, message: Dapp::Helper::NetStatus.message(e),
119
- data: { built_id: built_id, options: prepared_options, rmi: introspect_error }
120
- end
121
-
122
- def commit!
123
- shellout!("docker commit #{prepared_change} #{container_name}").stdout.strip
124
- end
125
-
126
- def should_be_built?
127
- !(bash_commands.empty? && change_options.empty?)
128
- end
129
-
130
- def prepared_options
131
- prepared_options_default(options) { |k, vals| Array(vals).map { |v| "--#{k}=#{v}" }.join(' ') }
132
- end
133
-
134
- def prepared_change
135
- prepared_options_default(change_options) do |k, vals|
136
- if [:cmd, :entrypoint].include? k
137
- %(-c '#{k.to_s.upcase} #{Array(vals)}')
138
- else
139
- Array(vals).map { |v| %(-c "#{k.to_s.upcase} #{v}") }.join(' ')
140
- end
141
- end
142
- end
143
-
144
- def prepared_options_default(hash)
145
- hash.map { |k, vals| yield(k, vals) }.join(' ')
146
- end
147
-
148
- def prepared_bash_command
149
- if bash_commands.empty?
150
- 'true'
151
- else
152
- shellout_pack prepared_commands.join(' && ')
153
- end
154
- end
155
-
156
- def prepared_commands
157
- bash_commands.map { |command| command.gsub(/^[\ |;]*|[\ |;]*$/, '') } # strip [' ', ';']
158
- end
159
- end # StageImage
160
- end # Dapp