ruby-kubernetes-controller 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,182 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'openssl'
4
+ require 'json'
5
+
6
+ require_relative 'generic'
7
+
8
+ module Endpoints
9
+
10
+ include Generic
11
+
12
+ # Create new Endpoint
13
+ def create_new_endpoint(namespace, config)
14
+ extension = "/api/v1/namespaces/#{namespace}/endpoints"
15
+
16
+ uri = prepareURI(@endpoint, extension)
17
+
18
+ request = prepareGenericRequest(uri, @bearer_token, "POST")
19
+ request.content_type = "application/json"
20
+
21
+ if @yaml
22
+ request.body = yaml_file_to_json(config)
23
+ else
24
+ request.body = config
25
+ end
26
+
27
+ req_options = prepareGenericRequestOptions(@ssl, uri)
28
+
29
+ begin
30
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
31
+ http.request(request)
32
+ end
33
+ return response.body
34
+
35
+ rescue Errno::ECONNREFUSED
36
+ raise "Connection for host #{uri.hostname} refused"
37
+ end
38
+ end
39
+
40
+ # Get all Endpoints
41
+ def get_all_endpoints
42
+ extension = "/api/v1/endpoints"
43
+
44
+ uri = prepareURI(@endpoint, extension)
45
+
46
+ request = prepareGenericRequest(uri, @bearer_token, "GET")
47
+
48
+ req_options = prepareGenericRequestOptions(@ssl, uri)
49
+
50
+ begin
51
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
52
+ http.request(request)
53
+ end
54
+ return response.body
55
+
56
+ rescue Errno::ECONNREFUSED
57
+ raise "Connection for host #{uri.hostname} refused"
58
+ end
59
+ end
60
+
61
+ # Get all existing Endpoints in Namespace
62
+ def get_all_namespaced_endpoints(namespace)
63
+ extension = "/api/v1/namespaces/#{namespace}/endpoints"
64
+
65
+ uri = prepareURI(@endpoint, extension)
66
+
67
+ request = prepareGenericRequest(uri, @bearer_token, "GET")
68
+
69
+ req_options = prepareGenericRequestOptions(@ssl, uri)
70
+
71
+ begin
72
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
73
+ http.request(request)
74
+ end
75
+ return response.body
76
+
77
+ rescue Errno::ECONNREFUSED
78
+ raise "Connection for host #{uri.hostname} refused"
79
+ end
80
+ end
81
+
82
+ # Get single Endpoint in Namespace
83
+ def get_single_namespaced_endpoint(namespace, endpoint_name)
84
+ extension = "/api/v1/namespaces/#{namespace}/endpoints/#{endpoint_name}"
85
+
86
+ uri = prepareURI(@endpoint, extension)
87
+
88
+ request = prepareGenericRequest(uri, @bearer_token, "GET")
89
+
90
+ req_options = prepareGenericRequestOptions(@ssl, uri)
91
+
92
+ begin
93
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
94
+ http.request(request)
95
+ end
96
+ return response.body
97
+ rescue Errno::ECONNREFUSED
98
+ raise "Connection for host #{uri.hostname} refused"
99
+ end
100
+ end
101
+
102
+ # Update existing Endpoint in Namespace
103
+ def update_namespaced_endpoint(namespace, endpoint_name, update)
104
+ extension = "/api/v1/namespaces/#{namespace}/endpoints/#{endpoint_name}"
105
+
106
+ uri = prepareURI(@endpoint, extension)
107
+
108
+ request = prepareGenericRequest(uri, @bearer_token, "PUT")
109
+ request.content_type = "application/json"
110
+
111
+ if @yaml
112
+ request.body = yaml_file_to_json(update)
113
+ else
114
+ request.body = update
115
+ end
116
+
117
+ req_options = prepareGenericRequestOptions(@ssl, uri)
118
+
119
+ begin
120
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
121
+ http.request(request)
122
+ end
123
+ return response.body
124
+
125
+ rescue Errno::ECONNREFUSED
126
+ raise "Connection for host #{uri.hostname} refused"
127
+ end
128
+ end
129
+
130
+ # Patch existing Endpoint
131
+ def patch_endpoint(namespace, endpoint_name, patch)
132
+ extension = "/api/v1/namespaces/#{namespace}/endpoints/#{endpoint_name}"
133
+
134
+ uri = prepareURI(@endpoint, extension)
135
+
136
+ request = prepareGenericRequest(uri, @bearer_token, "PATCH")
137
+ request.content_type = "application/json-patch+json"
138
+
139
+ request.body = patch
140
+
141
+ req_options = prepareGenericRequestOptions(@ssl, uri)
142
+
143
+ begin
144
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
145
+ http.request(request)
146
+ end
147
+ return response.body
148
+ rescue Errno::ECONNREFUSED
149
+ raise "Connection for host #{uri.hostname} refused"
150
+ end
151
+ end
152
+
153
+ # Delete existing Endpoint
154
+ def delete_endpoint(namespace, endpoint_name, options = '')
155
+ extension = "/api/v1/namespaces/#{namespace}/endpoints/#{endpoint_name}"
156
+
157
+ uri = prepareURI(@endpoint, extension)
158
+
159
+ request = prepareGenericRequest(uri, @bearer_token, "DELETE")
160
+ request.content_type = "application/json"
161
+
162
+ if @yaml
163
+ request.body = yaml_file_to_json(options)
164
+ else
165
+ request.body = options
166
+ end
167
+
168
+ req_options = prepareGenericRequestOptions(@ssl, uri)
169
+
170
+ begin
171
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
172
+ http.request(request)
173
+ end
174
+ return response.body
175
+
176
+ rescue Errno::ECONNREFUSED
177
+ raise "Connection for host #{uri.hostname} refused"
178
+ end
179
+ end
180
+
181
+ end
182
+
@@ -0,0 +1,70 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'openssl'
4
+ require 'json'
5
+ require 'yaml'
6
+ require 'open-uri'
7
+
8
+ module Generic
9
+ # Create a URI Object
10
+ def prepareURI(endpoint, extension)
11
+ URI.parse("https://#{endpoint}#{extension}")
12
+ end
13
+
14
+ # Prepare a Generic Request Object
15
+ def prepareGenericRequest(uri, bearer_token, type)
16
+ if type == "GET"
17
+ request = Net::HTTP::Get.new(uri)
18
+ elsif type == "PATCH"
19
+ request = Net::HTTP::Patch.new(uri)
20
+ elsif type == "PUT"
21
+ request = Net::HTTP::Put.new(uri)
22
+ elsif type == "POST"
23
+ request = Net::HTTP::Post.new(uri)
24
+ elsif type == "DELETE"
25
+ request = Net::HTTP::Delete.new(uri)
26
+ else
27
+ request = Net::HTTP::Get.new(uri)
28
+ end
29
+ request["Authorization"] = "Bearer #{bearer_token}"
30
+ request["Accept"] = "application/json"
31
+
32
+ request
33
+ end
34
+
35
+ # Prepare a Generic Request Options Object
36
+ def prepareGenericRequestOptions(ssl, uri)
37
+ if !ssl
38
+ req_options = {
39
+ use_ssl: uri.scheme == "https",
40
+ verify_mode: OpenSSL::SSL::VERIFY_NONE,
41
+ }
42
+ else
43
+ req_options = {
44
+ use_ssl: uri.scheme == "https",
45
+ }
46
+ end
47
+
48
+ req_options
49
+ end
50
+
51
+ # Check if entry is a valid JSON string
52
+ def check_valid_json(json)
53
+ !!JSON.parse(json)
54
+ rescue JSON::ParserError => _e
55
+ false
56
+ end
57
+
58
+ # Convert Yaml File to JSON
59
+ def yaml_file_to_json(yaml_file)
60
+ if !check_valid_json(yaml_file)
61
+ if yaml_file != ''
62
+ JSON.pretty_generate(YAML.load(open(yaml_file).read))
63
+ else
64
+ ''
65
+ end
66
+ else
67
+ raise 'JSON entered instead of yaml file for a yaml client'
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,180 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'openssl'
4
+ require 'json'
5
+
6
+ require_relative 'generic'
7
+
8
+ module Ingresses
9
+ include Generic
10
+
11
+ # Create new Ingress
12
+ def create_new_ingress(namespace, config)
13
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/ingresses"
14
+
15
+ uri = prepareURI(@endpoint, extension)
16
+
17
+ request = prepareGenericRequest(uri, @bearer_token, "POST")
18
+ request.content_type = "application/json"
19
+
20
+ if @yaml
21
+ request.body = yaml_file_to_json(config)
22
+ else
23
+ request.body = config
24
+ end
25
+
26
+ req_options = prepareGenericRequestOptions(@ssl, uri)
27
+
28
+ begin
29
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
30
+ http.request(request)
31
+ end
32
+ return response.body
33
+
34
+ rescue Errno::ECONNREFUSED
35
+ raise "Connection for host #{uri.hostname} refused"
36
+ end
37
+ end
38
+
39
+ # Get all Ingresses
40
+ def get_all_ingresses
41
+ extension = "/apis/extensions/v1beta1/ingresses"
42
+
43
+ uri = prepareURI(@endpoint, extension)
44
+
45
+ request = prepareGenericRequest(uri, @bearer_token, "GET")
46
+
47
+ req_options = prepareGenericRequestOptions(@ssl, uri)
48
+
49
+ begin
50
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
51
+ http.request(request)
52
+ end
53
+ return response.body
54
+
55
+ rescue Errno::ECONNREFUSED
56
+ raise "Connection for host #{uri.hostname} refused"
57
+ end
58
+ end
59
+
60
+ # Get all existing Ingresses in Namespace
61
+ def get_all_namespaced_ingresses(namespace)
62
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/ingresses"
63
+
64
+ uri = prepareURI(@endpoint, extension)
65
+
66
+ request = prepareGenericRequest(uri, @bearer_token, "GET")
67
+
68
+ req_options = prepareGenericRequestOptions(@ssl, uri)
69
+
70
+ begin
71
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
72
+ http.request(request)
73
+ end
74
+ return response.body
75
+
76
+ rescue Errno::ECONNREFUSED
77
+ raise "Connection for host #{uri.hostname} refused"
78
+ end
79
+ end
80
+
81
+ # Get single Ingress in Namespace
82
+ def get_single_namespaced_ingress(namespace, ingress_name)
83
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/ingresses/#{ingress_name}"
84
+
85
+ uri = prepareURI(@endpoint, extension)
86
+
87
+ request = prepareGenericRequest(uri, @bearer_token, "GET")
88
+
89
+ req_options = prepareGenericRequestOptions(@ssl, uri)
90
+
91
+ begin
92
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
93
+ http.request(request)
94
+ end
95
+ return response.body
96
+ rescue Errno::ECONNREFUSED
97
+ raise "Connection for host #{uri.hostname} refused"
98
+ end
99
+ end
100
+
101
+ # Update existing Ingress in Namespace
102
+ def update_namespaced_ingress(namespace, ingress_name, update)
103
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/ingresses/#{ingress_name}"
104
+
105
+ uri = prepareURI(@endpoint, extension)
106
+
107
+ request = prepareGenericRequest(uri, @bearer_token, "PUT")
108
+ request.content_type = "application/json"
109
+
110
+ if @yaml
111
+ request.body = yaml_file_to_json(update)
112
+ else
113
+ request.body = update
114
+ end
115
+
116
+ req_options = prepareGenericRequestOptions(@ssl, uri)
117
+
118
+ begin
119
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
120
+ http.request(request)
121
+ end
122
+ return response.body
123
+
124
+ rescue Errno::ECONNREFUSED
125
+ raise "Connection for host #{uri.hostname} refused"
126
+ end
127
+ end
128
+
129
+ # Patch existing Ingress
130
+ def patch_ingress(namespace, ingress_name, patch)
131
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/ingresses/#{ingress_name}"
132
+
133
+ uri = prepareURI(@endpoint, extension)
134
+
135
+ request = prepareGenericRequest(uri, @bearer_token, "PATCH")
136
+ request.content_type = "application/json-patch+json"
137
+
138
+ request.body = patch
139
+
140
+ req_options = prepareGenericRequestOptions(@ssl, uri)
141
+
142
+ begin
143
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
144
+ http.request(request)
145
+ end
146
+ return response.body
147
+ rescue Errno::ECONNREFUSED
148
+ raise "Connection for host #{uri.hostname} refused"
149
+ end
150
+ end
151
+
152
+ # Delete existing Namespace
153
+ def delete_ingress(namespace, ingress_name, options = '')
154
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/ingresses/#{ingress_name}"
155
+
156
+ uri = prepareURI(@endpoint, extension)
157
+
158
+ request = prepareGenericRequest(uri, @bearer_token, "DELETE")
159
+ request.content_type = "application/json"
160
+
161
+ if @yaml
162
+ request.body = yaml_file_to_json(options)
163
+ else
164
+ request.body = options
165
+ end
166
+
167
+ req_options = prepareGenericRequestOptions(@ssl, uri)
168
+
169
+ begin
170
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
171
+ http.request(request)
172
+ end
173
+ return response.body
174
+
175
+ rescue Errno::ECONNREFUSED
176
+ raise "Connection for host #{uri.hostname} refused"
177
+ end
178
+ end
179
+
180
+ end
@@ -0,0 +1,142 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'openssl'
4
+ require 'json'
5
+
6
+ require_relative 'generic'
7
+
8
+ module Namespaces
9
+ include Generic
10
+
11
+ # Create new Namespace
12
+ def create_new_namespace(config)
13
+ extension = "/api/v1/namespaces"
14
+
15
+ uri = prepareURI(@endpoint, extension)
16
+
17
+ request = prepareGenericRequest(uri, @bearer_token, "POST")
18
+ request.content_type = "application/json"
19
+
20
+ if @yaml
21
+ request.body = yaml_file_to_json(config)
22
+ else
23
+ request.body = config
24
+ end
25
+
26
+ req_options = prepareGenericRequestOptions(@ssl, uri)
27
+
28
+ begin
29
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
30
+ http.request(request)
31
+ end
32
+
33
+ return response.body
34
+
35
+ rescue Errno::ECONNREFUSED
36
+ raise "Connection for host #{uri.hostname} refused"
37
+ end
38
+
39
+ end
40
+
41
+ # Get Namespaces
42
+ def get_all_namespaces
43
+ extension = '/api/v1/namespaces'
44
+
45
+ uri = prepareURI(@endpoint, extension)
46
+
47
+ request = prepareGenericRequest(uri, @bearer_token, "GET")
48
+
49
+ req_options = prepareGenericRequestOptions(@ssl, uri)
50
+
51
+ begin
52
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
53
+ http.request(request)
54
+ end
55
+ return response.body
56
+
57
+ rescue Errno::ECONNREFUSED
58
+ raise "Connection for host #{uri.hostname} refused"
59
+ end
60
+ end
61
+
62
+ # Update existing Namespace
63
+ def update_namespace(namespace, update)
64
+ extension = "/api/v1/namespaces/#{namespace}"
65
+
66
+ uri = prepareURI(@endpoint, extension)
67
+
68
+ request = prepareGenericRequest(uri, @bearer_token, "PUT")
69
+ request.content_type = "application/json"
70
+
71
+ if @yaml
72
+ request.body = yaml_file_to_json(update)
73
+ else
74
+ request.body = update
75
+ end
76
+
77
+ req_options = prepareGenericRequestOptions(@ssl, uri)
78
+
79
+ begin
80
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
81
+ http.request(request)
82
+ end
83
+ return response.body
84
+
85
+ rescue Errno::ECONNREFUSED
86
+ raise "Connection for host #{uri.hostname} refused"
87
+ end
88
+ end
89
+
90
+ # Patch existing Namespace
91
+ def patch_namespace(namespace, patch)
92
+ extension = "/api/v1/namespaces/#{namespace}"
93
+
94
+ uri = prepareURI(@endpoint, extension)
95
+
96
+ request = prepareGenericRequest(uri, @bearer_token, "PATCH")
97
+ request.content_type = "application/json-patch+json"
98
+
99
+ request.body = patch
100
+
101
+ req_options = prepareGenericRequestOptions(@ssl, uri)
102
+
103
+ begin
104
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
105
+ http.request(request)
106
+ end
107
+ return response.body
108
+
109
+ rescue Errno::ECONNREFUSED
110
+ raise "Connection for host #{uri.hostname} refused"
111
+ end
112
+ end
113
+
114
+ # Delete existing Namespace
115
+ def delete_namespace(namespace, options = '')
116
+ extension = "/api/v1/namespaces/#{namespace}"
117
+
118
+ uri = prepareURI(@endpoint, extension)
119
+
120
+ request = prepareGenericRequest(uri, @bearer_token, "DELETE")
121
+ request.content_type = "application/json"
122
+
123
+ if @yaml
124
+ request.body = yaml_file_to_json(options)
125
+ else
126
+ request.body = options
127
+ end
128
+
129
+ req_options = prepareGenericRequestOptions(@ssl, uri)
130
+
131
+ begin
132
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
133
+ http.request(request)
134
+ end
135
+ return response.body
136
+
137
+ rescue Errno::ECONNREFUSED
138
+ raise "Connection for host #{uri.hostname} refused"
139
+ end
140
+ end
141
+
142
+ end