kube-dsl 0.2.0 → 0.3.0

This diff has not been reviewed by any users.
Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/LICENSE +21 -0
  4. data/kube-dsl.gemspec +1 -1
  5. data/lib/kube-dsl/dsl/apiextensions/v1/json_schema_props.rb +4 -4
  6. data/lib/kube-dsl/dsl/apiextensions/v1beta1/json_schema_props.rb +4 -4
  7. data/lib/kube-dsl/dsl/apps/v1beta1/deployment_rollback.rb +1 -1
  8. data/lib/kube-dsl/dsl/apps/v1beta1/scale_status.rb +1 -1
  9. data/lib/kube-dsl/dsl/apps/v1beta2/scale_status.rb +1 -1
  10. data/lib/kube-dsl/dsl/authentication/v1/user_info.rb +1 -1
  11. data/lib/kube-dsl/dsl/authentication/v1beta1/user_info.rb +1 -1
  12. data/lib/kube-dsl/dsl/authorization/v1/subject_access_review_spec.rb +1 -1
  13. data/lib/kube-dsl/dsl/authorization/v1beta1/subject_access_review_spec.rb +1 -1
  14. data/lib/kube-dsl/dsl/certificates/v1beta1/certificate_signing_request_spec.rb +1 -1
  15. data/lib/kube-dsl/dsl/discovery/v1beta1/endpoint.rb +1 -1
  16. data/lib/kube-dsl/dsl/extensions/v1beta1/deployment_rollback.rb +1 -1
  17. data/lib/kube-dsl/dsl/extensions/v1beta1/scale_status.rb +1 -1
  18. data/lib/kube-dsl/dsl/meta/v1/label_selector.rb +1 -1
  19. data/lib/kube-dsl/dsl/meta/v1/object_meta.rb +2 -2
  20. data/lib/kube-dsl/dsl/node/v1alpha1/overhead.rb +1 -1
  21. data/lib/kube-dsl/dsl/node/v1alpha1/scheduling.rb +1 -1
  22. data/lib/kube-dsl/dsl/node/v1beta1/overhead.rb +1 -1
  23. data/lib/kube-dsl/dsl/node/v1beta1/scheduling.rb +1 -1
  24. data/lib/kube-dsl/dsl/policy/v1beta1/pod_disruption_budget_status.rb +1 -1
  25. data/lib/kube-dsl/dsl/storage/v1/storage_class.rb +1 -1
  26. data/lib/kube-dsl/dsl/storage/v1/volume_attachment_status.rb +1 -1
  27. data/lib/kube-dsl/dsl/storage/v1alpha1/volume_attachment_status.rb +1 -1
  28. data/lib/kube-dsl/dsl/storage/v1beta1/storage_class.rb +1 -1
  29. data/lib/kube-dsl/dsl/storage/v1beta1/volume_attachment_status.rb +1 -1
  30. data/lib/kube-dsl/dsl/v1/config_map.rb +2 -2
  31. data/lib/kube-dsl/dsl/v1/csi_persistent_volume_source.rb +1 -1
  32. data/lib/kube-dsl/dsl/v1/csi_volume_source.rb +1 -1
  33. data/lib/kube-dsl/dsl/v1/flex_persistent_volume_source.rb +1 -1
  34. data/lib/kube-dsl/dsl/v1/flex_volume_source.rb +1 -1
  35. data/lib/kube-dsl/dsl/v1/limit_range_item.rb +5 -5
  36. data/lib/kube-dsl/dsl/v1/node_status.rb +2 -2
  37. data/lib/kube-dsl/dsl/v1/persistent_volume_claim_status.rb +1 -1
  38. data/lib/kube-dsl/dsl/v1/persistent_volume_spec.rb +1 -1
  39. data/lib/kube-dsl/dsl/v1/pod_spec.rb +2 -2
  40. data/lib/kube-dsl/dsl/v1/replication_controller_spec.rb +1 -1
  41. data/lib/kube-dsl/dsl/v1/resource_quota_spec.rb +1 -1
  42. data/lib/kube-dsl/dsl/v1/resource_quota_status.rb +2 -2
  43. data/lib/kube-dsl/dsl/v1/resource_requirements.rb +2 -2
  44. data/lib/kube-dsl/dsl/v1/secret.rb +2 -2
  45. data/lib/kube-dsl/dsl/v1/service_spec.rb +1 -1
  46. data/lib/kube-dsl/key_value_fields.rb +4 -0
  47. data/lib/kube-dsl/resource_meta.rb +1 -1
  48. data/lib/kube-dsl/value_fields.rb +134 -48
  49. data/lib/kube-dsl/version.rb +1 -1
  50. metadata +7 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7366ef5120f332ba7dd2a4972a05016fe8ac2af4b254c8b3b86a845604b068e
