kubec 0.4.1 → 0.5.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
  SHA1:
3
- metadata.gz: 1aa43465030becf10bd430857cc4e858c79e81be
4
- data.tar.gz: 03e4397f3c0cbd1d3dcd6b20b7bca11764f21bd0
3
+ metadata.gz: c6046577f11a9c5ad6a0bc8181f8b79533c0bd40
4
+ data.tar.gz: 95b6a88c4db58fc52aa9a3a46296f0a802ee2365
5
5
  SHA512:
6
- metadata.gz: ab97cca25d3aa955edba22503f38dea2d990097808f4da099d24cf0269294a8b0af18a9bb7ce9491bce82d75528d2f3505c66d9da37518f883f650a837c8e189
7
- data.tar.gz: 57d0b884085753eb6e7645e338ae6adf8cd2c70d2c71250b401ef2a455c09affcce6596a706bb686c109c06792afad09235cf6ed726323422100f23ab1e7c898
6
+ metadata.gz: 16cceaff76119c566ce24f701ff8ceb4aaeeafd8c47e30aa974f2f5430aabb9f0c54a4201d32c1c6a2a3cd702368c710e6b6aafb0b38568cc60e0dab2a9a9465
7
+ data.tar.gz: 95e3e68f5efdad66f46e223de0e8ed48098173c72208a51aff28e1afc0ed55796850126ba9a090217472a29b31b71a829c86bab654c114e3d9b4d0c0486208e9
@@ -7,6 +7,7 @@ require 'pathname'
7
7
  require 'singleton'
8
8
  require 'hirb'
9
9
  require 'colorize'
10
+ require 'base64'
10
11
  require 'English'
11
12
 
12
13
  require 'kubec/version'
@@ -19,5 +20,7 @@ module Kubec
19
20
  autoload :DSL, 'kubec/dsl'
20
21
  autoload :Status, 'kubec/status/base'
21
22
  autoload :Utils, 'kubec/utils'
23
+ # TODO: Replace with Downloader
22
24
  autoload :Config, 'kubec/config/base'
25
+ autoload :Secret, 'kubec/secret/base'
23
26
  end
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  load File.expand_path('../tasks/config.rake', __FILE__)
4
+ load File.expand_path('../tasks/secret.rake', __FILE__)
@@ -35,19 +35,10 @@ module Kubec
35
35
  def write(path, body)
36
36
  puts "=> #{path} saved"
37
37
  File.write(
38
- path_with_stage(path),
38
+ Utils::Path.with_stage(path),
39
39
  body
40
40
  )
41
41
  end
42
-
43
- # TODO: Refactor
44
- def path_with_stage(path)
45
- path.split('.').tap do |ary|
46
- ext = ary.pop unless ary.first.empty?
47
- ary.push(fetch(:stage, :staging))
48
- ary.push(ext) if ext
49
- end.join('.')
50
- end
51
42
  end
52
43
  end
53
44
  end
@@ -6,7 +6,8 @@ module Kubec
6
6
  module Kubernetes
7
7
  extend Forwardable
8
8
 
9
- def_delegators :kubernetes, :service, :deployment, :config, :cronjob
9
+ def_delegators :kubernetes, :service, :deployment,
10
+ :config, :secret, :cronjob
10
11
 
11
12
  def kubernetes
12
13
  Kubec::Kubernetes.instance
@@ -4,6 +4,7 @@ module Kubec
4
4
  # Kubernetes
5
5
  class Kubernetes
6
6
  autoload :Config, 'kubec/kubernetes/config'
7
+ autoload :Secret, 'kubec/kubernetes/secret'
7
8
  autoload :ConfigMap, 'kubec/kubernetes/config_map'
8
9
  autoload :CronJob, 'kubec/kubernetes/cron_job'
9
10
  autoload :Template, 'kubec/kubernetes/template'
@@ -18,7 +19,7 @@ module Kubec
18
19
 
19
20
  include Singleton
