eks_cli 0.4.1 → 0.4.3

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
  SHA256:
3
- metadata.gz: 4f9a211d597363f1bed8d7d5da00a16a235fa64bbce4b406597999f4d1646f39
4
- data.tar.gz: 52066dc17593bb64e4f57f6e2888385a96148cc3ba089928655bd81a57dd460f
3
+ metadata.gz: 7c2b086d65764f440991cea882ecc9a24737993481bccfd5668492a014c21040
4
+ data.tar.gz: c254941ebd5f50a57b003539bf9abf4495838afe91546c3144d8abfadbcb56f0
5
5
  SHA512:
6
- metadata.gz: 92894a3cc1f53d3bc641bc493a1c1050202ed613b636fc91bbc14901da6646e42c3c93114e18df7fd8c3d14c3a3ce61dedb3aef2294c6494b2881687f6e41c0d
7
- data.tar.gz: a8f1ea587bc68568347fae185878f4727677aeed81a8dc0da72cbe050bd4e55df8cf91a49085a8e9fe911a148562216af5d0c801a5140a32b5479e6572aeda89
6
+ metadata.gz: 3b4418d049386d958e076c0a455b5e07e23c99dc08c1fd5129c6febc2d4028386885c496d27a7c8bdf728ab813be531dfa79979fe94c2d803029c8b8c9447516
7
+ data.tar.gz: 323b3b1e093617b49ecde03a5f99c18dc9c39eff7ab164c32450085f1ca8660d434249cd3ea601ba7f5d3bb5b4d3ae7cded6888057dfcb8b8992eb4f2228741a
@@ -7,6 +7,10 @@ Parameters:
7
7
  ClusterName:
8
8
  Type: String
9
9
  Description: EKS cluster name
10
+
11
+ KubernetesVersion:
12
+ Type: String
13
+ Description: Kubernetes version - 1.10, 1.11, etc...
10
14
 
11
15
  VpcBlock:
12
16
  Type: String
@@ -192,7 +196,7 @@ Resources:
192
196
  - !Ref Subnet02
193
197
  - !Ref Subnet03
194
198
  RoleArn: !GetAtt AWSServiceRoleForAmazonEKS.Arn
195
- Version: "1.12"
199
+ Version: !Ref KubernetesVersion
196
200
 
197
201
  NodeGroupsInClusterSecurityGroup:
198
202
  Type: AWS::EC2::SecurityGroup
data/lib/eks_cli/cli.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'thor'
2
2
  require 'version'
3
+ require 'log'
3
4
 
4
5
  autoload :JSON, 'json'
5
6
 
@@ -51,14 +52,13 @@ module EksCli
51
52
  subnet3_az: (options[:subnet3_az] || Config::AZS[options[:region]][2])}
52
53
  config.bootstrap(opts)
53
54
  cluster = EKS::Cluster.new(cluster_name).create
54
- config.write(cluster.config)
55
55
  cluster.update_kubeconfig
56
56
  wait_for_cluster
57
57
  enable_gpu if options[:enable_gpu]
58
58
  create_default_storage_class if options[:create_default_storage_class]
59
59
  create_dns_autoscaler if options[:create_dns_autoscaler]
60
60
  update_cluster_cni if options[:warm_ip_target]
61
- say "cluster creation completed"
61
+ Log.info "cluster creation completed"
62
62
  end
63
63
 
64
64
  desc "show-config", "print cluster configuration"
@@ -133,6 +133,11 @@ module EksCli
133
133
  end
134
134
  end
135
135
 
136
+ desc "delete-cluster", "deleted cluster"
137
+ def delete_cluster
138
+ EKS::Cluster.new(cluster_name).delete
139
+ end
140
+
136
141
  desc "delete-nodegroup", "deletes cloudformation stack for nodegroup"
137
142
  option :all, type: :boolean, default: false, desc: "delete all nodegroups. can't be used with --name"
138
143
  option :group_name, type: :string, desc: "delete a specific nodegroup. can't be used with --all"
@@ -17,7 +17,7 @@ module EksCli
17
17
  s = Stack.create(@cluster_name, cf_config)