4
- data.tar.gz: baa911f8b536a492132ef7f67154956cb3194e13484b93bffcd7abdb65a64fcc
3
+ metadata.gz: b7a616f5571a180de6f04decd298d902b823148b10596292fa69ab68ce7f2ddb
4
+ data.tar.gz: 51d822c6644973f06cb3f8c819eef7bf99f21d54ff7c7820f0e3105b712a1880
5
5
  SHA512:
6
- metadata.gz: 919368842ac9e463add459aac18b174741d6effa9c4a9e1b22ae9e4327f45189e97304dbb7e9946efaceaed4959f6daeb4af9bffd8e7353c505a761e5235b60e
7
- data.tar.gz: ffabad8c8b402854ba45398fde48353b447b7184b7baf7f4e469f3bf0bbfb9220d41abf54f5a35934eaa619cb5badef804bbcf68beaf36c686fb85e8de6f3d96
6
+ metadata.gz: 821f0332b1aa16b3ba3ffc2fad7a3f453878fa97993dfb71fc74386dc5a0b1aecd0e56f9bd86518a869721d1a5d21a7c2f433edc8bc82e378bba5b1b1900929f
7
+ data.tar.gz: 6882c287e01af9c05d32a8729e1999a485a75bfec2fd433a53d65efbbd1de0d6fa6dc72b4f6169150d7f00b419e650d8ac4766308f23ba9d766c7bd7af0df354
@@ -1,3 +1,7 @@
1
+ ## 0.3.0
2
+ * Introduce the `key_value_field` method to simplify creating key/value fields.
3
+ * Add `#merge` and `#merge!` methods to anything that includes or extends `ValueFields`.
4
+
1
5
  ## 0.2.0
2
6
  * Treat bare array fields as value fields.
3
7
  - When specifying `array_field(:foo)`, you would get a doubly-nested array if you filled in the value via a block, eg: `foo { [1, 2, 3] }`.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 Cameron Dutro
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -13,5 +13,5 @@ Gem::Specification.new do |s|
13
13
  s.add_dependency 'dry-inflector', '~> 0.2'
14
14
 
15
15
  s.require_path = 'lib'
16
- s.files = Dir['{lib,spec}/**/*', 'Gemfile', 'CHANGELOG.md', 'README.md', 'Rakefile', 'kube-dsl.gemspec']
16
+ s.files = Dir['{lib,spec}/**/*', 'Gemfile', 'LICENSE', 'CHANGELOG.md', 'README.md', 'Rakefile', 'kube-dsl.gemspec']
17
17
  end
@@ -7,10 +7,10 @@ module KubeDSL::DSL::Apiextensions::V1
7
7
  array_field(:one_of) { KubeDSL::DSL::Apiextensions::V1::JSONSchemaProps.new }
8
8
  object_field(:external_docs) { KubeDSL::DSL::Apiextensions::V1::ExternalDocumentation.new }
9
9
  object_field(:not) { KubeDSL::DSL::Apiextensions::V1::JSONSchemaProps.new }
10
- object_field(:definitions) { ::KubeDSL::KeyValueFields.new(format: :string) }
11
- object_field(:dependencies) { ::KubeDSL::KeyValueFields.new(format: :string) }
12
- object_field(:pattern_properties) { ::KubeDSL::KeyValueFields.new(format: :string) }
13
- object_field(:properties) { ::KubeDSL::KeyValueFields.new(format: :string) }
10
+ key_value_field(:definitions, format: :string)
11
+ key_value_field(:dependencies, format: :string)
12
+ key_value_field(:pattern_properties, format: :string)
13
+ key_value_field(:properties, format: :string)
14
14
 
15
15
  def serialize
16
16
  {}.tap do |result|
@@ -7,10 +7,10 @@ module KubeDSL::DSL::Apiextensions::V1beta1
7
7
  array_field(:one_of) { KubeDSL::DSL::Apiextensions::V1beta1::JSONSchemaProps.new }
