vidar 0.1.6 → 0.2.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: cb4f731d2ecb43dbab6e252579b755bc1098a307abf207016b030250fe7a521c
4
- data.tar.gz: 0f33ac809ea03301a9fba6d6d8aada53e45c06b7c31e8a0d45e50770d39efa80
3
+ metadata.gz: 1cd6a83c0201682b8366247dca55e395e3bdd7012c58c59555258e91a199300b
4
+ data.tar.gz: 52ba79dd94564548fae2690c21672ee6c4d56c7034692af2b247541b9e8e22ba
5
5
  SHA512:
6
- metadata.gz: 62042e2e8463466d35ad3fe7ab0bc983802d0068b3de11f9defa8c2c9d3014d063ea62e8699f6915a7d97a0eeac7f8280d5f7c5d75d404e0b605686fcbe3a809
7
- data.tar.gz: a4584dd019975cd299a2addbc0e01e417fa623ce1cfd7b5693cdbcb119f7883715edca4523cb774721b7c4acd7a0b8ecc735d38f185b04c394fc75cb8c403f9e
6
+ metadata.gz: 86c304b21aaa052552ea618cf01aa5d8bf9790342912b6354f79e40053ca572520fca3104986919763e3c230874d318691b1d6e28d6e455eea690a99e49e6bf5
7
+ data.tar.gz: 7333853d537aacf960accd63f7c6e8b97f53a40dbca2a9ff0041677be743860a14eee1549bada27ddfe22c78787beeb4bdc442cb27573399e0e4b345e3c60297
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.6.4
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vidar (0.1.6)
4
+ vidar (0.2.0)
5
5
  colorize
6
+ faraday
6
7
  thor (~> 0.20)
7
8
 
8
9
  GEM
@@ -12,8 +13,11 @@ GEM
12
13
  coderay (1.1.2)
13
14
  colorize (0.8.1)
14
15
  diff-lcs (1.3)
16
+ faraday (0.15.4)
17
+ multipart-post (>= 1.2, < 3)
15
18
  jaro_winkler (1.5.3)
16
19
  method_source (0.9.2)
20
+ multipart-post (2.1.1)
17
21
  parallel (1.17.0)
18
22
  parser (2.6.4.0)
19
23
  ast (~> 2.4.0)
@@ -61,4 +65,4 @@ DEPENDENCIES
61
65
  vidar!
62
66
 
63
67
  BUNDLED WITH
64
- 2.0.1
68
+ 2.0.2
data/lib/vidar.rb CHANGED
@@ -1,11 +1,11 @@
1
- require 'yaml'
2
1
  require 'json'
3
2
  require 'open3'
4
3
  require 'ostruct'
5
4
  require 'yaml'
6
5
 
7
- require 'thor'
8
6
  require 'colorized_string'
7
+ require 'faraday'
8
+ require 'thor'
9
9
 
10
10
  require 'vidar/version'
11
11
  require 'vidar/config'
data/lib/vidar/cli.rb CHANGED
@@ -19,7 +19,7 @@ module Vidar
19
19
  Run.docker "pull #{Config.get!(:image)}:builder 2> /dev/null || true"
20
20
  Run.docker "pull #{Config.get!(:image)}:release 2> /dev/null || true"
21
21
  Log.info "Docker images:"
22
- puts Run.docker "images"
22
+ Log.info Run.docker("images")
23
23
  end
24
24
 
25
25
  desc "build", "Builds docker stages"
@@ -62,7 +62,7 @@ module Vidar
62
62
  method_option :revision, default: nil
63
63
  def deploy
64
64
  revision = options[:revision] || Config.get!(:revision)
65
- Log.info "Current cluster: #{Config.get!(:cluster)} ###"
65
+ Log.info "Current cluster_name: #{Config.get!(:cluster_name)} ###"
66
66
 
67
67
  Log.info "Set kubectl image..."
