vidar 0.2.1 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3463555edd14e0fe6868ff76ad6e1677c02c365d73edf4f9ec6a4ab5efe3d2d
4
- data.tar.gz: 259b0dcb355b43b795a2c6c8fa3c6efae06683e1bcd3f9f2ae38d087ea9f4af0
3
+ metadata.gz: cd260ce9a8c7fb23a3e42a72af992f07c21d0ef5ffe30a3b96af32ffc8569d1b
4
+ data.tar.gz: 8cc9bf1d9068b7ac59e0b001a5f5f4fc45bc25f13baae05602e91697dcd9364c
5
5
  SHA512:
6
- metadata.gz: 1318973f5fc8354308a228ed320a41eca9050cfba4021b096993545bfb64ee6eac99268cc4074e3cfce6e77306511ce9125266938818f63d19efb6a148bd8301
7
- data.tar.gz: 4e58538677b8808cea0848077eb4c7c447f03e25d36378fd2f0dfd405245405cd74c3153d945a67034f641693fd5c56eda7fa0d9a2c63ea3b2c3c9e686ad5df0
6
+ metadata.gz: dec4d553518f687ea22405189939222ebc442b5ffac32c800aa7610c8ad81a3352f621a8da065b3fef14529b45463266016f2a14403fa84cf02098431e401361
7
+ data.tar.gz: ab7f8daf3a3ad6754280b23a004599e91ce4a6d52381b13ca7feee7d3fb68f17296a7243a5329c69326d658a967177446773863d9fba24070303dc0e2a8091bd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vidar (0.2.1)
4
+ vidar (0.3.0)
5
5
  colorize
6
6
  faraday
7
7
  thor (~> 0.20)
@@ -19,13 +19,13 @@ GEM
19
19
  method_source (0.9.2)
20
20
  multipart-post (2.1.1)
21
21
  parallel (1.17.0)
22
- parser (2.6.4.0)
22
+ parser (2.6.4.1)
23
23
  ast (~> 2.4.0)
24
24
  pry (0.12.2)
25
25
  coderay (~> 1.1.0)
26
26
  method_source (~> 0.9.0)
27
27
  rainbow (3.0.0)
28
- rake (12.3.3)
28
+ rake (13.0.0)
29
29
  rspec (3.8.0)
30
30
  rspec-core (~> 3.8.0)
31
31
  rspec-expectations (~> 3.8.0)
data/README.md CHANGED
@@ -3,9 +3,7 @@
3
3
 
4
4
  # Vidar
5
5
 
6
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/vidar`. To experiment with that code, run `bin/console` for an interactive prompt.
7
-
8
- TODO: Delete this and the text above, and describe your gem
6
+ Vidar is a set of docker & k8s deployment tools based on thor gem
9
7
 
10
8
  ## Installation
11
9
 
@@ -23,24 +21,60 @@ Or install it yourself as:
23
21
 
24
22
  $ gem install vidar
25
23
 
24
+
25
+ #### Requirements :
26
+
27
+ * multistage `Dockerfile`, with 3 stages defined: `builder`, `runner`, `release`.
28
+ * `docker-compose.ci.yml` file with defined services for all 3 stages
29
+ * `vidar.yml` file to the project root directory, which following content:
30
+
31
+ ```yml
32
+ # docker image name, required
33
+ image: gcr.io/renofiinfrastructure/vidar
34
+ # k8s namespace, required
35
+ namespace: borrower
36
+ # slack webhook url use to send deploy notifications, optional
37
+ slack_webhook_url: https://hooks.slack.com/services/....../....../....../
38
+ # github name used to conctruct slack notification content, required when slack_webhook_url is set
39
+ github: RenoFi/vidar
40
+ # Cluster url, used to conctruct slack notification content.
41
+ # Usually it displays k8 workloads filtered to current cluster and namespace.
42
+ # Similar to all other values it may contain references to others using mustache-like interpolation.
43
+ # Required when slack_webhook_url is set
44
+ cluster_url: "https://console.cloud.google.com/kubernetes/workload?cluster={{cluster_name}}&namespace={{namespace}}"
45
+ # known k8s cluster_names, used to construct regexp to fetch current cluster from kubectl context
46
+ # Required when slack_webhook_url is set
47
+ cluster_names: "cluster-A|cluster-B" cluster name from kubectl context
48
+ # docker-compose file, optional, default value: docker-compose.ci.yml
49
+ compose_file: docker-compose.ci.yml
50
+ # default_branch, optional, default value: master
51
+ default_branch: dev
52
+ ```
53
+
26
54
  ## Usage
27
55
 
28
- TODO: Write usage instructions here
56
+ Available commands are:
57
+
58
+ `vidar pull` - pulls existing docker images from repository to levarage docker caching and make build faster
29
59
 
30
- ## Development
60
+ `vidar build` - builds docker images
31
61
 
32
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
62
+ `vidar cache` - caches intermediate stages
63
+
64
+ `vidar publish` - publishes docker images
65
+
66
+ `vidar release` - a set of `pull`, `build`, `cache` and `publish`
67
+
68
+ `vidar deploy` - deploys/applies release image with `REVISION` tag in given k8s namespace and cluster (unser the hood it's `kubectl set image` command). Before calling the command you must have `kubectl` context set. If you use GCP/GKE simply call `gcloud container clusters get-credentials you-cluser-name --zone=us-east4`. If you have `deploy-hook-template` job defined, it creates `deploy-hook` job with given `REVISION`.
69
+
70
+ `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).
33
71
 
