terraspace-bundler 0.4.0 → 0.4.4

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: c8245c4a3b7fd5b149298bdf0084bddeee9153ff1cd7016e7e13facb0f3bede2
4
- data.tar.gz: 761d564519e6958842cc5386e7b84f4a2b2cc90e3801fc2c3845f752983241b2
3
+ metadata.gz: 152f604d7d2ba7bd4b6cfeccad223aa81c598d2f68ac1c6cb91f5b7ea5457c43
4
+ data.tar.gz: 794f51b937c2559483912e007f3160b0957fa9276140167bb7b628aebd52e871
5
5
  SHA512:
6
- metadata.gz: d23b49ddabd983bf1927c62aabc2a9bf4165970a32b7325e41965bc804267297cf269741677582e4c0c4f7603e15dc21fef9d5370200b18adb2f369733b653ae
7
- data.tar.gz: 38bf841d2c9d721b34930786c46567a47e881e3951153272eb7f9dea66e23e974994071e5514a4e92091db0fb19d787ce22893bfb514464ae967fcc04bb34959
6
+ metadata.gz: 06e52a0ea25a5bddeb5b46018a6eca99c18301c6a532c4f9c7750707cce67afea7df938d8744026e445ef96fb3a9007bc5522846eab1f560e8f963f2e84ba8da
7
+ data.tar.gz: 0726b7ee532842d720ad59a189181ff26982dc5663b94f0f081fa71a7262de82e05e65fa385d527e32813762d2c7666955ca65ec22fa23f5acd755223ad7b385
data/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [0.4.3] - 2021-11-20
7
+ - [#14](https://github.com/boltops-tools/terraspace-bundler/pull/14) get version and use only that part of api since the latest version is currently down with a 502
8
+ - [#15](https://github.com/boltops-tools/terraspace-bundler/pull/15) terraspace bundle example command
9
+
10
+ ## [0.4.2] - 2021-10-02
11
+ - stack src option: also understand example and name
12
+
13
+ ## [0.4.1] - 2021-09-30
14
+ - [#13](https://github.com/boltops-tools/terraspace-bundler/pull/13) fix stacks Array option
15
+
6
16
  ## [0.4.0] - 2021-08-10
7
17
  - [#10](https://github.com/boltops-tools/terraspace-bundler/pull/10) terraspace bundle info: warning when no lockfile
8
18
  - [#12](https://github.com/boltops-tools/terraspace-bundler/pull/12) support for: private registry, s3, gcs, local
@@ -39,5 +39,15 @@ class TerraspaceBundler::CLI
39
39
  TB.update_mode = true
40
40
  TB::Runner.new(options.merge(mods: mods)).run
41
41
  end
42
+
43
+ desc "example MOD EXAMPLE", "Import example from module as a stack"
44
+ long_desc Help.text("bundle/example")
45
+ terrafile_option.call
46
+ option :name, desc: "The stack name. IE: app/stacks/NAME. By default, the mod's name is used. "
47
+ option :dest, default: "app/stacks", desc: "The default destination folder is app/stacks. Though you can change it to locations like vendor/stacks, it’s recommended to keep the default."
48
+ option :purge, type: :boolean, default: true, desc: "If set to `true`, then the existing `app/stacks/vpc` folder is removed."
49
+ def example(mod, example)
50
+ TB::Example.new(options.merge(mod: mod, example: example)).run
51
+ end
42
52
  end
43
53
  end
@@ -0,0 +1,9 @@
1
+ ## Examples
2
+
3
+ $ terraspace bundle example eks managed_node_groups
4
+ Example from vendor/modules/eks/examples/managed_node_groups imported to app/stacks/managed_node_groups
5
+
6
+ Specify the stack name:
7
+
8
+ $ terraspace bundle example eks managed_node_groups --name eks
9
+ Example from vendor/modules/eks/examples/managed_node_groups imported to app/stacks/eks
@@ -0,0 +1,39 @@
1
+ module TerraspaceBundler
2
+ class Example < TB::CLI::Base
3
+ def run
4
+ check_mod!
5
+ stack = Exporter::Stacks::Stack.new(mod, stack_options)
6
+ stack.export
7
+ logger.info "Example from vendor/modules/#{@options[:mod]}/examples/#{@src} imported to #{@dest}/#{@name}"
8
+ end
9
+
10
+ def stack_options
11
+ @name = @options[:name] || @options[:example]
12
+ @purge = @options[:purge].nil? ? true : @options[:purge]
13
+ @dest = @options[:dest] || "app/stacks"
14
+ @src = @options[:example]
15
+ {
16
+ name: @name,
17
+ src: @src,
18
+ dest: @dest,
19
+ purge: @purge,
20
+ }
21
+ end
22
+
23
+ def mod
24
+ lockfile.mods.find { |mod| mod.name == @options[:mod] }
25
+ end
26
+
27
+ def check_mod!
28
+ unless mod
29
+ logger.error "ERROR: mod #{@options[:mod]} not found in Terrafile.lock".color(:red)
30
+ exit 1
31
+ end
32
+ end
33
+
34
+ private
35
+ def lockfile
36
+ Lockfile.instance
37
+ end
38
+ end
39
+ end
@@ -3,6 +3,7 @@ class TerraspaceBundler::Exporter::Stacks
3
3
  attr_reader :mod
4
4
  def initialize(mod, options={})
5
5
  @mod, @options = mod, options
6
+ @src = @options[:src] || @options[:example] || @options[:name]
6
7
  end
7
8
 
8
9
  def export
@@ -25,7 +26,7 @@ class TerraspaceBundler::Exporter::Stacks
25
26
  end
26
27
 
27
28
  def src
28
- src = @options[:src]
29
+ src = @src
29
30
  without_examples = [mod_path, src].compact.join('/')
30
31
  with_examples = [examples_folder, src].compact.join('/')
31
32
  paths = [with_examples, without_examples]
@@ -5,6 +5,8 @@ module TerraspaceBundler::Mod::Concerns
5
5
  return unless stacks
6
6
  if all_stacks?(stacks)
7
7
  stacks = all_stacks
8
+ elsif stacks.is_a?(Array)
9
+ stacks = array_stacks(stacks)
8
10
  end
9
11
  normalize_stacks(stacks)
10
12
  end
@@ -28,6 +30,19 @@ module TerraspaceBundler::Mod::Concerns
28
30
  end
29
31
  end
30
32
 
33
+ def array_stacks(stacks)
34
+ stacks.map do |example|
35
+ if example.is_a?(Hash)
36
+ example
37
+ else
38
+ {
39
+ name: example,
40
+ src: example,
41
+ }
42
+ end
43
+ end
44
+ end
45
+
31
46
  # Normalizes stack options to an Array of Hashes or just a single Hash
32
47
  def normalize_stacks(option)
33
48
  defaults = TB.config.stack_options.dup
@@ -1,4 +1,25 @@
1
- require "google/cloud/storage"
1
+ begin
2
+ require "google/cloud/storage"
3
+ rescue LoadError => e
4
+ $stderr.puts "#{e.class}: #{e.message}".color(:red)
5
+ $stderr.puts <<~EOL
6
+
7
+ Unable to: require "google/cloud/storage"
8
+
9
+ In order to use gcs as a terraspace bundler source,
10
+ please add the google-cloud-storage gem to
11
+ your Terraspace project's Gemfile and run bundle.
12
+
13
+ To add the gem to your Gemfile, you can run:
14
+
15
+ bundle add google-cloud-storage
16
+
17
+ Then download modules in defined your Terrafile with:
18
+
19
+ terraspace bundle
20
+ EOL
21
+ exit 1
22
+ end
2
23
 
3
24
  class TerraspaceBundler::Mod::Fetcher
4
25
  class Gcs < Base
@@ -85,20 +85,17 @@ class TerraspaceBundler::Mod
85
85
  def public_github_url
86
86
  base_site = "https://registry.terraform.io"
87
87
  base_url = "#{base_site}/v1/modules"
88
- version = @version.sub(/^v/,'') if @version # v1.0 => 1.0
88
+ version = get_version(base_url)
89
89
  api_url = [base_url, @source, version, "download"].compact.join('/')
90
90
 
91
91
  resp = http_request(api_url)
92
92
 
93
93
  case resp.code.to_i
94
- when 204
95
- download_url = resp.header["x-terraform-get"]
96
- when 302
97
- next_url = "#{base_site}#{resp.header["location"]}"
98
- resp = http_request(next_url)
94
+ when 204 # IE: curl -v https://registry.terraform.io/v1/modules/terraform-aws-modules/security-group/aws/3.10.0/download
99
95
  download_url = resp.header["x-terraform-get"]
100
96
  else
101
97
  logger.error "ERROR: Unable to lookup up module in Terraform Registry: #{@source}".color(:red)
98
+ logger.error "api_url: #{api_url}"
102
99
  puts "resp.code #{resp.code}"
103
100
  pp resp
104
101
  exit 1
@@ -109,6 +106,14 @@ class TerraspaceBundler::Mod
109
106
  url.sub(/^git::/,'').sub(/\?.*/,'')
110
107
  end
111
108
 
109
+ def get_version(base_url)
110
+ return @version.sub(/^v/,'') if @version # v1.0 => 1.0
111
+ api_url = [base_url, @source].join('/')
112
+ resp = http_request(api_url)
113
+ data = JSON.load(resp.body)
114
+ data['version']
115
+ end
116
+
112
117
  private
113
118
  def auth_error_exit!(resp=nil, domain=nil)
114
119
  logger.error <<~EOL.color(:red)
@@ -1,3 +1,3 @@
1
1
  module TerraspaceBundler
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.4"
3
3
  end
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "activesupport"
22
22
  spec.add_dependency "aws-sdk-s3"
23
23
  spec.add_dependency "dsl_evaluator"
24
- spec.add_dependency "google-cloud-storage"
25
24
  spec.add_dependency "memoist"
26
25
  spec.add_dependency "nokogiri"
27
26
  spec.add_dependency "rainbow"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terraspace-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-10 00:00:00.000000000 Z
11
+ date: 2021-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: google-cloud-storage
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: memoist
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -230,6 +216,7 @@ files:
230
216
  - lib/terraspace_bundler/cli/base.rb
231
217
  - lib/terraspace_bundler/cli/bundle.rb
232
218
  - lib/terraspace_bundler/cli/help.rb
219
+ - lib/terraspace_bundler/cli/help/bundle/example.md
233
220
  - lib/terraspace_bundler/cli/help/bundle/info.md
234
221
  - lib/terraspace_bundler/cli/help/bundle/install.md
235
222
  - lib/terraspace_bundler/cli/help/bundle/list.md
@@ -245,6 +232,7 @@ files:
245
232
  - lib/terraspace_bundler/core.rb
246
233
  - lib/terraspace_bundler/dsl.rb
247
234
  - lib/terraspace_bundler/dsl/syntax.rb
235
+ - lib/terraspace_bundler/example.rb
248
236
  - lib/terraspace_bundler/exporter.rb
249
237
  - lib/terraspace_bundler/exporter/base.rb
250
238
  - lib/terraspace_bundler/exporter/copy.rb
@@ -321,7 +309,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
321
309
  - !ruby/object:Gem::Version
322
310
  version: '0'
323
311
  requirements: []
324
- rubygems_version: 3.2.5
312
+ rubygems_version: 3.2.32
325
313
  signing_key:
326
314
  specification_version: 4
327
315
  summary: Bundles terraform modules