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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a79a5dcf4507e01aac559a9398458e01471e3a6a
4
- data.tar.gz: a9191546b52c5e876f6047e1054b3e881428b715
3
+ metadata.gz: 9ee980513ddfc07689e198399e17b9abfc7050e0
4
+ data.tar.gz: 2c473550a6d4b5dccba280ac274dabd8a2b86115
5
5
  SHA512:
6
- metadata.gz: 8b93ed09bb9b7bc62a463436c1cb92f44b8e181eadc308e3dec006a6802aad126cecaa7732e0eea5c30eb95a9a8c7561ecbd74e3ce8de386e5f061746b66f292
7
- data.tar.gz: 8edb393eb8e5b8c8e16375647ad0a905b37b6c6fbd9ae7a35e3f094ffb79b670c108bd3d62b329a20950024f00d7a8b1502d1adfef40738d5e70ba99b34a42f2
6
+ metadata.gz: 9837f4dd741b461a7ff34723851a9b47656caa6274045cf4bacdd538f5325a6b29527332cb88dae55943dbe8bc55233571c2c0dcfda1c3ca9f5311c6e4e78a48
7
+ data.tar.gz: 10331fb8feea36c96e6ae41761ae32a4e161839b1e67075aafa0eaa11b5f46df39807ad681b3d36bec5f98af9195e6778eed3d9f8afed07871337485c59caa48
@@ -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
@@ -31,6 +31,10 @@ class Biosphere
31
31
  def save()
32
32
  return Marshal.dump(self)
33
33
  end
34
+
35
+ def values
36
+ return @data.values
37
+ end
34
38
  end
35
39
  end
36
40
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  class Biosphere
2
- Version = "0.0.7"
2
+ Version = "0.0.8"
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.7
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-04 00:00:00.000000000 Z
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