vidar 0.7.2 → 0.8.2

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: ebd82c4b62870f80cc30b90d23df769303bb8e2828ef1c2eecebf44b279d9a1f
4
- data.tar.gz: 1bd41cb5ca90c01e7c423539abf37206af1bfc03f8f3d448079a33db7017dac3
3
+ metadata.gz: 33c6520a9ed73273478c25d35cad43d5efd3ab267792cfe060ecc1a11bcf6b35
4
+ data.tar.gz: 1a964a1b01c7b2995e565c52742384b5dadce9f1b0b3721cd38fbaac5871254a
5
5
  SHA512:
6
- metadata.gz: 34508053385768651d0ad4d96d9d1013e6d5840343593be2213bed68f7ad27f0b2db3a5d5cdf9be9927435dc9ba749af7941e4358fe8ad645c328b3de35fd38b
7
- data.tar.gz: 26092db7d9026b7ca3516329601a68c863472ce0fae537ba5657a5015792a2938355ad931973d0bd7b0ec072f0c6ac65cb0710a88e3b2b65502cd310dbdc4a2b
6
+ metadata.gz: 5355d26007de445626c0ff60e92ee09941138e0b7a3ea69e3c1c635c24e66ab49639773a8d78bc550ed4d2f14c52f37a3dfd8241649d7906f59d640206c4b6d5
7
+ data.tar.gz: 17cd01e50418e19badccf8587d1d35a6b221052368169c8bbc0cd2411d8389da42849b6965965aa6f8bec622ac103deb5ec6aa2702c481c9e036f545fafe70be
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vidar (0.7.2)
4
+ vidar (0.8.2)
5
5
  colorize
6
6
  faraday
7
7
  thor (~> 0.20)
data/README.md CHANGED
@@ -76,6 +76,7 @@ Available commands are:
76
76
 
77
77
  `vidar monitor_deploy_status` - monitors if all containers are up and running, if slack_webhook_url if defined, sends a noficiation (on both failure and success).
78
78
 
79
+ `vidar kube_exec --name=web --command='bin/console'` - execute given command (`/bin/ssh` by default) inside the first pod with given name (all pods by default).
79
80
 
80
81
  ## Contributing
81
82
 
data/lib/vidar/cli.rb CHANGED
@@ -137,5 +137,32 @@ module Vidar
137
137
  exit(1)
138
138
  end
139
139
  end
140
+
141
+ desc "kube_exec", "Execute given command in running pod"
142
+ method_option :command, default: "/bin/sh"
143
+ method_option :name, required: false
144
+ def kube_exec
145
+ Log.info "Current kubectl context: #{Config.get!(:kubectl_context)}"
146
+
147
+ deploy_config = Config.deploy_config
148
+
149
+ Log.error "ERROR: could not find deployment config for #{Config.get!(:kubectl_context)} context" unless deploy_config
150
+
151
+ pod_set = K8s::PodSet.new(namespace: Config.get!(:namespace), filter: options[:name])
152
+ containers = pod_set.containers.select(&:ready_and_running?).reject(&:istio?)
153
+
154
+ if containers.empty?
155
+ name = options[:name] || 'any'
156
+ Log.error "No running containers found with *#{name}* name"
157
+ exit(1)
158
+ else
159
+ Log.info "Available containers:"
160
+ containers.each(&:print)
161
+ container = containers.first
162
+
163
+ Log.info "Running #{options[:command]} in #{container.pod_name}"
164
+ Run.kubectl("exec -it #{container.pod_name} -- #{options[:command]}")
165
+ end
166
+ end
140
167
  end
141
168
  end
@@ -1,15 +1,16 @@
1
1
  module Vidar
2
2
  module K8s
3
- class ContainerStatus
3
+ class Container
4
4
  JOB_KIND = "Job".freeze
5
5
 
6
- attr_reader :data, :state, :namespace, :kind
6
+ attr_reader :data, :state, :namespace, :kind, :pod_name
7
7
 
8
8
  def initialize(data)
9
9
  @data = data
10
10
  @state = data["state"]
