kubeclient-rollback-dev 2.3.0

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.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rubocop.yml +16 -0
  4. data/.travis.yml +12 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +428 -0
  8. data/Rakefile +12 -0
  9. data/kubeclient.gemspec +29 -0
  10. data/lib/kubeclient/common.rb +512 -0
  11. data/lib/kubeclient/config.rb +126 -0
  12. data/lib/kubeclient/entity_list.rb +16 -0
  13. data/lib/kubeclient/kube_exception.rb +14 -0
  14. data/lib/kubeclient/missing_kind_compatibility.rb +68 -0
  15. data/lib/kubeclient/version.rb +4 -0
  16. data/lib/kubeclient/watch_notice.rb +7 -0
  17. data/lib/kubeclient/watch_stream.rb +80 -0
  18. data/lib/kubeclient.rb +32 -0
  19. data/test/cassettes/kubernetes_guestbook.yml +879 -0
  20. data/test/config/allinone.kubeconfig +20 -0
  21. data/test/config/external-ca.pem +18 -0
  22. data/test/config/external-cert.pem +19 -0
  23. data/test/config/external-key.rsa +27 -0
  24. data/test/config/external.kubeconfig +20 -0
  25. data/test/config/nouser.kubeconfig +16 -0
  26. data/test/config/userauth.kubeconfig +28 -0
  27. data/test/json/bindings_list.json +10 -0
  28. data/test/json/component_status.json +17 -0
  29. data/test/json/component_status_list.json +52 -0
  30. data/test/json/config_map_list.json +9 -0
  31. data/test/json/core_api_resource_list.json +181 -0
  32. data/test/json/core_api_resource_list_without_kind.json +129 -0
  33. data/test/json/core_oapi_resource_list_without_kind.json +197 -0
  34. data/test/json/created_endpoint.json +28 -0
  35. data/test/json/created_namespace.json +20 -0
  36. data/test/json/created_secret.json +16 -0
  37. data/test/json/created_service.json +31 -0
  38. data/test/json/empty_pod_list.json +9 -0
  39. data/test/json/endpoint_list.json +48 -0
  40. data/test/json/entity_list.json +56 -0
  41. data/test/json/event_list.json +35 -0
  42. data/test/json/limit_range.json +23 -0
  43. data/test/json/limit_range_list.json +31 -0
  44. data/test/json/namespace.json +13 -0
  45. data/test/json/namespace_exception.json +8 -0
  46. data/test/json/namespace_list.json +32 -0
  47. data/test/json/node.json +29 -0
  48. data/test/json/node_list.json +37 -0
  49. data/test/json/persistent_volume.json +37 -0
  50. data/test/json/persistent_volume_claim.json +32 -0
  51. data/test/json/persistent_volume_claim_list.json +40 -0
  52. data/test/json/persistent_volume_claims_nil_items.json +8 -0
  53. data/test/json/persistent_volume_list.json +45 -0
  54. data/test/json/pod.json +92 -0
  55. data/test/json/pod_list.json +79 -0
  56. data/test/json/pod_template_list.json +9 -0
  57. data/test/json/processed_template.json +27 -0
  58. data/test/json/replication_controller.json +57 -0
  59. data/test/json/replication_controller_list.json +66 -0
  60. data/test/json/resource_quota.json +46 -0
  61. data/test/json/resource_quota_list.json +54 -0
  62. data/test/json/secret_list.json +44 -0
  63. data/test/json/service.json +33 -0
  64. data/test/json/service_account.json +25 -0
  65. data/test/json/service_account_list.json +82 -0
  66. data/test/json/service_illegal_json_404.json +1 -0
  67. data/test/json/service_list.json +97 -0
  68. data/test/json/service_patch.json +25 -0
  69. data/test/json/service_update.json +22 -0
  70. data/test/json/versions_list.json +6 -0
  71. data/test/json/watch_stream.json +3 -0
  72. data/test/test_common.rb +32 -0
  73. data/test/test_component_status.rb +30 -0
  74. data/test/test_config.rb +72 -0
  75. data/test/test_endpoint.rb +35 -0
  76. data/test/test_guestbook_go.rb +238 -0
  77. data/test/test_helper.rb +10 -0
  78. data/test/test_kubeclient.rb +611 -0
  79. data/test/test_limit_range.rb +27 -0
  80. data/test/test_missing_methods.rb +42 -0
  81. data/test/test_namespace.rb +61 -0
  82. data/test/test_node.rb +33 -0
  83. data/test/test_persistent_volume.rb +30 -0
  84. data/test/test_persistent_volume_claim.rb +30 -0
  85. data/test/test_pod.rb +29 -0
  86. data/test/test_pod_log.rb +50 -0
  87. data/test/test_process_template.rb +44 -0
  88. data/test/test_replication_controller.rb +27 -0
  89. data/test/test_resource_list_without_kind.rb +78 -0
  90. data/test/test_resource_quota.rb +25 -0
  91. data/test/test_secret.rb +70 -0
  92. data/test/test_service.rb +293 -0
  93. data/test/test_service_account.rb +28 -0
  94. data/test/test_watch.rb +119 -0
  95. data/test/txt/pod_log.txt +6 -0
  96. data/test/valid_token_file +1 -0
  97. metadata +343 -0
