terraform-wrapper 0.1.0 → 0.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: 8c1c8efca42bd473f3bbfa5c0e97f2782b8cc2652f96fa17b213c8fa87d4b0ae
4
- data.tar.gz: df46cad597ad4101afc53b242a94e11452e9bd14b722a1e76eb91ad9a02909a3
3
+ metadata.gz: b0f59fe60b44165f5771d0e20fe31b8e6d9f4dd05646a7a32ee5cb41de1c94ce
4
+ data.tar.gz: 268a408964acce9c9bc9745fea9c5ef154f7aee861f3245c4ea668a43548cc1c
5
5
  SHA512:
6
- metadata.gz: 97be709f764c69cd868834dfa6d6ffbe1917d40ede4ef0ceaf2a01fc26fdf84f9d5da0a45c8ac02f017f29eb42071cbf8ce50e3d8862123c2a96f4ce9adfcc04
7
- data.tar.gz: e1f8420bc2165a6819bc08a85fbf5d3290d3e40154866d5d6e47ddabd51eb8124ad748668cae8dfb6fd4e7964b4d6cb68eec747d32aa92fc29991166713b7192
6
+ metadata.gz: a9f91604fe4042be3b34dcb59cc2049808a28dd0ccfef2f8998518fbb4d6ed3c62801472bd4e8c1d9e0d035697b9e9ec0542e464c9e15bafbe3ed6047d2c9177
7
+ data.tar.gz: 5fc7cd614aa04419fa0a09c8843bd20e1b2a78f684926ddd5a98b4a1d4e429ceca8cee92be0ad0cbf837d8dc49b8dfd61faed176c547e3c2561676d8d2c0d9af
data/.gitlab-ci.yml CHANGED
@@ -31,5 +31,7 @@ deploy:
31
31
  - hash gem
32
32
  - echo "-- Publishing Gem --"
33
33
  - rake release
34
+ - echo "-- Listing Sums --
35
+ - sha256sum *.gem
34
36
 
35
37
  ###############################################################################
@@ -14,7 +14,7 @@ module TerraformWrapper
14
14
 
15
15
  ###############################################################################
16
16
 
17
- @logger = Shared::Logging.logger_for("TerraformWrapper")
17
+ @logger = TerraformWrapper::Shared::Logging.logger_for("TerraformWrapper")
18
18
 
19
19
  ###############################################################################
20
20
 
@@ -51,6 +51,7 @@ module TerraformWrapper
51
51
  tasks << TerraformWrapper::Tasks::Binary.new(binary: binary)
52
52
  tasks << TerraformWrapper::Tasks::Clean.new(code: code)
53
53
  tasks << TerraformWrapper::Tasks::Destroy.new(binary: binary, code: code, options: config_options)
54
+ tasks << TerraformWrapper::Tasks::Import.new(binary: binary, code: code, options: config_options)
54
55
  tasks << TerraformWrapper::Tasks::Init.new(binary: binary, code: code, options: config_options)
55
56
  tasks << TerraformWrapper::Tasks::Plan.new(binary: binary, code: code, options: config_options)
56
57
  tasks << TerraformWrapper::Tasks::PlanDestroy.new(binary: binary, code: code, options: config_options)
@@ -29,6 +29,7 @@ module TerraformWrapper
29
29
  ###############################################################################
30
30
 
31
31
  attr_reader :bucket
32
+ attr_reader :encrypt
32
33
  attr_reader :key
33
34
  attr_reader :region
34
35
 
@@ -41,11 +42,17 @@ module TerraformWrapper
41
42
  ###############################################################################
42
43
 
43
44
  def hash()
44
- return {
45
- "bucket" => @bucket,
46
- "key" => @key,
47
- "region" => @region
48
- }
45
+ result = Hash.new
46
+
47
+ result["bucket"] = @bucket
48
+ result["region"] = @region
49
+ result["key"] = @key
50
+ result["encrypt"] = @encrypt.to_s
51
+
52
+ result["kms_key_id"] = @kms unless @kms.nil?
53
+ result["role_arn"] = @role unless @role.nil?
54
+
55
+ return result
49
56
  end
50
57
 
51
58
  ###############################################################################
