biosphere 0.0.14 → 0.1.0

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.
@@ -15,6 +15,10 @@ class Biosphere
15
15
 
16
16
  end
17
17
 
18
+ def state
19
+ return @caller.state.node
20
+ end
21
+
18
22
  def method_missing(symbol, *args)
19
23
  #puts ">>>>>>>> method missing: #{symbol}, #{args}"
20
24
 
@@ -32,15 +36,6 @@ class Biosphere
32
36
 
33
37
  end
34
38
 
35
-
36
- class PlanProxy
37
- attr_accessor :node
38
- def initialize()
39
- @node = Node.new
40
- end
41
-
42
- end
43
-
44
39
  class ResourceProxy
45
40
  attr_reader :output
46
41
  attr_reader :caller
@@ -50,46 +45,52 @@ class Biosphere
50
45
  @caller = caller
51
46
  end
52
47
 
53
-
54
-
55
-
56
48
  def respond_to?(symbol, include_private = false)
57
49
  return true
58
50
  end
59
51
 
60
52
  def set(symbol, value)
61
- @output[symbol] = value
62
- end
63
-
64
- def method_missing(symbol, *args)
65
- #puts ">>>>>>>> method missing: #{symbol}, #{args}"
66
-
67
- if @caller.methods.include?(symbol)
68
- return @caller.method(symbol).call(*args)
69
- end
70
-
71
- # Support getter here
72
- if args.length == 0
73
- return @output[symbol]
74
- end
75
53
 
76
54
  # Support setter here
77
55
  if [:ingress, :egress, :route].include?(symbol)
78
56
  @output[symbol] ||= []
79
- if args[0].kind_of?(Array)
80
- @output[symbol] += args[0]
57
+ if value.kind_of?(Array)
58
+ @output[symbol] += value
81
59
  else
82
- @output[symbol] << args[0]
60
+ @output[symbol] << value
83
61
  end
84
62
  else
85
- @output[symbol] = args[0]
63
+ @output[symbol] = value
86
64
  end
87
65
 
88
- # We need to first gzip and then base64-encode the user_data string to work around the 16kb size limitation in AWS
89
66
  if symbol === :user_data
90
- @output[symbol] = Base64.strict_encode64(Zlib::Deflate.new(nil, 31).deflate(args[0], Zlib::FINISH))
67
+ @output[symbol] = Base64.strict_encode64(Zlib::Deflate.new(nil, 31).deflate(value, Zlib::FINISH))
91
68
  end
92
69
  end
70
+
71
+ def get(symbol)
72
+ return @output[symbol]
73
+ end
74
+
75
+ def node
76
+ return @caller.node
77
+ end
78
+
79
+ def state
80
+ return @caller.state.node
81
+ end
82
+
83
+ def id_of(type,name)
84
+ "${#{type}.#{name}.id}"
85
+ end
86
+
87
+ def output_of(type, name, *values)
88
+ "${#{type}.#{name}.#{values.join(".")}}"
89
+ end
90
+
91
+ def method_missing(symbol, *args)
92
+ return @caller.method(symbol).call(*args)
93
+ end
93
94
  end
94
95
 
95
96
  class TerraformProxy
@@ -97,14 +98,12 @@ class Biosphere
97
98
  attr_accessor :export
98
99
  attr_accessor :resources
99
100
  attr_accessor :actions
100
- attr_accessor :plans
101
- attr_accessor :plan_proxy
102
101
  attr_reader :src_path
103
102
 
104
103
  include Kube
105
104
 
106
105
 
107
- def initialize(script_name, plan_proxy = nil)
106
+ def initialize(script_name, suite)
108
107
  @script_name = script_name
109
108
  @src_path = [File.dirname(script_name)]
110
109
 
@@ -114,16 +113,16 @@ class Biosphere
114
113
  "variable" => {},
115
114
  "output" => {}
116
115
  }
117
- if !plan_proxy
118
- plan_proxy = PlanProxy.new
119
- end
120
- @plan_proxy = plan_proxy
121
- @resources = []
116
+ @suite = suite
122
117
  @actions = {}
123
- @plans = []
118
+ @deployments = []
124
119
 
125
120
  end
126
121
 
122
+ def register(deployment)
123
+ @suite.register(deployment)
124
+ end
125
+
127
126
  def load_from_file()
128
127
  self.from_file(@script_name)
129
128
  end
@@ -159,25 +158,8 @@ class Biosphere
159
158
  @src_path.pop
160
159
  end
161
160
 
162
-
163
161
  include Biosphere::Mixing::FromFile
164
162
 
