ocpclient 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 10a1cc075addebee25ca5a78bb9bd6c5935c164f
4
+ data.tar.gz: 9becb489777b7a81f97e23619f1e9fbea19f1af3
5
+ SHA512:
6
+ metadata.gz: 22557b366c3712c1e4fe0350bda7af0054d65196fcc3bad3a78d53936ade22a9fa78dfd200b5d6a1856877df8feb122cb18a8b0d0ef00e337a3f621a33a330ca
7
+ data.tar.gz: 95cfeedc2ccd9073e1ead39569480490aec31658f2a8d92181086fc540fd33fed57d29bb6dc4d4a12f66cc52e81c9d9b2a0bc76e39276b9e0f7b81f5eb4ea7b3
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.gem
2
+ *.pem
3
+ examples/certs/*.pem
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in kubeclient.gemspec
4
+ gemspec
5
+ gem 'kubeclient'
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Alissa Bonas
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,342 @@
1
+ # Ocpclient
2
+
3
+
4
+ A Ruby client for OpenShift Container Platform REST api.
5
+ The client supports GET, POST, PUT, DELETE on projects, build configs, quotas, and role bindings.
6
+ The client currently supports OCP REST api version v1.
7
+
8
+ This client heavily leverages the [Kubeclient](https://github.com/abonas/kubeclient) Ruby Gem and operates almost identically.
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'ocpclient'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install ocpclient
25
+
26
+ ## Usage
27
+
28
+ Initialize the client:
29
+ ```ruby
30
+ client = Ocpclient::Client.new 'https://localhost:8443/' , "v1"
31
+ ```
32
+
33
+ Or without specifying version (it will be set by default to "v1")
34
+
35
+ ```ruby
36
+ client = Ocpclient::Client.new 'https://localhost:8443/'
37
+ ```
38
+
39
+ Another option is to initialize the client with URI object:
40
+
41
+ ```ruby
42
+ uri = URI::HTTP.build(host: "somehostname", port: 8443)
43
+ client = Ocpclient::Client.new uri
44
+ ```
45
+
46
+ It is also possible to use https and configure ssl with:
47
+
48
+ ```ruby
49
+ ssl_options = {
50
+ client_cert: OpenSSL::X509::Certificate.new(File.read('/path/to/client.crt')),
51
+ client_key: OpenSSL::PKey::RSA.new(File.read('/path/to/client.key')),
52
+ ca_file: '/path/to/ca.crt',
53
+ verify_ssl: OpenSSL::SSL::VERIFY_PEER
54
+ }
55
+ client = Ocpclient::Client.new 'https://localhost:8443/' , "v1",
56
+ ssl_options: ssl_options
57
+ ```
58
+
59
+ As an alternative to the `ca_file` it's possible to use the `cert_store`:
60
+
61
+ ```ruby
62
+ cert_store = OpenSSL::X509::Store.new
63
+ cert_store.add_cert(OpenSSL::X509::Certificate.new(ca_cert_data))
64
+ ssl_options = {
65
+ cert_store: cert_store,
66
+ verify_ssl: OpenSSL::SSL::VERIFY_PEER
67
+ }
68
+ client = Ocpclient::Client.new 'https://localhost:8443/' , "v1",
69
+ ssl_options: ssl_options
70
+ ```
71
+
72
+ For testing and development purpose you can disable the ssl check with:
73
+
74
+ ```ruby
75
+ ssl_options = { verify_ssl: OpenSSL::SSL::VERIFY_NONE }
76
+ client = Ocpclient::Client.new 'https://localhost:8443/' , 'v1',
77
+ ssl_options: ssl_options
78
+ ```
79
+
80
+ If you are using basic authentication or bearer tokens as described
81
+ [here](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/authentication.md) then you can specify one
82
+ of the following:
83
+
84
+ ```ruby
85
+ auth_options = {
86
+ username: 'username',
87
+ password: 'password'
88
+ }
89
+ client = Ocpclient::Client.new 'https://localhost:8443/' , 'v1',
90
+ auth_options: auth_options
91
+ ```
92
+
93
+ or
94
+
95
+ ```ruby
96
+ auth_options = {
97
+ bearer_token: 'MDExMWJkMjItOWY1Ny00OGM5LWJlNDEtMjBiMzgxODkxYzYz'
98
+ }
99
+ client = Ocpclient::Client.new 'https://localhost:8443/' , 'v1',
100
+ auth_options: auth_options
101
+ ```
102
+
103
+ or
104
+
105
+ ```ruby
106
+ auth_options = {
107
+ bearer_token_file: '/path/to/token_file'
108
+ }
109
+ client = Ocpclient::Client.new 'https://localhost:8443/' , 'v1',
110
+ auth_options: auth_options
111
+ ```
112
+
113
+
114
+
115
+ ### Kubeclient::Config
116
+
117
+ If you've been using `kubectl` and have a `.kube/config` file, you can auto-populate a config object using `Kubeclient::Config`:
118
+ ```ruby
119
+ config = Kubeclient::Config.read('/path/to/.kube/config')
120
+ ```
121
+
122
+ ...and then pass that object to `Kubeclient::Client`:
123
+
124
+ ```
125
+ Kubeclient::Client.new(
126
+ config.context.api_endpoint,
127
+ config.context.api_version,
128
+ {
129
+ ssl_options: config.context.ssl_options,
130
+ auth_options: config.context.auth_options
131
+ }
132
+ )
133
+ ```
134
+
135
+ You can also load your JSONified config in from an ENV variable (e.g. `KUBE_CONFIG`) like so:
136
+
137
+ ```
138
+ Kubeclient::Config.new(JSON.parse(ENV['KUBE_CONFIG']), nil)
139
+ ```
140
+
141
+ ## Examples:
142
+
143
+ #### Get all instances of a specific entity type
144
+ Such as: `get_pods`, `get_secrets`, `get_services`, `get_nodes`, `get_replication_controllers`, `get_resource_quotas`, `get_limit_ranges`, `get_persistent_volumes`, `get_persistent_volume_claims`, `get_component_statuses`, `get_service_accounts`
145
+
146
+ ```ruby
147
+ pods = client.get_pods
148
+ ```
149
+
150
+ Get all entities of a specific type in a namespace:<br>
151
+
152
+ ```ruby
153
+ services = client.get_services(namespace: 'development')
154
+ ```
155
+
156
+ You can get entities which have specific labels by specifying a parameter named `label_selector` (named `labelSelector` in Kubernetes server):
157
+
158
+ ```ruby
159
+ pods = client.get_pods(label_selector: 'name=redis-master')
160
+ ```
161
+
162
+ You can specify multiple labels (that option will return entities which have both labels:
163
+ ```ruby
164
+ pods = client.get_pods(label_selector: 'name=redis-master,app=redis')
165
+ ```
166
+
167
+ #### Get a specific instance of an entity (by name)
168
+ Such as: `get_service "service name"` , `get_pod "pod name"` , `get_replication_controller "rc name"`, `get_secret "secret name"`, `get_resource_quota "resource quota name"`, `get_limit_range "limit range name"` , `get_persistent_volume "persistent volume name"` , `get_persistent_volume_claim "persistent volume claim name"`, `get_component_status "component name"`, `get_service_account "service account name"`
169
+
170
+ The GET request should include the namespace name, except for nodes and namespaces entities.
171
+
172
+ ```ruby
173
+ node = client.get_node "127.0.0.1"
174
+ ```
175
+
176
+ ```ruby
177
+ service = client.get_service "guestbook", 'development'
178
+ ```
179
+
180
+ Note - Kubernetes doesn't work with the uid, but rather with the 'name' property.
181
+ Querying with uid causes 404.
182
+
183
+ #### Delete an entity (by name)
184
+
185
+ For example: `delete_pod "pod name"` , `delete_replication_controller "rc name"`, `delete_node "node name"`, `delete_secret "secret name"`
186
+
187
+ Input parameter - name (string) specifying service name, pod name, replication controller name.
188
+ ```ruby
189
+ client.delete_service "redis-service"
190
+ ```
191
+
192
+ #### Create an entity
193
+ For example: `create_pod pod_object`, `create_replication_controller rc_obj`, `create_secret secret_object`, `create_resource_quota resource_quota_object`, `create_limit_range limit_range_object`, `create_persistent_volume persistent_volume_object`, `create_persistent_volume_claim persistent_volume_claim_object`, `create_service_account service_account_object`
194
+
195
+ Input parameter - object of type `Service`, `Pod`, `ReplicationController`.
196
+
197
+ The below example is for v1
198
+
199
+ ```ruby
200
+ service = Service.new
201
+ service.metadata = {}
202
+ service.metadata.name = "redis-master"
203
+ service.metadata.namespace = 'staging'
204
+ service.spec = {}
205
+ service.spec.ports = [{ 'port' => 6379,
206
+ 'targetPort' => 'redis-server'
207
+ }]
208
+ service.spec.selector = {}
209
+ service.spec.selector.name = "redis"
210
+ service.spec.selector.role = "master"
211
+ service.metadata.labels = {}
212
+ service.metadata.labels.app = 'redis'
213
+ service.metadata.labels.role = 'slave'
214
+ client.create_service service`
215
+ ```
216
+
217
+ #### Update an entity
218
+ For example: `update_pod`, `update_service`, `update_replication_controller`, `update_secret`, `update_resource_quota`, `update_limit_range`, `update_persistent_volume`, `update_persistent_volume_claim`, `update_service_account`
219
+
220
+ Input parameter - object of type `Pod`, `Service`, `ReplicationController` etc.
221
+
222
+ The below example is for v1
223
+
224
+ ```ruby
225
+ client.update_service service1
226
+ ```
227
+
228
+ #### Patch an entity (by name)
229
+ For example: `patch_pod`, `patch_service`, `patch_secret`, `patch_resource_quota`, `patch_persistent_volume`
230
+
231
+ Input parameters - name (string) specifying the entity name, patch (hash) to be applied to the resource, optional: namespace name (string)
232
+
233
+ The PATCH request should include the namespace name, except for nodes and namespaces entities.
234
+
235
+ The below example is for v1
236
+
237
+ ```ruby
238
+ client.patch_pod "docker-registry", {:metadata => {:annotations => {:key => 'value'}}}, "default"
239
+ ```
240
+
241
+ #### Get all entities of all types : all_entities
242
+ Returns a hash with the following keys (node, secret, service, pod, replication_controller, namespace, resource_quota, limit_range, endpoint, event, persistent_volume, persistent_volume_claim, component_status and service_account). Each key points to an EntityList of same type.
243
+ This method is a convenience method instead of calling each entity's get method separately.
244
+
245
+ ```ruby
246
+ client.all_entities
247
+ ```
248
+
249
+ #### Receive entity updates
250
+ It is possible to receive live update notices watching the relevant entities:
251
+
252
+ ```ruby
253
+ watcher = client.watch_pods
254
+ watcher.each do |notice|
255
+ # process notice data
256
+ end
257
+ ```
258
+
259
+ It is possible to interrupt the watcher from another thread with:
260
+
261
+ ```ruby
262
+ watcher.finish
263
+ ```
264
+
265
+ #### Watch events for a particular object
266
+ You can use the `field_selector` option as part of the watch methods.
267
+
268
+ ```ruby
269
+ watcher = client.watch_events(namespace: 'development', field_selector: 'involvedObject.name=redis-master')
270
+ watcher.each do |notice|
271
+ # process notice date
272
+ end
273
+ ```
274
+
275
+ #### Get a proxy URL
276
+ You can get a complete URL for connecting a kubernetes entity via the proxy.
277
+
278
+ ```ruby
279
+ client.proxy_url('service', 'srvname', 'srvportname', 'ns')
280
+ => "https://localhost.localdomain:8443/api/v1/proxy/namespaces/ns/services/srvname:srvportname"
281
+ ```
282
+
283
+ Note the third parameter, port, is a port name for services and an integer for pods:
284
+
285
+ ```ruby
286
+ client.proxy_url('pod', 'podname', 5001, 'ns')
287
+ => "https://localhost.localdomain:8443/api/v1/namespaces/ns/pods/podname:5001/proxy"
288
+ ```
289
+
290
+ #### Get the logs of a pod
291
+ You can get the logs of a running pod, specifying the name of the pod and the
292
+ namespace where the pod is running:
293
+
294
+ ```ruby
295
+ client.get_pod_log('pod-name', 'default')
296
+ => "Running...\nRunning...\nRunning...\n"
297
+ ```
298
+
299
+ If that pod has more than one container, you must specify the container:
300
+
301
+ ```ruby
302
+ client.get_pod_log('pod-name', 'default', container: 'ruby')
303
+ => "..."
304
+ ```
305
+
306
+ If a container in a pod terminates, a new container is started, and you want to
307
+ retrieve the logs of the dead container, you can pass in the `:previous` option:
308
+
309
+ ```ruby
310
+ client.get_pod_log('pod-name', 'default', previous: true)
311
+ => "..."
312
+ ```
313
+
314
+ You can also watch the logs of a pod to get a stream of data:
315
+
316
+ ```ruby
317
+ watcher = client.watch_pod_log('pod-name', 'default', container: 'ruby')
318
+ watcher.each do |line|
319
+ puts line
320
+ end
321
+ ```
322
+
323
+
324
+ ## Contributing
325
+
326
+ 1. Fork it ( https://github.com/[my-github-username]/kubeclient/fork )
327
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
328
+ 3. Test your changes with `rake test rubocop`, add new tests if needed.
329
+ 4. If you added a new functionality, add it to README
330
+ 5. Commit your changes (`git commit -am 'Add some feature'`)
331
+ 6. Push to the branch (`git push origin my-new-feature`)
332
+ 7. Create a new Pull Request
333
+
334
+ ## Tests
335
+
336
+ This client is tested with Minitest and also uses VCR recordings in some tests.
337
+ Please run all tests before submitting a Pull Request, and add new tests for new functionality.
338
+
339
+ Running tests:
340
+ ```ruby
341
+ rake test
342
+ ```
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+ require 'rubocop/rake_task'
4
+ require 'yaml'
5
+
6
+ task default: [:test, :rubocop] # same as .travis.yml
7
+
8
+ Rake::TestTask.new do |t|
9
+ t.libs << 'test'
10
+ end
11
+
12
+ RuboCop::RakeTask.new
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'ocpclient'
4
+ require 'kubeclient'
5
+ require 'json'
6
+
7
+ ssl_options = {
8
+ client_cert: OpenSSL::X509::Certificate.new(File.read('certs/admincrt.pem')),
9
+ client_key: OpenSSL::PKey::RSA.new(File.read('certs/adminkey.pem')),
10
+ ca_file: 'certs/adminca.pem',
11
+ verify_ssl: OpenSSL::SSL::VERIFY_NONE }
12
+
13
+
14
+ client = Ocpclient::Client.new 'https://openshift.kenscloud.io:8443', "v1", ssl_options: ssl_options
15
+
16
+ project = Kubeclient::ProjectRequest.new
17
+
18
+ project.metadata = {}
19
+ project.metadata.name = "testproject"
20
+ project.displayName = "Test Project"
21
+ project.description = "This is a test project"
22
+
23
+ puts "#{client.create_project_request project}"
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'ocpclient'
4
+ require 'json'
5
+
6
+ ssl_options = {
7
+ client_cert: OpenSSL::X509::Certificate.new(File.read('certs/admincrt.pem')),
8
+ client_key: OpenSSL::PKey::RSA.new(File.read('certs/adminkey.pem')),
9
+ ca_file: 'certs/adminca.pem',
10
+ verify_ssl: OpenSSL::SSL::VERIFY_NONE }
11
+
12
+
13
+ client = Ocpclient::Client.new 'https://openshift.kenscloud.io:8443', "v1", ssl_options: ssl_options
14
+
15
+ project_list = client.get_projects
16
+
17
+
18
+ project_list.each do |project|
19
+ puts "Project ==> #{project.metadata.name}"
20
+ end
21
+
@@ -0,0 +1,4 @@
1
+ # OpenShift Container Platrform REST-API Client
2
+ module Ocpclient
3
+ VERSION = '0.0.1'
4
+ end
data/lib/ocpclient.rb ADDED
@@ -0,0 +1,50 @@
1
+ require 'kubeclient'
2
+ require 'ocpclient/version'
3
+ require 'json'
4
+ require 'rest-client'
5
+ require 'kubeclient/entity_list'
6
+ require 'kubeclient/kube_exception'
7
+ require 'kubeclient/watch_notice'
8
+ require 'kubeclient/watch_stream'
9
+ require 'kubeclient/common'
10
+ require 'kubeclient/config'
11
+
12
+ module Ocpclient
13
+ # OCP Client
14
+ class Client < Kubeclient::Client
15
+ include Kubeclient::ClientMixin
16
+ # Dynamically creating classes definitions (class Project, class BuildConfig, etc.),
17
+ # The classes are extending RecursiveOpenStruct.
18
+ # This cancels the need to define the classes
19
+ # manually on every new entity addition,
20
+ # and especially since currently the class body is empty
21
+ ENTITY_TYPES = %w(Project ProjectRequest BuildConfig RoleBinding).map do |et|
22
+ clazz = Class.new(RecursiveOpenStruct) do
23
+ def initialize(hash = nil, args = {})
24
+ args.merge!(recurse_over_arrays: true)
25
+ super(hash, args)
26
+ end
27
+ end
28
+ [Kubeclient.const_set(et, clazz), et]
29
+ end
30
+
31
+ Kubeclient::ClientMixin.define_entity_methods(ENTITY_TYPES)
32
+
33
+ def initialize(
34
+ uri,
35
+ version = 'v1',
36
+ **options
37
+ )
38
+ initialize_client(
39
+ uri,
40
+ '/oapi',
41
+ version,
42
+ options
43
+ )
44
+ end
45
+
46
+ def all_entities
47
+ retrieve_all_entities(ENTITY_TYPES)
48
+ end
49
+ end
50
+ end
data/ocpclient.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ocpclient/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'ocpclient'
8
+ spec.version = Ocpclient::VERSION
9
+ spec.authors = ['Kenneth Evensen']
10
+ spec.email = ['kevensen@redhat.com']
11
+ spec.summary = 'A client for OpenShift Container Platform REST api'
12
+ spec.description = 'A client for OpenShift Container Platform REST api'
13
+ spec.homepage = 'https://github.com/kevensen/ocpclient'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+ spec.required_ruby_version = '>= 2.0.0'
21
+
22
+ spec.add_development_dependency 'bundler', '~> 1.6'
23
+ spec.add_development_dependency 'rake', '~> 10.0'
24
+ spec.add_development_dependency 'minitest'
25
+ spec.add_development_dependency 'webmock', '~> 1.24.2'
26
+ spec.add_development_dependency 'vcr'
27
+ spec.add_development_dependency 'rubocop', '= 0.30.0'
28
+ spec.add_development_dependency 'kubeclient'
29
+ spec.add_runtime_dependency 'kubeclient'
30
+ end
metadata ADDED
@@ -0,0 +1,166 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ocpclient
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kenneth Evensen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.24.2
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.24.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: vcr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.30.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.30.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: kubeclient
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: kubeclient
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: A client for OpenShift Container Platform REST api
126
+ email:
127
+ - kevensen@redhat.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - Gemfile
134
+ - LICENSE.txt
135
+ - README.md
136
+ - Rakefile
137
+ - examples/create_project.rb
138
+ - examples/list_projects.rb
139
+ - lib/ocpclient.rb
140
+ - lib/ocpclient/version.rb
141
+ - ocpclient.gemspec
142
+ homepage: https://github.com/kevensen/ocpclient
143
+ licenses:
144
+ - MIT
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: 2.0.0
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 2.5.1
163
+ signing_key:
164
+ specification_version: 4
165
+ summary: A client for OpenShift Container Platform REST api
166
+ test_files: []