kuby-redis 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile +4 -1
  4. data/README.md +37 -32
  5. data/Rakefile +158 -0
  6. data/kuby-redis.gemspec +3 -2
  7. data/lib/kuby/redis/dsl/databases/v1/redis_failover.rb +34 -0
  8. data/lib/kuby/redis/dsl/databases/v1/redis_failover_list.rb +34 -0
  9. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec.rb +39 -0
  10. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_auth.rb +27 -0
  11. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_bootstrap_node.rb +33 -0
  12. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis.rb +90 -0
  13. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity.rb +33 -0
  14. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity.rb +30 -0
  15. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity_preferred_during_scheduling_ignored_dur_2699b98c.rb +30 -0
  16. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity_preferred_during_scheduling_ignored_dur_57a88803.rb +33 -0
  17. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity_preferred_during_scheduling_ignored_dur_669412ec.rb +30 -0
  18. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity_preferred_during_scheduling_ignored_dur_f45e68a1.rb +33 -0
  19. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity_required_during_scheduling_ignored_duri_514c9d0d.rb +33 -0
  20. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity_required_during_scheduling_ignored_duri_7f2feab2.rb +27 -0
  21. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity_required_during_scheduling_ignored_duri_cf734467.rb +30 -0
  22. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_node_affinity_required_during_scheduling_ignored_duri_d0fbeba3.rb +33 -0
  23. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity.rb +30 -0
  24. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_preferred_during_scheduling_ignored_duri_0aa6c4f1.rb +36 -0
  25. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_preferred_during_scheduling_ignored_duri_39d7e0e9.rb +30 -0
  26. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_preferred_during_scheduling_ignored_duri_3f891b9d.rb +33 -0
  27. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_preferred_during_scheduling_ignored_duri_72161698.rb +33 -0
  28. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_preferred_during_scheduling_ignored_duri_b9e599ce.rb +30 -0
  29. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_preferred_during_scheduling_ignored_duri_d3b686c5.rb +30 -0
  30. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_required_during_scheduling_ignored_durin_14cc16d9.rb +30 -0
  31. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_required_during_scheduling_ignored_durin_5626284b.rb +30 -0
  32. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_required_during_scheduling_ignored_durin_a83e115a.rb +36 -0
  33. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_required_during_scheduling_ignored_durin_a9c63682.rb +33 -0
  34. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_affinity_required_during_scheduling_ignored_durin_d9b1f08a.rb +33 -0
  35. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity.rb +30 -0
  36. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_preferred_during_scheduling_ignored_1c7b7986.rb +30 -0
  37. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_preferred_during_scheduling_ignored_4a682c1c.rb +33 -0
  38. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_preferred_during_scheduling_ignored_4a99f849.rb +36 -0
  39. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_preferred_during_scheduling_ignored_9559ef01.rb +30 -0
  40. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_preferred_during_scheduling_ignored_a79bf5f3.rb +30 -0
  41. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_preferred_during_scheduling_ignored_fb54ab7a.rb +33 -0
  42. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_required_during_scheduling_ignored__203ed839.rb +36 -0
  43. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_required_during_scheduling_ignored__3f37a05b.rb +33 -0
  44. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_required_during_scheduling_ignored__5b67fae1.rb +30 -0
  45. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_required_during_scheduling_ignored__86b357eb.rb +30 -0
  46. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_affinity_pod_anti_affinity_required_during_scheduling_ignored__e2fb95e3.rb +33 -0
  47. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_custom_command_renames.rb +30 -0
  48. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_exporter.rb +39 -0
  49. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_exporter_env.rb +33 -0
  50. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_exporter_env_value_from.rb +36 -0
  51. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_exporter_env_value_from_config_map_key_ref.rb +33 -0
  52. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_exporter_env_value_from_field_ref.rb +30 -0
  53. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_exporter_env_value_from_resource_field_ref.rb +30 -0
  54. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_exporter_env_value_from_secret_key_ref.rb +33 -0
  55. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_image_pull_secrets.rb +27 -0
  56. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_resources.rb +30 -0
  57. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_security_context.rb +54 -0
  58. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_security_context_se_linux_options.rb +36 -0
  59. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_security_context_seccomp_profile.rb +30 -0
  60. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_security_context_sysctls.rb +30 -0
  61. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_security_context_windows_options.rb +36 -0
  62. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage.rb +33 -0
  63. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_empty_dir.rb +27 -0
  64. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim.rb +39 -0
  65. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_metadata.rb +33 -0
  66. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_spec.rb +48 -0
  67. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_spec_data_source.rb +33 -0
  68. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_spec_data_source_ref.rb +33 -0
  69. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_spec_resources.rb +30 -0
  70. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_spec_selector.rb +30 -0
  71. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_spec_selector_match_expressions.rb +33 -0
  72. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_status.rb +36 -0
  73. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_storage_persistent_volume_claim_status_conditions.rb +42 -0
  74. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_redis_tolerations.rb +39 -0
  75. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel.rb +78 -0
  76. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity.rb +33 -0
  77. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity.rb +30 -0
  78. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity_preferred_during_scheduling_ignored__0d41d4f8.rb +30 -0
  79. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity_preferred_during_scheduling_ignored__97efa5a4.rb +33 -0
  80. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity_preferred_during_scheduling_ignored__bdaec101.rb +33 -0
  81. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity_preferred_during_scheduling_ignored__f0775874.rb +30 -0
  82. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity_required_during_scheduling_ignored_d_2895d62e.rb +30 -0
  83. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity_required_during_scheduling_ignored_d_2b5753ed.rb +33 -0
  84. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity_required_during_scheduling_ignored_d_41e3b807.rb +33 -0
  85. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_node_affinity_required_during_scheduling_ignored_d_67aa2728.rb +27 -0
  86. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity.rb +30 -0
  87. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_preferred_during_scheduling_ignored_d_0aac483c.rb +30 -0
  88. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_preferred_during_scheduling_ignored_d_1422bcc7.rb +36 -0
  89. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_preferred_during_scheduling_ignored_d_4adcb8e9.rb +33 -0
  90. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_preferred_during_scheduling_ignored_d_4ea60ad7.rb +30 -0
  91. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_preferred_during_scheduling_ignored_d_78d72154.rb +33 -0
  92. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_preferred_during_scheduling_ignored_d_b6dc802c.rb +30 -0
  93. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_required_during_scheduling_ignored_du_27358e83.rb +33 -0
  94. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_required_during_scheduling_ignored_du_3ed2dfac.rb +36 -0
  95. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_required_during_scheduling_ignored_du_60665747.rb +30 -0
  96. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_required_during_scheduling_ignored_du_b8662dab.rb +30 -0
  97. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_affinity_required_during_scheduling_ignored_du_c7cd5719.rb +33 -0
  98. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity.rb +30 -0
  99. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_preferred_during_scheduling_igno_13d0762f.rb +30 -0
  100. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_preferred_during_scheduling_igno_2a2acc24.rb +33 -0
  101. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_preferred_during_scheduling_igno_38a65fc5.rb +36 -0
  102. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_preferred_during_scheduling_igno_50d3e927.rb +30 -0
  103. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_preferred_during_scheduling_igno_74a32220.rb +30 -0
  104. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_preferred_during_scheduling_igno_f8cf26c5.rb +33 -0
  105. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_required_during_scheduling_ignor_02f9c7b7.rb +36 -0
  106. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_required_during_scheduling_ignor_8222d6bf.rb +30 -0
  107. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_required_during_scheduling_ignor_8384f426.rb +30 -0
  108. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_required_during_scheduling_ignor_8cb6cb26.rb +33 -0
  109. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_affinity_pod_anti_affinity_required_during_scheduling_ignor_95a14c65.rb +33 -0
  110. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_exporter.rb +39 -0
  111. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_exporter_env.rb +33 -0
  112. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_exporter_env_value_from.rb +36 -0
  113. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_exporter_env_value_from_config_map_key_ref.rb +33 -0
  114. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_exporter_env_value_from_field_ref.rb +30 -0
  115. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_exporter_env_value_from_resource_field_ref.rb +30 -0
  116. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_exporter_env_value_from_secret_key_ref.rb +33 -0
  117. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_image_pull_secrets.rb +27 -0
  118. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_resources.rb +30 -0
  119. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_security_context.rb +54 -0
  120. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_security_context_se_linux_options.rb +36 -0
  121. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_security_context_seccomp_profile.rb +30 -0
  122. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_security_context_sysctls.rb +30 -0
  123. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_security_context_windows_options.rb +36 -0
  124. data/lib/kuby/redis/dsl/databases/v1/redis_failover_spec_sentinel_tolerations.rb +39 -0
  125. data/lib/kuby/redis/dsl/databases/v1.rb +120 -0
  126. data/lib/kuby/redis/dsl/databases.rb +3 -0
  127. data/lib/kuby/redis/dsl.rb +3 -0
  128. data/lib/kuby/redis/entrypoint.rb +15 -0
  129. data/lib/kuby/redis/instance.rb +73 -27
  130. data/lib/kuby/redis/plugin.rb +84 -0
  131. data/lib/kuby/redis/version.rb +1 -1
  132. data/lib/kuby/redis.rb +4 -0
  133. metadata +151 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a76527037e4b0dc6d60be52d6ae1b9c93bf3bd41d3188b562f8140a4d45dc007
