biosphere 0.0.7 → 0.0.8
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 +4 -4
- data/lib/biosphere/kube.rb +83 -2
- data/lib/biosphere/node.rb +4 -0
- data/lib/biosphere/terraformproxy.rb +5 -1
- data/lib/biosphere/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ee980513ddfc07689e198399e17b9abfc7050e0
|
4
|
+
data.tar.gz: 2c473550a6d4b5dccba280ac274dabd8a2b86115
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9837f4dd741b461a7ff34723851a9b47656caa6274045cf4bacdd538f5325a6b29527332cb88dae55943dbe8bc55233571c2c0dcfda1c3ca9f5311c6e4e78a48
|
7
|
+
data.tar.gz: 10331fb8feea36c96e6ae41761ae32a4e161839b1e67075aafa0eaa11b5f46df39807ad681b3d36bec5f98af9195e6778eed3d9f8afed07871337485c59caa48
|
data/lib/biosphere/kube.rb
CHANGED
@@ -1,6 +1,26 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'kubeclient'
|
3
3
|
require 'erb'
|
4
|
+
require 'hashdiff'
|
5
|
+
|
6
|
+
class String
|
7
|
+
# Converts "CamelCase"" into "camel_case"
|
8
|
+
def underscore_case()
|
9
|
+
str = ""
|
10
|
+
self.chars.each do |c|
|
11
|
+
if c == c.upcase
|
12
|
+
if str != ""
|
13
|
+
str += "_"
|
14
|
+
end
|
15
|
+
str += c.downcase
|
16
|
+
else
|
17
|
+
str += c
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
return str
|
22
|
+
end
|
23
|
+
end
|
4
24
|
|
5
25
|
class Biosphere
|
6
26
|
module Kube
|
@@ -8,12 +28,25 @@ class Biosphere
|
|
8
28
|
return str
|
9
29
|
end
|
10
30
|
|
31
|
+
def kube_load_manifest_files(dir)
|
32
|
+
files = Dir[dir + "/**/*.erb"]
|
33
|
+
resources = []
|
34
|
+
files.each do |file|
|
35
|
+
resources += kube_load_manifest_file(file)
|
36
|
+
end
|
37
|
+
|
38
|
+
files = Dir[dir + "/**/*.yaml"]
|
39
|
+
files.each do |file|
|
40
|
+
resources += kube_load_manifest_file(file)
|
41
|
+
end
|
42
|
+
|
43
|
+
resources
|
44
|
+
end
|
11
45
|
|
12
46
|
def kube_load_manifest_file(file)
|
13
47
|
resources = []
|
14
48
|
puts "Loading file #{file}"
|
15
49
|
str = ERB.new(IO.read(file)).result(binding)
|
16
|
-
raise str
|
17
50
|
Psych.load_stream(str) do |document|
|
18
51
|
kind = document["kind"]
|
19
52
|
resource = ::Kubeclient::Resource.new(document)
|
@@ -30,7 +63,55 @@ class Biosphere
|
|
30
63
|
client.rest_client[ns_prefix + resource_name]
|
31
64
|
.post(resource.to_h.to_json, { 'Content-Type' => 'application/json' }.merge(client.instance_variable_get("@headers")))
|
32
65
|
end
|
33
|
-
|
34
66
|
end
|
67
|
+
|
68
|
+
|
69
|
+
def kube_apply_resource(client, resource)
|
70
|
+
name = resource[:metadata][:name]
|
71
|
+
resource_name = client.instance_variable_get("@entities")[resource[:kind].underscore_case].resource_name
|
72
|
+
ns_prefix = client.build_namespace_prefix(resource[:metadata][:namespace])
|
73
|
+
|
74
|
+
responses = []
|
75
|
+
begin
|
76
|
+
ret = client.rest_client[ns_prefix + resource_name]
|
77
|
+
.post(resource.to_h.to_json, { 'Content-Type' => 'application/json' }.merge(client.instance_variable_get("@headers")))
|
78
|
+
responses << {
|
79
|
+
action: :post,
|
80
|
+
resource: ns_prefix + resource_name + "/#{name}",
|
81
|
+
body: JSON.parse(ret.body)
|
82
|
+
}
|
83
|
+
puts "Created resource #{key}/#{name}"
|
84
|
+
|
85
|
+
rescue RestClient::Conflict => e
|
86
|
+
key = ns_prefix + resource_name + "/#{name}"
|
87
|
+
rest = client.rest_client[key]
|
88
|
+
|
89
|
+
ret = rest.get(client.instance_variable_get("@headers"))
|
90
|
+
current_data = JSON.parse(ret.body, :symbolize_names => true)
|
91
|
+
puts "Updating resource #{key}"
|
92
|
+
headers = { 'Content-Type' => 'application/json' }.merge(client.instance_variable_get("@headers"))
|
93
|
+
update_resource = resource.dup
|
94
|
+
update_resource.delete_field(:apiVersion)
|
95
|
+
current_data.merge(update_resource)
|
96
|
+
pp current_data.to_h
|
97
|
+
|
98
|
+
begin
|
99
|
+
ret = rest.put(current_data.to_h.to_json, headers)
|
100
|
+
responses << {
|
101
|
+
action: :put,
|
102
|
+
resource: key,
|
103
|
+
body: JSON.parse(ret.body)
|
104
|
+
}
|
105
|
+
|
106
|
+
rescue RestClient::Exception => e
|
107
|
+
puts "Error updating resource: #{e} #{e.class}"
|
108
|
+
pp JSON.parse(e.response)
|
109
|
+
rescue RestClient::Exception => e
|
110
|
+
puts "Misc exception: #{e}, #{e.class}, #{e.response}"
|
111
|
+
end
|
112
|
+
|
113
|
+
return responses
|
114
|
+
end
|
115
|
+
end
|
35
116
|
end
|
36
117
|
end
|
data/lib/biosphere/node.rb
CHANGED
@@ -137,6 +137,10 @@ class Biosphere
|
|
137
137
|
return src_path + "/" + File.basename(filename)
|
138
138
|
end
|
139
139
|
|
140
|
+
def find_dir(dirname)
|
141
|
+
return Pathname.new(@src_path.last).cleanpath.to_s
|
142
|
+
end
|
143
|
+
|
140
144
|
def load(filename)
|
141
145
|
src_path = Pathname.new(@src_path.last + "/" + File.dirname(filename)).cleanpath.to_s
|
142
146
|
# Push current src_path and overwrite @src_path so that it tracks recursive loads
|
@@ -271,5 +275,5 @@ class Biosphere
|
|
271
275
|
end
|
272
276
|
end
|
273
277
|
end
|
274
|
-
|
278
|
+
|
275
279
|
end
|
data/lib/biosphere/version.rb
CHANGED
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.
|
4
|
+
version: 0.0.8
|
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-
|
11
|
+
date: 2016-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: hashdiff
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.3.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.3.0
|
69
83
|
description: "Terraform's HCL lacks quite many programming features like iterators,
|
70
84
|
true variables, advanced string manipulation, functions etc.\n\n This Ruby tool
|
71
85
|
provides an easy-to-use DSL to define Terraform compatible .json files which can
|