20
21
 
21
- APPLYABLE_TYPES = %i[service deployment config cronjob].freeze
22
+ APPLYABLE_TYPES = %i[service deployment config secret cronjob].freeze
22
23
 
23
24
  class << self
24
25
  def apply(type)
@@ -69,6 +70,7 @@ module Kubec
69
70
  @services = []
70
71
  @deployments = []
71
72
  @configs = []
73
+ @secrets = []
72
74
  @cronjobs = []
73
75
  end
74
76
 
@@ -87,6 +89,11 @@ module Kubec
87
89
  @configs << Kubernetes::ConfigMap.new(name, &block)
88
90
  end
89
91
 
92
+ def secret(name = nil, &block)
93
+ return @secrets if name.nil?
94
+ @secrets << Kubernetes::Secret.new(name, &block)
95
+ end
96
+
90
97
  def cronjob(name = nil, &block)
91
98
  return @cronjobs if name.nil?
92
99
  @cronjobs << Kubernetes::CronJob.new(name, &block)
@@ -27,8 +27,9 @@ module Kubec
27
27
  def file(path)
28
28
  key = path.split('/').last
29
29
  @files[key] = path
30
- path = path_with_stage(path) if stage_config_exist?(path)
31
- set key, File.read(path)
30
+ path = Utils::Path.with_stage(path) if stage_config_exist?(path)
31
+ value = File.read(path) if File.exist?(path)
32
+ set key, value || ''
32
33
  end
33
34
 
34
35
  private
@@ -41,15 +42,7 @@ module Kubec
41
42
  end
42
43
 
43
44
  def stage_config_exist?(path)
44
- File.exist?(path_with_stage(path))
45
- end
46
-
47
- def path_with_stage(path)
48
- path.split('.').tap do |ary|
49
- ext = ary.pop
50
- ary.push(fetch(:stage, :staging))
51
- ary.push(ext)
52
- end.join('.')
45
+ File.exist?(Utils::Path.with_stage(path))
53
46
  end
54
47
  end
55
48
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kubec
4
+ class Kubernetes
5
+ # :nodoc:
6
+ class Secret < ConfigMap
7
+ # TODO: Refactor this feature
8
+ def fetch(*args)
9
+ Environment.instance.fetch(*args)
10
+ end
11
+
12
+ def set(key, value)
13
+ self[:data][key] = Base64.encode64(value).delete("\n")
14
+ end
15
+
16
+ # TODO: Refactor
17
+ def file(path)
18
+ key = path.split('/').last
19
+ @files[key] = path
20
+ path = Utils::Path.with_stage(path) if stage_config_exist?(path)
21
+ value = File.read(path) if File.exist?(path)
22
+ set key, value || ''
23
+ end
24
+
25
+ private
26
+
27
+ def prepare
28
+ self[:apiVersion] = 'v1'
29
+ self[:metadata] = Metadata.new(@name)
30
+ self[:type] = 'Opaque'
31
+ self[:kind] = 'Secret'
32
+ self[:data] = {}
33
+ end
34
+
35
+ def stage_config_exist?(path)
36
+ File.exist?(Utils::Path.with_stage(path))
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kubec
4
+ # :nodoc:
5
+ module Secret
6
+ autoload :Downloader, 'kubec/secret/downloader'
7
+ end
8
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kubec
4
+ module Secret
5
+ # :nodoc:
6
+ class Downloader
7
+ def initialize
8
+ @result = `kubectl -n #{fetch(:stage, :staging)} get secret -o json`
9
+ @success = $CHILD_STATUS.success?
10
+ @items = {}
11
+
12
+ prepare
13
+ end
14
+
15
+ def save
16
+ Kubernetes.secret.each do |secret|
17
+ downloaded = @items[secret.name]
18
+ secret.files.each do |(key, path)|
19
+ write path, Base64.decode64(downloaded.dig('data', key))
20
+ end
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def prepare
27
+ return unless @success
28
+ items = JSON.parse(@result).dig('items') || []
29
+ items.each do |item|
30
+ name = item.dig('metadata', 'name').to_sym
31
+ @items[name] = item
32
+ end
33
+ end
34
+
35
+ def write(path, body)
36
+ puts "=> #{path} saved"
37
+ File.write(
38
+ Utils::Path.with_stage(path),
39
+ body
40
+ )
41
+ end
42
+ end
43
+ end
44
+ end
@@ -28,6 +28,8 @@ end
28
28
  desc 'Deploy to Kubernetes'
