dapp 0.31.28 → 0.32.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f8ebac81727c3e8d93b59c8280debe5840335d660b82661f746ce23e47b93c5
4
- data.tar.gz: b08f280aac5796e0c111978ad49ab8599494bb7ed9fef10631983d69055aa159
3
+ metadata.gz: 7836539f8a917786c4db7778853720687f41b3dc80eaaddee4b7e9cf13a7e8f5
4
+ data.tar.gz: 84eec391c97ddebb98732b6dc8729f606a7cbbb2c5eaf1c4b398e4a22de30736
5
5
  SHA512:
6
- metadata.gz: bcf4a19562edc68ec3ddc62c3c0625efa0121c801b48b17e4489e59e4227f798c5f8efd376481c64f9f4e90702f3309171490100e7f6549277a16bb466a3252e
7
- data.tar.gz: 956c8743e2be5841f084e44ad8f318bd60088dd950fb11430bd3220479d8fa824e49217b53a85039df28483a03ef17bfdc5eab514fdc0e26a899ad77a54bc4c0
6
+ metadata.gz: e44e256557b647a045f379df38c06f88ad2911a49e691112e3ce3d970ccc4afcf8f09d2f0381478924f41560d50c58bd8fb66ce97951a4a68ae280548ef70e70
7
+ data.tar.gz: 37d984525171b58ba24a6ea18a208b87f4e50de784ed8098958c9df0c2eb9893cc3b12ec95b4f2d17ebde90c7785299dd563f1c9168dbc0f8e02aefda1d3b108
data/bin/dapp CHANGED
@@ -74,29 +74,7 @@ set_gitlab_cancel_handler if ENV["GITLAB_CI"]
74
74
  begin
75
75
  begin
76
76
  begin
77
- begin
78
- Dapp::CLI.new.run
79
- ensure
80
- if Time.now.to_date < Date.parse("2019-11-01")
81
- STDERR.puts
82
- STDERR.puts ::Paint["###################################################################", :red, :bold]
83
- STDERR.puts ::Paint["### DEPRECATION WARNING! ###", :red, :bold]
84
- STDERR.puts ::Paint["### Dapp will be deprecated for use starting with 01.11.2019! ###", :red, :bold]
85
- STDERR.puts ::Paint["### Please port your project to werf: ###", :red, :bold]
86
- STDERR.puts ::Paint["### https://werf.io ###", :red, :bold]
87
- STDERR.puts ::Paint["###################################################################", :red, :bold]
88
- STDERR.puts
89
- else
90
- STDERR.puts
91
- STDERR.puts ::Paint["######################################################################", :red, :bold]
92
- STDERR.puts ::Paint["### DEPRECATION WARNING! ###", :red, :bold]
93
- STDERR.puts ::Paint["### Dapp is deprecated for use and will not receive any support! ###", :red, :bold]
94
- STDERR.puts ::Paint["### Please port your project to werf: ###", :red, :bold]
95
- STDERR.puts ::Paint["### https://werf.io ###", :red, :bold]
96
- STDERR.puts ::Paint["######################################################################", :red, :bold]
97
- STDERR.puts
98
- end
99
- end
77
+ Dapp::CLI.new.run
100
78
  rescue Dapp::Error::Base => e
101
79
  unless (message = Dapp::Helper::NetStatus.before_error_message(e)).empty?
102
80
  $stderr.puts(message)
@@ -126,12 +126,12 @@ module Dapp
126
126
  return if File.exists? dappfile_yml_bin_path
127
127
 
128
128
  log_process("Downloading dappfile-yml dapp dependency") do
129
- location = URI("https://dl.bintray.com/dapp/ruby2go/#{::Dapp::VERSION}/dappfile-yml")
129
+ location = URI("https://dl.bintray.com/flant/dapp/#{::Dapp::VERSION}/dappfile-yml")
130
130
 
131
131
  tmp_bin_path = File.join(self.class.tmp_base_dir, "dappfile-yml-#{SecureRandom.uuid}")
132
132
  ::Dapp::Downloader.download(location, tmp_bin_path, show_progress: true, progress_titile: dappfile_yml_bin_path)
133
133
 
134
- checksum_location = URI("https://dl.bintray.com/dapp/ruby2go/#{::Dapp::VERSION}/dappfile-yml.sha")
134
+ checksum_location = URI("https://dl.bintray.com/flant/dapp/#{::Dapp::VERSION}/dappfile-yml.sha")
135
135
  tmp_bin_checksum_path = tmp_bin_path + ".checksum"
