kite 1.0.10 → 1.1.1

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: ae6d1e9376c8edcf74e30027c1f56d47e6b76f72c67e5350e03a4d734f1fd1a1
4
- data.tar.gz: 5c6422da9834fe7d836faf6776d4aebfa51f92672aff4b48c964b8c6f45b962b
3
+ metadata.gz: 4316889b3af724fb89854fb09d9364d9277dc0f89019349c102e4c4a48e026ac
4
+ data.tar.gz: 2ae90c0b44278e9cfe22e5b8b44cf85ff2a0df04f2aa8c04b6aaefd7988c9949
5
5
  SHA512:
6
- metadata.gz: 359dc979574e1eb9022121663e6bd0bb5e64bce5b9c0e7bbd2e13997a043dbbb1dabbdb397f437df1d7cff6d7892a63d5d5aff4dfe21b8b71b3b2fd0919bbbe6
7
- data.tar.gz: 48f6a76936e0f1b22fdf02e3568a32bb53cfff4dbe3d3c42f1fddbe85a1af9e782352114d2cc12956df4ae9a2b272aaec1832a5b765544a7acfa8b85f8723ab6
6
+ metadata.gz: 588c4228e6ee3fa02fd8800b3d202aa21ca64c97aa4f72a5f0fb932fa015b72d10f7ddef41869d70049ca64c498bb6730c0b42af097f90df2fe1b23c3dfdcb7b
7
+ data.tar.gz: dfc062783a611b3bad533912483975fdbc2f3a19dbcc319b12cc09e2eb2c3bbc5a2cbedde7a317514c513b00a918b00c50a2e4393df7cb9b23f158b8cf9fd437
data/.gitignore CHANGED
@@ -12,3 +12,5 @@
12
12
  .rspec_status
13
13
 
14
14
  *.gem
15
+
16
+ .idea
data/ci/bump.rb CHANGED
@@ -199,9 +199,7 @@ bump &&= ENV["TRAVIS_TAG"].to_s.empty?
199
199
  bump &&= !tagged_commits_mapping.key?(ENV["TRAVIS_COMMIT"])
200
200
 
201
201
  if bump
202
- if ENV["TRAVIS_BRANCH"] == "master"
203
- bump_from_master_branch
204
- else
202
+ if ENV["TRAVIS_BRANCH"] != "master"
205
203
  bump_from_version_specific_branch(ENV["TRAVIS_BRANCH"])
206
204
  end
207
205
  end
@@ -12,5 +12,6 @@ require 'kite/base'
12
12
  require 'kite/generate'
13
13
  require 'kite/module'
14
14
  require 'kite/terraform'
15
+ require 'kite/configuration'
15
16
  require 'kite/core'
16
17
  require 'kite/cloud'
@@ -3,6 +3,10 @@ class Kite::Base < Thor
3
3
 
4
4
  include Thor::Actions
5
5
 
6
+ def self.exit_on_failure?
7
+ true
8
+ end
9
+
6
10
  def self.source_root
7
11
  File.expand_path(File.join(File.dirname(__FILE__), "../../tpl"))
8
12
  end
@@ -0,0 +1,25 @@
1
+ module Kite
2
+ class Configuration < Base
3
+ include Kite::Helpers
4
+
5
+ method_option :env, type: :string, desc: "Environment", required: true, default: ENV['KITE_ENV']
6
+ desc 'get QUERY', 'Returns value for specified QUERY'
7
+ def get(query)
8
+ @env = options[:env]
9
+ @path = cloud_path
10
+ vars_paths = Dir[@path + "/config/environments/#{@env}/vars.*"]
11
+
12
+ vars_paths.each do |vars_path|
13
+ @res = YAML::load_file(vars_path)
14
+ query.split('.').each { |k| @res = @res[k] }
15
+ break unless @res.nil?
16
+ end
17
+
18
+ if @res.nil?
19
+ raise Kite::Error, "Invalid query: \"#{query}\""
20
+ else
21
+ puts @res
22
+ end
23
+ end
24
+ end
25
+ end
@@ -13,10 +13,13 @@ module Kite
13
13
  desc "generate", "Generate IaC from configuration"
