eks_cli 0.1.9 → 0.2.1

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
  SHA1:
3
- metadata.gz: d62ee30623f0fd61827904b8f98c59a67b58fc40
4
- data.tar.gz: 6eaa89a740fb4924ef581d31c30b0713b5aa1b52
3
+ metadata.gz: 1e852fd7cab1e027499c5b73c8dbcbba706cda3b
4
+ data.tar.gz: 3f4f32cf77a09ec17671f98d339535416dbe8e51
5
5
  SHA512:
6
- metadata.gz: 9a8de458722606f0b45d0c8fdef430a197d4e7a3ea328d7150b6adf02d06cc1e2e6bd4937393f3496d5910ac2527f026511560b34de4eb69b057370e4ccc086a
7
- data.tar.gz: 4ffd3da0724d1a01260df41f363692f8b082aa807d9348a3ae8e5cf65544a6bcb04ca02c9fa48127a26bc986b30c463362d4bf266443e2fcbc353be9baa9b6d9
6
+ metadata.gz: 15532629de7a263da29b1ddf239470597cc51d87c66d8dcfc7630fc23a4a2eb9643ac3df8f27f15f9681d2c8f5e3340ae4f4632f38f58214784e2eef4f341bab
7
+ data.tar.gz: e9a5666560c2c1d9c21f2e7ecd92f57cf2b792d5efa4cd28e6760b7eedfa262a0e4ad7a963562351ea0e9c77534c1647b6b4e75e294420bc4359298f91022737
data/README.md CHANGED
@@ -17,8 +17,8 @@ EKS cluster bootstrap with batteries included
17
17
  ## Usage
18
18
 
19
19
  ```
20
- $ gem install eks_cli -v 0.1.9
21
- $ eks create us-west-2 --cluster-name My-EKS-Cluster
20
+ $ gem install eks_cli -v 0.2.1
21
+ $ eks create --cluster-name My-EKS-Cluster
22
22
  $ eks create-nodegroup --cluster-name My-EKS-Cluster --group-name nodes --ssh-key-name <my-ssh-key> --yes
23
23
  ```
24
24
 
data/eks_cli.gemspec CHANGED
@@ -29,5 +29,6 @@ Gem::Specification.new do |s|
29
29
  s.add_dependency 'activesupport', '5.2.1.1'
30
30
  s.add_dependency 'kubeclient', '4.1.0'
31
31
  s.add_dependency 'httparty', '0.16.3'
32
+ s.add_dependency 'ipaddress', '0.8.3'
32
33
  end
33
34
 
data/lib/eks_cli/cli.rb CHANGED
@@ -35,13 +35,15 @@ module EksCli
35
35
 
36
36
  class_option :cluster_name, required: true, aliases: :c
37
37
 
38
- desc "create REGION", "creates a new EKS cluster"
38
+ desc "create", "creates a new EKS cluster"
39
+ option :cidr, type: :string, default: "192.168.0.0/16", desc: "CIRD block for cluster VPC"
40
+ option :region, type: :string, default: "us-west-2", desc: "AWS region for EKS cluster"
39
41
  option :open_ports, type: :array, default: [], desc: "open ports on cluster nodes (eg 22 for SSH access)"
40
42
  option :enable_gpu, type: :boolean, default: false, desc: "installs nvidia device plugin daemon set"
41
43
  option :create_default_storage_class, type: :boolean, default: true, desc: "creates a default gp2 storage class"
42
44
  option :create_dns_autoscaler, type: :boolean, default: true, desc: "creates dns autoscaler on the cluster"
43
- def create(region)
44
- Config[cluster_name].bootstrap({region: region})
45
+ def create
46
+ Config[cluster_name].bootstrap({region: options[:region]})
45
47
  create_eks_role
46
48
  create_cluster_vpc
47
49
  create_eks_cluster
@@ -70,8 +72,10 @@ module EksCli
70
72
  end
71
73
 