68
68
  Run.kubectl "set image deployments,cronjobs *=#{Config.get!(:image)}:#{revision} --all"
@@ -95,8 +95,8 @@ module Vidar
95
95
 
96
96
  desc "monitor_deploy_status", "Checks is deployment has finished and sends post-deploy notification"
97
97
  def monitor_deploy_status
98
- Log.info "Current cluster: #{Config.get!(:cluster)} ###"
99
- Log.info "Checking is all containers on #{Config.get!(:cluster)} in #{Config.get!(:namespace)} are ready..."
98
+ Log.info "Current cluster_name: #{Config.get!(:cluster_name)} ###"
99
+ Log.info "Checking is all containers on #{Config.get!(:cluster_name)} in #{Config.get!(:namespace)} are ready..."
100
100
 
101
101
  sleep(2)
102
102
  error = false
@@ -111,24 +111,22 @@ module Vidar
111
111
  end
112
112
  end
113
113
 
114
- return unless Config.get(:slack_webhook_url)
115
-
116
114
  slack_notification = SlackNotification.new(
117
115
  webhook_url: Config.get!(:slack_webhook_url),
118
116
  github: Config.get!(:github),
119
117
  revision: Config.get!(:revision),
120
118
  revision_name: Config.get!(:revision_name),
121
- cluster: Config.get!(:cluster),
119
+ cluster_name: Config.get!(:cluster_name),
122
120
  cluster_url: Config.get!(:cluster_url)
123
121
  )
124
122
 
125
123
  if error
126
124
  Log.error "ERROR: Some of containers are not ready."
127
- slack_notification.error
125
+ slack_notification.error if slack_notification.configured?
128
126
  exit(1)
129
127
  else
130
128
  Log.info "OK: All containers are ready."
131
- slack_notification.success
129
+ slack_notification.success if slack_notification.configured?
132
130
  end
133
131
  end
134
132
  end
data/lib/vidar/config.rb CHANGED
@@ -8,7 +8,17 @@ module Vidar
8
8
  current_branch: -> { `git rev-parse --abbrev-ref HEAD`.strip.tr("/", "-") },
9
9
  revision: -> { `git rev-parse HEAD`.strip },
10
10
  revision_name: -> { `git show --pretty=format:"%s (%h)" -s HEAD`.strip },
11
- cluster: -> { `kubectl config current-context`.strip.split("_", 4)[-1] } # TODO: improve context cleanup
11
+ cluster_name: -> {
12
+ cluster_names = get(:cluster_names).to_s
13
+ current_context = `kubectl config current-context`.strip
14
+
15
+ if cluster_names.empty?
16
+ current_context
17
+ else
18
+ names_in_context = current_context.scan(Regexp.new(cluster_names))
19
+ names_in_context.flatten.first || current_context
20
+ end
21
+ }
12
22
  }.freeze
13
23
 
14
24
  class << self
@@ -28,6 +38,16 @@ module Vidar
28
38
  @loaded
29
39
  end
30
40
 
41
+ def cluster_name
42
+ cluster_names = get(:cluster_names).to_s
43
+ current_context = `kubectl config current-context`.strip
44
+
45
+ return current_context if cluster_names.empty?
46
+
47
+ names_in_context = current_context.scan(Regexp.new(cluster_names))
48
+ names_in_context.flatten.first || current_context
49
+ end
50
+
31
51
  def get(key)
32
52
  load unless loaded?
33
53
  value = @data[key.to_s] || DEFAULT_OPTIONS[key.to_sym]&.call
@@ -8,7 +8,7 @@ module Vidar
8
8
  fail ArgumentError, "getter must respond_to get." unless getter.respond_to?(:get)
9
9
 
10
10
  string.gsub(INTERPOLATION_PATTERN) do |match|
11
- getter.get($1) || match
11
+ getter.get($1) || match # rubocop:disable Style/PerlBackrefs
12
12
  end
13
13
  end
14
14
  end
