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.
@@ -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,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module TerraformDSL
4
+ VERSION = "0.0.1"
5
+ 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: []