8
8
  object_field(:external_docs) { KubeDSL::DSL::Apiextensions::V1beta1::ExternalDocumentation.new }
9
9
  object_field(:not) { KubeDSL::DSL::Apiextensions::V1beta1::JSONSchemaProps.new }
10
- object_field(:definitions) { ::KubeDSL::KeyValueFields.new(format: :string) }
11
- object_field(:dependencies) { ::KubeDSL::KeyValueFields.new(format: :string) }
12
- object_field(:pattern_properties) { ::KubeDSL::KeyValueFields.new(format: :string) }
13
- object_field(:properties) { ::KubeDSL::KeyValueFields.new(format: :string) }
10
+ key_value_field(:definitions, format: :string)
11
+ key_value_field(:dependencies, format: :string)
12
+ key_value_field(:pattern_properties, format: :string)
13
+ key_value_field(:properties, format: :string)
14
14
 
15
15
  def serialize
16
16
  {}.tap do |result|
@@ -2,7 +2,7 @@ module KubeDSL::DSL::Apps::V1beta1
2
2
  class DeploymentRollback < ::KubeDSL::DSLObject
3
3
  value_fields :name
4
4
  object_field(:rollback_to) { KubeDSL::DSL::Apps::V1beta1::RollbackConfig.new }
5
- object_field(:updated_annotations) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:updated_annotations, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Apps::V1beta1
2
2
  class ScaleStatus < ::KubeDSL::DSLObject
3
3
  value_fields :replicas, :target_selector
4
- object_field(:selector) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:selector, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Apps::V1beta2
2
2
  class ScaleStatus < ::KubeDSL::DSLObject
3
3
  value_fields :replicas, :target_selector
4
- object_field(:selector) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:selector, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Authentication::V1
2
2
  class UserInfo < ::KubeDSL::DSLObject
3
3
  value_fields :groups, :uid, :username
4
- object_field(:extra) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:extra, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Authentication::V1beta1
2
2
  class UserInfo < ::KubeDSL::DSLObject
3
3
  value_fields :groups, :uid, :username
4
- object_field(:extra) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:extra, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::Authorization::V1
3
3
  value_fields :groups, :uid, :user
4
4
  object_field(:non_resource_attributes) { KubeDSL::DSL::Authorization::V1::NonResourceAttributes.new }
5
5
  object_field(:resource_attributes) { KubeDSL::DSL::Authorization::V1::ResourceAttributes.new }
6
- object_field(:extra) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:extra, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::Authorization::V1beta1
3
3
  value_fields :group, :uid, :user
4
4
  object_field(:non_resource_attributes) { KubeDSL::DSL::Authorization::V1beta1::NonResourceAttributes.new }
5
5
  object_field(:resource_attributes) { KubeDSL::DSL::Authorization::V1beta1::ResourceAttributes.new }
6
- object_field(:extra) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:extra, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Certificates::V1beta1
2
2
  class CertificateSigningRequestSpec < ::KubeDSL::DSLObject
3
3
  value_fields :groups, :request, :uid, :usages, :username
4
- object_field(:extra) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:extra, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::Discovery::V1beta1
3
3
  value_fields :addresses, :hostname
4
4
  object_field(:conditions) { KubeDSL::DSL::Discovery::V1beta1::EndpointConditions.new }
5
5
  object_field(:target_ref) { KubeDSL::DSL::V1::ObjectReference.new }
6
- object_field(:topology) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:topology, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -2,7 +2,7 @@ module KubeDSL::DSL::Extensions::V1beta1
2
2
  class DeploymentRollback < ::KubeDSL::DSLObject
3
3
  value_fields :name
4
4
  object_field(:rollback_to) { KubeDSL::DSL::Extensions::V1beta1::RollbackConfig.new }
5
- object_field(:updated_annotations) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:updated_annotations, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Extensions::V1beta1
2
2
  class ScaleStatus < ::KubeDSL::DSLObject
3
3
  value_fields :replicas, :target_selector
4
- object_field(:selector) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:selector, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Meta::V1
2
2
  class LabelSelector < ::KubeDSL::DSLObject
3
3
  array_field(:match_expression) { KubeDSL::DSL::Meta::V1::LabelSelectorRequirement.new }
