biosphere 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d5115c2f46376f74fb5363c8d7a444bf772d03f
4
- data.tar.gz: c7422c9510023b6cd9dff520d06f3856f784ee86
3
+ metadata.gz: a79a5dcf4507e01aac559a9398458e01471e3a6a
4
+ data.tar.gz: a9191546b52c5e876f6047e1054b3e881428b715
5
5
  SHA512:
6
- metadata.gz: 810054052f3e91849913fb8c4e3473314914014046963db9442c17fec236dade5fef71ebe81a0cc9d48b8279353d9502817239c09b3953ceb12ba87e6b2a5844
7
- data.tar.gz: d8e74858519877ae1f27f42ba0f23efaf33201c3d2a78c45582f699f44cc869cf6627edd4b92a4ef12b67537793c9b9e05fcd32ebe59cf33bf2884ffdea1ab85
6
+ metadata.gz: 8b93ed09bb9b7bc62a463436c1cb92f44b8e181eadc308e3dec006a6802aad126cecaa7732e0eea5c30eb95a9a8c7561ecbd74e3ce8de386e5f061746b66f292
7
+ data.tar.gz: 8edb393eb8e5b8c8e16375647ad0a905b37b6c6fbd9ae7a35e3f094ffb79b670c108bd3d62b329a20950024f00d7a8b1502d1adfef40738d5e70ba99b34a42f2
data/bin/biosphere CHANGED
@@ -100,21 +100,23 @@ if ARGV[0] == "json" && options.src
100
100
  puts "Wrote #{count} files into #{options.build}"
101
101
  suite.save_node()
102
102
 
103
- end
104
-
105
- if ARGV[0] == "plan" && options.src
103
+ elsif ARGV[0] == "plan" && options.src
106
104
  suite.evaluate_plans()
107
105
  ap suite.node, :indent=>-4
108
- end
109
-
110
- if ARGV[0] == "action" && options.src
106
+ elsif ARGV[0] == "action" && options.src
111
107
  context = Biosphere::ActionContext.new()
112
108
 
113
109
  context.build_directory = options.build
114
110
 
115
- STDERR.puts "Executing action #{ARGV[1]}"
116
- suite.call_action(ARGV[1], context)
111
+ if suite.call_action(ARGV[1], context)
112
+ STDERR.puts "Executing action #{ARGV[1]}"
113
+ else
114
+ STDERR.puts "Could not find action #{ARGV[1]}"
115
+ end
117
116
 
118
117
  suite.save_node()
118
+ else
119
+ STDERR.puts "\nERROR: Unknown command #{ARGV[0]}. Maybe you wanted to do: \"biosphere action #{ARGV[0]}\"?"
120
+ exit -1
119
121
  end
120
122
 
data/lib/biosphere.rb CHANGED
@@ -2,6 +2,7 @@ class Biosphere
2
2
 
3
3
  end
4
4
 
5
+ require "biosphere/ipaddressallocator"
5
6
  require "biosphere/version"
6
7
  require "biosphere/node"
7
8
  require "biosphere/terraformproxy"
@@ -0,0 +1,21 @@
1
+ require 'ipaddress'
2
+
3
+ class IPAddress::IPv4
4
+
5
+ def allocate(skip = 0)
6
+ if !@allocator
7
+ @allocator = 1
8
+ else
9
+ @allocator += + 1
10
+ end
11
+
12
+ @allocator += skip
13
+
14
+ next_ip = network_u32+@allocator
15
+ if next_ip > broadcast_u32+1
16
+ raise StopIteration
17
+ end
18
+ self.class.parse_u32(network_u32+@allocator, @prefix)
19
+ end
20
+
21
+ end
@@ -0,0 +1,36 @@
1
+ require 'yaml'
2
+ require 'kubeclient'
3
+ require 'erb'
4
+
5
+ class Biosphere
6
+ module Kube
7
+ def kube_test(str)
8
+ return str
9
+ end
10
+
11
+
12
+ def kube_load_manifest_file(file)
13
+ resources = []
14
+ puts "Loading file #{file}"
15
+ str = ERB.new(IO.read(file)).result(binding)
16
+ raise str
17
+ Psych.load_stream(str) do |document|
18
+ kind = document["kind"]
19
+ resource = ::Kubeclient::Resource.new(document)
20
+ resources << resource
21
+ end
22
+ return resources
23
+ end
24
+
25
+ def kube_create_resource(client, resource)
26
+ name = resource[:metadata][:name]
27
+ resource_name = client.instance_variable_get("@entities")[resource[:kind].downcase].resource_name
28
+ ns_prefix = client.build_namespace_prefix(resource[:metadata][:namespace])
29
+ client.handle_exception do
30
+ client.rest_client[ns_prefix + resource_name]
31
+ .post(resource.to_h.to_json, { 'Content-Type' => 'application/json' }.merge(client.instance_variable_get("@headers")))
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -76,11 +76,15 @@ class Biosphere
76
76
  end