@@ -0,0 +1,68 @@
1
+ module Kubeclient
2
+ module Common
3
+ # Backward compatibility for old versions where kind is missing (e.g. OpenShift Enterprise 3.1)
4
+ class MissingKindCompatibility
5
+ MAPPING = {
6
+ 'bindings' => 'Binding',
7
+ 'componentstatuses' => 'ComponentStatus',
8
+ 'endpoints' => 'Endpoints',
9
+ 'events' => 'Event',
10
+ 'limitranges' => 'LimitRange',
11
+ 'namespaces' => 'Namespace',
12
+ 'nodes' => 'Node',
13
+ 'persistentvolumeclaims' => 'PersistentVolumeClaim',
14
+ 'persistentvolumes' => 'PersistentVolume',
15
+ 'pods' => 'Pod',
16
+ 'podtemplates' => 'PodTemplate',
17
+ 'replicationcontrollers' => 'ReplicationController',
18
+ 'resourcequotas' => 'ResourceQuota',
19
+ 'secrets' => 'Secret',
20
+ 'securitycontextconstraints' => 'SecurityContextConstraints',
21
+ 'serviceaccounts' => 'ServiceAccount',
22
+ 'services' => 'Service',
23
+ 'buildconfigs' => 'BuildConfig',
24
+ 'builds' => 'Build',
25
+ 'clusternetworks' => 'ClusterNetwork',
26
+ 'clusterpolicies' => 'ClusterPolicy',
27
+ 'clusterpolicybindings' => 'ClusterPolicyBinding',
28
+ 'clusterrolebindings' => 'ClusterRoleBinding',
29
+ 'clusterroles' => 'ClusterRole',
30
+ 'deploymentconfigrollbacks' => 'DeploymentConfigRollback',
31
+ 'deploymentconfigs' => 'DeploymentConfig',
32
+ 'generatedeploymentconfigs' => 'DeploymentConfig',
33
+ 'groups' => 'Group',
34
+ 'hostsubnets' => 'HostSubnet',
35
+ 'identities' => 'Identity',
36
+ 'images' => 'Image',
37
+ 'imagestreamimages' => 'ImageStreamImage',
38
+ 'imagestreammappings' => 'ImageStreamMapping',
39
+ 'imagestreams' => 'ImageStream',
40
+ 'imagestreamtags' => 'ImageStreamTag',
41
+ 'localresourceaccessreviews' => 'LocalResourceAccessReview',
42
+ 'localsubjectaccessreviews' => 'LocalSubjectAccessReview',
43
+ 'netnamespaces' => 'NetNamespace',
44
+ 'oauthaccesstokens' => 'OAuthAccessToken',
45
+ 'oauthauthorizetokens' => 'OAuthAuthorizeToken',
46
+ 'oauthclientauthorizations' => 'OAuthClientAuthorization',
47
+ 'oauthclients' => 'OAuthClient',
48
+ 'policies' => 'Policy',
49
+ 'policybindings' => 'PolicyBinding',
50
+ 'processedtemplates' => 'Template',
51
+ 'projectrequests' => 'ProjectRequest',
52
+ 'projects' => 'Project',
53
+ 'resourceaccessreviews' => 'ResourceAccessReview',
54
+ 'rolebindings' => 'RoleBinding',
55
+ 'roles' => 'Role',
56
+ 'routes' => 'Route',
57
+ 'subjectaccessreviews' => 'SubjectAccessReview',
58
+ 'templates' => 'Template',
59
+ 'useridentitymappings' => 'UserIdentityMapping',
60
+ 'users' => 'User'
61
+ }.freeze
62
+
63
+ def self.resource_kind(name)
64
+ MAPPING[name]
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,4 @@
1
+ # Kubernetes REST-API Client
2
+ module Kubeclient
3
+ VERSION = '2.3.0'.freeze
4
+ end
@@ -0,0 +1,7 @@
1
+ require 'recursive_open_struct'
2
+ module Kubeclient
3
+ module Common
4
+ class WatchNotice < RecursiveOpenStruct
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,80 @@
1
+ require 'json'
2
+ require 'http'
3
+ module Kubeclient
4
+ module Common
5
+ # HTTP Stream used to watch changes on entities
6
+ class WatchStream
7
+ def initialize(uri, http_options, format: :json)
8
+ @uri = uri
9
+ @http_client = nil
10
+ @http_options = http_options
11
+ @format = format
12
+ end
13
+
14
+ def each
15
+ @finished = false
16
+
17
+ @http_client = build_client
18
+ response = @http_client.request(:get, @uri, build_client_options)
19
+ unless response.code < 300
20
+ raise KubeException.new(response.code, response.reason, response)
21
+ end
22
+
23
+ buffer = ''
24
+ response.body.each do |chunk|
25
+ buffer << chunk
26
+ while (line = buffer.slice!(/.+\n/))
27
+ yield @format == :json ? WatchNotice.new(JSON.parse(line)) : line.chomp
28
+ end
29
+ end
30
+ rescue IOError
31
+ raise unless @finished
32
+ end
33
+
34
+ def finish
35
+ @finished = true
36
+ @http_client.close unless @http_client.nil?
37
+ end
38
+
39
+ private
40
+
41
+ def build_client
42
+ if @http_options[:basic_auth_user] && @http_options[:basic_auth_password]
43
+ HTTP.basic_auth(
44
+ user: @http_options[:basic_auth_user],
45
+ pass: @http_options[:basic_auth_password]
46
+ )
47
+ else
48
+ HTTP::Client.new
49
+ end
50
+ end
51
+
52
+ def using_proxy
53
+ proxy = @http_options[:http_proxy_uri]
54
+ return nil unless proxy
55
+ p_uri = URI.parse(proxy)
56
+ {
57
+ proxy_address: p_uri.hostname,
58
+ proxy_port: p_uri.port,
59
+ proxy_username: p_uri.user,
60
+ proxy_password: p_uri.password
61
+ }
62
+ end
63
+
64
+ def build_client_options
65
+ client_options = {
66
+ headers: @http_options[:headers],
67
+ proxy: using_proxy
68
+ }
69
+ if @http_options[:ssl]
70
+ client_options[:ssl] = @http_options[:ssl]
71
+ socket_option = :ssl_socket_class
72
+ else
73
+ socket_option = :socket_class
74
+ end
75
+ client_options[socket_option] = @http_options[socket_option] if @http_options[socket_option]
76
+ client_options
77
+ end
78
+ end
79
+ end
80
+ end
data/lib/kubeclient.rb ADDED
@@ -0,0 +1,32 @@
1
+ require 'kubeclient/version'
2
+ require 'json'
3
+ require 'rest-client'
4
+ require 'kubeclient/entity_list'
5
+ require 'kubeclient/kube_exception'
6
+ require 'kubeclient/watch_notice'
7
+ require 'kubeclient/watch_stream'
8
+ require 'kubeclient/common'
9
+ require 'kubeclient/config'
10
+ require 'kubeclient/missing_kind_compatibility'
11
+
12
+ module Kubeclient
13
+ # Kubernetes Client
14
+ class Client
15
+ include ClientMixin
16
+ # define a multipurpose resource class, available before discovery
17
+ ClientMixin.resource_class(Kubeclient, 'Resource')
18
+ def initialize(
19
+ uri,
20
+ version = 'v1',
21
+ **options
22
+ )
23
+ initialize_client(
24
+ Kubeclient,
25
+ uri,
26
+ '/api',
27
+ version,
28
+ options
29
+ )
30
+ end
31
+ end
32
+ end