11
11
  @namespace = data["namespace"]
12
12
  @kind = data["kind"]
13
+ @pod_name = data["pod_name"]
13
14
  end
14
15
 
15
16
  def name
@@ -25,6 +26,10 @@ module Vidar
25
26
  def success?
26
27
  return terminated_completed? if job?
27
28
 
29
+ ready_and_running?
30
+ end
31
+
32
+ def ready_and_running?
28
33
  ready? && running?
29
34
  end
30
35
 
@@ -95,6 +100,10 @@ module Vidar
95
100
  def job?
96
101
  kind == JOB_KIND
97
102
  end
103
+
104
+ def istio?
105
+ name == "istio-proxy"
106
+ end
98
107
  end
99
108
  end
100
109
  end
@@ -14,17 +14,23 @@ module Vidar
14
14
 
15
15
  Log.line
16
16
 
17
- container_statuses.each(&:print)
17
+ containers.each(&:print)
18
18
 
19
19
  Log.line
20
20
 
21
- container_statuses.all?(&:deployed?)
21
+ containers.all?(&:deployed?)
22
22
  end
23
23
 
24
24
  def success?
25
- return false if container_statuses.empty?
25
+ return false if containers.empty?
26
26
 
27
- container_statuses.all?(&:success?)
27
+ containers.all?(&:success?)
28
+ end
29
+
30
+ def containers
31
+ return all_containers unless filter
32
+
33
+ all_containers.select { |cs| cs.name.to_s.include?(filter) }
28
34
  end
29
35
 
30
36
  private
@@ -46,17 +52,15 @@ module Vidar
46
52
  end
47
53
  end
48
54
 
49
- def container_statuses
50
- return all_container_statuses unless filter
51
-
52
- all_container_statuses.select { |cs| cs.name.to_s.include?(filter) }
55
+ def ready_and_running_containers
56
+ containers.select(&:ready_and_running?)
53
57
  end
54
58
 
55
- def all_container_statuses
56
- @all_container_statuses ||= container_statuses_data.map { |status| ContainerStatus.new(status) }
59
+ def all_containers
60
+ @all_containers ||= containers_data.map { |status| Container.new(status) }
57
61
  end
58
62
 
59
- def container_statuses_data
63
+ def containers_data
60
64
  items.map do |i|
61
65
  owner_references = i.dig("metadata", "ownerReferences") || []
62
66
  kind = (owner_references[0] || {})["kind"]
@@ -64,7 +68,8 @@ module Vidar
64
68
  statuses = i.dig("status", "containerStatuses") || []
65
69
  statuses.each do |s|
66
70
  s["namespace"] = namespace
67
- s["kind"] = kind
71
+ s["kind"] = kind
72
+ s["pod_name"] = i.dig("metadata", "name")
68
73
  end
69
74
  statuses
70
75
  end.flatten
data/lib/vidar/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vidar
2
- VERSION = '0.7.2'.freeze
2
+ VERSION = '0.8.2'.freeze
3
3
  end
data/lib/vidar.rb CHANGED
@@ -14,7 +14,7 @@ require 'vidar/log'
14
14
  require 'vidar/run'
15
15
  require 'vidar/sentry_notification'
16
16
  require 'vidar/slack_notification'
17
- require 'vidar/k8s/container_status'
17
+ require 'vidar/k8s/container'
18
18
  require 'vidar/k8s/pod_set'
19
19
  require 'vidar/deploy_config'
20
20
  require 'vidar/deploy_status'
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.7.2
4
+ version: 0.8.2
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-10-30 00:00:00.000000000 Z
12
+ date: 2019-11-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
@@ -181,7 +181,7 @@ files:
181
181
  - lib/vidar/deploy_config.rb
182
182
  - lib/vidar/deploy_status.rb
183
183
  - lib/vidar/interpolation.rb
184
- - lib/vidar/k8s/container_status.rb
184
+ - lib/vidar/k8s/container.rb
185
185
  - lib/vidar/k8s/pod_set.rb
186
186
  - lib/vidar/log.rb
187
187
  - lib/vidar/run.rb