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,181 @@
1
+
2
+ require 'net/http'
3
+ require 'uri'
4
+ require 'openssl'
5
+ require 'json'
6
+
7
+ require_relative 'generic'
8
+
9
+ module ReplicaSets
10
+ include Generic
11
+
12
+ # Create new ReplicaSet
13
+ def create_new_replicaset(namespace, config)
14
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/replicasets"
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 ReplicaSets
41
+ def get_all_replicasets
42
+ extension = "/apis/extensions/v1beta1/replicasets"
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 ReplicaSets in Namespace
62
+ def get_all_namespaced_replicasets(namespace)
63
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/replicasets"
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 ReplicaSet in Namespace
83
+ def get_single_namespaced_replicaset(namespace, replicaset_name)
84
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/replicasets/#{replicaset_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 ReplicaSet in Namespace
103
+ def update_namespaced_replicaset(namespace, replicaset_name, update)
104
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/replicasets/#{replicaset_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 ReplicaSet
131
+ def patch_replicaset(namespace, replicaset_name, patch)
132
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/replicasets/#{replicaset_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 Namespace
154
+ def delete_replicaset(namespace, replicaset_name, options = '')
155
+ extension = "/apis/extensions/v1beta1/namespaces/#{namespace}/replicasets/#{replicaset_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
@@ -0,0 +1,176 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'openssl'
4
+ require 'json'
5
+
6
+ require_relative 'generic'
7
+
8
+ module Services
9
+ include Generic
10
+
11
+ # Create new Service
12
+ def create_new_service(namespace, config)
13
+ extension = "/api/v1/namespaces/#{namespace}/services"
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 Services
40
+ def get_all_services
41
+ extension = "/api/v1/services"
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 Services in Namespace
61
+ def get_all_namespaced_services(namespace)
62
+ extension = "/api/v1/namespaces/#{namespace}/services"
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 Service in Namespace
82
+ def get_single_namespaced_service(namespace, service_name)
83
+ extension = "/api/v1/namespaces/#{namespace}/services/#{service_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 Service in Namespace
102
+ def update_namespaced_service(namespace, service_name, update)
103
+ extension = "/api/v1/namespaces/#{namespace}/services/#{service_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 Service
130
+ def patch_service(namespace, service_name, patch)
131
+ extension = "/api/v1/namespaces/#{namespace}/services/#{service_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 Service
153
+ def delete_service(namespace, service_name)
154
+ extension = "/api/v1/namespaces/#{namespace}/services/#{service_name}"
155
+
156
+ uri = prepareURI(@endpoint, extension)
157
+
158
+ request = prepareGenericRequest(uri, @bearer_token, "DELETE")
159
+
160
+ req_options = prepareGenericRequestOptions(@ssl, uri)
161
+
162
+ begin
163
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
164
+ http.request(request)
165
+ end
166
+ return response.body
167
+
168
+ rescue Errno::ECONNREFUSED
169
+ raise "Connection for host #{uri.hostname} refused"
170
+ end
171
+ end
172
+
173
+ end
174
+
175
+
176
+
@@ -0,0 +1,4 @@
1
+ # Part of the RubyKubernetesController module
2
+ module RubyKubernetesController
3
+ VERSION = "0.1.0"
4
+ end
@@ -0,0 +1,53 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "ruby-kubernetes-controller/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ruby-kubernetes-controller"
8
+ spec.version = RubyKubernetesController::VERSION
9
+ spec.authors = ["Shivansh Vij (ShivanshVij)", "Matthew Grech (mgrech)", "Zack Livingston (ZackLivingston)"]
10
+ spec.email = ["shivanshvij@outlook.com", "mgrech97@gmaii.com", "15zel@queensu.ca"]
11
+
12
+ spec.summary = %q{Ruby Kubernetes Controller is a Ruby Client Library for interacting with existing Kubernetes Clusters.}
13
+ spec.description = <<-EOF
14
+ The Ruby Kubernetes Controller allows users to interact with the core Kubernetes APIs natively from within their Ruby
15
+ applications. This library is compatible with all leading Kubernetes Instances, including OpenShift Kubernetes,
16
+ Azure Kubernetes Service, Amazon EKS, Google Kubernetes Service, IBM Kubernetes Service, and Rancher Orchestrated Kubernetes.
17
+ This library also supports yaml ingestion for creating, patching, updating, or deleting existing Kubernetes types,
18
+ including Pods, Services, Deployments, Endpoints, and Ingresses. Our documentation also contains complete examples for
19
+ all operation types.
20
+ EOF
21
+ spec.homepage = "https://github.com/IBM/ruby-kubernetes-controller/"
22
+ spec.license = "MIT"
23
+
24
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
25
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
26
+ if spec.respond_to?(:metadata)
27
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
28
+
29
+ spec.metadata["homepage_uri"] = spec.homepage
30
+ spec.metadata["source_code_uri"] = "https://github.com/IBM/ruby-kubernetes-controller/"
31
+ spec.metadata["changelog_uri"] = "https://github.com/IBM/ruby-kubernetes-controller/blob/master/CHANGELOG.md"
32
+ spec.metadata["documentation_uri"] = "https://github.com/IBM/ruby-kubernetes-controller/blob/master/Documentation/DOCUMENTATION.md"
33
+ else
34
+ raise "RubyGems 2.0 or newer is required to protect against " \
35
+ "public gem pushes."
36
+ end
37
+
38
+ # Specify which files should be added to the gem when it is released.
39
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
40
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
41
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
42
+ end
43
+ spec.bindir = "exe"
44
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
45
+ spec.require_paths = ["lib"]
46
+
47
+ spec.add_development_dependency "bundler", "~> 2.0"
48
+ spec.add_development_dependency "rake", "~> 10.0"
49
+ spec.add_development_dependency "minitest", "~> 5.0"
50
+ spec.add_development_dependency "minitest-ci", "~>3.4.0"
51
+
52
+ spec.required_ruby_version = '>= 2.0.0'
53
+ end
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-kubernetes-controller
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Shivansh Vij (ShivanshVij)
8
+ - Matthew Grech (mgrech)
9
+ - Zack Livingston (ZackLivingston)
10
+ autorequire:
11
+ bindir: exe
12
+ cert_chain: []
13
+ date: 2019-06-10 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bundler
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '2.0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '2.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: rake
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '10.0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '10.0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: minitest
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '5.0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '5.0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: minitest-ci
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: 3.4.0
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: 3.4.0
71
+ description: " The Ruby Kubernetes Controller allows users
72
+ to interact with the core Kubernetes APIs natively from within their Ruby\n applications.
73
+ This library is compatible with all leading Kubernetes Instances, including OpenShift
74
+ Kubernetes, \n Azure Kubernetes Service, Amazon EKS, Google
75
+ Kubernetes Service, IBM Kubernetes Service, and Rancher Orchestrated Kubernetes.
76
+ \n This library also supports yaml ingestion for creating,
77
+ patching, updating, or deleting existing Kubernetes types, \n including
78
+ Pods, Services, Deployments, Endpoints, and Ingresses. Our documentation also contains
79
+ complete examples for \n all operation types.\n"
80
+ email:
81
+ - shivanshvij@outlook.com
82
+ - mgrech97@gmaii.com
83
+ - 15zel@queensu.ca
84
+ executables: []
85
+ extensions: []
86
+ extra_rdoc_files: []
87
+ files:
88
+ - ".circleci/config.yml"
89
+ - ".circleci/setup-rubygems.sh"
90
+ - ".gitignore"
91
+ - CODE_OF_CONDUCT.md
92
+ - Documentation/DOCUMENTATION.md
93
+ - Documentation/serviceaccount.png
94
+ - Documentation/serviceaccount.yaml
95
+ - Gemfile
96
+ - LICENSE.txt
97
+ - README.md
98
+ - Rakefile
99
+ - bin/console
100
+ - bin/setup
101
+ - lib/ruby-kubernetes-controller.rb
102
+ - lib/ruby-kubernetes-controller/client.rb
103
+ - lib/ruby-kubernetes-controller/configmaps.rb
104
+ - lib/ruby-kubernetes-controller/deployments.rb
105
+ - lib/ruby-kubernetes-controller/endpoints.rb
106
+ - lib/ruby-kubernetes-controller/generic.rb
107
+ - lib/ruby-kubernetes-controller/ingresses.rb
108
+ - lib/ruby-kubernetes-controller/namespaces.rb
109
+ - lib/ruby-kubernetes-controller/nodes.rb
110
+ - lib/ruby-kubernetes-controller/persistentvolumeclaims.rb
111
+ - lib/ruby-kubernetes-controller/persistentvolumes.rb
112
+ - lib/ruby-kubernetes-controller/pods.rb
113
+ - lib/ruby-kubernetes-controller/replicasets.rb
114
+ - lib/ruby-kubernetes-controller/services.rb
115
+ - lib/ruby-kubernetes-controller/version.rb
116
+ - ruby-kubernetes-controller.gemspec
117
+ homepage: https://github.com/IBM/ruby-kubernetes-controller/
118
+ licenses:
119
+ - MIT
120
+ metadata:
121
+ allowed_push_host: https://rubygems.org
122
+ homepage_uri: https://github.com/IBM/ruby-kubernetes-controller/
123
+ source_code_uri: https://github.com/IBM/ruby-kubernetes-controller/
124
+ changelog_uri: https://github.com/IBM/ruby-kubernetes-controller/blob/master/CHANGELOG.md
125
+ documentation_uri: https://github.com/IBM/ruby-kubernetes-controller/blob/master/Documentation/DOCUMENTATION.md
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 2.0.0
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubygems_version: 3.0.3
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Ruby Kubernetes Controller is a Ruby Client Library for interacting with
145
+ existing Kubernetes Clusters.
146
+ test_files: []