18
18
  Stack.await([s])
19
19
  s.reload
20
- puts "Outputs are:
20
+ Log.info "Outputs are:
21
21
  SecurityGroups: #{s.output("SecurityGroups")}
22
22
  VpcId: #{s.output("VpcId")}
23
23
  SubnetIds: #{s.output("SubnetIds")}
@@ -31,6 +31,10 @@ module EksCli
31
31
  cluster_arn: s.output("EKSClusterARN")}
32
32
  end
33
33
 
34
+ def delete
35
+ Stack.new(@cluster_name, stack_name).delete
36
+ end
37
+
34
38
  private
35
39
 
36
40
  def cf_config
@@ -66,7 +70,8 @@ module EksCli
66
70
  "Subnet01AZ" => config["subnet1_az"],
67
71
  "Subnet02AZ" => config["subnet2_az"],
68
72
  "Subnet03AZ" => config["subnet3_az"],
69
- "ClusterName" => @cluster_name}.map do |(k,v)|
73
+ "ClusterName" => @cluster_name,
74
+ "KubernetesVersion" => config["kubernetes_version"]}.map do |(k,v)|
70
75
  {parameter_key: k, parameter_value: v}
71
76
  end
72
77
 
@@ -34,7 +34,7 @@ module EksCli
34
34
  end
35
35
 
36
36
  def delete
37
- Log.info "deleting stack #{id} from cloudformation"
37
+ Log.info "deleting cloufdormation stack #{id}"
38
38
  client.delete_stack(stack_name: id)
39
39
  end
40
40
 
@@ -1,5 +1,7 @@
1
1
  require 'cloudformation/eks'
2
+ require 'vpc/client'
2
3
  require 'config'
4
+ require 'nodegroup'
3
5
  require 'log'
4
6
 
5
7
  module EksCli
@@ -12,15 +14,56 @@ module EksCli
12
14
 
13
15
  def create
14
16
  Log.info "creating cluster #{@cluster_name}"
15
- @config = CloudFormation::EKS.new(@cluster_name).create
17
+ cf_stack_outputs = CloudFormation::EKS.new(@cluster_name).create
18
+ config.write(cf_stack_outputs)
16
19
  self
17
20
  end
18
21
 
19
- def config; @config; end
22
+ def delete
23
+ delete_vpc_peering
24
+ delete_services
25
+ delete_nodegroups
26
+ delete_cf_stack
27
+ end
28
+
29
+ def config; Config[@cluster_name]; end
20
30
 
21
31
  def update_kubeconfig
22
32
  Log.info "updating kubeconfig for cluster #{@cluster_name}"
23
- Log.info `aws eks update-kubeconfig --name=#{@cluster_name} --region=#{Config[@cluster_name]["region"]}`
33
+ Log.info `aws eks update-kubeconfig --name=#{@cluster_name} --region=#{config["region"]}`
34
+ end
35
+
36
+ private
37
+
38
+ def delete_cf_stack
39
+ CloudFormation::EKS.new(@cluster_name).delete
40
+ end
41
+
42
+ def delete_vpc_peering
43
+ VPC::Client.new(@cluster_name).delete_vpc_peering_connection
44
+ end
45
+
46
+ def k8s_client
47
+ @k8s_client ||= EksCli::K8s::Client.new(@cluster_name)
48
+ end
49
+
50
+ def services
51
+ k8s_client.get_services(namespace: "default").select {|s| s[:spec][:type] == "LoadBalancer"}
52
+ end
53
+
54
+ def delete_services
55
+ services.map {|s| s[:metadata][:name]}.each do |s|
56
+ Log.info "deleting service #{s}"
57
+ k8s_client.delete_service(s, "default")
58
+ end
59
+ end
60
+
61
+ def nodegroups
62
+ config["groups"] || {}
63
+ end
64
+
65
+ def delete_nodegroups
66
+ nodegroups.keys.each {|n| NodeGroup.new(@cluster_name, n).delete}
24
67
  end
25
68
 
26
69
  end
@@ -25,15 +25,21 @@ module EksCli
25
25
  iam_policies: "NodeGroupIAMPolicies",