4
- object_field(:match_labels) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:match_labels, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -3,8 +3,8 @@ module KubeDSL::DSL::Meta::V1
3
3
  value_fields :cluster_name, :creation_timestamp, :deletion_grace_period_seconds, :deletion_timestamp, :finalizers, :generate_name, :generation, :name, :namespace, :resource_version, :self_link, :uid
4
4
  array_field(:managed_field) { KubeDSL::DSL::Meta::V1::ManagedFieldsEntry.new }
5
5
  array_field(:owner_reference) { KubeDSL::DSL::Meta::V1::OwnerReference.new }
6
- object_field(:annotations) { ::KubeDSL::KeyValueFields.new(format: :string) }
7
- object_field(:labels) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:annotations, format: :string)
7
+ key_value_field(:labels, format: :string)
8
8
 
9
9
  def serialize
10
10
  {}.tap do |result|
@@ -1,6 +1,6 @@
1
1
  module KubeDSL::DSL::Node::V1alpha1
2
2
  class Overhead < ::KubeDSL::DSLObject
3
- object_field(:pod_fixed) { ::KubeDSL::KeyValueFields.new(format: :string) }
3
+ key_value_field(:pod_fixed, format: :string)
4
4
 
5
5
  def serialize
6
6
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Node::V1alpha1
2
2
  class Scheduling < ::KubeDSL::DSLObject
3
3
  array_field(:toleration) { KubeDSL::DSL::V1::Toleration.new }
4
- object_field(:node_selector) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:node_selector, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -1,6 +1,6 @@
1
1
  module KubeDSL::DSL::Node::V1beta1
2
2
  class Overhead < ::KubeDSL::DSLObject
3
- object_field(:pod_fixed) { ::KubeDSL::KeyValueFields.new(format: :string) }
3
+ key_value_field(:pod_fixed, format: :string)
4
4
 
5
5
  def serialize
6
6
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Node::V1beta1
2
2
  class Scheduling < ::KubeDSL::DSLObject
3
3
  array_field(:toleration) { KubeDSL::DSL::V1::Toleration.new }
4
- object_field(:node_selector) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:node_selector, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::Policy::V1beta1
2
2
  class PodDisruptionBudgetStatus < ::KubeDSL::DSLObject
3
3
  value_fields :current_healthy, :desired_healthy, :disruptions_allowed, :expected_pods, :observed_generation
4
- object_field(:disrupted_pods) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:disrupted_pods, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::Storage::V1
3
3
  value_fields :allow_volume_expansion, :mount_options, :provisioner, :reclaim_policy, :volume_binding_mode
4
4
  array_field(:allowed_topology) { KubeDSL::DSL::V1::TopologySelectorTerm.new }
5
5
  object_field(:metadata) { KubeDSL::DSL::Meta::V1::ObjectMeta.new }
6
- object_field(:parameters) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:parameters, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::Storage::V1
3
3
  value_fields :attached
4
4
  object_field(:attach_error) { KubeDSL::DSL::Storage::V1::VolumeError.new }
5
5
  object_field(:detach_error) { KubeDSL::DSL::Storage::V1::VolumeError.new }
6
- object_field(:attachment_metadata) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:attachment_metadata, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::Storage::V1alpha1
3
3
  value_fields :attached
4
4
  object_field(:attach_error) { KubeDSL::DSL::Storage::V1alpha1::VolumeError.new }
5
5
  object_field(:detach_error) { KubeDSL::DSL::Storage::V1alpha1::VolumeError.new }
6
- object_field(:attachment_metadata) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:attachment_metadata, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::Storage::V1beta1
3
3
  value_fields :allow_volume_expansion, :mount_options, :provisioner, :reclaim_policy, :volume_binding_mode
4
4
  array_field(:allowed_topology) { KubeDSL::DSL::V1::TopologySelectorTerm.new }
5
5
  object_field(:metadata) { KubeDSL::DSL::Meta::V1::ObjectMeta.new }
6
- object_field(:parameters) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:parameters, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::Storage::V1beta1
3
3
  value_fields :attached
4
4
  object_field(:attach_error) { KubeDSL::DSL::Storage::V1beta1::VolumeError.new }
5
5
  object_field(:detach_error) { KubeDSL::DSL::Storage::V1beta1::VolumeError.new }
6
- object_field(:attachment_metadata) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:attachment_metadata, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -1,8 +1,8 @@
1
1
  module KubeDSL::DSL::V1