77
77
 
78
78
  def call_action(name, context)
79
+ found = false
79
80
  @files.each do |file_name, proxy|
80
81
  if proxy.actions[name]
82
+ found = true
81
83
  proxy.call_action(name, context)
82
84
  end
83
85
  end
86
+
87
+ return found
84
88
  end
85
89
 
86
90
  def write_json_to(destination_dir)
@@ -1,4 +1,5 @@
1
1
  require 'biosphere/mixing/from_file.rb'
2
+ require 'biosphere/kube.rb'
2
3
  require 'json'
3
4
  require 'pathname'
4
5
  require 'base64'
@@ -8,6 +9,7 @@ class Biosphere
8
9
  class ActionContext
9
10
  attr_accessor :build_directory
10
11
  attr_accessor :caller
12
+ attr_accessor :src_path
11
13
 
12
14
  def initialize()
13
15
 
@@ -19,8 +21,14 @@ class Biosphere
19
21
  if @caller.methods.include?(symbol)
20
22
  return @caller.method(symbol).call(*args)
21
23
  end
24
+
25
+ super
22
26
  end
23
27
 
28
+ def find_file(filename)
29
+ src_path = Pathname.new(@src_path.last + "/" + File.dirname(filename)).cleanpath.to_s
30
+ return src_path + "/" + File.basename(filename)
31
+ end
24
32
 
25
33
  end
26
34
 
@@ -43,6 +51,8 @@ class Biosphere
43
51
  end
44
52
 
45
53
 
54
+
55
+
46
56
  def respond_to?(symbol, include_private = false)
47
57
  return true
48
58
  end
@@ -91,6 +101,8 @@ class Biosphere
91
101
  attr_accessor :plan_proxy
92
102
  attr_reader :src_path
93
103
 
104
+ include Kube
105
+
94
106
 
95
107
  def initialize(script_name, plan_proxy = nil)
96
108
  @script_name = script_name
@@ -120,6 +132,11 @@ class Biosphere
120
132
  self.instance_eval(&block)
121
133
  end
122
134
 
135
+ def find_file(filename)
136
+ src_path = Pathname.new(@src_path.last + "/" + File.dirname(filename)).cleanpath.to_s
137
+ return src_path + "/" + File.basename(filename)
138
+ end
139
+
123
140
  def load(filename)
124
141
  src_path = Pathname.new(@src_path.last + "/" + File.dirname(filename)).cleanpath.to_s
125
142
  # Push current src_path and overwrite @src_path so that it tracks recursive loads
@@ -162,7 +179,8 @@ class Biosphere
162
179
  :name => name,
163
180
  :description => description,
164
181
  :block => block,
165
- :location => caller[0]
182
+ :location => caller[0],
183
+ :src_path => @src_path.clone
166
184
  }
167
185
  end
168
186
 
@@ -188,6 +206,7 @@ class Biosphere
188
206
 
189
207
  def call_action(name, context)
190
208
  context.caller = self
209
+ context.src_path = @actions[name][:src_path]
191
210
 
192
211
  context.instance_eval(&@actions[name][:block])
193
212
  end
@@ -252,4 +271,5 @@ class Biosphere
252
271
  end
253
272
  end
254
273
  end
274
+
255
275
  end
@@ -1,3 +1,3 @@
1
1
  class Biosphere
2
- Version = "0.0.6"
2
+ Version = "0.0.7"
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.6
4
+ version: 0.0.7
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: 2016-11-02 00:00:00.000000000 Z
11
+ date: 2016-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.7.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: kubeclient
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.1.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.1.0
55
69
  description: "Terraform's HCL lacks quite many programming features like iterators,
56
70
  true variables, advanced string manipulation, functions etc.\n\n This Ruby tool
57
71
  provides an easy-to-use DSL to define Terraform compatible .json files which can
@@ -65,6 +79,8 @@ files:
65
79
  - bin/biosphere
66
80
  - examples/example.rb
67
81
  - lib/biosphere.rb
82
+ - lib/biosphere/ipaddressallocator.rb
83
+ - lib/biosphere/kube.rb
68
84
  - lib/biosphere/mixing/from_file.rb
69
85
  - lib/biosphere/node.rb
70
86
  - lib/biosphere/suite.rb