26
26
  bootstrap_args: "BootstrapArguments"}
27
27
 
28
- AMIS = {"us-west-2" => "ami-0923e4b35a30a5f53",
29
- "us-east-1" => "ami-0abcb9f9190e867ab",
30
- "us-east-2" => "ami-04ea7cb66af82ae4a",
31
- "us-west-1" => "ami-03612357ac9da2c7d"}
32
-
33
- GPU_AMIS = {"us-west-2" => "ami-0bebf2322fd52a42e",
34
- "us-east-1" => "ami-0cb7959f92429410a",
35
- "us-east-2" => "ami-0118b61dc2312dee2",
36
- "us-west-1" => "ami-047637529a86c7237"}
28
+ AMIS = {"1.12" => {"us-west-2" => "ami-0923e4b35a30a5f53",
29
+ "us-east-1" => "ami-0abcb9f9190e867ab",
30
+ "us-east-2" => "ami-04ea7cb66af82ae4a",
31
+ "us-west-1" => "ami-03612357ac9da2c7d"},
32
+ "1.13" => {"us-west-2" => "ami-089d3b6350c1769a6",
33
+ "us-east-1" => "ami-08c4955bcc43b124e",
34
+ "us-east-2" => "ami-07ebcae043cf995aa"}}
35
+
36
+ GPU_AMIS = {"1.12" => {"us-west-2" => "ami-0bebf2322fd52a42e",
37
+ "us-east-1" => "ami-0cb7959f92429410a",
38
+ "us-east-2" => "ami-0118b61dc2312dee2",
39
+ "us-west-1" => "ami-047637529a86c7237"},
40
+ "1.13" => {"us-west-2" => "ami-08e5329e1dbf22c6a",
41
+ "us-east-1" => "ami-02af865c0f3b337f2",
42
+ "us-east-2" => "ami-01f82bb66c17faf20"}}
37
43
 
38
44
  EKS_IAM_POLICIES = %w{AmazonEKSWorkerNodePolicy
39
45
  AmazonEKS_CNI_Policy
@@ -65,6 +71,7 @@ module EksCli
65
71
  end
66
72
 
67
73
  def delete
74
+ Log.info "deleting nodegroup #{@name}"
68
75
  cf_stack.delete
69
76
  if @group["spotinst"]
70
77
  spotinst.delete_elastigroup(@group["spotinst"]["id"])
@@ -193,9 +200,9 @@ module EksCli
193
200
 
194
201
  def default_ami
195
202
  if gpu?
196
- GPU_AMIS[config["region"]]
203
+ GPU_AMIS[config["kubernetes_version"]][config["region"]]
197
204
  else
198
- AMIS[config["region"]]
205
+ AMIS[config["kubernetes_version"]][config["region"]]
199
206
  end
200
207
  end
201
208
 
@@ -1,3 +1,3 @@
1
1
  module EksCli
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.3"
3
3
  end
@@ -13,6 +13,7 @@ module EksCli
13
13
  @old_vpc = vpc_by_id(old_vpc_id)
14
14
  Log.info "setting vpc networking between #{new_vpc.id} and #{old_vpc.id}"
15
15
  peering_connection_id = create_vpc_peering_connection
16
+ config.write(vpc_peering_connection_id: peering_connection_id)
16
17
  update_route_tables(peering_connection_id)
17
18
  allow_networking(old_vpc_sg_id, peering_connection_id)
18
19
  end
@@ -35,6 +36,15 @@ module EksCli
35
36
  return peering_connection_id
36
37
  end
37
38
 
39
+ def delete_vpc_peering_connection
40
+ if id = config["vpc_peering_connection_id"]
41
+ Log.info "deleting vpc peering connection #{id}"
42
+ Log.info client.delete_vpc_peering_connection(vpc_peering_connection_id: id)
43
+ else
44
+ Log.info "no vpc peering connection found"
45
+ end
46
+ end
47
+
38
48
  def update_route_tables(peering_connection_id)
39
49
  Log.info "updating route tables"
40
50
  point_from(old_vpc, new_vpc, peering_connection_id)
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.4.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erez Rabih