2
2
  class ConfigMap < ::KubeDSL::DSLObject
3
3
  object_field(:metadata) { KubeDSL::DSL::Meta::V1::ObjectMeta.new }
4
- object_field(:binary_data) { ::KubeDSL::KeyValueFields.new(format: :byte) }
5
- object_field(:data) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:binary_data, format: :byte)
5
+ key_value_field(:data, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -5,7 +5,7 @@ module KubeDSL::DSL::V1
5
5
  object_field(:controller_publish_secret_ref) { KubeDSL::DSL::V1::SecretReference.new }
6
6
  object_field(:node_publish_secret_ref) { KubeDSL::DSL::V1::SecretReference.new }
7
7
  object_field(:node_stage_secret_ref) { KubeDSL::DSL::V1::SecretReference.new }
8
- object_field(:volume_attributes) { ::KubeDSL::KeyValueFields.new(format: :string) }
8
+ key_value_field(:volume_attributes, format: :string)
9
9
 
10
10
  def serialize
11
11
  {}.tap do |result|
@@ -2,7 +2,7 @@ module KubeDSL::DSL::V1
2
2
  class CSIVolumeSource < ::KubeDSL::DSLObject
3
3
  value_fields :driver, :fs_type, :read_only
4
4
  object_field(:node_publish_secret_ref) { KubeDSL::DSL::V1::LocalObjectReference.new }
5
- object_field(:volume_attributes) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:volume_attributes, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -2,7 +2,7 @@ module KubeDSL::DSL::V1
2
2
  class FlexPersistentVolumeSource < ::KubeDSL::DSLObject
3
3
  value_fields :driver, :fs_type, :read_only
4
4
  object_field(:secret_ref) { KubeDSL::DSL::V1::SecretReference.new }
5
- object_field(:options) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:options, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -2,7 +2,7 @@ module KubeDSL::DSL::V1
2
2
  class FlexVolumeSource < ::KubeDSL::DSLObject
3
3
  value_fields :driver, :fs_type, :read_only
4
4
  object_field(:secret_ref) { KubeDSL::DSL::V1::LocalObjectReference.new }
5
- object_field(:options) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:options, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -1,11 +1,11 @@
1
1
  module KubeDSL::DSL::V1
2
2
  class LimitRangeItem < ::KubeDSL::DSLObject
3
3
  value_fields :type
4
- object_field(:default) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
- object_field(:default_request) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
- object_field(:max) { ::KubeDSL::KeyValueFields.new(format: :string) }
7
- object_field(:max_limit_request_ratio) { ::KubeDSL::KeyValueFields.new(format: :string) }
8
- object_field(:min) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
+ key_value_field(:default, format: :string)
5
+ key_value_field(:default_request, format: :string)
6
+ key_value_field(:max, format: :string)
7
+ key_value_field(:max_limit_request_ratio, format: :string)
8
+ key_value_field(:min, format: :string)
9
9
 
10
10
  def serialize
11
11
  {}.tap do |result|
@@ -8,8 +8,8 @@ module KubeDSL::DSL::V1
8
8
  object_field(:config) { KubeDSL::DSL::V1::NodeConfigStatus.new }
9
9
  object_field(:daemon_endpoints) { KubeDSL::DSL::V1::NodeDaemonEndpoints.new }
10
10
  object_field(:node_info) { KubeDSL::DSL::V1::NodeSystemInfo.new }
11
- object_field(:allocatable) { ::KubeDSL::KeyValueFields.new(format: :string) }
12
- object_field(:capacity) { ::KubeDSL::KeyValueFields.new(format: :string) }
11
+ key_value_field(:allocatable, format: :string)
12
+ key_value_field(:capacity, format: :string)
13
13
 
14
14
  def serialize
15
15
  {}.tap do |result|
@@ -2,7 +2,7 @@ module KubeDSL::DSL::V1
2
2
  class PersistentVolumeClaimStatus < ::KubeDSL::DSLObject
3
3
  value_fields :access_modes, :phase
4
4
  array_field(:condition) { KubeDSL::DSL::V1::PersistentVolumeClaimCondition.new }
5
- object_field(:capacity) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:capacity, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -25,7 +25,7 @@ module KubeDSL::DSL::V1
25
25
  object_field(:scale_io) { KubeDSL::DSL::V1::ScaleIOPersistentVolumeSource.new }
26
26
  object_field(:storageos) { KubeDSL::DSL::V1::StorageOSPersistentVolumeSource.new }
27
27
  object_field(:vsphere_volume) { KubeDSL::DSL::V1::VsphereVirtualDiskVolumeSource.new }
28
- object_field(:capacity) { ::KubeDSL::KeyValueFields.new(format: :string) }
28
+ key_value_field(:capacity, format: :string)
29
29
 
30
30
  def serialize
31
31
  {}.tap do |result|
@@ -13,8 +13,8 @@ module KubeDSL::DSL::V1
13
13
  object_field(:affinity) { KubeDSL::DSL::V1::Affinity.new }
14
14
  object_field(:dns_config) { KubeDSL::DSL::V1::PodDNSConfig.new }
15
15
  object_field(:security_context) { KubeDSL::DSL::V1::PodSecurityContext.new }
16
- object_field(:node_selector) { ::KubeDSL::KeyValueFields.new(format: :string) }
17
- object_field(:overhead) { ::KubeDSL::KeyValueFields.new(format: :string) }
16
+ key_value_field(:node_selector, format: :string)
17
+ key_value_field(:overhead, format: :string)
18
18
 
19
19
  def serialize
20
20
  {}.tap do |result|
@@ -2,7 +2,7 @@ module KubeDSL::DSL::V1
2
2
  class ReplicationControllerSpec < ::KubeDSL::DSLObject
3
3
  value_fields :min_ready_seconds, :replicas
4
4
  object_field(:template) { KubeDSL::DSL::V1::PodTemplateSpec.new }
5
- object_field(:selector) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:selector, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -2,7 +2,7 @@ module KubeDSL::DSL::V1
2
2
  class ResourceQuotaSpec < ::KubeDSL::DSLObject
3
3
  value_fields :scopes
4
4
  object_field(:scope_selector) { KubeDSL::DSL::V1::ScopeSelector.new }
5
- object_field(:hard) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:hard, format: :string)
6
6
 
