ruby-kubernetes-controller 0.2.2 → 0.2.3

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
  SHA256:
3
- metadata.gz: 2d55b9567e58b5914dab1151b68240f3262111e0274507d2c7cd77699dad0edf
4
- data.tar.gz: 787f41c21436a319ff1001b8712c354f3356c487a15916ebd08ba2814d4ac483
3
+ metadata.gz: ae9bccbe5b323b1c7319de8370b94439cd95627c785e2bda8ba359d6f27b3df0
4
+ data.tar.gz: 6a5b3923bb1f538942c4d61355957ff31ab9ea7048c379773d4df77b1a97fe26
5
5
  SHA512:
6
- metadata.gz: bffd65b4bc59d2c729d617c309726d5708b9621a4bd4ea30a90fe7bde5c3ad34143c717057ec4bf7e36986662f1c46f4de381a7989f28e0fedf4819cf001b12a
7
- data.tar.gz: bf88f4d6de9967c89d8620fe9a2e81b7215f5251c7dedc14c83782ae6a97b3c738166d6d23e714ecad280fc8285daef66e8b5a27c42a37ad9c0108fb1abde2eb
6
+ metadata.gz: b82a2e8b4e416deeeeec55a9adbba752c9f555dc2c72cba9896d1af82f0ee6356ba6c38472f56b5344b4801d8dc1cc16747908eba3ec8110cdc9182ecf3f2a8c
7
+ data.tar.gz: ddee35da7ff08689047c2faa4a9b98a8b83ac75356e67216304832feffee5d3d614efb20660d293838f70019fae61f177330108c299b5764d0be08098ed9e340
@@ -1767,4 +1767,185 @@ Before beginning, you must generate a bearer token for the Ruby Kubernetes Contr
1767
1767
  puts yaml_client.delete_job(namespace, job_name, yaml_file_path) # Returns JSON