14
14
  subcommand "generate", Kite::Generate
15
15
 
16
- desc 'module', 'Use kite modules with environments'
16
+ desc "module", "Use kite modules with environments"
17
17
  subcommand "module", Kite::Module
18
18
 
19
- desc 'terraform', 'Run Terraform-related commands with environment variables loaded from module vars'
19
+ desc "configuration", "Get configs of current environment"
20
+ subcommand "configuration", Kite::Configuration
21
+
22
+ desc "terraform", "Run Terraform-related commands with environment variables loaded from module vars"
20
23
  method_option :env, type: :string, desc: "Environment", required: true, default: ENV['KITE_ENV']
21
24
  def terraform(command, *args)
22
25
  Kernel.exit Kite::Terraform.new(self, options).run(command, *args)
@@ -4,6 +4,22 @@ module Kite::Helpers
4
4
  raise Kite::Error, 'The config/cloud.yml is not filled out!' unless config.find { |key, hash| hash.find { |k, v| v.nil? } }.nil?
5
5
  end
6
6
 
7
+ def cloud_valid?(path)
8
+ valid = Dir.children(path).include? 'config'
9
+ valid &&= Dir.children(path + '/config').include? 'cloud.yml'
10
+
11
+ valid
12
+ end
13
+
14
+ def cloud_path
15
+ Dir.pwd.tap do |path|
16
+ until cloud_valid? path
17
+ raise Kite::Error, "Invalid path: \"#{Dir.pwd}\"" if path == "/"
18
+ path = File.dirname(path)
19
+ end
20
+ end
21
+ end
22
+
7
23
  # Parse config/cloud.yml, returning the output hash
8
24
  def parse_cloud_config(env = nil)
9
25
  cloud_config = YAML.load(File.read('config/cloud.yml'))
@@ -17,4 +33,12 @@ module Kite::Helpers
17
33
  end
18
34
  return cloud_config
19
35
  end
36
+
37
+ def run!(command, config = {})
38
+ run(command)
39
+
40
+ if $?.exitstatus != 0
41
+ raise Thor::Error.new("command failed: #{ command }")
42
+ end
43
+ end
20
44
  end
@@ -3,30 +3,38 @@ module Kite
3
3
  include Kite::Helpers
4
4
 
5
5
  method_option :env, type: :string, desc: "Environment", required: true, default: ENV['KITE_ENV']
6
- method_option :version, type: :string, desc: "Version", required: false
6
+ method_option :version, type: :string, desc: "Version", aliases: '-v', required: false
7
+ method_option :method, type: :string, desc: "Module import method", enum: %w{copy submodule}, default: "submodule"
7
8
  desc 'init https://github.com/foo/bar-module', 'Initialize a kite module and render its vars.module.yml'
8
9
  def init(path)
9
- @env = options[:env]
10
- @path = path
11
- @name = path.gsub(/(.*:|.git)/, '').split('/').last
12
- @cloud = parse_cloud_config(@env)
13
- @version = options[:version]
14
-
15
- unless File.exist? path
16
- @uri = path
17
- @path = "modules/#{@name}"
18
-
19
- clone_module
20
- unless @version.nil?
21
- checkout_version
10
+ @env = options[:env]
11
+ @module_name = path.gsub(/(.*:|.git)/, '').split('/').last
12
+ @module_path = "modules/#{ @module_name }"
13
+
14
+ if File.exist?(@module_path)
15
+ overwrite = ask "#{ @module_path } already exists! Overwrite? (y/N)"
16
+ if overwrite.downcase == 'y'
17
+ say "Remove existing files"
18
+ remove_dir(@module_path)
19
+ else
20
+ say "Skipping module init"
21
+ return
22
22
  end
23
-
24
- say "Use git submodule add #{@path} to be able to commit this module as a submodule", :yellow
25
23
  end
26
24
 
