kite 1.0.10 → 1.1.1

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: 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.