1768
1768
  ```
1769
1769
 
1770
+ #### Create cronjob
1771
+ * Create new cronjob
1772
+ ```ruby
1773
+ require 'ruby-kubernetes-controller'
1774
+
1775
+ endpoint = "localhost"
1776
+ bearer_token = "token"
1777
+ ssl = false
1778
+
1779
+ # With JSON
1780
+ json_client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl, yaml = false)
1781
+ namespace = "default"
1782
+ json_config =
1783
+ '{
1784
+ "kind": "CronJob",
1785
+ "apiVersion": "batch/v1beta1",
1786
+ ...
1787
+ }'
1788
+
1789
+ puts json_client.create_new_cronjob(namespace, json_config) # Returns JSON
1790
+
1791
+ # With YAML
1792
+ yaml_client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl, yaml = true)
1793
+ namespace = "default"
1794
+ yaml_file_path = 'path/to/file.yaml'
1795
+
1796
+ puts yaml_client.create_new_cronjob(namespace, yaml_file_path) # Returns JSON
1797
+ ```
1798
+
1799
+ #### Get cronjobs
1800
+ * List all cronjobs
1801
+ ```ruby
1802
+ require 'ruby-kubernetes-controller'
1803
+
1804
+ endpoint = "localhost"
1805
+ bearer_token = "token"
1806
+ ssl = false
1807
+
1808
+ client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl)
1809
+
1810
+ puts client.get_all_cronjobs # Returns JSON
1811
+ ```
1812
+
1813
+ #### Get Namespaced cronjobs
1814
+ * List all existing cronjobs in Namespace
1815
+ ```ruby
1816
+ require 'ruby-kubernetes-controller'
1817
+
1818
+ endpoint = "localhost"
1819
+ bearer_token = "token"
1820
+ ssl = false
1821
+
1822
+ client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl)
1823
+
1824
+ namespace = "default"
1825
+
1826
+ puts client.get_all_namespaced_cronjobs(namespace) # Returns JSON
1827
+ ```
1828
+
1829
+ #### Get Single Namespaced cronjob
1830
+ * Get details for single cronjob in Namespace
1831
+ ```ruby
1832
+ require 'ruby-kubernetes-controller'
1833
+
1834
+ endpoint = "localhost"
1835
+ bearer_token = "token"
1836
+ ssl = false
1837
+
1838
+ client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl)
1839
+
1840
+ namespace = "default"
1841
+ cronjob_name = "cronjob"
1842
+
1843
+ puts client.get_single_namespaced_cronjob(namespace, cronjob_name) # Returns JSON
1844
+ ```
1845
+
1846
+ #### Update cronjob
1847
+ * Update existing cronjob in Namespace
1848
+ ```ruby
1849
+ require 'ruby-kubernetes-controller'
1850
+
1851
+ endpoint = "localhost"
1852
+ bearer_token = "token"
1853
+ ssl = false
1854
+
1855
+ # With JSON
1856
+ json_client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl, yaml = false)
1857
+ namespace = "default"
1858
+ cronjob_name = "cronjob"
1859
+ json_update =
1860
+ '{
1861
+ "kind": "CronJob",
1862
+ "apiVersion": "batch/v1beta1",
1863
+ ...
1864
+ }'
1865
+
1866
+ puts json_client.update_namespaced_cronjob(namespace, cronjob_name, json_update) # Returns JSON
1867
+
1868
+ # With YAML
1869
+ yaml_client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl, yaml = true)
1870
+ namespace = "default"
1871
+ cronjob_name = "cronjob"
1872
+ yaml_file_path = 'path/to/file.yaml'
1873
+
1874
+ puts yaml_client.update_namespaced_cronjob(namespace, cronjob_name, yaml_file_path) # Returns JSON
1875
+ ```
1876
+
1877
+ #### Patch cronjob
1878
+ * Patch existing cronjob
1879
+ * Patch Format documentation available at: http://jsonpatch.com/
1880
+ ```ruby
1881
+ require 'ruby-kubernetes-controller'
1882
+
1883
+ endpoint = "localhost"
1884
+ bearer_token = "token"
1885
+ ssl = false
1886
+
1887
+ client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl)
1888
+
1889
+ namespace = "default"
1890
+ cronjob_name = "cronjob"
1891
+ patch =
1892
+ '[
1893
+ { "op": "replace", "path": "/baz", "value": "boo" },
1894
+ { "op": "add", "path": "/hello", "value": ["world"] },
1895
+ { "op": "remove", "path": "/foo" }
1896
+ ]'
1897
+
1898
+ puts client.patch_cronjob(namespace, cronjob_name, patch) # Returns JSON
1899
+ ```
1900
+
1901
+ #### Delete cronjob
1902
+ * Delete existing cronjob
1903
+ * Delete options documentation available at: https://kubernetes.io/docs/reference/federation/v1/definitions/#_v1_deleteoptions
1904
+ ```ruby
1905
+ require 'ruby-kubernetes-controller'
1906
+
1907
+ endpoint = "localhost"
1908
+ bearer_token = "token"
1909
+ ssl = false
1910
+
1911
+ # With JSON
1912
+ json_client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl, yaml = false)
1913
+ namespace = "default"
1914
+ cronjob_name = "cronjob"
1915
+ json_options =
1916
+ '{
1917
+ "kind": "CronJob",
1918
+ "apiVersion": "batch/v1beta1",
1919
+ ...
1920
+ }'
1921
+
1922
+ puts json_client.delete_cronjob(namespace, cronjob_name, json_options) # Returns JSON
1923
+
1924
+ # With YAML
1925
+ yaml_client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl, yaml = true)
1926
+ namespace = "default"
1927
+ cronjob_name = "cronjob"
1928
+ yaml_file_path = 'path/to/file.yaml'
1929
+
1930
+ puts yaml_client.delete_cronjob(namespace, cronjob_name, yaml_file_path) # Returns JSON
1931
+ ```
1932
+
1933
+ #### Triggering a cronjob
1934
+ * Trigger an existing cronjob in Namespace
1935
+ ```ruby
1936
+ require 'ruby-kubernetes-controller'
1937
+
1938
+ endpoint = "localhost"
1939
+ bearer_token = "token"
1940
+ ssl = false
1941
+
1942
+ # With JSON
1943
+ json_client = ::RubyKubernetesController::Client.new(endpoint, bearer_token, ssl, yaml = false)
1944
+ namespace = "default"
1945
+ cronjob_name = "cronjob"
1946
+ restart_policy = "Never"
1947
+
1948
+ puts json_client.trigger_cronjob(namespace, cronjob_name, restart_policy) # Returns JSON
1949
+ ```
1950
+
1770
1951
  [SERVICEACCOUNT]: https://github.com/IBM/ruby-kubernetes-controller/blob/master/Documentation/serviceaccount.yaml
@@ -16,6 +16,8 @@ require_relative 'configmaps'
16
16
  require_relative 'persistentvolumes'
17
17
  require_relative 'persistentvolumeclaims'
18
18
  require_relative 'jobs'
19
+ require_relative 'cronjob'
20
+ require_relative 'utilities'
19
21
 
20
22
  # Part of the RubyKubernetesController module
21
23
  module RubyKubernetesController
@@ -36,6 +38,8 @@ module RubyKubernetesController
36
38
  include PersistentVolumes
37
39
  include PersistentVolumeClaims
38
40
  include Jobs
41
+ include CronJobs
42
+ include Utilities
39
43
 
40
44
  # Constructor
41
45
  def initialize(endpoint, bearer_token, ssl = true, yaml = false)
@@ -0,0 +1,181 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'openssl'
4
+ require 'json'
5
+
6
+ require_relative 'generic'
7
+
8
+ module CronJobs
9
+ include Generic
10
+
11
+ # Create new CronJob
12
+ def create_new_cronjob(namespace, config)
13
+ extension = "/apis/batch/v1beta1/namespaces/#{namespace}/cronjobs"
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 CronJobs
40
+ def get_all_cronjobs
41
+ extension = "/apis/batch/v1beta1/cronjobs"
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 CronJobs in Namespace
61
+ def get_all_namespaced_cronjobs(namespace)
62
+ extension = "/apis/batch/v1beta1/namespaces/#{namespace}/cronjobs"
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 CronJob in Namespace
82
+ def get_single_namespaced_cronjob(namespace, cronjob_name)
83
+ extension = "/apis/batch/v1beta1/namespaces/#{namespace}/cronjobs/#{cronjob_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 CronJob in Namespace
102
+ def update_namespaced_cronjob(namespace, cronjob_name, update)
103
+ extension = "/apis/batch/v1beta1/namespaces/#{namespace}/cronjobs/#{cronjob_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
+
128
+ end
129
+
130
+ # Patch existing CronJob in Namespace
131
+ def patch_cronjob(namespace, cronjob_name, patch)
132
+ extension = "/apis/batch/v1beta1/namespaces/#{namespace}/cronjobs/#{cronjob_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 Job in Namespace
154
+ def delete_cronjob(namespace, cronjob_name, options = '')
155
+ extension = "apis/batch/v1beta1/namespaces/#{namespace}/cronjobs/#{cronjob_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,58 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'openssl'
4
+ require 'json'
5
+
6
+ require_relative 'generic'
7
+ require_relative 'namespaces'
8
+ require_relative 'ingresses'
9
+ require_relative 'nodes'
10
+ require_relative 'endpoints'
11
+ require_relative 'pods'
12
+ require_relative 'services'
13
+ require_relative 'deployments'
14
+ require_relative 'replicasets'
15
+ require_relative 'configmaps'
16
+ require_relative 'persistentvolumes'
17
+ require_relative 'persistentvolumeclaims'
18
+ require_relative 'jobs'
19
+ require_relative 'cronjob'
20
+
21
+ module Utilities
22
+ include Generic
23
+ include Namespaces
24
+ include Ingresses
25
+ include Nodes
26
+ include Endpoints
27
+ include Pods
28
+ include Services
29
+ include Deployments
30
+ include ReplicaSets
31
+ include ConfigMaps
32
+ include PersistentVolumes
33
+ include PersistentVolumeClaims
34
+ include Jobs
35
+ include CronJobs
36
+
37
+ # Trigger a cronjob
38
+ def trigger_cronjob(namespace, cronjob_name, restart_policy = 'Never')
39
+ cronjob_json = JSON.parse(get_single_namespaced_cronjob(namespace, cronjob_name))
40
+ cronjob_json['spec']['jobTemplate']['spec']['template']['spec']['restartPolicy'] = restart_policy
41
+ cronjob_json['metadata']['name'] += '-' + ('a'..'z').to_a.shuffle[0,8].join
42
+ json_config =
43
+ '{
44
+ "kind": "Job",
45
+ "apiVersion": "batch/v1",
46
+ "metadata": {
47
+ "name": ' + cronjob_json['metadata']['name'].to_json + '
48
+ },
49
+ "spec": {
50
+ "template": {
51
+ "spec": ' + cronjob_json['spec']['jobTemplate']['spec']['template']['spec'].to_json + '
52
+ }
53
+ }
54
+ }'
55
+ create_new_job(namespace, json_config)
56
+ end
57
+
58
+ end
@@ -1,4 +1,4 @@
1
1
  # Part of the RubyKubernetesController module
2
2
  module RubyKubernetesController
3
- VERSION = "0.2.2"
3
+ VERSION = "0.2.3"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-kubernetes-controller
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shivansh Vij (ShivanshVij)
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-08-06 00:00:00.000000000 Z
13
+ date: 2020-01-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -101,6 +101,7 @@ files:
101
101
  - lib/ruby-kubernetes-controller.rb
102
102
  - lib/ruby-kubernetes-controller/client.rb
103
103
  - lib/ruby-kubernetes-controller/configmaps.rb
104
+ - lib/ruby-kubernetes-controller/cronjob.rb
104
105
  - lib/ruby-kubernetes-controller/deployments.rb
105
106
  - lib/ruby-kubernetes-controller/endpoints.rb
106
107
  - lib/ruby-kubernetes-controller/generic.rb
@@ -113,6 +114,7 @@ files:
113
114
  - lib/ruby-kubernetes-controller/pods.rb
114
115
  - lib/ruby-kubernetes-controller/replicasets.rb
115
116
  - lib/ruby-kubernetes-controller/services.rb
117
+ - lib/ruby-kubernetes-controller/utilities.rb
116
118
  - lib/ruby-kubernetes-controller/version.rb
117
119
  - ruby-kubernetes-controller.gemspec
118
120
  homepage: https://github.com/IBM/ruby-kubernetes-controller/