dctl_rb 0.10.5 → 0.11.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: 774da376ca2b6a39d5686228cb92b41cfa2036f3a19263ba6938da34909711a9
4
- data.tar.gz: 3435a89fdcdeccb0119cd526ee281966bc2e96141342ffb962491188b74ec5bf
3
+ metadata.gz: cb2a3ff3297ec27acacc32e5bfc12698e8d9c8d55f76c394ae4640e36d63aa2a
4
+ data.tar.gz: df5ef66c7a27870689c7e98337d7d983252beab2d4bad49ddc1fbb69cb036766
5
5
  SHA512:
6
- metadata.gz: c42df993cc8c00fdbf34d91bc75a243eb5a41cc11707c56dfe3ca06f6f57d0a85094728b2b56de2e51151dc6c712af6c2a6c6a9fe7ee16e40065d3c9777e58d1
7
- data.tar.gz: 86cf724b7ad1b438660142fa6774acbf4689f505cac4f04e48e1c03739f2fd062c24b077bd31683e273b4cf3fdbe32b20ac4a02284d195e3ab2b11755ebed207
6
+ metadata.gz: 441b6e8f2d1e8507f2bd15a47de9780c5d97e1ed939832609da888b7cb8eb4da1f4d4f665ce000f3f2c615a44a3ca327c7cd9dcca98f33890f016123b9af893c
7
+ data.tar.gz: 494d65de08a6b505c3fab9f1665e5e01a2ffdf8bcef8c52602fbe596d3a5b892059d7ce6fc351273902ab3c9fe508a9ea1058a136849c83228857738140bb579
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dctl_rb (0.10.5)
4
+ dctl_rb (0.11.0)
5
5
  config (>= 1, < 2)
6
6
  rainbow (>= 2.2, < 3)
7
7
  rake (~> 12)
data/exe/dctl CHANGED
@@ -6,6 +6,7 @@ require "pty"
6
6
  require "rainbow"
7
7
  require "config"
8
8
  require "open3"
9
+ require "dctl/cli/kubernetes"
9
10
 
10
11
  module Dctl
11
12
  class Cli < Thor
@@ -13,6 +14,9 @@ module Dctl
13
14
  SUCCESS_COLOR = :green
14
15
  CMD_COLOR = :dimgray
15
16
 
17
+ desc "k8s", "Manage a kubernetes cluster"
18
+ subcommand "k8s", Dctl::Kubernetes::Cli
19
+
16
20
  class_option :env, type: :string
17
21
  class_option :host, type: :string
18
22
 
@@ -0,0 +1,60 @@
1
+ require "thor"
2
+ require "dctl/kubernetes"
3
+
4
+ module Dctl::Kubernetes
5
+ class Cli < Thor
6
+
7
+ class_option :namespace, type: :string, aliases: :n
8
+ class_option :env, type: :string
9
+
10
+ desc "live-image", "Returns the active image for the given deployment"
11
+ def live_image(service)
12
+ puts Dctl::Kubernetes.live_image(service, k8s_opts)
13
+ end
14
+
15
+ desc "is-outdated", "Exit 1 if deployed image would be updated by a deploy, or 0 otherwise."
16
+ long_desc <<~LONGDESC
17
+ Check whether the currently deployed image is outdated and would be
18
+ updated by a new deployment.
19
+
20
+ This is determined by checking the tag specified in the compose file for
21
+ this environment against a random pod in the corresponding k8s deployment.
22
+
23
+ For example, if the tag in the compose file is `jutonz/app:4` and the live
24
+ image is `jutonz/app:3`, this would exit with 0. If the tags matched this
25
+ would exit with 1.
26
+
27
+ This is useful for determining when it is possible to skip building new
28
+ images, e.g with a CI/CD setup.
29
+
30
+ Example:\x5
31
+ export DCTL_ENV=prod\x5
32
+ if dctl is-outdated app; then\x5
33
+ \tdctl build app\x5
34
+ \tdctl push app\x5
35
+ else\x5
36
+ \techo "app is up to date"\x5
37
+ fi\x5
38
+ LONGDESC
39
+ def is_outdated(service)
40
+ dctl = Dctl::Main.new dctl_opts
41
+ compose_tag = dctl.image_tag service
42
+ live_tag = Dctl::Kubernetes.live_image(service, k8s_opts)
43
+ exit compose_tag == live_tag ? 1 : 0
44
+ end
45
+
46
+ no_commands do
47
+ # Transform Thor's HashWithIndifferentAccess to a regular hash so it can
48
+ # be passed to methods and treated as named arguments.
49
+ def k8s_opts
50
+ { namespace: options["namespace"] }
51
+ end
52
+
53
+ # Transform Thor's HashWithIndifferentAccess to a regular hash so it can
54
+ # be passed to methods and treated as named arguments.
55
+ def dctl_opts
56
+ { env: options.fetch("env", "dev") }
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,27 @@
1
+ module Dctl::Kubernetes
2
+ def self.live_image(service, namespace: nil)
3
+ # Check if namespace exists
4
+ if namespace && `kubectl get ns #{namespace}`.empty?
5
+ error = "Could not find namespace #{namespace}"
6
+ puts Rainbow(error).fg ERROR_COLOR
7
+ exit 1
8
+ end
9
+
10
+ # Check if deployment exists
11
+ deploy_check_command = "kubectl get deploy #{service}"
12
+ deploy_check_command += " -n #{namespace}" if namespace
13
+ if `#{deploy_check_command}`.empty?
14
+ error = "Could not find deployment for #{service}"
15
+ error += " in namespace #{namespace}" if namespace
16
+ puts Rainbow(error).fg ERROR_COLOR
17
+ exit 1
18
+ end
19
+
20
+ jsonpath = "{$.spec.template.spec.containers[:1].image}"
21
+ live_image_command = "kubectl get deploy #{service}"
22
+ live_image_command += " -ojsonpath='#{jsonpath}'"
23
+ live_image_command += " -n #{namespace}" if namespace
24
+
25
+ `#{live_image_command}`
26
+ end
27
+ end
data/lib/dctl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dctl
2
- VERSION = "0.10.5"
2
+ VERSION = "0.11.0"
3
3
  end
data/lib/dctl.rb CHANGED
@@ -5,4 +5,7 @@ require "dctl/version"
5
5
  require "dctl/main"
6
6
 
7
7
  module Dctl
8
+ ERROR_COLOR = :red
9
+ SUCCESS_COLOR = :green
10
+ CMD_COLOR = :dimgray
8
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dctl_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.5
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Toniazzo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-03 00:00:00.000000000 Z
11
+ date: 2018-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -151,6 +151,8 @@ files:
151
151
  - hi.txt
152
152
  - lib/dctl.rb
153
153
  - lib/dctl/.version.rb.swp
154
+ - lib/dctl/cli/kubernetes.rb
155
+ - lib/dctl/kubernetes.rb
154
156
  - lib/dctl/main.rb
155
157
  - lib/dctl/version.rb
156
158
  homepage: https://github.com/jutonz/dctl_rb