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.
@@ -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
+ ###############################################################################