34
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
35
72
 
36
73
  ## Contributing
37
74
 
38
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/vidar. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
75
+ Bug reports and pull requests are welcome on GitHub at https://github.com/RenoFi/vidar. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
39
76
 
40
77
  ## License
41
78
 
42
79
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
43
80
 
44
- ## Code of Conduct
45
-
46
- Everyone interacting in the Vidar project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/vidar/blob/master/CODE_OF_CONDUCT.md).
@@ -1,11 +1,12 @@
1
1
  module Vidar
2
2
  module K8s
3
3
  class ContainerStatus
4
- attr_reader :data, :state
4
+ attr_reader :data, :state, :namespace
5
5
 
6
6
  def initialize(data)
7
7
  @data = data
8
8
  @state = data["state"]
9
+ @namespace = data["namespace"]
9
10
  end
10
11
 
11
12
  def name
@@ -21,23 +22,26 @@ module Vidar
21
22
  end
22
23
 
23
24
  def to_text
24
- parts = ["Name: #{name}"] + text_statuses
25
- parts.map { |s| s.ljust(50, " ") }.join(" | ")
25
+ parts = []
26
+ parts << namespace.to_s.ljust(20, " ")
27
+ parts << name.to_s.ljust(25, " ")
28
+ parts += text_statuses.map { |s| s.ljust(40, " ") }
29
+ "| #{parts.join(' | ')} |"
26
30
  end
27
31
 
28
32
  def text_statuses
29
33
  if running?
30
34
  if ready?
31
- [ColorizedString["Status: Ready & Running"].light_green, "Started at: #{running_started_at}"]
35
+ [ColorizedString["Ready & Running"].light_green, "Started at: #{running_started_at}"]
32
36
  else
33
- [ColorizedString["Status: Not ready"].light_red, "Started at: #{running_started_at}"]
37
+ [ColorizedString["Not ready"].light_red, "Started at: #{running_started_at}"]
34
38
  end
35
39
  elsif terminated_completed?
36
- [ColorizedString["Status: Terminated/Completed"].light_green, "Finished at: #{terminated_finished_at}"]
40
+ [ColorizedString["Terminated/Completed"].light_green, "Finished at: #{terminated_finished_at}"]
37
41
  elsif terminated_error?
38
- [ColorizedString["Status: Terminated/Error"].light_red]
42
+ [ColorizedString["Terminated/Error"].light_red]
39
43
  elsif waiting?
40
- [ColorizedString["Status: Waiting"].light_green]
44
+ [ColorizedString["Waiting"].light_green]
41
45
  else
42
46
  [ColorizedString[state.inspect].light_red]
43
47
  end
@@ -11,29 +11,47 @@ module Vidar
11
11
  return false
12
12
  end
13
13
 
14
+ Log.line
15
+
14
16
  container_statuses.each do |container_status|
15
17
  container_status.print
16
18
  end
17
19
 
18
- Log.info "-", "-"
20
+ Log.line
19
21
 
20
22
  container_statuses.all?(&:ok?)
21
23
  end
22
24
 
23
25
  private
24
26
 
25
- attr_reader :pods, :namespace
27
+ attr_reader :namespace
26
28
 
27
29
  def items
28
30
  @items ||= begin
29
- output = `kubectl get pods -n #{Config.get!(:namespace)} -o json`
30
- json = JSON.parse(output.strip)
31
+ json = JSON.parse(kubectl_get.strip)
31
32
  json["items"] || []
32
33
  end
33
34
  end
34
35
 
36
+ def kubectl_get
37
+ if namespace == 'all'
38
+ `kubectl get pods --all-namespaces -o json`
39
+ else
40
+ `kubectl get pods -n #{namespace} -o json`
41
+ end
42
+ end
43
+
35
44
  def container_statuses
36
- @container_statuses ||= items.map { |i| i.dig("status", "containerStatuses") }.flatten.compact.map { |status| ContainerStatus.new(status) }
45
+ @container_statuses ||= container_statuses_data.map { |status| ContainerStatus.new(status) }
46
+ end
47
+
48
+ def container_statuses_data
49
+ items.map do |i|
50
+ namespace = i.dig("metadata", "namespace")
51
+ statuses = i.dig("status", "containerStatuses") || []
52
+ statuses.each { |s| s["namespace"] = namespace }
53
+ statuses
54
+ end.flatten
37
55
  end
38
56
  end
39
57
  end
data/lib/vidar/log.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  module Vidar
2
2
  class Log
3
3
  class << self
4
+ def line
5
+ puts "|" + "-" * 122 + "|"
6
+ end
7
+
4
8
  def info(text, fill_with = "#")
5
9
  puts ColorizedString["#{fill_with} #{text} ".ljust(100, fill_with)].colorize(:light_green)
6
10
  end
data/lib/vidar/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vidar
2
- VERSION = '0.2.1'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
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.2.1
4
+ version: 0.3.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-06 00:00:00.000000000 Z
12
+ date: 2019-09-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize