Skip to content

Commit

Permalink
K8s: add ha and supported_features fields (#283)
Browse files Browse the repository at this point in the history
* droplet_kit/k8s: add supported_features options and cluster ha fields

* add node_pool mapping to allow both hases and NodePool instances

* fix tests
  • Loading branch information
sunny-b committed Oct 7, 2021
1 parent 0835ad2 commit b60dcfd
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 12 deletions.
1 change: 1 addition & 0 deletions lib/droplet_kit/mappings/kubernetes_cluster_mapping.rb
Expand Up @@ -18,6 +18,7 @@ class KubernetesClusterMapping
property :maintenance_policy, scopes: [:read, :update, :create]
property :node_pools, scopes: [:read, :create]
property :vpc_uuid, scopes: [:read, :create]
property :ha, scopes: [:read, :create]
end
end
end
3 changes: 2 additions & 1 deletion lib/droplet_kit/mappings/kubernetes_options_mapping.rb
Expand Up @@ -5,11 +5,12 @@ class KubernetesOptionsMapping
mapping KubernetesOptions
root_key singular: 'options', scopes: [:read]

Version = Struct.new(:slug, :kubernetes_version)
Version = Struct.new(:slug, :kubernetes_version, :supported_features)
property :versions, plural: true, scopes: [:read] do
mapping Version
property :slug, scopes: [:read]
property :kubernetes_version, scopes: [:read]
property :supported_features, scopes: [:read]
end

Region = Struct.new(:name, :slug)
Expand Down
2 changes: 1 addition & 1 deletion lib/droplet_kit/models/kubernetes_cluster.rb
@@ -1,6 +1,6 @@
module DropletKit
class KubernetesCluster < BaseModel
[:id, :name, :region, :version, :auto_upgrade, :cluster_subnet, :service_subnet, :ipv4, :endpoint, :tags, :maintenance_policy, :node_pools, :vpc_uuid].each do |key|
[:id, :name, :region, :version, :auto_upgrade, :cluster_subnet, :service_subnet, :ipv4, :endpoint, :tags, :maintenance_policy, :node_pools, :vpc_uuid, :ha].each do |key|
attribute(key)
end
end
Expand Down
15 changes: 14 additions & 1 deletion lib/droplet_kit/resources/kubernetes_cluster_resource.rb
Expand Up @@ -13,7 +13,20 @@ class KubernetesClusterResource < ResourceKit::Resource
end

action :create, 'POST /v2/kubernetes/clusters' do
body { |object| KubernetesClusterMapping.representation_for(:create, object) }
body do |object|
# This ensures that both a hash and an instance of KubernetesNodePool can be passed
# into the node_pools array
#
# Ex:
# KubernetesCluster.new(node_pools: [{}])
# or
# KubernetesCluster.new(node_pools: [KubernetesNodePool.new()])
if object.respond_to?(:node_pools) && object.node_pools.respond_to?(:map)
object.node_pools = object.node_pools.map(&:to_hash)
end

KubernetesClusterMapping.representation_for(:create, object)
end
handler(201) { |response, cluster| KubernetesClusterMapping.extract_into_object(cluster, response.body, :read) }
handler(422) { |response| ErrorMapping.fail_with(FailedCreate, response.body) }
end
Expand Down
1 change: 1 addition & 0 deletions spec/fixtures/kubernetes/clusters/find.json
Expand Up @@ -8,6 +8,7 @@
"cluster_subnet": "10.244.0.0/16",
"service_subnet": "",
"ipv4": "0.0.0.0",
"ha": true,
"endpoint": "",
"tags": [
"test-k8",
Expand Down
64 changes: 55 additions & 9 deletions spec/fixtures/kubernetes/options.json
Expand Up @@ -57,39 +57,85 @@
"versions": [
{
"slug": "1.13.0-do.not.use",
"kubernetes_version": "1.13.0"
"kubernetes_version": "1.13.0",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"ha-control-plane",
"token-authentication"
]
},
{
"slug": "1.12.1-do.3",
"kubernetes_version": "1.12.1"
"kubernetes_version": "1.12.1",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"token-authentication"
]
},
{
"slug": "1.12.1-do.2",
"kubernetes_version": "1.12.1"
"kubernetes_version": "1.12.1",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"token-authentication"
]
},
{
"slug": "1.12.1-do.1",
"kubernetes_version": "1.12.1"
"kubernetes_version": "1.12.1",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"token-authentication"
]
},
{
"slug": "1.11.1-do.2",
"kubernetes_version": "1.11.1"
"kubernetes_version": "1.11.1",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"token-authentication"
]
},
{
"slug": "1.11.1-do.1",
"kubernetes_version": "1.11.1"
"kubernetes_version": "1.11.1",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"token-authentication"
]
},
{
"slug": "1.10.7-gen2",
"kubernetes_version": "1.10.7"
"kubernetes_version": "1.10.7",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"token-authentication"
]
},
{
"slug": "1.10.7-gen1",
"kubernetes_version": "1.10.7"
"kubernetes_version": "1.10.7",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"token-authentication"
]
},
{
"slug": "1.10.7-gen0",
"kubernetes_version": "1.10.7"
"kubernetes_version": "1.10.7",
"supported_features": [
"cluster-autoscaler",
"docr-integration",
"token-authentication"
]
}
],
"sizes": [
Expand Down
Expand Up @@ -18,6 +18,7 @@
expect(cluster.region).to eq("nyc1")
expect(cluster.version).to eq("1.12.1-do.2")
expect(cluster.auto_upgrade).to eq(true)
expect(cluster.ha).to eq(true)
expect(cluster.cluster_subnet).to eq("10.244.0.0/16")
expect(cluster.ipv4).to eq("0.0.0.0")
expect(cluster.tags).to match_array(["test-k8", "k8s", "k8s:cluster-1-id"])
Expand Down
Expand Up @@ -14,6 +14,7 @@
expect(version).to be_kind_of(DropletKit::KubernetesOptionsMapping::Version)
expect(version.slug).to be_present
expect(version.kubernetes_version).to be_present
expect(version.supported_features).to be_present
end
expect(options.regions.length).to eq 13
options.regions.each do |region|
Expand Down

0 comments on commit b60dcfd

Please sign in to comment.