@@ -55,6 +62,9 @@ module TerraformWrapper
55
62
  ###############################################################################
56
63
 
57
64
  def specific()
65
+ kms = nil
66
+ role = nil
67
+
58
68
  logger.fatal("AWS backend mandatory option 'bucket' has not been set!") unless @options.key?("bucket")
59
69
  logger.fatal("AWS backend mandatory option 'region' has not been set!") unless @options.key?("region")
60
70
 
@@ -73,6 +83,24 @@ module TerraformWrapper
73
83
  logger.fatal("AWS backend S3 bucket key must be a String!") unless key.kind_of?(String)
74
84
  logger.fatal("AWS backend S3 bucket key must not be blank!") if key.strip.empty?
75
85
 
86
+ encrypt = @options.key?("encrypt") ? @options["encrypt"] : true
87
+
88
+ logger.fatal("AWS backend S3 bucket encryption enabled must be a Boolean!") unless [ true, false ].include?(encrypt)
89
+
90
+ if @options.key?("kms") then
91
+ kms = @options["kms"]
92
+
93
+ logger.fatal("AWS backend S3 bucket encryption KMS key ARN must be a String if specified!") unless kms.kind_of?(String)
94
+ logger.fatal("AWS backend S3 bucket encryption KMS key ARN must not be blank if specified!") if kms.strip.empty?
95
+ end
96
+
97
+ if @options.key?("role") then
98
+ role = @options["role"]
99
+
100
+ logger.fatal("AWS backend role to assume ARN must be a String if specified!") unless role.kind_of?(String)
101
+ logger.fatal("AWS backend role to assume ARN must not be blank if specified!") if role.strip.empty?
102
+ end
103
+
76
104
  logger.fatal("AWS backend S3 bucket name or key must include %{service}.") unless (bucket.include?("%{service}") or key.include?("%{service}"))
77
105
  logger.fatal("AWS backend S3 bucket name or key must include %{config}.") unless (bucket.include?("%{config}") or key.include?("%{config}"))
78
106
  logger.fatal("AWS backend S3 bucket name or key must include %{component}.") unless (bucket.include?("%{component}") or key.include?("%{component}"))
@@ -81,15 +109,20 @@ module TerraformWrapper
81
109
  bucket = bucket % @variables
82
110
  region = region % @variables
83
111
  key = key % @variables
112
+ kms = kms % @variables unless kms.nil?
113
+ role = role % @variables unless role.nil?
84
114
  rescue
85
115
  logger.fatal("AWS backend options contain variables that are not included in the configuration file!")
86
116
  end
87
117
 
88
118
  logger.fatal("Key: #{key} is too long for backend of type: #{@@type}") if key.length > 1024
89
119
 
90
- @bucket = bucket
91
- @region = region
92
- @key = key
120
+ @bucket = bucket
121
+ @region = region
122
+ @key = key
123
+ @encrypt = encrypt
124
+ @kms = kms
125
+ @role = role
93
126
  end
94
127
 
95
128
  ###############################################################################
@@ -39,19 +39,19 @@ module TerraformWrapper
39
39
  ###############################################################################
40
40
 
41
41
  def warn(message)
42
- warn(format(colour: 33, message: message))
42
+ super(format(colour: 33, message: message))
43
43
  end
44
44
 
45
45
  ###############################################################################
46
46
 
47
47
  def error(message)
48
- error(format(colour: 31, message: message))
48
+ super(format(colour: 31, message: message))
49
49
  end
50
50
 
51
51
  ###############################################################################
52
52
 
53
53
  def fatal(message)
54
- fatal(format(colour: 31, message: message))
54
+ super(format(colour: 31, message: message))
55
55
  exit(1)
56
56
  end
57
57
 
@@ -43,6 +43,28 @@ module TerraformWrapper
43
43
  logger.fatal("Failed to download Terraform modules.") unless @downloaded
44
44
  end
45
45
 