27
- render_vars
25
+ case options[:method]
26
+ when"submodule"
27
+ clone_module(path, @module_path, options[:version])
28
+ when "copy"
29
+ FileUtils.mkdir_p("modules")
30
+ FileUtils.cp_r(path, @module_path)
31
+ else
32
+ raise "Unsupported method #{ method }"
33
+ end
28
34
 
29
- say "Rendered successfully, please fill out config/environments/#{@env}/vars.#{@name}.yml with correct values", :green
35
+ @cloud = parse_cloud_config(@env)
36
+ vars_output = render_vars(@module_name, @module_path)
37
+ say "Rendered successfully #{ vars_output }, please edit this file with correct values", :green
30
38
  end
31
39
 
32
40
  method_option :env, type: :string, desc: "Environment", required: true, default: ENV['KITE_ENV']
@@ -47,39 +55,24 @@ module Kite
47
55
  @env
48
56
  end
49
57
 
50
- def clone_module
58
+ def clone_module(uri, path, version)
51
59
  say "Cloning the module"
52
-
53
- if File.exist? @path
54
- overwrite = ask "#{@path} already contains a module! Overwrite? (y/N)"
55
-
56
- if overwrite.downcase == 'y'
57
- remove_dir @path
58
- Git.clone(@uri, @path)
59
- say "Successfully cloned the fresh #{@name}!", :green
60
- else
61
- say "Keeping the current module revision"
60
+ run! "git submodule add #{ uri } #{ path }"
61
+ run! "git submodule init"
62
+ run! "git submodule update"
63
+ unless version.to_s.empty?
64
+ Dir.chdir(path) do
65
+ run! "git checkout #{ version }"
62
66
  end
63
- else
64
- Git.clone(@uri, @path)
65
- end
66
- end
67
-
68
- def checkout_version
69
- module_git = Git.open(@path)
70
-
71
- say "Switching to #{@version}"
72
- if @version =~ /\d+\.\d+\.\d+/ && module_git.tags.any? { |t| t.name == @version }
73
- module_git.checkout("tags/#{@version}")
74
- elsif module_git.is_remote_branch? @version
75
- module_git.checkout("origin/#{@version}")
76
- else
77
- say "#{@version} tag/branch was not found in the module, keeping the current one", :red
67
+ run! "git add #{ path }"
78
68
  end
69
+ say "Successfully init #{ path }!", :green
79
70
  end
80
71
 
81
- def render_vars
82
- create_file "config/environments/#{@env}/vars.#{@name}.yml", YAML.dump(manifest['variables'])
72
+ def render_vars(module_name, module_path)
73
+ output_file = "config/environments/#{ @env }/vars.#{ module_name }.yml"
74
+ create_file output_file, YAML.dump(manifest(module_path)['variables'])
75
+ output_file
83
76
  end
84
77
 
85
78
  def render_templates
@@ -91,8 +84,8 @@ module Kite
91
84
  YAML.load(File.open("config/environments/#{@env}/vars.#{@name}.yml"))
92
85
  end
93
86
 
94
- def manifest
95
- YAML.load(ERB.new(File.read("#{@path}/manifest.yml.tt")).result(binding))
87
+ def manifest(module_path)
88
+ YAML.load(ERB.new(File.read("#{module_path}/manifest.yml.tt")).result(binding))
96
89
  end
97
90
  end
98
91
 
@@ -1,3 +1,3 @@
1
1
  module Kite
2
- VERSION = '1.0.10'
2
+ VERSION = '1.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kite
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Louis Bellet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-13 00:00:00.000000000 Z
11
+ date: 2018-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -158,6 +158,7 @@ files:
158
158
  - lib/kite.rb
159
159
  - lib/kite/base.rb
160
160
  - lib/kite/cloud.rb
161
+ - lib/kite/configuration.rb
161
162
  - lib/kite/core.rb
162
163
  - lib/kite/error.rb
163
164
  - lib/kite/generate.rb
@@ -217,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
218
  version: '0'
218
219
  requirements: []
219
220
  rubyforge_project:
220
- rubygems_version: 2.7.3
221
+ rubygems_version: 2.7.6
221
222
  signing_key:
222
223
  specification_version: 4
223
224
  summary: Command line tool for devops scaffolding.