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 +4 -4
- data/.gitlab-ci.yml +2 -0
- data/lib/terraform-wrapper.rb +2 -1
- data/lib/terraform-wrapper/shared/backends/aws.rb +41 -8
- data/lib/terraform-wrapper/shared/logger.rb +3 -3
- data/lib/terraform-wrapper/shared/runner.rb +22 -0
- data/lib/terraform-wrapper/tasks.rb +1 -0
- data/lib/terraform-wrapper/tasks/import.rb +70 -0
- data/lib/terraform-wrapper/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0f59fe60b44165f5771d0e20fe31b8e6d9f4dd05646a7a32ee5cb41de1c94ce
|
4
|
+
data.tar.gz: 268a408964acce9c9bc9745fea9c5ef154f7aee861f3245c4ea668a43548cc1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9f91604fe4042be3b34dcb59cc2049808a28dd0ccfef2f8998518fbb4d6ed3c62801472bd4e8c1d9e0d035697b9e9ec0542e464c9e15bafbe3ed6047d2c9177
|
7
|
+
data.tar.gz: 5fc7cd614aa04419fa0a09c8843bd20e1b2a78f684926ddd5a98b4a1d4e429ceca8cee92be0ad0cbf837d8dc49b8dfd61faed176c547e3c2561676d8d2c0d9af
|
data/.gitlab-ci.yml
CHANGED
data/lib/terraform-wrapper.rb
CHANGED
@@ -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
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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
|
91
|
-
@region
|
92
|
-
@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
|
-
|
42
|
+
super(format(colour: 33, message: message))
|
43
43
|
end
|
44
44
|
|
45
45
|
###############################################################################
|
46
46
|
|
47
47
|
def error(message)
|
48
|
-
|
48
|
+
super(format(colour: 31, message: message))
|
49
49
|
end
|
50
50
|
|
51
51
|
###############################################################################
|
52
52
|
|
53
53
|
def fatal(message)
|
54
|
-
|
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
|
+
###############################################################################
|
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.
|
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-
|
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
|