eks_cli 0.4.1 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
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