terraformdsl 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/.gitignore +8 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +370 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/examples/Rakefile +42 -0
- data/examples/aws-infra.rb +204 -0
- data/examples/aws-infra.tf +472 -0
- data/examples/terraform.tfvars +4 -0
- data/lib/terraformdsl.rb +8 -0
- data/lib/terraformdsl/aws.rb +1072 -0
- data/lib/terraformdsl/common.rb +112 -0
- data/lib/terraformdsl/version.rb +5 -0
- data/terraformdsl.gemspec +30 -0
- metadata +103 -0
@@ -0,0 +1,112 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module TerraformDSL
|
4
|
+
|
5
|
+
|
6
|
+
class Variables
|
7
|
+
|
8
|
+
def initialize(names=[])
|
9
|
+
@vars = {}
|
10
|
+
names.each do |k|
|
11
|
+
k = k.intern if k.is_a?(String)
|
12
|
+
@vars[k] = Var.new(k)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def define(name, desc=nil, default: nil)
|
17
|
+
name = name.intern if name.is_a?(String)
|
18
|
+
@vars[name] = Var.new(name, desc, default: default)
|
19
|
+
end
|
20
|
+
|
21
|
+
def method_missing(name, *args)
|
22
|
+
args.empty? or super
|
23
|
+
@vars.key?(name) or super
|
24
|
+
return @vars[name]
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_tf()
|
28
|
+
buf = []
|
29
|
+
@vars.each do |k, v|
|
30
|
+
buf << v.generate_tf()
|
31
|
+
end
|
32
|
+
buf << "\n"
|
33
|
+
return buf.join("")
|
34
|
+
end
|
35
|
+
|
36
|
+
#def self.load_tfvars(__filename)
|
37
|
+
# eval File.read(__filename)
|
38
|
+
# __d = local_variables().inject({}) {|d, k|
|
39
|
+
# d[k] = nil unless k.start_with?('__')
|
40
|
+
# d
|
41
|
+
# }
|
42
|
+
# return self.new(__d)
|
43
|
+
#end
|
44
|
+
|
45
|
+
def self.load_tf(filename)
|
46
|
+
content = File.read(filename)
|
47
|
+
rexp = /^[ \t]*variable[ \t]+"([^"]+)"/
|
48
|
+
names = []; content.scan(rexp) { names << $1 }
|
49
|
+
return self.new(names)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
class Var
|
56
|
+
|
57
|
+
def initialize(name, desc=nil, default: nil)
|
58
|
+
name = name.intern if name.is_a?(String)
|
59
|
+
@name = name
|
60
|
+
@desc = desc
|
61
|
+
@default = default
|
62
|
+
end
|
63
|
+
attr_reader :name, :desc, :default
|
64
|
+
|
65
|
+
def to_s
|
66
|
+
"${var.#{@name}}"
|
67
|
+
end
|
68
|
+
|
69
|
+
def generate_tf
|
70
|
+
k = @name; v = @default; d = @desc
|
71
|
+
tf = "variable %-18s {" % "\"#{k}\""
|
72
|
+
tf << "\n" if ! v.nil? || ! d.nil?
|
73
|
+
tf << " description = #{d.inspect}\n" if ! d.nil?
|
74
|
+
tf << " default = #{v.inspect}\n" if ! v.nil?
|
75
|
+
tf << "}\n"
|
76
|
+
return tf
|
77
|
+
end
|
78
|
+
|
79
|
+
def inspect
|
80
|
+
to_s()
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
class Outputs
|
87
|
+
|
88
|
+
def initialize
|
89
|
+
@dict = {}
|
90
|
+
end
|
91
|
+
|
92
|
+
def define(key, val)
|
93
|
+
@dict[key] = val
|
94
|
+
end
|
95
|
+
|
96
|
+
alias []= define
|
97
|
+
|
98
|
+
def generate_tf
|
99
|
+
tf = ""
|
100
|
+
@dict.each do |k, v|
|
101
|
+
tf << "output \"#{k}\" {\n"
|
102
|
+
tf << " value = \"#{v}\"\n"
|
103
|
+
tf << "}\n"
|
104
|
+
tf << "\n"
|
105
|
+
end
|
106
|
+
return tf
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
lib = File.expand_path("../lib", __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require "terraformdsl/version"
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = "terraformdsl"
|
9
|
+
spec.version = TerraformDSL::VERSION
|
10
|
+
spec.authors = ["Kauplan Agency"]
|
11
|
+
spec.email = ["support@kauplan.org"]
|
12
|
+
|
13
|
+
spec.summary = "DSL to generate Terraform *.tf file"
|
14
|
+
spec.description = "(experimental) DSL to generate Terraform *.tf file"
|
15
|
+
spec.homepage = "https://github.com/kauplan/terraformdsl/"
|
16
|
+
spec.license = "MIT"
|
17
|
+
|
18
|
+
# Specify which files should be added to the gem when it is released.
|
19
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
21
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
22
|
+
end
|
23
|
+
spec.bindir = "exe"
|
24
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
|
+
spec.require_paths = ["lib"]
|
26
|
+
|
27
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
28
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
29
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: terraformdsl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kauplan Agency
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-03-21 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.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
description: "(experimental) DSL to generate Terraform *.tf file"
|
56
|
+
email:
|
57
|
+
- support@kauplan.org
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- ".travis.yml"
|
64
|
+
- Gemfile
|
65
|
+
- LICENSE.txt
|
66
|
+
- README.md
|
67
|
+
- Rakefile
|
68
|
+
- bin/console
|
69
|
+
- bin/setup
|
70
|
+
- examples/Rakefile
|
71
|
+
- examples/aws-infra.rb
|
72
|
+
- examples/aws-infra.tf
|
73
|
+
- examples/terraform.tfvars
|
74
|
+
- lib/terraformdsl.rb
|
75
|
+
- lib/terraformdsl/aws.rb
|
76
|
+
- lib/terraformdsl/common.rb
|
77
|
+
- lib/terraformdsl/version.rb
|
78
|
+
- terraformdsl.gemspec
|
79
|
+
homepage: https://github.com/kauplan/terraformdsl/
|
80
|
+
licenses:
|
81
|
+
- MIT
|
82
|
+
metadata: {}
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 2.7.6
|
100
|
+
signing_key:
|
101
|
+
specification_version: 4
|
102
|
+
summary: DSL to generate Terraform *.tf file
|
103
|
+
test_files: []
|