72
74
  desc "create-cluster-vpc", "creates a vpc according to aws cloudformation template"
75
+ option :cidr, type: :string, default: "192.168.0.0/16", desc: "CIRD block for cluster VPC"
73
76
  def create_cluster_vpc
74
- cfg = CloudFormation::VPC.create(cluster_name)
77
+ Config[cluster_name].write({cidr: options[:cidr]}, :config)
78
+ cfg = CloudFormation::VPC.new(cluster_name).create
75
79
  Config[cluster_name].write(cfg)
76
80
  end
77
81
 
@@ -1,13 +1,21 @@
1
1
  require 'cloudformation/stack'
2
+ require 'config'
3
+ require 'ipaddress'
2
4
  require 'log'
3
5
 
4
6
  module EksCli
5
7
  module CloudFormation
6
8
  class VPC
7
9
 
8
- def self.create(cluster_name)
9
- Log.info "creating VPC stack for #{cluster_name}"
10
- s = Stack.create(cluster_name, config(cluster_name))
10
+ CF_TEMPLATE_URL = "https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2018-08-30/amazon-eks-vpc-sample.yaml"
11
+
12
+ def initialize(cluster_name)
13
+ @cluster_name = cluster_name
14
+ end
15
+
16
+ def create
17
+ Log.info "creating VPC stack for #{@cluster_name}"
18
+ s = Stack.create(@cluster_name, cf_config)
11
19
  Stack.await([s])
12
20
  s.reload
13
21
  puts "Outputs are:
@@ -22,10 +30,39 @@ module EksCli
22
30
 
23
31
  private
24
32
 
25
- def self.config(cluster_name)
26
- {stack_name: "EKS-VPC-#{cluster_name}",
27
- template_url: "https://amazon-eks.s3-us-west-2.amazonaws.com/cloudformation/2018-08-30/amazon-eks-vpc-sample.yaml",
28
- tags: [{key: "eks-cluster", value: cluster_name.to_s}]}
33
+ def cf_config
34
+ {stack_name: stack_name,
35
+ template_url: CF_TEMPLATE_URL,
36
+ parameters: build_params,
37
+ tags: tags}
38
+ end
39
+
40
+ def stack_name
41
+ "#{@cluster_name}-EKS-VPC"
42
+ end
43
+
44
+ def tags
45
+ [{key: "eks-cluster", value: @cluster_name.to_s}]
46
+ end
47
+
48
+ def build_params
49
+ subnets = IPAddress::IPv4.new(cidr).split(3).map(&:to_string)
50
+
51
+ {"VpcBlock" => cidr,
52
+ "Subnet01Block" => subnets[0],
53
+ "Subnet02Block" => subnets[1],
54
+ "Subnet03Block" => subnets[2]}.map do |(k,v)|
55
+ {parameter_key: k, parameter_value: v}
56
+ end
57
+
58
+ end
59
+
60
+ def cidr
61
+ @cidr ||= config["cidr"]
62
+ end
63
+
64
+ def config
65
+ @config ||= Config[@cluster_name]
29
66
  end
30
67
 
31
68
  end
@@ -113,7 +113,7 @@ module EksCli
113
113
  end
114
114
 
115
115
  def stack_name
116
- "#{@group["cluster_name"]}-Workers-#{@group["group_name"]}"
116
+ "#{@group["cluster_name"]}-NodeGroup-#{@group["group_name"]}"
117
117
  end
118
118
 
119
119
  def build_params
@@ -1,3 +1,3 @@
1
1
  module EksCli
2
- VERSION = "0.1.9"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eks_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erez Rabih
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
138
  version: 0.16.3
139
+ - !ruby/object:Gem::Dependency
140
+ name: ipaddress
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 0.8.3
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 0.8.3
139
153
  description: A utility to manage and create EKS (Kubernetes) cluster on Amazon Web
140
154
  Services
141
155
  email: erez.rabih@gmail.com