136
136
  ::Dapp::Downloader.download(checksum_location, tmp_bin_checksum_path)
137
137
 
@@ -50,7 +50,6 @@ module Dapp
50
50
  "build-dir" => self.build_dir,
51
51
  "options" => self.options,
52
52
  "env-options" => {
53
- "DAPP_FORCE_SAVE_CACHE" => ENV["DAPP_FORCE_SAVE_CACHE"],
54
53
  "DAPP_BIN_DAPPFILE_YML" => ENV["DAPP_BIN_DAPPFILE_YML"],
55
54
  "ANSIBLE_ARGS" => ENV["ANSIBLE_ARGS"],
56
55
  "DAPP_CHEF_DEBUG" => ENV["DAPP_CHEF_DEBUG"],
@@ -138,7 +138,9 @@ module Dapp
138
138
 
139
139
  define_method("#{stage}_checksum") do
140
140
  checksum_args = []
141
- checksum_args << JSON.dump(stage_config(stage)['tasks']) unless stage_config(stage)['tasks'].empty?
141
+ (dimg.config._ansible[stage.to_s] || []).each do |task|
142
+ checksum_args << JSON.dump(task["config"])
143
+ end
142
144
  checksum_args << public_send("#{stage}_version_checksum")
143
145
  _checksum checksum_args
144
146
  end
@@ -74,8 +74,8 @@ module Dapp
74
74
  end
75
75
 
76
76
  def _checksum(*args)
77
- return if args.flatten.compact.delete_if { |val| val.respond_to?(:empty?) && val.empty? }.empty?
78
- dimg.hashsum args
77
+ return if (format_args = args.flatten.compact.delete_if { |val| val.respond_to?(:empty?) && val.empty? }).empty?
78
+ dimg.hashsum format_args
79
79
  end
80
80
  end # Builder::Base
81
81
  end # Dimg
@@ -25,7 +25,7 @@ module Dapp
25
25
 
26
26
  define_method "_#{stage}_version" do
27
27
  return [] if (variable = instance_variable_get("@_#{stage}")).nil?
28
- variable._version || _version
28
+ variable._version
29
29
  end
30
30
  end
31
31
  [:before_install, :before_setup, :install, :setup].each(&method(:stage_command_generator))
@@ -3,8 +3,8 @@ module Dapp
3
3
  module Dapp
4
4
  module Command
5
5
  module CleanupRepo
6
- DATE_POLICY = Time.now.to_i - 60 * 60 * 24 * 30
7
6
  GIT_TAGS_LIMIT_POLICY = 10
7
+ EXPIRY_DATE_PERIOD_POLICY = 60 * 60 * 24 * 30
8
8
 
9
9
  def cleanup_repo
10
10
  lock_repo(repo = option_repo) do
@@ -87,36 +87,56 @@ module Dapp
87
87
  %w(git_tag git_commit).each_with_object([]) do |scheme, dimgs_images|
88
88
  dimgs_images.concat begin
89
89
  detailed_dimgs_images_by_scheme[scheme].select do |dimg|
90
- !dry_run? && begin
91
- if scheme == 'git_tag'
92
- consistent_git_tags.include?(dimg[:tag])
93
- elsif scheme == 'git_commit'
94
- git_own_repo.commit_exists?(dimg[:tag])
95
- end
90
+ if scheme == 'git_tag'
91
+ consistent_git_tags.include?(dimg[:tag])
92
+ elsif scheme == 'git_commit'
93
+ git_own_repo.commit_exists?(dimg[:tag])
96
94
  end
97
95
  end
98
96
  end
99
97
  end.tap do |detailed_dimgs_images|
100
98
  sorted_detailed_dimgs_images = detailed_dimgs_images.sort_by { |dimg| dimg[:created_at] }.reverse
101
99
  expired_dimgs_images, not_expired_dimgs_images = sorted_detailed_dimgs_images.partition do |dimg_image|
102
- dimg_image[:created_at] < DATE_POLICY
100
+ dimg_image[:created_at] < expiry_date_policy
103
101
  end
104
102
 
105
- log_step_with_indent(:"date policy (before #{DateTime.strptime(DATE_POLICY.to_s, '%s')})") do
103
+ log_step_with_indent(:"date policy (before #{DateTime.strptime(expiry_date_policy.to_s, '%s')})") do
106
104
  expired_dimgs_images.each { |dimg| delete_repo_image(registry, dimg) }
107
105
  end
108
106
 
109
107
  {}.tap do |images_by_dimg|
110
108
  not_expired_dimgs_images.each { |dimg| (images_by_dimg[dimg[:dimg]] ||= []) << dimg }
111
109
  images_by_dimg.each do |dimg, images|
112
- log_step_with_indent(:"limit policy (> #{GIT_TAGS_LIMIT_POLICY}) (`#{dimg}`)") do
113
- images[GIT_TAGS_LIMIT_POLICY..-1].each { |dimg| delete_repo_image(registry, dimg) }
114
- end unless images[GIT_TAGS_LIMIT_POLICY..-1].nil?
110
+ log_step_with_indent(:"limit policy (> #{git_tag_limit_policy}) (`#{dimg || "nameless"}` dimg)") do
111
+ images[git_tag_limit_policy..-1].each { |dimg| delete_repo_image(registry, dimg) }
112
+ end unless images[git_tag_limit_policy..-1].nil?
115
113
  end
116
114
  end
117
115
  end
118
116
  end
119
117
 
118
+ def expiry_date_policy
119
+ @expiry_date_policy = begin
120
+ expiry_date_period_policy = policy_value('EXPIRY_DATE_PERIOD_POLICY', default: EXPIRY_DATE_PERIOD_POLICY)
121
+ Time.now.to_i - expiry_date_period_policy
122
+ end
123
+ end
124
+
125
+ def git_tag_limit_policy
126
+ @git_tag_limit_policy ||= policy_value('GIT_TAGS_LIMIT_POLICY', default: GIT_TAGS_LIMIT_POLICY)
127
+ end
128
+
129
+ def policy_value(env_key, default:)
130
+ return default if (val = ENV[env_key]).nil?
131
+
132
+ if val.to_i.to_s == val
133
+ val.to_i
134
+ else
135
+ log_warning("WARNING: `#{env_key}` value `#{val}` is ignored (using default value `#{default}`)!")
136
+ default
137
+ end
138
+ end
139
+
120
140
  def git_tag_by_consistent_git_tag(consistent_git_tag)
121
141
  git_tag_by_consistent_tag_name[consistent_git_tag]
122
142
  end
@@ -180,65 +200,59 @@ module Dapp
180
200
  # pod items[] spec containers[] image
181
201
  def pod_images(client)
182
202
  client.pod_list['items'].map do |item|
183
- images_from_pod_spec(item)
203
+ item['spec']['containers'].map{ |cont| cont['image'] }
184
204
  end
185
205
  end
186
206
 
187
207
  # cronjob items[] spec jobTemplate spec template spec containers[] image
188
208
  def cronjob_images(client)
189
209
  client.cronjob_list['items'].map do |item|
190
- images_from_pod_spec(item['spec']['jobTemplate']['spec']['template'])
210
+ item['spec']['jobTemplate']['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
191
211
  end
192
212
  end
193
213
 
194
214
  # daemonsets items[] spec template spec containers[] image
195
215
  def daemonset_images(client)
196
216
  client.daemonset_list['items'].map do |item|
197
- images_from_pod_spec(item['spec']['template'])
217
+ item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
198
218
  end
199
219
  end
200
220
 
201
221
  # deployment items[] spec template spec containers[] image
202
222
  def deployment_images(client)
203
223
  client.deployment_list['items'].map do |item|
204
- images_from_pod_spec(item['spec']['template'])
224
+ item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
205
225
  end
206
226
  end
207
227
 
208
228
  # job items[] spec template spec containers[] image
209
229
  def job_images(client)
210
230
  client.job_list['items'].map do |item|
211
- images_from_pod_spec(item['spec']['template'])
231
+ item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
212
232
  end
213
233
  end
214
234
 
215
235
  # replicasets items[] spec template spec containers[] image
216
236
  def replicaset_images(client)
217
237
  client.replicaset_list['items'].map do |item|
218
- images_from_pod_spec(item['spec']['template'])
238
+ item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
219
239
  end
220
240
  end
221
241
 
222
242
  # replicasets items[] spec template spec containers[] image
223
243
  def statefulset_images(client)
224
244
  client.statefulset_list['items'].map do |item|
225
- images_from_pod_spec(item['spec']['template'])
245
+ item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
226
246
  end
227
247
  end
228
248
 
229
249
  # replicationcontroller items[] spec template spec containers[] image
230
250
  def replicationcontroller_images(client)
231
251
  client.replicationcontroller_list['items'].map do |item|
232
- images_from_pod_spec(item['spec']['template'])
252
+ item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
233
253
  end
234
254
  end
235
255
 
236
- def images_from_pod_spec(pod_spec)
237
- containers = Array(pod_spec['spec']['containers'])
238
- initContainers = Array(pod_spec['spec']['initContainers'])
239
- (containers + initContainers).map { |cont| cont['image'] }
240
- end
241
-
242
256
  def without_kube?
243
257
  !!options[:without_kube]
244
258
  end
@@ -40,4 +40,4 @@ module Dapp
40
40
  end # Dappfile
41
41
  end # Dapp
42
42
  end # Dimg
43
- end # Dapp
43
+ end # Dapp
@@ -145,6 +145,7 @@ module Dapp
145
145
 
146
146
  def build_export_image!(image_name, scheme_name:)
147
147
  Image::Dimg.image_by_name(name: image_name, from: last_stage.image, dapp: dapp).tap do |export_image|
148
+ export_image.untag! if export_image.built?
148
149
  export_image.add_service_change_label(:'dapp-tag-scheme' => scheme_name)
149
150
  export_image.add_service_change_label(:'dapp-dimg' => true)
150
151
  export_image.build!
@@ -29,25 +29,10 @@ module Dapp
29
29
  [:realm, :service, :scope].map do |option|
30
30
  /#{option}="([[^"].]*)/ =~ header
31
31
  next unless Regexp.last_match(1)
32
-
33
- option_value = begin
34
- if option == :scope
35
- handle_scope_option(Regexp.last_match(1))
36
- else
37
- Regexp.last_match(1)
38
- end
39
- end
40
-
41
- [option, option_value]
32
+ [option, Regexp.last_match(1)]
42
33
  end.compact.to_h
43
34
  end
44
35
 
45
- def handle_scope_option(resourcescope)
46
- resource_type, resource_name, actions = resourcescope.split(":")
47
- actions = actions.split(",").map { |action| action == "delete" ? "*" : action }.join(",")
48
- [resource_type, resource_name, actions].join(":")
49
- end
50
-
51
36
  def authorization_auth
52
37
  @authorization_auth ||= begin
53
38
  if ::Dapp::Dapp.options_with_docker_credentials?
@@ -13,7 +13,7 @@ module Dapp
13
13
  end
14
14
 
15
15
  def sha256(arg)
16
- Digest::SHA256.hexdigest Array(arg).compact.map(&:to_s).join(':::')
16
+ Digest::SHA256.hexdigest Array(arg).flatten.compact.map(&:to_s).join(':::')
17
17
  end
18
18
  end
19
19
  end # Helper
@@ -35,12 +35,6 @@ module Dapp
35
35
  '/apis/batch/v1' => [:job, ],
36
36
  '/apis/batch/v1beta1' => [:cronjob, ],
37
37
  },
38
- '1.11' => {
39
- '/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
40
- '/apis/apps/v1' => [:daemonset, :deployment, :replicaset, :statefulset, ],
41
- '/apis/batch/v1' => [:job, ],
42
- '/apis/batch/v1beta1' => [:cronjob, ],
43
- },
44
38
  'stable' => {
45
39
  '/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
46
40
  '/apis/batch/v1' => [:job, ],
@@ -50,11 +50,12 @@ module Dapp
50
50
 
51
51
  dapp.log_step("[#{Time.now}] Poll deployment '#{d.name}' status")
52
52
  dapp.with_log_indent do
53
- dapp.log_info("Replicas: #{_field_value_for_log(d.status['replicas'])}")
54
- dapp.log_info("Updated replicas: #{_field_value_for_log(d.status['updatedReplicas'])}")
55
- dapp.log_info("Available replicas: #{_field_value_for_log(d.status['availableReplicas'])}")
56
- dapp.log_info("Unavailable replicas: #{_field_value_for_log(d.status['unavailableReplicas'])}")
53
+ dapp.log_info("Target replicas: #{_field_value_for_log(d.replicas)}")
54
+ dapp.log_info("Updated replicas: #{_field_value_for_log(d.status['updatedReplicas'])} / #{_field_value_for_log(d.replicas)}")
55
+ dapp.log_info("Available replicas: #{_field_value_for_log(d.status['availableReplicas'])} / #{_field_value_for_log(d.replicas)}")
57
56
  dapp.log_info("Ready replicas: #{_field_value_for_log(d.status['readyReplicas'])} / #{_field_value_for_log(d.replicas)}")
57
+ dapp.log_info("Old deployment.kubernetes.io/revision: #{_field_value_for_log(@revision_before_deploy)}")
58
+ dapp.log_info("Current deployment.kubernetes.io/revision: #{_field_value_for_log(d_revision)}")
58
59
  end
59
60
 
60
61
  rs = nil
@@ -83,16 +84,6 @@ module Dapp
83
84
  end
84
85
 
85
86
  if rs
86
- dapp.with_log_indent do
87
- dapp.log_step("Current ReplicaSet '#{rs.name}' status")
88
- dapp.with_log_indent do
89
- dapp.log_info("Replicas: #{_field_value_for_log(rs.status['replicas'])}")
90
- dapp.log_info("Fully labeled replicas: #{_field_value_for_log(rs.status['fullyLabeledReplicas'])}")
91
- dapp.log_info("Available replicas: #{_field_value_for_log(rs.status['availableReplicas'])}")
92
- dapp.log_info("Ready replicas: #{_field_value_for_log(rs.status['readyReplicas'])} / #{_field_value_for_log(d.replicas)}")
93
- end
94
- end
95
-
96
87
  # Pod'ы связанные с активным ReplicaSet
97
88
  rs_pods = dapp.kubernetes.pod_list['items']
98
89
  .map {|spec| Kubernetes::Client::Resource::Pod.new(spec)}
@@ -177,14 +168,19 @@ module Dapp
177
168
  end # with_log_indent
178
169
  end
179
170
 
180
- # break only when rs is not nil
181
-
182
- if d_revision && d.replicas && d.replicas == 0
183
- break
184
- end
185
-
186
- if d_revision && d.replicas && rs
187
- break if is_deployment_ready(d) && is_replicaset_ready(d, rs)
171
+ if d_revision && d.replicas
172
+ if d.replicas == 0
173
+ break
174
+ else
175
+ break if begin
176
+ d.status['updatedReplicas'] &&
177
+ d.status['availableReplicas'] &&
178
+ d.status['readyReplicas'] &&
179
+ (d.status['updatedReplicas'] >= d.replicas) &&
180
+ (d.status['availableReplicas'] >= d.replicas) &&
181
+ (d.status['readyReplicas'] >= d.replicas)
182
+ end
183
+ end
188
184
  end
189
185
 
190
186
  sleep 5
@@ -193,14 +189,6 @@ module Dapp
193
189
  end
194
190
  end
195
191
 
196
- def is_deployment_ready(d)
197
- d.status.key?("readyReplicas") && d.status["readyReplicas"] >= d.replicas
198
- end
199
-
200
- def is_replicaset_ready(d, rs)
201
- rs.status.key?("readyReplicas") && rs.status["readyReplicas"] >= d.replicas
202
- end
203
-
204
192
  private
205
193
 
206
194
  def _field_value_for_log(value)
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = "0.31.28"
2
+ VERSION = "0.32.0"
3
3
  BUILD_CACHE_VERSION = 31
4
4
  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.31.28
4
+ version: 0.32.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: 2019-08-08 00:00:00.000000000 Z
11
+ date: 2018-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -234,14 +234,14 @@ dependencies:
234
234
  requirements:
235
235
  - - "~>"
236
236
  - !ruby/object:Gem::Version
237
- version: '2.0'
237
+ version: '1.7'
238
238
  type: :development
239
239
  prerelease: false
240
240
  version_requirements: !ruby/object:Gem::Requirement
241
241
  requirements:
242
242
  - - "~>"
243
243
  - !ruby/object:Gem::Version
244
- version: '2.0'
244
+ version: '1.7'
245
245
  - !ruby/object:Gem::Dependency
246
246
  name: rake
247
247
  requirement: !ruby/object:Gem::Requirement
@@ -744,7 +744,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
744
744
  version: 2.5.0
745
745
  requirements: []
746
746
  rubyforge_project:
747
- rubygems_version: 2.7.6
747
+ rubygems_version: 2.7.7
748
748
  signing_key:
749
749
  specification_version: 4
750
750
  summary: Build docker packaged apps using chef or shell