terraform-wrapper 0.1.0 → 0.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: 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