165
- def provider(name, spec={})
166
- @export["provider"][name.to_s] = spec
167
- end
168
-
169
- def variable(name, value)
170
- @export["variable"][name] = {
171
- "default" => value
172
- }
173
- end
174
-
175
- def output(name, value)
176
- @export["output"][name] = {
177
- "value" => value
178
- }
179
- end
180
-
181
163
  def action(name, description, &block)
182
164
  @actions[name] = {
183
165
  :name => name,
@@ -188,26 +170,6 @@ class Biosphere
188
170
  }
189
171
  end
190
172
 
191
- def plan(name, &block)
192
- plan = {
193
- :name => name,
194
- :block => block,
195
- :location => caller[0]
196
- }
197
- @plans << plan
198
- end
199
-
200
- def node
201
- return @plan_proxy.node
202
- end
203
-
204
- def evaluate_plans()
205
- @plans.each do |resource|
206
- @plan_proxy.instance_eval(&resource[:block])
207
- end
208
-
209
- end
210
-
211
173
  def call_action(name, context)
212
174
  context.caller = self
213
175
  context.src_path = @actions[name][:src_path]
@@ -215,40 +177,6 @@ class Biosphere
215
177
  context.instance_eval(&@actions[name][:block])
216
178
  end
217
179
 
218
- def resource(type, name, &block)
219
- @export["resource"][type.to_s] ||= {}
220
- if @export["resource"][type.to_s][name.to_s]
221
- throw "Tried to create a resource of type #{type} called '#{name}' when one already exists"
222
- end
223
-
224
- spec = {}
225
- resource = {
226
- :name => name,
227
- :type => type,
228
- :location => caller[0] + "a"
229
- }
230
-
231
- if block_given?
232
- resource[:block] = block
233
- else
234
- STDERR.puts("WARNING: No block set for resource call '#{type}', '#{name}' at #{caller[0]}")
235
- end
236
-
237
-
238
-
239
- @resources << resource
240
-
241
- end
242
-
243
- def evaluate_resources()
244
- @resources.each do |resource|
245
- proxy = ResourceProxy.new(self)
246
- proxy.instance_eval(&resource[:block])
247
-
248
- @export["resource"][resource[:type].to_s][resource[:name].to_s] = proxy.output
249
- end
250
- end
251
-
252
180
  def id_of(type,name)
253
181
  "${#{type}.#{name}.id}"
254
182
  end
@@ -257,22 +185,12 @@ class Biosphere
257
185
  "${#{type}.#{name}.#{values.join(".")}}"
258
186
  end
259
187
 
260
- def add_resource_alias(type)
261
- define_singleton_method type.to_sym do |name, spec={}|
262
- resource(type, name, spec)
263
- end
264
- end
265
-
266
- def use_resource_shortcuts!
267
- require_relative 'resource_shortcuts'
188
+ def state
189
+ return @suite.state
268
190
  end
269
191
 
270
- def to_json(pretty=false)
271
- if pretty
272
- return JSON.pretty_generate(@export)
273
- else
274
- return JSON.generate(@export)
275
- end
192
+ def suite
193
+ return @suite
276
194
  end
277
195
  end
278
196
 
@@ -1,3 +1,3 @@
1
1
  class Biosphere
2
- Version = "0.0.14"
2
+ Version = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biosphere
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juho Mäkinen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-21 00:00:00.000000000 Z
11
+ date: 2017-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -108,6 +108,34 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '2'
111
+ - !ruby/object:Gem::Dependency
112
+ name: deep_merge
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 1.1.1
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 1.1.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: deep_dup
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 0.0.3
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 0.0.3
111
139
  description: "Terraform's HCL lacks quite many programming features like iterators,
112
140
  true variables, advanced string manipulation, functions etc.\n\n This Ruby tool
113
141
  provides an easy-to-use DSL to define Terraform compatible .json files which can
@@ -121,11 +149,14 @@ files:
121
149
  - bin/biosphere
122
150
  - examples/example.rb
123
151
  - lib/biosphere.rb
152
+ - lib/biosphere/deployment.rb
124
153
  - lib/biosphere/ipaddressallocator.rb
125
154
  - lib/biosphere/kube.rb
126
155
  - lib/biosphere/mixing/from_file.rb
127
156
  - lib/biosphere/node.rb
128
157
  - lib/biosphere/s3.rb
158
+ - lib/biosphere/settings.rb
159
+ - lib/biosphere/state.rb
129
160
  - lib/biosphere/suite.rb
130
161
  - lib/biosphere/terraformproxy.rb
131
162
  - lib/biosphere/version.rb