29
29
  task deploy: [
30
30
  'deploy:namespace',
31
+ 'secret:push',
32
+ 'config:push',
31
33
  'deploy:deployments',
32
34
  'deploy:services',
33
35
  'deploy:cronjobs'
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :secret do
4
+ desc 'Upload secret files'
5
+ task push: ['deploy:namespace'] do
6
+ Kubec::Utils::Helper.header 'Starting apply secret'
7
+ Kubec::Kubernetes.apply(:secret)
8
+ end
9
+
10
+ desc 'Download secret files'
11
+ task pull: ['deploy:namespace'] do
12
+ Kubec::Utils::Helper.header 'Starting save secret'
13
+ Kubec::Secret::Downloader.new.save
14
+ end
15
+ end
@@ -5,5 +5,6 @@ module Kubec
5
5
  module Utils
6
6
  autoload :HumanizeTime, 'kubec/utils/humanize_time'
7
7
  autoload :Helper, 'kubec/utils/helper'
8
+ autoload :Path, 'kubec/utils/path'
8
9
  end
9
10
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kubec
4
+ module Utils
5
+ # :nodoc:
6
+ module Path
7
+ class << self
8
+ def dotfile?(path)
9
+ path
10
+ .split('/')
11
+ .last
12
+ .split('.')
13
+ .first
14
+ .empty?
15
+ end
16
+
17
+ def with_stage(path)
18
+ path.split('.').tap do |ary|
19
+ ext = ary.pop unless dotfile?(path)
20
+ ary.push(fetch(:stage, :staging))
21
+ ary.push(ext) if ext
22
+ end.join('.')
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kubec
4
- VERSION = '0.4.1'
4
+ VERSION = '0.5.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 5xRuby
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-01-22 00:00:00.000000000 Z
12
+ date: 2018-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
@@ -166,9 +166,12 @@ files:
166
166
  - lib/kubec/kubernetes/deployment.rb
167
167
  - lib/kubec/kubernetes/has_attribute.rb
168
168
  - lib/kubec/kubernetes/metadata.rb
169
+ - lib/kubec/kubernetes/secret.rb
169
170
  - lib/kubec/kubernetes/service.rb
170
171
  - lib/kubec/kubernetes/template.rb
171
172
  - lib/kubec/kubernetes/volume.rb
173
+ - lib/kubec/secret/base.rb
174
+ - lib/kubec/secret/downloader.rb
172
175
  - lib/kubec/setup.rb
173
176
  - lib/kubec/status.rb
174
177
  - lib/kubec/status/base.rb
@@ -179,6 +182,7 @@ files:
179
182
  - lib/kubec/tasks/deploy.rake
180
183
  - lib/kubec/tasks/install.rake
181
184
  - lib/kubec/tasks/restart.rake
185
+ - lib/kubec/tasks/secret.rake
182
186
  - lib/kubec/tasks/status.rake
183
187
  - lib/kubec/templates/Kubeconfig
184
188
  - lib/kubec/templates/config/kubec.rb
@@ -187,6 +191,7 @@ files:
187
191
  - lib/kubec/utils.rb
188
192
  - lib/kubec/utils/helper.rb
189
193
  - lib/kubec/utils/humanize_time.rb
194
+ - lib/kubec/utils/path.rb
190
195
  - lib/kubec/version.rb
191
196
  homepage: https://kubec.5xruby.tw
192
197
  licenses: []