4
- data.tar.gz: a98a3e23693aa65f9e8964d37754c5c4e0612c6250b5b2d9a4047f99ab3f1fa7
3
+ metadata.gz: 69bffb46215d12382fd38781fd0b53d6ec8c73db4e8e94902fc46d844d72dc7f
4
+ data.tar.gz: 322bcccaec7830bbddaa8ce829f64682c83ec16ebc2b0db5898f8dcd630cb732
5
5
  SHA512:
6
- metadata.gz: e288064f9f39ff7c223e34c0e9f75dd5e3e0b94c4a6983b849fc78469ceeb2ed2577594695eba5dca8d4019e5cac4ea26b49ebc59ba3c782d1cada87f335f9d7
7
- data.tar.gz: 7c68f5b0bea7c5aa285e3164562f5ea514577c0b608a346cb74f8c976a15360d22495c5013108a886f935bb2592a7f20910c6f82817ccc05d8221cb4285db431
6
+ metadata.gz: e4857e14a64a878411e27f72d268303e38282e31a71bfe221362f96db9f75c5b7a85eb43e8088690b09aee09237955b0f477b7c28dc2fb533ed23644f723b656
7
+ data.tar.gz: 37ea5f91b73bd1ce226e78508141e6c097eaf7dc317d21e1c1db340f2169846f37df0ed1cfa5236bef9afaf10248d6c8dab5bc7cfac690efd4c3fc97b67a9b42
data/CHANGELOG.md CHANGED
@@ -1,2 +1,6 @@
1
+ ## 0.2.0
2
+ * Use the Spotahome Redis operator instead of KubeDB.
3
+ * Generate DSL files by making an API request to a Kind cluster.
4
+
1
5
  ## 0.1.0
