terraform-wrapper 0.0.2
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 +7 -0
- data/.gitignore +28 -0
- data/.gitlab-ci.yml +35 -0
- data/Gemfile +17 -0
- data/LICENSE.txt +21 -0
- data/Rakefile +13 -0
- data/bin/console +16 -0
- data/bin/setup +18 -0
- data/lib/terraform-wrapper.rb +47 -0
- data/lib/terraform-wrapper/common.rb +38 -0
- data/lib/terraform-wrapper/shared.rb +11 -0
- data/lib/terraform-wrapper/shared/backends.rb +11 -0
- data/lib/terraform-wrapper/shared/backends/aws.rb +106 -0
- data/lib/terraform-wrapper/shared/backends/azure.rb +120 -0
- data/lib/terraform-wrapper/shared/backends/common.rb +86 -0
- data/lib/terraform-wrapper/shared/backends/local.rb +86 -0
- data/lib/terraform-wrapper/shared/binary.rb +102 -0
- data/lib/terraform-wrapper/shared/code.rb +54 -0
- data/lib/terraform-wrapper/shared/config.rb +125 -0
- data/lib/terraform-wrapper/shared/identifiers.rb +70 -0
- data/lib/terraform-wrapper/shared/latest.rb +75 -0
- data/lib/terraform-wrapper/shared/runner.rb +155 -0
- data/lib/terraform-wrapper/tasks.rb +12 -0
- data/lib/terraform-wrapper/tasks/apply.rb +68 -0
- data/lib/terraform-wrapper/tasks/binary.rb +178 -0
- data/lib/terraform-wrapper/tasks/clean.rb +141 -0
- data/lib/terraform-wrapper/tasks/destroy.rb +68 -0
- data/lib/terraform-wrapper/tasks/init.rb +67 -0
- data/lib/terraform-wrapper/tasks/plan.rb +68 -0
- data/lib/terraform-wrapper/tasks/plandestroy.rb +68 -0
- data/lib/terraform-wrapper/tasks/validate.rb +59 -0
- data/lib/terraform-wrapper/version.rb +13 -0
- data/terraform-wrapper.gemspec +36 -0
- metadata +79 -0
@@ -0,0 +1,141 @@
|
|
1
|
+
###############################################################################
|
2
|
+
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
###############################################################################
|
6
|
+
|
7
|
+
module TerraformWrapper
|
8
|
+
|
9
|
+
###############################################################################
|
10
|
+
|
11
|
+
module Tasks
|
12
|
+
|
13
|
+
###############################################################################
|
14
|
+
|
15
|
+
class Clean < ::Rake::TaskLib
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
19
|
+
@@glob_directories = {
|
20
|
+
"Terraform Modules" => "**/.terraform"
|
21
|
+
}
|
22
|
+
|
23
|
+
###############################################################################
|
24
|
+
|
25
|
+
@@glob_files = {
|
26
|
+
"Crash Logs" => "**/crash.log",
|
27
|
+
"Graph Images" => "**/graph.png",
|
28
|
+
"Terraform States" => "**/*.tfstate",
|
29
|
+
"Terraform State Backups" => "**/*.tfstate.backup"
|
30
|
+
}
|
31
|
+
|
32
|
+
###############################################################################
|
33
|
+
|
34
|
+
@code
|
35
|
+
|
36
|
+
###############################################################################
|
37
|
+
|
38
|
+
def initialize(code:)
|
39
|
+
@code = code
|
40
|
+
|
41
|
+
yield self if block_given?
|
42
|
+
|
43
|
+
clean_task
|
44
|
+
end
|
45
|
+
|
46
|
+
###############################################################################
|
47
|
+
|
48
|
+
def clean_task
|
49
|
+
desc "Cleans the Terraform workspace of any downloaded providers and modules."
|
50
|
+
task :clean do |t, args|
|
51
|
+
$logger.info("Cleaning Terraform component: #{@code.name}...")
|
52
|
+
|
53
|
+
directory_counter = 0
|
54
|
+
@@glob_directories.each do |key, value|
|
55
|
+
$logger.info("Cleaning directories: #{key}")
|
56
|
+
directory_item_counter = 0
|
57
|
+
|
58
|
+
directories = Dir.glob(File.join(@code.path, value))
|
59
|
+
directories.each do |directory|
|
60
|
+
if delete_directory(directory: directory) then
|
61
|
+
directory_item_counter += 1
|
62
|
+
directory_counter += 1
|
63
|
+
end
|
64
|
+
end
|
65
|
+
$logger.info("Cleaned: #{directory_item_counter.to_s} directories.")
|
66
|
+
end
|
67
|
+
|
68
|
+
file_counter = 0
|
69
|
+
@@glob_files.each do |key, value|
|
70
|
+
$logger.info("Cleaning files: #{key}")
|
71
|
+
file_item_counter = 0
|
72
|
+
|
73
|
+
files = Dir.glob(File.join(@code.path, value))
|
74
|
+
files.each do |file|
|
75
|
+
if delete_file(file: file) then
|
76
|
+
file_item_counter += 1
|
77
|
+
file_counter += 1
|
78
|
+
end
|
79
|
+
end
|
80
|
+
$logger.info("Cleaned: #{file_item_counter.to_s} files.")
|
81
|
+
end
|
82
|
+
|
83
|
+
$logger.info("Cleaned total: #{directory_counter.to_s} directories and: #{file_counter.to_s} files.")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
###############################################################################
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
###############################################################################
|
92
|
+
|
93
|
+
def delete_directory(directory:)
|
94
|
+
result = false
|
95
|
+
|
96
|
+
if File.directory?(directory) then
|
97
|
+
begin
|
98
|
+
FileUtils.remove_dir(directory)
|
99
|
+
result = true
|
100
|
+
$logger.info("Deleted directory: #{directory}")
|
101
|
+
rescue
|
102
|
+
result = false
|
103
|
+
$logger.warn("Failed to delete directory: #{directory}")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
return result
|
108
|
+
end
|
109
|
+
|
110
|
+
###############################################################################
|
111
|
+
|
112
|
+
def delete_file(file:)
|
113
|
+
result = false
|
114
|
+
|
115
|
+
if File.file?(file) then
|
116
|
+
begin
|
117
|
+
File.delete(file)
|
118
|
+
result = true
|
119
|
+
$logger.info("Deleted file: #{file}")
|
120
|
+
rescue
|
121
|
+
result = false
|
122
|
+
$logger.warn("Failed to delete file: #{file}")
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
return result
|
127
|
+
end
|
128
|
+
|
129
|
+
###############################################################################
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
###############################################################################
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
###############################################################################
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
###############################################################################
|
@@ -0,0 +1,68 @@
|
|
1
|
+
###############################################################################
|
2
|
+
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
###############################################################################
|
6
|
+
|
7
|
+
module TerraformWrapper
|
8
|
+
|
9
|
+
###############################################################################
|
10
|
+
|
11
|
+
module Tasks
|
12
|
+
|
13
|
+
###############################################################################
|
14
|
+
|
15
|
+
class Destroy < ::Rake::TaskLib
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
19
|
+
@backend
|
20
|
+
@binary
|
21
|
+
@code
|
22
|
+
@configs
|
23
|
+
@overrides
|
24
|
+
@service
|
25
|
+
|
26
|
+
###############################################################################
|
27
|
+
|
28
|
+
def initialize(backend:, binary:, code:, configs:, overrides:, service:)
|
29
|
+
@backend = backend
|
30
|
+
@binary = binary
|
31
|
+
@code = code
|
32
|
+
@configs = configs
|
33
|
+
@overrides = overrides
|
34
|
+
@service = service
|
35
|
+
|
36
|
+
yield self if block_given?
|
37
|
+
|
38
|
+
destroy_task
|
39
|
+
end
|
40
|
+
|
41
|
+
###############################################################################
|
42
|
+
|
43
|
+
def destroy_task
|
44
|
+
desc "Destroys infrastructure with Terraform for a given configuration on a workspace."
|
45
|
+
task :destroy, [:config] => :binary do |t, args|
|
46
|
+
$logger.info("Running Terraform destroy for service: #{@service}, component: #{@code.name}...")
|
47
|
+
|
48
|
+
config = TerraformWrapper::Shared::Config.new(backend: @backend, base: @configs, code: @code, name: args[:config], overrides: @overrides, service: @service)
|
49
|
+
runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
|
50
|
+
|
51
|
+
runner.init(config: config)
|
52
|
+
runner.destroy
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
###############################################################################
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
###############################################################################
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
###############################################################################
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
###############################################################################
|
@@ -0,0 +1,67 @@
|
|
1
|
+
###############################################################################
|
2
|
+
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
###############################################################################
|
6
|
+
|
7
|
+
module TerraformWrapper
|
8
|
+
|
9
|
+
###############################################################################
|
10
|
+
|
11
|
+
module Tasks
|
12
|
+
|
13
|
+
###############################################################################
|
14
|
+
|
15
|
+
class Init < ::Rake::TaskLib
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
19
|
+
@backend
|
20
|
+
@binary
|
21
|
+
@code
|
22
|
+
@configs
|
23
|
+
@overrides
|
24
|
+
@service
|
25
|
+
|
26
|
+
###############################################################################
|
27
|
+
|
28
|
+
def initialize(backend:, binary:, code:, configs:, overrides:, service:)
|
29
|
+
@backend = backend
|
30
|
+
@binary = binary
|
31
|
+
@code = code
|
32
|
+
@configs = configs
|
33
|
+
@overrides = overrides
|
34
|
+
@service = service
|
35
|
+
|
36
|
+
yield self if block_given?
|
37
|
+
|
38
|
+
init_task
|
39
|
+
end
|
40
|
+
|
41
|
+
###############################################################################
|
42
|
+
|
43
|
+
def init_task
|
44
|
+
desc "Initialises the Terraform workspace and remote backend (if applicable)."
|
45
|
+
task :init, [:config] => :binary do |t, args|
|
46
|
+
$logger.info("Initialising Terraform for service: #{@service}, component: #{@code.name}...")
|
47
|
+
|
48
|
+
config = TerraformWrapper::Shared::Config.new(backend: @backend, base: @configs, code: @code, name: args[:config], overrides: @overrides, service: @service)
|
49
|
+
runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
|
50
|
+
|
51
|
+
runner.init(config: config)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
###############################################################################
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
###############################################################################
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
###############################################################################
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
###############################################################################
|
@@ -0,0 +1,68 @@
|
|
1
|
+
###############################################################################
|
2
|
+
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
###############################################################################
|
6
|
+
|
7
|
+
module TerraformWrapper
|
8
|
+
|
9
|
+
###############################################################################
|
10
|
+
|
11
|
+
module Tasks
|
12
|
+
|
13
|
+
###############################################################################
|
14
|
+
|
15
|
+
class Plan < ::Rake::TaskLib
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
19
|
+
@backend
|
20
|
+
@binary
|
21
|
+
@code
|
22
|
+
@configs
|
23
|
+
@overrides
|
24
|
+
@service
|
25
|
+
|
26
|
+
###############################################################################
|
27
|
+
|
28
|
+
def initialize(backend:, binary:, code:, configs:, overrides:, service:)
|
29
|
+
@backend = backend
|
30
|
+
@binary = binary
|
31
|
+
@code = code
|
32
|
+
@configs = configs
|
33
|
+
@overrides = overrides
|
34
|
+
@service = service
|
35
|
+
|
36
|
+
yield self if block_given?
|
37
|
+
|
38
|
+
plan_task
|
39
|
+
end
|
40
|
+
|
41
|
+
###############################################################################
|
42
|
+
|
43
|
+
def plan_task
|
44
|
+
desc "Runs a Terraform plan for a given configuration on a workspace."
|
45
|
+
task :plan, [:config, :out] => :binary do |t, args|
|
46
|
+
$logger.info("Running Terraform plan for service: #{@service}, component: #{@code.name}...")
|
47
|
+
|
48
|
+
config = TerraformWrapper::Shared::Config.new(backend: @backend, base: @configs, code: @code, name: args[:config], overrides: @overrides, service: @service)
|
49
|
+
runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
|
50
|
+
|
51
|
+
runner.init(config: config)
|
52
|
+
runner.plan(file: args[:out])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
###############################################################################
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
###############################################################################
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
###############################################################################
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
###############################################################################
|
@@ -0,0 +1,68 @@
|
|
1
|
+
###############################################################################
|
2
|
+
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
###############################################################################
|
6
|
+
|
7
|
+
module TerraformWrapper
|
8
|
+
|
9
|
+
###############################################################################
|
10
|
+
|
11
|
+
module Tasks
|
12
|
+
|
13
|
+
###############################################################################
|
14
|
+
|
15
|
+
class PlanDestroy < ::Rake::TaskLib
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
19
|
+
@backend
|
20
|
+
@binary
|
21
|
+
@code
|
22
|
+
@configs
|
23
|
+
@overrides
|
24
|
+
@service
|
25
|
+
|
26
|
+
###############################################################################
|
27
|
+
|
28
|
+
def initialize(backend:, binary:, code:, configs:, overrides:, service:)
|
29
|
+
@backend = backend
|
30
|
+
@binary = binary
|
31
|
+
@code = code
|
32
|
+
@configs = configs
|
33
|
+
@overrides = overrides
|
34
|
+
@service = service
|
35
|
+
|
36
|
+
yield self if block_given?
|
37
|
+
|
38
|
+
plan_destroy_task
|
39
|
+
end
|
40
|
+
|
41
|
+
###############################################################################
|
42
|
+
|
43
|
+
def plan_destroy_task
|
44
|
+
desc "Runs a Terraform destroy plan for a given configuration on a workspace."
|
45
|
+
task :"plan-destroy", [:config, :out] => :binary do |t, args|
|
46
|
+
$logger.info("Running Terraform destroy plan for service: #{@service}, component: #{@code.name}...")
|
47
|
+
|
48
|
+
config = TerraformWrapper::Shared::Config.new(backend: @backend, base: @configs, code: @code, name: args[:config], overrides: @overrides, service: @service)
|
49
|
+
runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
|
50
|
+
|
51
|
+
runner.init(config: config)
|
52
|
+
runner.plan(destroy: true, file: args[:out])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
###############################################################################
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
###############################################################################
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
###############################################################################
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
###############################################################################
|
@@ -0,0 +1,59 @@
|
|
1
|
+
###############################################################################
|
2
|
+
|
3
|
+
require 'rake/tasklib'
|
4
|
+
|
5
|
+
###############################################################################
|
6
|
+
|
7
|
+
module TerraformWrapper
|
8
|
+
|
9
|
+
###############################################################################
|
10
|
+
|
11
|
+
module Tasks
|
12
|
+
|
13
|
+
###############################################################################
|
14
|
+
|
15
|
+
class Validate < ::Rake::TaskLib
|
16
|
+
|
17
|
+
###############################################################################
|
18
|
+
|
19
|
+
@binary
|
20
|
+
@code
|
21
|
+
|
22
|
+
###############################################################################
|
23
|
+
|
24
|
+
def initialize(binary:, code:)
|
25
|
+
@binary = binary
|
26
|
+
@code = code
|
27
|
+
|
28
|
+
yield self if block_given?
|
29
|
+
|
30
|
+
validate_task
|
31
|
+
end
|
32
|
+
|
33
|
+
###############################################################################
|
34
|
+
|
35
|
+
def validate_task
|
36
|
+
desc "Validates the Terraform code within a workspace."
|
37
|
+
task :validate => :binary do |t, args|
|
38
|
+
$logger.info("Validating Terraform component: #{@code.name}...")
|
39
|
+
|
40
|
+
runner = TerraformWrapper::Shared::Runner.new(binary: @binary, code: @code)
|
41
|
+
|
42
|
+
runner.download
|
43
|
+
runner.validate
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
###############################################################################
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
###############################################################################
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
###############################################################################
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
###############################################################################
|