46
+ ###############################################################################
47
+
48
+ def import(address: nil, id: nil)
49
+ logger.fatal("Cannot Terraform import before initialising backend!") unless initialised
50
+
51
+ logger.fatal("Terraform state address for import must be a String!") unless address.kind_of?(String)
52
+ logger.fatal("Terraform state address for import must be a String!") unless address.kind_of?(String)
53
+ logger.fatal("Terraform state address for import must not be blank!") if address.strip.empty?
54
+
55
+ logger.fatal("Identification for infrastructure to import must be a String!") unless id.kind_of?(String)
56
+ logger.fatal("Identification for infrastructure to import must not be blank!") if id.strip.empty?
57
+
58
+ parameters = Array.new
59
+ parameters.concat(variable_files)
60
+ parameters.concat(variable_strings)
61
+
62
+ parameters.append("\"#{address}\"")
63
+ parameters.append("\"#{id}\"")
64
+
65
+ logger.fatal("Terraform import failed!") unless run(action: "import", parameters: parameters)
66
+ end
67
+
46
68
  ###############################################################################
47
69
 
48
70
  def init(config:, upgrade: true)
@@ -4,6 +4,7 @@ require_relative 'tasks/apply'
4
4
  require_relative 'tasks/binary'
5
5
  require_relative 'tasks/clean'
6
6
  require_relative 'tasks/destroy'
7
+ require_relative 'tasks/import'
7
8
  require_relative 'tasks/init'
8
9
  require_relative 'tasks/plan'
9
10
  require_relative 'tasks/plandestroy'
@@ -0,0 +1,70 @@
1
+ ###############################################################################
2
+
3
+ require 'rake/tasklib'
4
+
5
+ ###############################################################################
6
+
7
+ module TerraformWrapper
8
+
9
+ ###############################################################################
10
+
11
+ module Tasks
12
+
13
+ ###############################################################################
14
+
15
+ class Import < ::Rake::TaskLib
16
+
17
+ ###############################################################################
18
+
19
+ include TerraformWrapper::Shared::Logging
20
+
21
+ ###############################################################################
22
+
23
+ @binary
24
+ @code
25
+ @options
26
+
27
+ ###############################################################################
28
+
29
+ def initialize(binary:, code:, options:)
30
+ @binary = binary
31
+ @code = code
32
+ @options = options
33
+
34
+ yield self if block_given?
35
+
36
+ import_task
37
+ end
38
+
39
+ ###############################################################################
40
+
41
+ def import_task
42
+ desc "Import a piece of existing infrastructure into Terraform state for a given configuration on an infrastructure component."
43
+ task :import, [:config, :address, :id] => :binary do |t, args|
44
+ options = @options.merge({"name" => args[:config]})
45
+
46
+ logger.info("Processing configuration for Terraform import...")
47
+
48
+ config = TerraformWrapper::Shared::Config.new(code: @code, options: options)
49
+ runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
50
+
51
+ logger.info("Running Terraform import for service: #{config.service}, component: #{@code.name}...")
52
+
53
+ runner.init(config: config)
54
+ runner.import(address: args[:address], id: args[:id])
55
+ end
56
+ end
57
+
58
+ ###############################################################################
59
+
60
+ end
61
+
62
+ ###############################################################################
63
+
64
+ end
65
+
66
+ ###############################################################################
67
+
68
+ end
69
+
70
+ ###############################################################################
@@ -4,7 +4,7 @@ module TerraformWrapper
4
4
 
5
5
  ###############################################################################
6
6
 
7
- VERSION = "0.1.0"
7
+ VERSION = "0.1.1"
8
8
 
9
9
  ###############################################################################
10
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terraform-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Lees
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-15 00:00:00.000000000 Z
11
+ date: 2021-02-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A ruby wrapper for managing Terraform binaries and remote state. Each
14
14
  Terraform command (plan, apply, etc) is wrapped so that the correct binary is used
@@ -50,6 +50,7 @@ files:
50
50
  - lib/terraform-wrapper/tasks/binary.rb
51
51
  - lib/terraform-wrapper/tasks/clean.rb
52
52
  - lib/terraform-wrapper/tasks/destroy.rb
53
+ - lib/terraform-wrapper/tasks/import.rb
53
54
  - lib/terraform-wrapper/tasks/init.rb
54
55
  - lib/terraform-wrapper/tasks/plan.rb
55
56
  - lib/terraform-wrapper/tasks/plandestroy.rb