2
6
  * Birthday!
data/Gemfile CHANGED
@@ -3,9 +3,12 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem 'kuby-core', path: '../kuby-core'
6
- gem 'kube-dsl', path: '../kube-dsl'
7
6
 
8
7
  group :development, :test do
8
+ gem 'sorbet'
9
+ gem 'sorbet-runtime'
10
+ gem 'tapioca', '~> 0.7'
11
+ gem 'parlour', github: 'camertron/parlour', branch: 'initialize_void'
9
12
  gem 'pry-byebug'
10
13
  gem 'rake'
11
14
  end
data/README.md CHANGED
@@ -1,14 +1,22 @@
1
+ **NOTE**: The documentation below refers to an unreleased version of kuby-redis. Please [click here](https://github.com/getkuby/kuby-redis/blob/v0.1.0/README.md) for the documentation for the currently released version.
2
+
1
3
  ## kuby-redis
2
4
 
3
- Redis plugin for [Kuby](https://github.com/getkuby/kuby-core).
5
+ Redis plugin for [Kuby](https://github.com/getkuby/kuby-core). If you're looking for an easy way to add Sidekiq to your app, check out [kuby-sidekiq](https://github.com/getkuby/kuby-sidekiq).
4
6
 
5
7
  ## Intro
6
8
 
7
- The redis plugin provides the ability to stand up arbitrary redis instances. Behind the scenes it uses the excellent [kubedb](https://kubedb.com/) Kubernetes operator.
9
+ The redis plugin provides the ability to stand up arbitrary redis instances. Behind the scenes it uses the excellent [Spotahome Redis operator](https://github.com/spotahome/redis-operator).
8
10
 
9
11
  ## Configuration
10
12
 
11
- Add the kuby-redis gem to your Gemfile, then add a redis instance like this:
13
+ Add the kuby-redis gem to your Gemfile and run the setup command, eg:
14
+
15
+ ```bash
16
+ bundle exec kuby -e production setup
17
+ ```
18
+
19
+ Add a Redis instance like this:
12
20
 
13
21
  ```ruby
14
22
  require 'kuby/redis'
@@ -24,13 +32,20 @@ Kuby.define(:production) do
24
32
  end
25
33
  ```
26
34
 
27
- The kuby-redis plugin allows a number of additional configuration options too:
35
+ The kuby-redis plugin supports a number of additional configuration options:
28
36
 
37
+ * `cpu_request`, (default: `'100m'`). The number of CPU units to request from Kubernetes. 1 CPU core = 1000 units.
38
+ * `memory_request`, (default: `'100Mi'`). The amount of memory to request from Kubernetes.
39
+ * `cpu_limit`, (default: `'400m'`). A limit on the number of CPU units the Redis instance may consume. 1 CPU core = 1000 units.
40
+ * `memory_limit`, (default: `'500Mi'`). A limit on the amount of memory the Redis instance may consume.
41
+ * `sentinel_replicas` (default: `1`). The number of [Redis sentinels](https://redis.io/docs/manual/sentinel/) to run.
42
+ * `redis_replicas` (default: `1`). The number of replicated Redis servers to run. For a highly-available configuration, set this option to a value >= 3.
43
+ * `storage_access_modes`, (default: `['ReadWriteOnce']`). An array of Kubernetes [storage access modes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) for the persistent volume that the Redis instance will use to persist data.
44
+ * `storage`, (default: `'1Gi'`). The amount of persistent storage to request. Note that this is not a Redis memory limit, but rather a request for an amount of persistent (i.e. disk-based) storage Redis will write to. Persistent storage is necessary to prevent data loss if/when an individual Redis instance fails.
29
45
 
30
- value_field :storage_type, default: 'Durable'
31
- value_field :storage, default: '1Gi'
32
- value_field :access_modes, default: ['ReadWriteOnce']
46
+ **NOTE**: All memory amounts must be strings parseable by Go's [go-units module](https://pkg.go.dev/github.com/docker/go-units#example-FromHumanSize). Valid examples include '100Mi' (100 megabytes) and '2Gi' (2 gigabytes).
33
47
 
48
+ Example:
34
49
 
35
50
  ```ruby
36
51
  Kuby.define(:production) do
@@ -38,15 +53,12 @@ Kuby.define(:production) do
38
53
 
39
54
  add_plugin(:redis) do
40
55
  instance(:my_rails_cache) do
41
- # set the version of redis you want to use
42
- version '5.0.3-v1' # this is the default version
43
-
44
- # set the port redis listens on and that you'll
45
- # use to connect to the instance
46
- port 6379 # this is the default port
56
+ # Launch three redis replicas (this is the recommended configuration
57
+ # for high availability).
58
+ redis_replicas 3
47
59
 
48
- # the amount of durable storage to allocate
49
- storage '1Gi'
60
+ # The amount of persistent storage to request.
61
+ storage '5Gi'
50
62
  end
51
63
  end
52
64
 
@@ -54,47 +66,40 @@ Kuby.define(:production) do
54
66
  end
55
67
  ```
56
68
 
57
- Get a list of the redis versions your cluster supports by running:
58
-
59
- ```bash
60
- bundle exec kuby -e production kubectl -- get redisversions
61
- ```
62
-
63
69
  ## Usage
64
70
 
65
- Redis instances defined in your Kuby config respond to `#hostname`, `#port`, and `#url` methods to help point at them in your Rails configuration. The `#url` method returns a complete URL to the redis instance, including the host and port.
71
+ Redis instances defined in your Kuby config respond to the `#service_name`, `#service_port`, and `#connection_params` methods to facilitate connecting to them from your Rails app. One caveat is that clients must be [sentinel-aware](https://redis.io/docs/reference/sentinel-clients/), but for the most part users won't have to worry about this since the redis-rb gem [supports sentinel configurations](https://github.com/redis/redis-rb#sentinel-support).
66
72
 
67
73
  ### Rails Cache
68
74
 
69
75
  In your Rails config (eg. config/environments/production.rb), point your cache store at your redis instance like so:
70
76
 
71
-
72
77
  ```ruby
78
+ # make sure Kuby config is loaded
73
79
  Kuby.load!
74
80
 
75
- url = Kuby.environment.kubernetes
81
+ redis_instance = Kuby.environment.kubernetes
76
82
  .plugin(:redis)
77
83
  .instance(:my_rails_cache)
78
- .url
79
84
 
80
- config.cache_store = :redis_cache_store, { url: url }
85
+ config.cache_store = :redis_cache_store, redis_instance.connection_params
81
86
  ```
82
87
 
83
88
  ### Redis Gem
84
89
 
85
- You can also use a redis client like the [Redis gem](https://github.com/redis/redis-rb) directly:
90
+ You can also use the [redis-rb gem](https://github.com/redis/redis-rb) directly:
86
91
 
87
92
  ```ruby
93
+ # make sure Kuby config is loaded
94
+ Kuby.load!
95
+
88
96
  require 'redis'
89
97
 
90
- url = Kuby.environment.kubernetes
98
+ redis_instance = Kuby.environment.kubernetes
91
99
  .plugin(:redis)
92
100
  .instance(:my_rails_cache)
93
- .url
94
101
 
95
- redis = Redis.new(url: url)
96
- redis.set('abc', 123)
97
- value = redis.get('abc')
102
+ redis = Redis.new(**redis_instance.connection_params)
98
103
  ```
99
104
 
100
105
  ## License
data/Rakefile CHANGED
@@ -2,6 +2,8 @@ require 'bundler'
2
2
  require 'rspec/core/rake_task'
3
3
  require 'rubygems/package_task'
4
4
 
5
+ require 'pry-byebug'
6
+ require 'sorbet-runtime'
5
7
  require 'kuby/redis'
6
8
 
7
9
  Bundler::GemHelper.install_tasks
@@ -12,3 +14,159 @@ desc 'Run specs'
12
14
  RSpec::Core::RakeTask.new do |t|
13
15
  t.pattern = './spec/**/*_spec.rb'
14
16
  end
17
+
18
+ task generate: [:schemagen, :codegen]
19
+
20
+ task :schemagen do
21
+ require 'base64'
22
+ require 'json'
23
+ require 'kind-rb'
24
+ require 'net/http'
25
+ require 'uri'
26
+ require 'yaml'
27
+ require 'helm-cli'
28
+
29
+ # delete first just in case
30
+ system("#{KindRb.executable} delete cluster --name kuby-redis")
31
+ system("#{KindRb.executable} create cluster --name kuby-redis")
32
+
33
+ kubeconfig = `#{KindRb.executable} get kubeconfig --name kuby-redis`
34
+ File.write('.kubeconfig', kubeconfig)
35
+
36
+ helm = HelmCLI.new('.kubeconfig')
37
+ helm.add_repo('redis-operator', 'https://spotahome.github.io/redis-operator')
38
+ helm.update_repos
39
+
40
+ unless helm.release_exists?('redis-operator')
41
+ helm.install_chart('redis-operator/redis-operator', release: 'redis-operator', version: '3.1.4')
42
+ end
43
+
44
+ cluster_name = 'kind-kuby-redis'
45
+ kubeconfig = YAML.load(kubeconfig)
46
+ cluster = kubeconfig['clusters'].find { |cluster| cluster['name'] == cluster_name }
47
+ ca_cert_data = Base64.decode64(cluster.dig(*%w(cluster certificate-authority-data)))
48
+
49
+ cert_store = OpenSSL::X509::Store.new
50
+ cert_store.add_cert(OpenSSL::X509::Certificate.new(ca_cert_data))
51
+ server = URI.parse(cluster.dig(*%w(cluster server)))
52
+
53
+ http = Net::HTTP.new(server.host, server.port).tap do |http|
54
+ http.use_ssl = true
55
+ http.cert_store = cert_store
56
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
57
+ end
58
+
59
+ token = nil
60
+ STDOUT.write("Getting API token from cluster...")
61
+
62
+ loop do
63
+ secrets = JSON.parse(`kubectl --context #{cluster_name} get secrets -o json`)
64
+ secret = secrets['items'].find do |secret|
65
+ secret.dig(*%w(metadata annotations kubernetes.io/service-account.name)) == 'default'
66
+ end
67
+
68
+ if secret
69
+ token = Base64.decode64(secret.dig(*%w(data token)))
70
+ puts ' done'
71
+ break
72
+ else
73
+ STDOUT.write('.')
74
+ sleep 1
75
+ end
76
+ end
77
+
78
+ get = Net::HTTP::Get.new('/openapi/v2')
79
+ get['Authorization'] = "Bearer #{token}"
80
+
81
+ crds = []
82
+ schema = nil
83
+ STDOUT.write("Requesting OpenAPI v2 schema from cluster...")
84
+
85
+ loop do
86
+ response = http.request(get)
87
+ schema = JSON.parse(response.body)
88
+
89
+ crds = schema['definitions'].each_with_object({}) do |(id, data), memo|
90
+ memo[id] = data if id.start_with?('com.spotahome')
91
+ end
92
+
93
+ if crds.empty?
94
+ STDOUT.write('.')
95
+ sleep 1
96
+ else
97
+ puts ' done'
98
+ break
99
+ end
100
+ end
101
+
102
+ FileUtils.rm_rf('vendor')
103
+ FileUtils.mkdir('vendor')
104
+
105
+ schema = schema.merge('definitions' => crds)
106
+ File.write(File.join('vendor', 'open_api.json'), schema.to_json)
107
+
108
+ puts 'Pulling openapi2jsonschema Docker image'
109
+ system('docker pull garethr/openapi2jsonschema')
110
+
111
+ puts 'Converting OpenAPI format to JSON schema format'
112
+ system(<<~END)
113
+ docker run --rm \
114
+ -v #{File.expand_path('vendor')}:/usr/local/scratch \
115
+ garethr/openapi2jsonschema \
116
+ --kubernetes --output /usr/local/scratch/json_schema /usr/local/scratch/open_api.json
117
+ END
118
+
119
+ puts "Cleaning up"
120
+ system("#{KindRb.executable} delete cluster --name kuby-redis")
121
+ File.unlink('.kubeconfig')
122
+ end
123
+
124
+ task :codegen do
125
+ require 'dry/inflector'
126
+ require 'fileutils'
127
+
128
+ # delete anything that should be re-generated
129
+ FileUtils.rm_rf('./lib/kuby/redis/dsl.rb')
130
+ FileUtils.rm_rf('./lib/kuby/redis/dsl')
131
+ FileUtils.rm_rf('./lib/kuby/redis/entrypoint.rb')
132
+ FileUtils.rm_rf('./sorbet/rbi/kuby/redis')
133
+ FileUtils.mkdir_p('./lib/kuby/redis/dsl')
134
+
135
+ local_json_schema_path = 'vendor/json_schema'
136
+
137
+ generator = KubeDSL::Generator.new(
138
+ schema_dir: local_json_schema_path,
139
+ output_dir: File.join('lib'),
140
+ autoload_prefix: File.join('kuby', 'redis', 'dsl'),
141
+ dsl_namespace: ['Kuby', 'Redis', 'DSL'],
142
+ entrypoint_namespace: ['Kuby', 'Redis'],
143
+ inflector: Dry::Inflector.new do |inflections|
144
+ inflections.acronym('DSL')
145
+ end
146
+ )
147
+
148
+ generator.builder.register_resolver('io.k8s') do |ref_str, builder|
149
+ external_ref = ::KubeDSL::ExternalRef.new(
150
+ ref_str,
151
+ ['KubeDSL', 'DSL'],
152
+ builder.inflector,
153
+ builder.schema_dir,
154
+ builder.autoload_prefix,
155
+ builder.serialize_handlers
156
+ )
157
+
158
+ ns = external_ref.ruby_namespace + [external_ref.kind]
159
+ exists = ns.inject(Object) { |mod, n| mod.const_get(n, false) } rescue false
160
+ exists ? external_ref : builder.parse_ref(ref_str)
161
+ end
162
+
163
+ generator.generate_resource_files
164
+ generator.generate_autoload_files
165
+ generator.generate_entrypoint_file do |resource, ns|
166
+ # only generate entrypoint methods for resources defined at the top-level, i.e.
167
+ # not resources defined inside other resources
168
+ !resource.ref.inline?
169
+ end
170
+
171
+ FileUtils.rm_rf(File.join('lib', 'kuby.rb'))
172
+ end
data/kuby-redis.gemspec CHANGED
@@ -12,8 +12,9 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.platform = Gem::Platform::RUBY
14
14
 
15
- s.add_dependency 'kuby-kube-db', '~> 0.4'
16
- s.add_dependency 'kube-dsl', '~> 0.4'
15
+ s.add_dependency 'kuby-core', '>= 0.16.0', '< 1.0'
16
+ s.add_dependency 'kube-dsl', '~> 0.7'
17
+ s.add_dependency 'helm-cli', '~> 0.3'
17
18
 
18
19
  s.require_path = 'lib'
19
20
  s.files = Dir['{lib,spec}/**/*', 'Gemfile', 'LICENSE', 'CHANGELOG.md', 'README.md', 'Rakefile', 'kuby-redis.gemspec']
@@ -0,0 +1,34 @@
1
+ # typed: true
2
+
3
+ module Kuby
4
+ module Redis
5
+ module DSL
6
+ module Databases
7
+ module V1
8
+ class RedisFailover < ::KubeDSL::DSLObject
9
+ object_field(:spec) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpec.new }
10
+ value_field :api_version
11
+ object_field(:metadata) { KubeDSL::DSL::Meta::V1::ObjectMeta.new }
12
+
13
+ validates :spec, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpec }
14
+ validates :api_version, field: { format: :string }, presence: false
15
+ validates :metadata, object: { kind_of: KubeDSL::DSL::Meta::V1::ObjectMeta }
16
+
17
+ def serialize
18
+ {}.tap do |result|
19
+ result[:kind] = "RedisFailover"
20
+ result[:spec] = spec.serialize
21
+ result[:apiVersion] = api_version
22
+ result[:metadata] = metadata.serialize
23
+ end
24
+ end
25
+
26
+ def kind_sym
27
+ :redis_failover
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ # typed: true
2
+
3
+ module Kuby
4
+ module Redis
5
+ module DSL
6
+ module Databases
7
+ module V1
8
+ class RedisFailoverList < ::KubeDSL::DSLObject
9
+ array_field(:item) { Kuby::Redis::DSL::Databases::V1::RedisFailover.new }
10
+ value_field :api_version
11
+ object_field(:metadata) { KubeDSL::DSL::Meta::V1::ListMeta.new }
12
+
13
+ validates :items, array: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailover }, presence: false
14
+ validates :api_version, field: { format: :string }, presence: false
15
+ validates :metadata, object: { kind_of: KubeDSL::DSL::Meta::V1::ListMeta }
16
+
17
+ def serialize
18
+ {}.tap do |result|
19
+ result[:items] = items.map(&:serialize)
20
+ result[:kind] = "RedisFailoverList"
21
+ result[:apiVersion] = api_version
22
+ result[:metadata] = metadata.serialize
23
+ end
24
+ end
25
+
26
+ def kind_sym
27
+ :redis_failover_list
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,39 @@
1
+ # typed: true
2
+
3
+ module Kuby
4
+ module Redis
5
+ module DSL
6
+ module Databases
7
+ module V1
8
+ class RedisFailoverSpec < ::KubeDSL::DSLObject
9
+ object_field(:sentinel) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecSentinel.new }
10
+ object_field(:bootstrap_node) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecBootstrapNode.new }
11
+ object_field(:redis) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedis.new }
12
+ object_field(:auth) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecAuth.new }
13
+ value_field :label_whitelist
14
+
15
+ validates :sentinel, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecSentinel }
16
+ validates :bootstrap_node, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecBootstrapNode }
17
+ validates :redis, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedis }
18
+ validates :auth, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecAuth }
19
+ validates :label_whitelist, field: { format: :string }, presence: false
20
+
21
+ def serialize
22
+ {}.tap do |result|
23
+ result[:sentinel] = sentinel.serialize
24
+ result[:bootstrapNode] = bootstrap_node.serialize
25
+ result[:redis] = redis.serialize
26
+ result[:auth] = auth.serialize
27
+ result[:labelWhitelist] = label_whitelist
28
+ end
29
+ end
30
+
31
+ def kind_sym
32
+ :redis_failover_spec
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,27 @@
1
+ # typed: true
2
+
3
+ module Kuby
4
+ module Redis
5
+ module DSL
6
+ module Databases
7
+ module V1
8
+ class RedisFailoverSpecAuth < ::KubeDSL::DSLObject
9
+ value_field :secret_path
10
+
11
+ validates :secret_path, field: { format: :string }, presence: false
12
+
13
+ def serialize
14
+ {}.tap do |result|
15
+ result[:secretPath] = secret_path
16
+ end
17
+ end
18
+
19
+ def kind_sym
20
+ :redis_failover_spec_auth
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ # typed: true
2
+
3
+ module Kuby
4
+ module Redis
5
+ module DSL
6
+ module Databases
7
+ module V1
8
+ class RedisFailoverSpecBootstrapNode < ::KubeDSL::DSLObject
9
+ value_field :host
10
+ value_field :allow_sentinels
11
+ value_field :port
12
+
13
+ validates :host, field: { format: :string }, presence: false
14
+ validates :allow_sentinels, field: { format: :boolean }, presence: true
15
+ validates :port, field: { format: :string }, presence: false
16
+
17
+ def serialize
18
+ {}.tap do |result|
19
+ result[:host] = host
20
+ result[:allowSentinels] = allow_sentinels
21
+ result[:port] = port
22
+ end
23
+ end
24
+
25
+ def kind_sym
26
+ :redis_failover_spec_bootstrap_node
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,90 @@
1
+ # typed: true
2
+
3
+ module Kuby
4
+ module Redis
5
+ module DSL
6
+ module Databases
7
+ module V1
8
+ class RedisFailoverSpecRedis < ::KubeDSL::DSLObject
9
+ value_field :dns_policy
10
+ key_value_field(:pod_annotations, format: :string)
11
+ value_field :image
12
+ value_field :host_network
13
+ object_field(:exporter) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisExporter.new }
14
+ key_value_field(:node_selector, format: :string)
15
+ value_field :priority_class_name
16
+ object_field(:security_context) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisSecurityContext.new }
17
+ object_field(:storage) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisStorage.new }
18
+ array_field(:custom_command_rename) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisCustomCommandRenames.new }
19
+ value_field :custom_config
20
+ object_field(:affinity) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinity.new }
21
+ array_field(:toleration) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisTolerations.new }
22
+ object_field(:resources) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisResources.new }
23
+ value_field :shutdown_config_map
24
+ value_field :termination_grace_period
25
+ value_field :service_account_name
26
+ value_field :replicas
27
+ key_value_field(:service_annotations, format: :string)
28
+ value_field :command
29
+ value_field :image_pull_policy
30
+ array_field(:image_pull_secret) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisImagePullSecrets.new }
31
+
32
+ validates :dns_policy, field: { format: :string }, presence: false
33
+ validates :pod_annotations, kv: { value_format: :string }, presence: true
34
+ validates :image, field: { format: :string }, presence: false
35
+ validates :host_network, field: { format: :boolean }, presence: true
36
+ validates :exporter, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisExporter }
37
+ validates :node_selector, kv: { value_format: :string }, presence: true
38
+ validates :priority_class_name, field: { format: :string }, presence: false
39
+ validates :security_context, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisSecurityContext }
40
+ validates :storage, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisStorage }
41
+ validates :custom_command_renames, array: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisCustomCommandRenames }, presence: false
42
+ validates :custom_config, field: { format: :string }, presence: false
43
+ validates :affinity, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinity }
44
+ validates :tolerations, array: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisTolerations }, presence: false
45
+ validates :resources, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisResources }
46
+ validates :shutdown_config_map, field: { format: :string }, presence: false
47
+ validates :termination_grace_period, field: { format: :integer }, presence: true
48
+ validates :service_account_name, field: { format: :string }, presence: false
49
+ validates :replicas, field: { format: :integer }, presence: true
50
+ validates :service_annotations, kv: { value_format: :string }, presence: true
51
+ validates :command, field: { format: :string }, presence: false
52
+ validates :image_pull_policy, field: { format: :string }, presence: false
53
+ validates :image_pull_secrets, array: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisImagePullSecrets }, presence: false
54
+
55
+ def serialize
56
+ {}.tap do |result|
57
+ result[:dnsPolicy] = dns_policy
58
+ result[:podAnnotations] = pod_annotations.serialize
59
+ result[:image] = image
60
+ result[:hostNetwork] = host_network
61
+ result[:exporter] = exporter.serialize
62
+ result[:nodeSelector] = node_selector.serialize
63
+ result[:priorityClassName] = priority_class_name
64
+ result[:securityContext] = security_context.serialize
65
+ result[:storage] = storage.serialize
66
+ result[:customCommandRenames] = custom_command_renames.map(&:serialize)
67
+ result[:customConfig] = custom_config
68
+ result[:affinity] = affinity.serialize
69
+ result[:tolerations] = tolerations.map(&:serialize)
70
+ result[:resources] = resources.serialize
71
+ result[:shutdownConfigMap] = shutdown_config_map
72
+ result[:terminationGracePeriod] = termination_grace_period
73
+ result[:serviceAccountName] = service_account_name
74
+ result[:replicas] = replicas
75
+ result[:serviceAnnotations] = service_annotations.serialize
76
+ result[:command] = command
77
+ result[:imagePullPolicy] = image_pull_policy
78
+ result[:imagePullSecrets] = image_pull_secrets.map(&:serialize)
79
+ end
80
+ end
81
+
82
+ def kind_sym
83
+ :redis_failover_spec_redis
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,33 @@
1
+ # typed: true
2
+
3
+ module Kuby
4
+ module Redis
5
+ module DSL
6
+ module Databases
7
+ module V1
8
+ class RedisFailoverSpecRedisAffinity < ::KubeDSL::DSLObject
9
+ object_field(:pod_affinity) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityPodAffinity.new }
10
+ object_field(:node_affinity) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityNodeAffinity.new }
11
+ object_field(:pod_anti_affinity) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityPodAntiAffinity.new }
12
+
13
+ validates :pod_affinity, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityPodAffinity }
14
+ validates :node_affinity, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityNodeAffinity }
15
+ validates :pod_anti_affinity, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityPodAntiAffinity }
16
+
17
+ def serialize
18
+ {}.tap do |result|
19
+ result[:podAffinity] = pod_affinity.serialize
20
+ result[:nodeAffinity] = node_affinity.serialize
21
+ result[:podAntiAffinity] = pod_anti_affinity.serialize
22
+ end
23
+ end
24
+
25
+ def kind_sym
26
+ :redis_failover_spec_redis_affinity
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,30 @@
1
+ # typed: true
2
+
3
+ module Kuby
4
+ module Redis
5
+ module DSL
6
+ module Databases
7
+ module V1
8
+ class RedisFailoverSpecRedisAffinityNodeAffinity < ::KubeDSL::DSLObject
9
+ object_field(:required_during_scheduling_ignored_during_execution) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution.new }
10
+ array_field(:preferred_during_scheduling_ignored_during_execution) { Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution.new }
11
+
12
+ validates :required_during_scheduling_ignored_during_execution, object: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityNodeAffinityRequiredDuringSchedulingIgnoredDuringExecution }
13
+ validates :preferred_during_scheduling_ignored_during_executions, array: { kind_of: Kuby::Redis::DSL::Databases::V1::RedisFailoverSpecRedisAffinityNodeAffinityPreferredDuringSchedulingIgnoredDuringExecution }, presence: false
14
+
15
+ def serialize
16
+ {}.tap do |result|
17
+ result[:requiredDuringSchedulingIgnoredDuringExecution] = required_during_scheduling_ignored_during_execution.serialize
18
+ result[:preferredDuringSchedulingIgnoredDuringExecution] = preferred_during_scheduling_ignored_during_executions.map(&:serialize)
19
+ end
20
+ end
21
+
22
+ def kind_sym
23
+ :redis_failover_spec_redis_affinity_node_affinity
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end