biosphere 0.0.6 → 0.0.7

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 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