7
7
  def serialize
8
8
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::V1
2
2
  class ResourceQuotaStatus < ::KubeDSL::DSLObject
3
- object_field(:hard) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
- object_field(:used) { ::KubeDSL::KeyValueFields.new(format: :string) }
3
+ key_value_field(:hard, format: :string)
4
+ key_value_field(:used, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -1,7 +1,7 @@
1
1
  module KubeDSL::DSL::V1
2
2
  class ResourceRequirements < ::KubeDSL::DSLObject
3
- object_field(:limits) { ::KubeDSL::KeyValueFields.new(format: :string) }
4
- object_field(:requests) { ::KubeDSL::KeyValueFields.new(format: :string) }
3
+ key_value_field(:limits, format: :string)
4
+ key_value_field(:requests, format: :string)
5
5
 
6
6
  def serialize
7
7
  {}.tap do |result|
@@ -2,8 +2,8 @@ module KubeDSL::DSL::V1
2
2
  class Secret < ::KubeDSL::DSLObject
3
3
  value_fields :type
4
4
  object_field(:metadata) { KubeDSL::DSL::Meta::V1::ObjectMeta.new }
5
- object_field(:data) { ::KubeDSL::KeyValueFields.new(format: :byte) }
6
- object_field(:string_data) { ::KubeDSL::KeyValueFields.new(format: :string) }
5
+ key_value_field(:data, format: :byte)
6
+ key_value_field(:string_data, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -3,7 +3,7 @@ module KubeDSL::DSL::V1
3
3
  value_fields :cluster_ip, :external_i_ps, :external_name, :external_traffic_policy, :health_check_node_port, :ip_family, :load_balancer_ip, :load_balancer_source_ranges, :publish_not_ready_addresses, :session_affinity, :topology_keys, :type
4
4
  array_field(:port) { KubeDSL::DSL::V1::ServicePort.new }
5
5
  object_field(:session_affinity_config) { KubeDSL::DSL::V1::SessionAffinityConfig.new }
6
- object_field(:selector) { ::KubeDSL::KeyValueFields.new(format: :string) }
6
+ key_value_field(:selector, format: :string)
7
7
 
8
8
  def serialize
9
9
  {}.tap do |result|
@@ -31,6 +31,10 @@ module KubeDSL
31
31
  end
32
32
  end
33
33
 
34
+ def merge!(other)
35
+ @kv_pairs.merge!(other.instance_variable_get(:@kv_pairs))
36
+ end
37
+
34
38
  private
35
39
 
36
40
  def serialize_value(data)
@@ -72,7 +72,7 @@ module KubeDSL
72
72
  end
73
73
 
74
74
  key_value_fields.each do |name, fmt|
75
- str << " object_field(:#{underscore(name)}) { ::KubeDSL::KeyValueFields.new(format: :#{fmt}) }\n"
75
+ str << " key_value_field(:#{underscore(name)}, format: :#{fmt})\n"
76
76
  end
77
77
  end
78
78
  end
@@ -2,77 +2,163 @@ require 'securerandom'
2
2
 
3
3
  module KubeDSL
4
4
  module ValueFields
5
- def value_fields(*fields)
6
- fields.each { |field| value_field(field) }
7
- end
5
+ class ClassMismatchError < StandardError; end
8
6
 
9
- def value_field(field, default: nil)
10
- define_method(field) do |*args|
11
- if args.empty?
12
- instance_variable_get(:"@#{field}") || (
13
- default.respond_to?(:call) ? default.call : default
14
- )
15
- else
16
- instance_variable_set(:"@#{field}", args.first)
17
- end
7
+ module ClassMethods
8
+ def value_fields(*fields)
9
+ fields.each { |field| value_field(field) }
18
10
  end
19
- end
20
11
 
21
- def object_field(field, &field_block)
22
- define_method(field) do |*args, &block|
23
- ivar = :"@#{field}"
24
- val = instance_variable_get(ivar)
12
+ def value_field(field, default: nil)
13
+ __fields__[:value] << field
25
14
 
26
- unless val
27
- val = field_block.call(*args)
28
- instance_variable_set(ivar, val)
15
+ define_method(field) do |*args|
16
+ if args.empty?
17
+ instance_variable_get(:"@#{field}") || (
18
+ default.respond_to?(:call) ? default.call : default
19
+ )
20
+ else
21
+ instance_variable_set(:"@#{field}", args.first)
22
+ end
29
23
  end
24
+ end
25
+
26
+ def object_field(field, &field_block)
27
+ __fields__[:object] << field
28
+
29
+ define_method(field) do |*args, &block|
30
+ ivar = :"@#{field}"
31
+ val = instance_variable_get(ivar)
30
32
 
31
- val.instance_exec(&block) if block
32
- val
33
+ unless val
34
+ val = field_block.call(*args)
35
+ instance_variable_set(ivar, val)
36
+ end
37
+
38
+ val.instance_exec(&block) if block
39
+ val
40
+ end
33
41
  end
34
- end
35
42
 
36
- def array_field(field, accessor = nil, &field_block)
37
- accessor ||= Inflector.pluralize(field.to_s).to_sym
43
+ def key_value_field(field, format:)
44
+ __fields__[:key_value] << field
45
+
46
+ define_method(field) do |*args, &block|
47
+ ivar = :"@#{field}"
48
+ val = instance_variable_get(ivar)
38
49
 
39
- define_method(field) do |elem_name = nil, &block|
40
- ivar = :"@#{accessor}"
41
- arr = instance_variable_get(ivar)
50
+ unless val
51
+ val = ::KubeDSL::KeyValueFields.new(format: format)
52
+ instance_variable_set(ivar, val)
53
+ end
42
54
 
43
- # use a hash so elements can be named and modified later
44
- unless arr
45
- arr = {}
46
- instance_variable_set(ivar, arr)
55
+ val.instance_exec(&block) if block
56
+ val
47
57
  end
58
+ end
59
+
60
+ def array_field(field, accessor = nil, &field_block)
61
+ accessor ||= Inflector.pluralize(field.to_s).to_sym
62
+
63
+ __fields__[:array] << { field: field, accessor: accessor }
48
64
 
49
- if elem_name && elem = arr[elem_name]
50
- elem.instance_eval(&block) if block
51
- else
52
- if field_block
53
- new_val = field_block.call
54
- new_val.instance_eval(&block) if block
65
+ define_method(field) do |elem_name = nil, &block|
66
+ ivar = :"@#{accessor}"
67
+ arr = instance_variable_get(ivar)
68
+
69
+ # use a hash so elements can be named and modified later
70
+ unless arr
71
+ arr = {}
72
+ instance_variable_set(ivar, arr)
73
+ end
74
+
75
+ if elem_name && elem = arr[elem_name]
76
+ elem.instance_eval(&block) if block
77
+ elem
55
78
  else
56
- new_val = block.call if block
79
+ if field_block
80
+ new_val = field_block.call
81
+ new_val.instance_eval(&block) if block
82
+ else
83
+ new_val = block.call if block
84
+ end
85
+
86
+ arr[elem_name || SecureRandom.hex] = new_val
87
+ new_val
57
88
  end
89
+ end
58
90
 
59
- arr[elem_name || SecureRandom.hex] = new_val
91
+ define_method(accessor) do
92
+ ivar = :"@#{accessor}"
93
+ arr = instance_variable_get(ivar)
94
+
95
+ unless arr
96
+ arr = {}
97
+ instance_variable_set(ivar, arr)
98
+ end
99
+
100
+ arr.values
60
101
  end
102
+ end
61
103
 
62
- nil
104
+ def __fields__
105
+ @__fields__ ||= {
106
+ value: [],
107
+ object: [],
108
+ key_value: [],
109
+ array: []
110
+ }
63
111
  end
112
+ end
113
+
114
+
115
+ module InstanceMethods
116
+ def merge!(other, fields: nil)
117
+ unless other.is_a?(self.class)
118
+ raise ClassMismatchError, 'cannot merge two objects of '\
119
+ "different types, namely '#{self.class}' and '#{other.class}'"
120
+ end
121
+
122
+ (self.class.__fields__[:value] + self.class.__fields__[:object]).each do |field|
123
+ next if fields && !fields.include?(field)
124
+ ivar = :"@#{field}"
125
+
126
+ if other_val = other.instance_variable_get(ivar)
127
+ instance_variable_set(ivar, other_val)
128
+ end
129
+ end
130
+
131
+ self.class.__fields__[:key_value].each do |field|
132
+ next if fields && !fields.include?(field)
133
+ send(field).merge!(other.send(field))
134
+ end
64
135
 
65
- define_method(accessor) do
66
- ivar = :"@#{accessor}"
67
- arr = instance_variable_get(ivar)
136
+ self.class.__fields__[:array].each do |af|
137
+ next if fields && !fields.include?(af[:field])
138
+ ivar = :"@#{af[:accessor]}"
139
+
140
+ arrs = instance_variable_get(ivar) || {}
141
+
142
+ arrs.merge!(
143
+ other.instance_variable_get(ivar) || {}
144
+ )
68
145
 
69
- unless arr
70
- arr = {}
71
- instance_variable_set(ivar, arr)
146
+ instance_variable_set(ivar, arrs)
72
147
  end
148
+ end
73
149
 
74
- arr.values
150
+ def merge(other, fields)
151
+ self.class.new.tap do |result|
152
+ result.merge!(self)
153
+ result.merge!(other, fields: fields)
154
+ end
75
155
  end
76
156
  end
157
+
158
+
159
+ def self.extended(base)
160
+ base.include(InstanceMethods)
161
+ base.extend(ClassMethods)
162
+ end
77
163
  end
78
164
  end
@@ -1,3 +1,3 @@
1
1
  module KubeDSL
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kube-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-02 00:00:00.000000000 Z
11
+ date: 2020-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-inflector
@@ -33,6 +33,7 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - CHANGELOG.md
35
35
  - Gemfile
36
+ - LICENSE
36
37
  - Rakefile
37
38
  - kube-dsl.gemspec
38
39
  - lib/kube-dsl.rb
@@ -795,7 +796,7 @@ files:
795
796
  homepage: http://github.com/getkuby/kube-dsl
796
797
  licenses: []
797
798
  metadata: {}
798
- post_install_message:
799
+ post_install_message:
799
800
  rdoc_options: []
800
801
  require_paths:
801
802
  - lib
@@ -810,8 +811,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
810
811
  - !ruby/object:Gem::Version
811
812
  version: '0'
812
813
  requirements: []
813
- rubygems_version: 3.0.6
814
- signing_key:
814
+ rubygems_version: 3.1.4
815
+ signing_key:
815
816
  specification_version: 4
816
817
  summary: A Ruby DSL for defining Kubernetes resources.
817
818
  test_files: []