tfr 0.0.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 +7 -0
- data/bin/tfr +7 -0
- data/lib/tfr/apply.rb +9 -0
- data/lib/tfr/cli.rb +35 -0
- data/lib/tfr/destroy.rb +9 -0
- data/lib/tfr/format.rb +9 -0
- data/lib/tfr/init.rb +9 -0
- data/lib/tfr/plan.rb +9 -0
- data/lib/tfr/refresh.rb +9 -0
- data/lib/tfr/release/commands.rb +11 -0
- data/lib/tfr/release/major.rb +14 -0
- data/lib/tfr/release/minor.rb +14 -0
- data/lib/tfr/release/patch.rb +14 -0
- data/lib/tfr/release/pre.rb +14 -0
- data/lib/tfr/release/release.rb +91 -0
- data/lib/tfr/terraform_group.rb +27 -0
- data/lib/tfr/terraform_workspace_group.rb +15 -0
- data/lib/tfr/validate.rb +9 -0
- data/lib/tfr/version.rb +4 -0
- data/lib/tfr.rb +35 -0
- metadata +132 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 836aeb50a9241a170b88db2ca99a5f7e6191ab500a8830bcf695ef06c09a3a17
|
4
|
+
data.tar.gz: ef41c0d1914efa0e886eefbd8f84c63dc3d1b643fce1e2efee222382cb48e049
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 18c5a84da9f339198893589ff3a90f28342be492963fd9fb04fb333ee06d1ebf6b9facc63268fcfd4b5f36dd80f4901bc8b82371e02e67a899b036e6f2087f06
|
7
|
+
data.tar.gz: 40b43bfb445aaba1fc23f086a331f3c4c01960b4cfe4e6cc58ace88ca4035a777a5a5650258a2214c986f8e44fbcfe65821e723c200825962429c3b45a5d0c32
|
data/bin/tfr
ADDED
data/lib/tfr/apply.rb
ADDED
data/lib/tfr/cli.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Wrapper for Terraform
|
4
|
+
module Tfr
|
5
|
+
TERRAFORM_VERSION = "1.3.7"
|
6
|
+
|
7
|
+
class CLI < Thor
|
8
|
+
def self.exit_on_failure?
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "list", "List Terraform projects"
|
13
|
+
|
14
|
+
def list(customer: "neutronium")
|
15
|
+
search_path = Pathname("#{Dir.home}/workspace/#{customer}")
|
16
|
+
results = search_path.glob("**/*.tf").collect { |f| File.dirname(f) }.compact.uniq
|
17
|
+
|
18
|
+
p results
|
19
|
+
end
|
20
|
+
|
21
|
+
# Workspaced commands
|
22
|
+
register(Tfr::Init, "init", "init", "Init terraform")
|
23
|
+
register(Tfr::Plan, "plan", "plan", "Plan terraform")
|
24
|
+
register(Tfr::Apply, "apply", "apply", "Apply terraform")
|
25
|
+
register(Tfr::Destroy, "destroy", "destroy", "Destroy terraform")
|
26
|
+
register(Tfr::Refresh, "refresh", "refresh", "Refresh terraform")
|
27
|
+
|
28
|
+
# Standard commands
|
29
|
+
register(Tfr::Validate, "validate", "validate", "Validate terraform")
|
30
|
+
register(Tfr::Format, "fmt", "format", "Format terraform")
|
31
|
+
|
32
|
+
desc "release SUBCOMMAND", "Manage module releases"
|
33
|
+
subcommand "release", Tfr::Release::Commands
|
34
|
+
end
|
35
|
+
end
|
data/lib/tfr/destroy.rb
ADDED
data/lib/tfr/format.rb
ADDED
data/lib/tfr/init.rb
ADDED
data/lib/tfr/plan.rb
ADDED
data/lib/tfr/refresh.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
module Tfr
|
2
|
+
module Release
|
3
|
+
class Commands < Thor
|
4
|
+
# Release commands
|
5
|
+
register(Tfr::Release::Major, "major", "maj", "Release new major version")
|
6
|
+
register(Tfr::Release::Minor, "minor", "min", "Release new minor version")
|
7
|
+
register(Tfr::Release::Patch, "patch", "pat", "Release new patch version")
|
8
|
+
register(Tfr::Release::Pre, "pre", "pre", "Release new pre-release version")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Tfr
|
2
|
+
module Release
|
3
|
+
class Major < Release
|
4
|
+
desc "Release new major version"
|
5
|
+
|
6
|
+
def major
|
7
|
+
current_tag = get_current_tag
|
8
|
+
puts current_tag
|
9
|
+
new_version = generate_next_tag(current_tag, :major)
|
10
|
+
puts new_version
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Tfr
|
2
|
+
module Release
|
3
|
+
class Minor < Release
|
4
|
+
desc "Release new minor version"
|
5
|
+
|
6
|
+
def minor
|
7
|
+
current_tag = get_current_tag
|
8
|
+
puts current_tag
|
9
|
+
new_version = generate_next_tag(current_tag, :minor)
|
10
|
+
puts new_version
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Tfr
|
2
|
+
module Release
|
3
|
+
class Patch < Release
|
4
|
+
desc "Release new patch version"
|
5
|
+
|
6
|
+
def patch
|
7
|
+
current_tag = get_current_tag
|
8
|
+
puts current_tag
|
9
|
+
new_version = generate_next_tag(current_tag, :patch)
|
10
|
+
puts new_version
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Tfr
|
2
|
+
module Release
|
3
|
+
class Pre < Release
|
4
|
+
desc "Release new pre version"
|
5
|
+
|
6
|
+
def pre
|
7
|
+
current_tag = get_current_tag
|
8
|
+
puts current_tag
|
9
|
+
new_version = generate_next_tag(current_tag, :pre_release)
|
10
|
+
puts new_version
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
module Tfr
|
2
|
+
module Release
|
3
|
+
class Release < Thor::Group
|
4
|
+
no_commands {
|
5
|
+
def get_current_tag
|
6
|
+
g = Git.open(".", :log => Logger.new(STDOUT))
|
7
|
+
g.tags.collect { |tag| Semverse::Version.new(tag.name) }.max
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate_next_tag(tag, field)
|
11
|
+
case field
|
12
|
+
when :major
|
13
|
+
logger.info("Major")
|
14
|
+
if tag.pre_release
|
15
|
+
logger.info("Pre")
|
16
|
+
Semverse::Version.new([
|
17
|
+
tag.major,
|
18
|
+
tag.minor,
|
19
|
+
tag.patch,
|
20
|
+
])
|
21
|
+
else
|
22
|
+
logger.info("No-Pre")
|
23
|
+
Semverse::Version.new([
|
24
|
+
tag.major + 1,
|
25
|
+
0,
|
26
|
+
0,
|
27
|
+
])
|
28
|
+
end
|
29
|
+
when :minor
|
30
|
+
logger.info("minor")
|
31
|
+
if tag.pre_release
|
32
|
+
logger.info("Pre")
|
33
|
+
Semverse::Version.new([
|
34
|
+
tag.major,
|
35
|
+
tag.minor,
|
36
|
+
tag.patch,
|
37
|
+
])
|
38
|
+
else
|
39
|
+
logger.info("No-Pre")
|
40
|
+
Semverse::Version.new([
|
41
|
+
tag.major,
|
42
|
+
tag.minor + 1,
|
43
|
+
0,
|
44
|
+
])
|
45
|
+
end
|
46
|
+
when :patch
|
47
|
+
logger.info("patch")
|
48
|
+
if tag.pre_release
|
49
|
+
logger.info("Pre")
|
50
|
+
Semverse::Version.new([
|
51
|
+
tag.major,
|
52
|
+
tag.minor,
|
53
|
+
tag.patch,
|
54
|
+
])
|
55
|
+
else
|
56
|
+
logger.info("No-Pre")
|
57
|
+
Semverse::Version.new([
|
58
|
+
tag.major,
|
59
|
+
tag.minor,
|
60
|
+
tag.patch + 1,
|
61
|
+
])
|
62
|
+
end
|
63
|
+
when :pre_release
|
64
|
+
logger.info("pre_release")
|
65
|
+
if tag.pre_release
|
66
|
+
logger.info("Pre #{tag.pre_release}")
|
67
|
+
Semverse::Version.new([
|
68
|
+
tag.major,
|
69
|
+
tag.minor,
|
70
|
+
tag.patch,
|
71
|
+
"rc.#{tag.pre_release + 1}",
|
72
|
+
])
|
73
|
+
else
|
74
|
+
logger.info("No-Pre")
|
75
|
+
Semverse::Version.new([
|
76
|
+
tag.major,
|
77
|
+
tag.minor,
|
78
|
+
tag.patch,
|
79
|
+
"rc.0",
|
80
|
+
])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def logger
|
86
|
+
logger ||= Logger.new(STDOUT)
|
87
|
+
end
|
88
|
+
}
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Tfr
|
2
|
+
class TerraformGroup < Thor::Group
|
3
|
+
no_commands {
|
4
|
+
def execute(command)
|
5
|
+
current_folder = Pathname.getwd
|
6
|
+
terraform_command = "docker run --rm -v #{Dir.home}/.aws:/root/.aws -v #{current_folder}:/data -w /data hashicorp/terraform:#{TERRAFORM_VERSION} #{command}"
|
7
|
+
logger.debug(terraform_command)
|
8
|
+
stdout, stderr, status = Open3.capture3(terraform_command)
|
9
|
+
result = status.exitstatus
|
10
|
+
if result != 0
|
11
|
+
logger.info stdout if !stdout.empty?
|
12
|
+
logger.fatal stderr
|
13
|
+
exit
|
14
|
+
else
|
15
|
+
logger.info stdout if !stdout.empty?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def execute_terraform
|
20
|
+
end
|
21
|
+
|
22
|
+
def logger
|
23
|
+
logger ||= Logger.new(STDOUT)
|
24
|
+
end
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Tfr
|
2
|
+
class TerraformWorkspaceGroup < TerraformGroup
|
3
|
+
argument :workspace, :type => :string, :desc => "Terraform Workspace name"
|
4
|
+
|
5
|
+
def select_workspace
|
6
|
+
execute("workspace select #{workspace}")
|
7
|
+
end
|
8
|
+
|
9
|
+
no_commands {
|
10
|
+
def workspace_variables
|
11
|
+
"-var-file tfvars/#{workspace}.tfvars"
|
12
|
+
end
|
13
|
+
}
|
14
|
+
end
|
15
|
+
end
|
data/lib/tfr/validate.rb
ADDED
data/lib/tfr/version.rb
ADDED
data/lib/tfr.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "fileutils"
|
3
|
+
require "logger"
|
4
|
+
require "open3"
|
5
|
+
require "pathname"
|
6
|
+
require "thor"
|
7
|
+
require "thor/group"
|
8
|
+
require "semver"
|
9
|
+
require "git"
|
10
|
+
|
11
|
+
# Root classes
|
12
|
+
require "tfr/terraform_group.rb"
|
13
|
+
require "tfr/terraform_workspace_group.rb"
|
14
|
+
require "tfr/release/release.rb"
|
15
|
+
|
16
|
+
# Terraform commands
|
17
|
+
require "tfr/apply.rb"
|
18
|
+
require "tfr/destroy.rb"
|
19
|
+
require "tfr/format.rb"
|
20
|
+
require "tfr/init.rb"
|
21
|
+
require "tfr/plan.rb"
|
22
|
+
require "tfr/refresh.rb"
|
23
|
+
require "tfr/validate.rb"
|
24
|
+
|
25
|
+
# Release commands
|
26
|
+
require "tfr/release/major.rb"
|
27
|
+
require "tfr/release/minor.rb"
|
28
|
+
require "tfr/release/patch.rb"
|
29
|
+
require "tfr/release/pre.rb"
|
30
|
+
|
31
|
+
require "tfr/release/commands.rb"
|
32
|
+
|
33
|
+
# CLI
|
34
|
+
require "tfr/cli.rb"
|
35
|
+
require "tfr/version.rb"
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tfr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Vincent Norguet
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-01-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: git
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.13'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.13'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: semver
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: thor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: open3
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.1.2
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.1.2
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
executables:
|
86
|
+
- tfr
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- bin/tfr
|
91
|
+
- lib/tfr.rb
|
92
|
+
- lib/tfr/apply.rb
|
93
|
+
- lib/tfr/cli.rb
|
94
|
+
- lib/tfr/destroy.rb
|
95
|
+
- lib/tfr/format.rb
|
96
|
+
- lib/tfr/init.rb
|
97
|
+
- lib/tfr/plan.rb
|
98
|
+
- lib/tfr/refresh.rb
|
99
|
+
- lib/tfr/release/commands.rb
|
100
|
+
- lib/tfr/release/major.rb
|
101
|
+
- lib/tfr/release/minor.rb
|
102
|
+
- lib/tfr/release/patch.rb
|
103
|
+
- lib/tfr/release/pre.rb
|
104
|
+
- lib/tfr/release/release.rb
|
105
|
+
- lib/tfr/terraform_group.rb
|
106
|
+
- lib/tfr/terraform_workspace_group.rb
|
107
|
+
- lib/tfr/validate.rb
|
108
|
+
- lib/tfr/version.rb
|
109
|
+
homepage:
|
110
|
+
licenses:
|
111
|
+
- MIT
|
112
|
+
metadata: {}
|
113
|
+
post_install_message:
|
114
|
+
rdoc_options: []
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubygems_version: 3.3.7
|
129
|
+
signing_key:
|
130
|
+
specification_version: 4
|
131
|
+
summary: Wrapper for Terraform
|
132
|
+
test_files: []
|