@@ -3,32 +3,42 @@ module Vidar
3
3
  SUCCESS_COLOR = "good".freeze
4
4
  ERROR_COLOR = "danger".freeze
5
5
 
6
- def initialize(webhook_url:, github:, revision:, revision_name:, cluster:, cluster_url:)
7
- @webhook_url = webhook_url
8
- @github = github
9
- @revision = revision
6
+ def initialize(webhook_url:, github:, revision:, revision_name:, cluster_name:, cluster_url:)
7
+ @webhook_url = webhook_url
8
+ @github = github
9
+ @revision = revision
10
10
  @revision_name = revision_name
11
- @cluster = cluster
12
- @cluster_url = cluster_url
11
+ @cluster_name = cluster_name
12
+ @cluster_url = cluster_url
13
+ @connection = Faraday.new
14
+ end
15
+
16
+ def configured?
17
+ !webhook_url.to_s.empty?
13
18
  end
14
19
 
15
20
  def error
16
21
  message = "Failed deploy of #{github_link} to #{cluster_link} :fire: <!channel>"
17
- perform data(message: message, color: ERROR_COLOR)
22
+ perform_with data(message: message, color: ERROR_COLOR)
18
23
  end
19
24
 
20
25
  def success
21
26
  message = "Successful deploy of #{github_link} to #{cluster_link}"
22
- perform data(message: message, color: SUCCESS_COLOR)
27
+ perform_with data(message: message, color: SUCCESS_COLOR)
23
28
  end
24
29
 
25
- def perform(data)
26
- `curl -X POST -H "Content-type: application/json" --data '#{data}' '#{webhook_url}' 2>&1 /dev/null`
30
+ def perform_with(data)
31
+ p data
32
+ connection.post do |req|
33
+ req.url webhook_url
34
+ req.headers['Content-Type'] = 'application/json'
35
+ req.body = data.to_json
36
+ end
27
37
  end
28
38
 
29
39
  private
30
40
 
31
- attr_reader :webhook_url, :github, :revision, :revision_name, :cluster, :cluster_url
41
+ attr_reader :webhook_url, :github, :revision, :revision_name, :cluster_name, :cluster_url, :connection
32
42
 
33
43
  def data(message:, color:)
34
44
  {
@@ -41,7 +51,7 @@ module Vidar
41
51
  "fallback": message
42
52
  }
43
53
  ]
44
- }.to_json
54
+ }
45
55
  end
46
56
 
47
57
  def github_url
@@ -53,7 +63,7 @@ module Vidar
53
63
  end
54
64
 
55
65
  def cluster_link
56
- "<#{cluster_url}|#{cluster}>"
66
+ "<#{cluster_url}|#{cluster_name}>"
57
67
  end
58
68
  end
59
69
  end
data/lib/vidar/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vidar
2
- VERSION = '0.1.6'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
data/vidar.gemspec CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.required_ruby_version = '>= 2.6'
26
26
 
27
27
  spec.add_dependency 'colorize'
28
+ spec.add_dependency 'faraday'
28
29
  spec.add_dependency 'thor', '~> 0.20'
29
30
 
30
31
  spec.add_development_dependency 'bundler'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vidar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Knapik
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-09-05 00:00:00.000000000 Z
12
+ date: 2019-09-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: faraday
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: thor
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -135,6 +149,7 @@ files:
135
149
  - ".gitignore"
136
150
  - ".rspec"
137
151
  - ".rubocop.yml"
152
+ - ".ruby-version"
138
153
  - ".travis.yml"
139
154
  - Gemfile
140
155
  - Gemfile.lock
@@ -177,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
192
  - !ruby/object:Gem::Version
178
193
  version: '0'
179
194
  requirements: []
180
- rubygems_version: 3.0.3
195
+ rubygems_version: 3.0.6
181
196
  signing_key:
182
197
  specification_version: 4
183
198
  summary: K8s deployment tools based on thor