eks_cli 0.4.4 → 0.4.5
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 +4 -4
- data/README.md +30 -21
- data/eks_cli.gemspec +1 -0
- data/lib/eks_cli/cli.rb +85 -53
- data/lib/eks_cli/config.rb +26 -11
- data/lib/eks_cli/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13604399317ad223e406ab42975a58de062eba61d6f5f2f073c545818c89b625
|
4
|
+
data.tar.gz: 237117a49388e1d2dde8044a8935e5a2dd56ae9c92769930919df1d1750fa01f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25568fb30b957afd895a46666fc1e7b6f6a83c119b5294031f7505a933d81c4fbf112a805de02ca0d66c490c483b585f7253316da942cba22b37c8d8c7c18253
|
7
|
+
data.tar.gz: d982788e52ef2485652940c5506a6ba654d77f33bbcd331a3149cb37858f0a7c58493a0582590768b60a85cb2e1a0d50760e49371e65c77b2223d882b622db50
|
data/README.md
CHANGED
@@ -10,16 +10,18 @@ EKS cluster bootstrap with batteries included
|
|
10
10
|
* Manage IAM policies that will be attached to your nodes
|
11
11
|
* Easily configure docker repository secrets to allow pulling private images
|
12
12
|
* Manage Route53 DNS records to point at your Kubernetes services
|
13
|
-
* Export nodegroups to
|
13
|
+
* Export nodegroups to SpotInst Elastigroups
|
14
14
|
* Auto resolving AMIs by region & instance types (GPU enabled AMIs)
|
15
|
-
*
|
15
|
+
* Supports both kubernetes 1.12 and 1.13
|
16
|
+
* Configuration is saved on S3 for easy collaboration
|
16
17
|
|
17
18
|
## Usage
|
18
19
|
|
19
20
|
```
|
20
21
|
$ gem install eks_cli
|
21
|
-
$ eks create --cluster-name
|
22
|
-
$ eks create-nodegroup --cluster-name
|
22
|
+
$ eks create --kubernetes-version 1.13 --cluster-name my-eks-cluster --s3-bucket my-eks-config-bucket
|
23
|
+
$ eks create-nodegroup --cluster-name my-eks-cluster --group-name nodes --ssh-key-name <my-ssh-key> --s3-bucket my-eks-config-bucket --yes
|
24
|
+
$ eks delete-cluster --cluster-name my-eks-cluster --s3-bucket my-eks-config-bucket
|
23
25
|
```
|
24
26
|
|
25
27
|
You can type `eks` in your shell to get the full synopsis of available commands
|
@@ -28,38 +30,45 @@ You can type `eks` in your shell to get the full synopsis of available commands
|
|
28
30
|
Commands:
|
29
31
|
eks add-iam-user IAM_ARN # adds an IAM user as an authorized member on the EKS cluster
|
30
32
|
eks create # creates a new EKS cluster
|
31
|
-
eks create-cluster-security-group # creates a SG for cluster communication
|
32
|
-
eks create-cluster-vpc # creates a vpc according to aws cloudformation template
|
33
33
|
eks create-default-storage-class # creates default storage class on a new k8s cluster
|
34
34
|
eks create-dns-autoscaler # creates kube dns autoscaler
|
35
|
-
eks create-eks-cluster # create EKS cluster on AWS
|
36
|
-
eks create-eks-role # creates an IAM role for usage by EKS
|
37
35
|
eks create-nodegroup # creates all nodegroups on environment
|
36
|
+
eks delete-cluster # deletes a cluster, including nodegroups
|
38
37
|
eks delete-nodegroup # deletes cloudformation stack for nodegroup
|
39
|
-
eks detach-iam-policies # detaches added policies to nodegroup IAM Role
|
40
38
|
eks enable-gpu # installs nvidia plugin as a daemonset on the cluster
|
41
39
|
eks export-nodegroup # exports nodegroup auto scaling group to spotinst
|
42
40
|
eks help [COMMAND] # Describe available commands or one specific command
|
43
|
-
eks scale-nodegroup
|
41
|
+
eks scale-nodegroup # scales a nodegroup
|
44
42
|
eks set-docker-registry-credentials USERNAME PASSWORD EMAIL # sets docker registry credentials
|
45
43
|
eks set-iam-policies --policies=one two three # sets IAM policies to be attached to created nodegroups
|
46
44
|
eks set-inter-vpc-networking TO_VPC_ID TO_SG_ID # creates a vpc peering connection, sets route tables and allows network access on SG
|
47
45
|
eks show-config # print cluster configuration
|
48
46
|
eks update-auth # update aws auth configmap to allow all nodegroups to connect to control plane
|
47
|
+
eks update-cluster-cni # updates cni with warm ip target
|
49
48
|
eks update-dns HOSTNAME K8S_SERVICE_NAME # alters route53 CNAME records to point to k8s service ELBs
|
50
49
|
eks version # prints eks_cli version
|
51
50
|
eks wait-for-cluster # waits until cluster responds to HTTP requests
|
52
51
|
|
53
52
|
Options:
|
54
|
-
c, --cluster-name=CLUSTER_NAME
|
53
|
+
c, [--cluster-name=CLUSTER_NAME] # eks cluster name (env: EKS_CLI_CLUSTER_NAME)
|
54
|
+
s3, [--s3-bucket=S3_BUCKET] # s3 bucket name to save configurtaion and state (env: EKS_CLI_S3_BUCKET)
|
55
55
|
```
|
56
|
-
|
57
56
|
## Prerequisites
|
58
57
|
|
59
58
|
1. Ruby
|
60
59
|
2. [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) version >= 10 on your `PATH`
|
61
60
|
3. [aws-iam-authenticator](https://github.com/kubernetes-sigs/aws-iam-authenticator) on your `PATH`
|
62
61
|
4. [aws-cli](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) version >= 1.16.18 on your `PATH`
|
62
|
+
5. S3 bucket with write/read permissions to store configuration
|
63
|
+
|
64
|
+
## Environment variables
|
65
|
+
|
66
|
+
You are encouraged to use both `EKS_CLI_CLUSTER_NAME` and `EKS_CLI_S3_BUCKET` environment variables instead of using the corresponding flags on each command. It makes the command clearer and reduces the chance for typos.
|
67
|
+
The following selected commands assumes you have exported both environment variables:
|
68
|
+
```bash
|
69
|
+
export EKS_CLI_S3_BUCKET=my-eks-config-bucket
|
70
|
+
export EKS_CLI_CLUSTER_NAME=my-eks-cluster
|
71
|
+
```
|
63
72
|
|
64
73
|
## Selected Commands
|
65
74
|
|
@@ -74,30 +83,30 @@ Nodes in different nodegroups may communicate freely thanks to a shared Security
|
|
74
83
|
|
75
84
|
Scale nodegroups up and down using
|
76
85
|
|
77
|
-
`$ eks scale-nodegroup --
|
86
|
+
`$ eks scale-nodegroup --group-name nodes --min 1 --max 10`
|
78
87
|
|
79
88
|
### Authorize an IAM user to access the cluster
|
80
89
|
|
81
|
-
`$ eks add-iam-user arn:aws:iam::XXXXXXXX:user/XXXXXXXX --
|
90
|
+
`$ eks add-iam-user arn:aws:iam::XXXXXXXX:user/XXXXXXXX --yes`
|
82
91
|
|
83
92
|
Edits `aws-auth` configmap and updates it on EKS to allow an IAM user access the cluster via `kubectl`
|
84
93
|
|
85
94
|
### Setting IAM policies to be attached to EKS nodes
|
86
95
|
|
87
|
-
`$ eks set-iam-policies --
|
96
|
+
`$ eks set-iam-policies --policies=AmazonS3FullAccess AmazonDynamoDBFullAccess`
|
88
97
|
|
89
98
|
Sets IAM policies to be attached to nodegroups once created.
|
90
99
|
This settings does not work retro-actively - only affects future `eks create-nodegroup` commands.
|
91
100
|
|
92
101
|
### Routing Route53 hostnames to Kubernetes service
|
93
102
|
|
94
|
-
`$ eks update-dns my-cool-service.my-company.com cool-service --route53-hosted-zone-id=XXXXX --elb-hosted-zone-id=XXXXXX
|
103
|
+
`$ eks update-dns my-cool-service.my-company.com cool-service --route53-hosted-zone-id=XXXXX --elb-hosted-zone-id=XXXXXX`
|
95
104
|
|
96
105
|
Takes the ELB endpoint from `cool-service` and puts it as an alias record of `my-cool-service.my-company.com` on Route53
|
97
106
|
|
98
107
|
### Enabling GPU
|
99
108
|
|
100
|
-
`$ eks enable-gpu
|
109
|
+
`$ eks enable-gpu`
|
101
110
|
|
102
111
|
Installs the nvidia device plugin required to have your GPUs exposed
|
103
112
|
|
@@ -108,21 +117,21 @@ Installs the nvidia device plugin required to have your GPUs exposed
|
|
108
117
|
|
109
118
|
### Adding Dockerhub Secrets
|
110
119
|
|
111
|
-
`$ eks set-docker-registry-credentials <dockerhub-user> <dockerhub-password> <dockerhub-email
|
120
|
+
`$ eks set-docker-registry-credentials <dockerhub-user> <dockerhub-password> <dockerhub-email>`
|
112
121
|
|
113
122
|
Adds your dockerhub credentials as a secret and attaches it to the default ServiceAccount's imagePullSecrets
|
114
123
|
|
115
124
|
### Creating Default Storage Class
|
116
125
|
|
117
|
-
`$ eks create-default-storage-class
|
126
|
+
`$ eks create-default-storage-class`
|
118
127
|
|
119
128
|
Creates a standard gp2 default storage class named gp2
|
120
129
|
|
121
130
|
### Installing DNS autoscaler
|
122
131
|
|
123
|
-
`$ eks create-dns-autoscaler
|
132
|
+
`$ eks create-dns-autoscaler`
|
124
133
|
|
125
|
-
Creates
|
134
|
+
Creates coredns autoscaler with production defaults
|
126
135
|
|
127
136
|
### Connecting to an existing VPC
|
128
137
|
|
data/eks_cli.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.bindir = "bin"
|
21
21
|
s.executables = ["eks"]
|
22
22
|
s.require_paths = ["lib"]
|
23
|
+
s.add_dependency 'aws-sdk-s3', '~> 1'
|
23
24
|
s.add_dependency 'thor', '0.20.3'
|
24
25
|
s.add_dependency 'aws-sdk-ec2', '1.62.0'
|
25
26
|
s.add_dependency 'aws-sdk-cloudformation', '1.13.0'
|
data/lib/eks_cli/cli.rb
CHANGED
@@ -27,7 +27,8 @@ module EksCli
|
|
27
27
|
|
28
28
|
class Cli < Thor
|
29
29
|
|
30
|
-
class_option :cluster_name, required:
|
30
|
+
class_option :cluster_name, required: false, aliases: :c, desc: 'eks cluster name (env: EKS_CLI_CLUSTER_NAME)'
|
31
|
+
class_option :s3_bucket, required: false, aliases: :s3, desc: "s3 bucket name to save configurtaion and state (env: EKS_CLI_S3_BUCKET)"
|
31
32
|
|
32
33
|
desc "create", "creates a new EKS cluster"
|
33
34
|
option :region, type: :string, default: "us-west-2", desc: "AWS region for EKS cluster"
|
@@ -42,53 +43,59 @@ module EksCli
|
|
42
43
|
option :create_dns_autoscaler, type: :boolean, default: true, desc: "creates dns autoscaler on the cluster"
|
43
44
|
option :warm_ip_target, type: :numeric, desc: "set a default custom warm ip target for CNI"
|
44
45
|
def create
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
46
|
+
with_context do
|
47
|
+
|
48
|
+
opts = {region: options[:region],
|
49
|
+
kubernetes_version: options[:kubernetes_version],
|
50
|
+
open_ports: options[:open_ports],
|
51
|
+
cidr: options[:cidr],
|
52
|
+
warm_ip_target: options[:warm_ip_target] ? options[:warm_ip_target].to_i : nil,
|
53
|
+
subnet1_az: (options[:subnet1_az] || Config::AZS[options[:region]][0]),
|
54
|
+
subnet2_az: (options[:subnet2_az] || Config::AZS[options[:region]][1]),
|
55
|
+
subnet3_az: (options[:subnet3_az] || Config::AZS[options[:region]][2])}
|
56
|
+
|
57
|
+
config.bootstrap(opts)
|
58
|
+
cluster = EKS::Cluster.new(cluster_name).create
|
59
|
+
cluster.update_kubeconfig
|
60
|
+
wait_for_cluster
|
61
|
+
enable_gpu if options[:enable_gpu]
|
62
|
+
create_default_storage_class if options[:create_default_storage_class]
|
63
|
+
create_dns_autoscaler if options[:create_dns_autoscaler]
|
64
|
+
update_cluster_cni if options[:warm_ip_target]
|
65
|
+
Log.info "cluster creation completed"
|
66
|
+
end
|
62
67
|
end
|
63
68
|
|
64
69
|
desc "show-config", "print cluster configuration"
|
65
70
|
option :group_name, desc: "group name to show configuration for"
|
66
71
|
def show_config
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
72
|
+
with_context do
|
73
|
+
if options[:group_name]
|
74
|
+
puts JSON.pretty_generate(config.for_group(options[:group_name]))
|
75
|
+
else
|
76
|
+
puts JSON.pretty_generate(config.read_from_disk)
|
77
|
+
end
|
71
78
|
end
|
72
79
|
end
|
73
80
|
|
74
81
|
desc "update-cluster-cni", "updates cni with warm ip target"
|
75
82
|
def update_cluster_cni
|
76
|
-
K8s::Client.new(cluster_name).update_cni
|
83
|
+
with_context { K8s::Client.new(cluster_name).update_cni }
|
77
84
|
end
|
78
85
|
|
79
86
|
desc "enable-gpu", "installs nvidia plugin as a daemonset on the cluster"
|
80
87
|
def enable_gpu
|
81
|
-
K8s::Client.new(cluster_name).enable_gpu
|
88
|
+
with_context { K8s::Client.new(cluster_name).enable_gpu }
|
82
89
|
end
|
83
90
|
|
84
91
|
desc "set-docker-registry-credentials USERNAME PASSWORD EMAIL", "sets docker registry credentials"
|
85
92
|
def set_docker_registry_credentials(username, password, email)
|
86
|
-
K8s::Client.new(cluster_name).set_docker_registry_credentials(username, password, email)
|
93
|
+
with_context { K8s::Client.new(cluster_name).set_docker_registry_credentials(username, password, email) }
|
87
94
|
end
|
88
95
|
|
89
96
|
desc "create-default-storage-class", "creates default storage class on a new k8s cluster"
|
90
97
|
def create_default_storage_class
|
91
|
-
K8s::Client.new(cluster_name).create_default_storage_class
|
98
|
+
with_context { K8s::Client.new(cluster_name).create_default_storage_class }
|
92
99
|
end
|
93
100
|
|
94
101
|
desc "create-nodegroup", "creates all nodegroups on environment"
|
@@ -106,13 +113,15 @@ module EksCli
|
|
106
113
|
option :enable_docker_bridge, type: :boolean, default: false, desc: "pass --enable-docker-bridge true on bootstrap.sh (https://github.com/kubernetes/kubernetes/issues/40182))"
|
107
114
|
option :yes, type: :boolean, default: false, desc: "perform nodegroup creation"
|
108
115
|
def create_nodegroup
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
+
with_context do
|
117
|
+
opts = options.dup
|
118
|
+
opts[:subnets] = opts[:subnets].map(&:to_i)
|
119
|
+
Config[cluster_name].update_nodegroup(opts) unless opts[:all]
|
120
|
+
if opts[:yes]
|
121
|
+
cf_stacks = nodegroups.map {|ng| ng.create(wait_for_completion: false)}
|
122
|
+
CloudFormation::Stack.await(cf_stacks)
|
123
|
+
K8s::Auth.new(cluster_name).update
|
124
|
+
end
|
116
125
|
end
|
117
126
|
end
|
118
127
|
|
@@ -125,35 +134,37 @@ module EksCli
|
|
125
134
|
option :asg, type: :boolean, default: true, desc: "scale ec2 auto scaling group"
|
126
135
|
option :update, type: :boolean, default: false, desc: "update the nodegroup attributes"
|
127
136
|
def scale_nodegroup
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
137
|
+
with_context do
|
138
|
+
nodegroups.each do |ng|
|
139
|
+
min = (options[:min] || config.for_group(ng.name)["min"]).to_i
|
140
|
+
max = (options[:max] || config.for_group(ng.name)["max"]).to_i
|
141
|
+
ng.scale(min, max, options[:asg], options[:spotinst])
|
142
|
+
Config[cluster_name].update_nodegroup(options.slice("min", "max").merge({"group_name" => ng.name})) if options[:update]
|
143
|
+
end
|
133
144
|
end
|
134
145
|
end
|
135
146
|
|
136
|
-
desc "delete-cluster", "
|
147
|
+
desc "delete-cluster", "deletes a cluster, including nodegroups/elastigroups and cloudformation stacks"
|
137
148
|
def delete_cluster
|
138
|
-
EKS::Cluster.new(cluster_name).delete
|
149
|
+
with_context { EKS::Cluster.new(cluster_name).delete }
|
139
150
|
end
|
140
151
|
|
141
152
|
desc "delete-nodegroup", "deletes cloudformation stack for nodegroup"
|
142
153
|
option :all, type: :boolean, default: false, desc: "delete all nodegroups. can't be used with --name"
|
143
154
|
option :group_name, type: :string, desc: "delete a specific nodegroup. can't be used with --all"
|
144
155
|
def delete_nodegroup
|
145
|
-
nodegroups.each(&:delete)
|
156
|
+
with_context { nodegroups.each(&:delete) }
|
146
157
|
end
|
147
158
|
|
148
159
|
desc "update-auth", "update aws auth configmap to allow all nodegroups to connect to control plane"
|
149
160
|
def update_auth
|
150
|
-
K8s::Auth.new(cluster_name).update
|
161
|
+
with_context { K8s::Auth.new(cluster_name).update }
|
151
162
|
end
|
152
163
|
|
153
164
|
desc "set-iam-policies", "sets IAM policies to be attached to created nodegroups"
|
154
165
|
option :policies, type: :array, required: true, desc: "IAM policies ARNs"
|
155
166
|
def set_iam_policies
|
156
|
-
Config[cluster_name].set_iam_policies(options[:policies])
|
167
|
+
with_context { Config[cluster_name].set_iam_policies(options[:policies]) }
|
157
168
|
end
|
158
169
|
|
159
170
|
desc "update-dns HOSTNAME K8S_SERVICE_NAME", "alters route53 CNAME records to point to k8s service ELBs"
|
@@ -161,22 +172,22 @@ module EksCli
|
|
161
172
|
option :elb_hosted_zone_id, required: true, desc: "hosted zone ID for the ELB on ec2"
|
162
173
|
option :namespace, default: "default", desc: "the k8s namespace of the service"
|
163
174
|
def update_dns(hostname, k8s_service_name)
|
164
|
-
Route53::Client.new(cluster_name).update_dns(hostname, k8s_service_name, options[:namespace], options[:route53_hosted_zone_id], options[:elb_hosted_zone_id])
|
175
|
+
with_context { Route53::Client.new(cluster_name).update_dns(hostname, k8s_service_name, options[:namespace], options[:route53_hosted_zone_id], options[:elb_hosted_zone_id]) }
|
165
176
|
end
|
166
177
|
|
167
178
|
desc "set-inter-vpc-networking TO_VPC_ID TO_SG_ID", "creates a vpc peering connection, sets route tables and allows network access on SG"
|
168
179
|
def set_inter_vpc_networking(to_vpc_id, to_sg_id)
|
169
|
-
VPC::Client.new(cluster_name).set_inter_vpc_networking(to_vpc_id, to_sg_id)
|
180
|
+
with_context { VPC::Client.new(cluster_name).set_inter_vpc_networking(to_vpc_id, to_sg_id) }
|
170
181
|
end
|
171
182
|
|
172
183
|
desc "create-dns-autoscaler", "creates kube dns autoscaler"
|
173
184
|
def create_dns_autoscaler
|
174
|
-
K8s::Client.new(cluster_name).create_dns_autoscaler
|
185
|
+
with_context { K8s::Client.new(cluster_name).create_dns_autoscaler }
|
175
186
|
end
|
176
187
|
|
177
188
|
desc "wait-for-cluster", "waits until cluster responds to HTTP requests"
|
178
189
|
def wait_for_cluster
|
179
|
-
K8s::Client.new(cluster_name).wait_for_cluster
|
190
|
+
with_context { K8s::Client.new(cluster_name).wait_for_cluster }
|
180
191
|
end
|
181
192
|
|
182
193
|
desc "export-nodegroup", "exports nodegroup auto scaling group to spotinst"
|
@@ -184,7 +195,7 @@ module EksCli
|
|
184
195
|
option :group_name, type: :string, desc: "create a specific nodegroup. can't be used with --all"
|
185
196
|
option :exact_instance_type, type: :boolean, default: false, desc: "enforce spotinst to use existing instance type only"
|
186
197
|
def export_nodegroup
|
187
|
-
nodegroups.each {|ng| ng.export_to_spotinst(options[:exact_instance_type]) }
|
198
|
+
with_context { nodegroups.each {|ng| ng.export_to_spotinst(options[:exact_instance_type]) } }
|
188
199
|
end
|
189
200
|
|
190
201
|
desc "add-iam-user IAM_ARN", "adds an IAM user as an authorized member on the EKS cluster"
|
@@ -192,8 +203,10 @@ module EksCli
|
|
192
203
|
option :groups, type: :array, default: ["system:masters"], desc: "which group should the user be added to"
|
193
204
|
option :yes, type: :boolean, default: false, desc: "update aws-auth configmap"
|
194
205
|
def add_iam_user(iam_arn)
|
195
|
-
|
196
|
-
|
206
|
+
with_context do
|
207
|
+
Config[cluster_name].add_user(iam_arn, options[:username], options[:groups])
|
208
|
+
K8s::Auth.new(cluster_name).update if options[:yes]
|
209
|
+
end
|
197
210
|
end
|
198
211
|
|
199
212
|
disable_required_check! :version
|
@@ -203,16 +216,35 @@ module EksCli
|
|
203
216
|
end
|
204
217
|
|
205
218
|
no_commands do
|
206
|
-
def cluster_name;
|
219
|
+
def cluster_name; options_or_env(:cluster_name); end
|
220
|
+
def s3_bucket; options_or_env(:s3_bucket); end
|
221
|
+
|
222
|
+
def with_context
|
223
|
+
Config.s3_bucket=(s3_bucket)
|
224
|
+
yield
|
225
|
+
end
|
207
226
|
|
208
|
-
def config; Config
|
227
|
+
def config; Config.new(cluster_name); end
|
209
228
|
|
210
|
-
def all_nodegroups;
|
229
|
+
def all_nodegroups; config["groups"].keys ;end
|
211
230
|
|
212
231
|
def nodegroups
|
213
232
|
ng = options[:all] ? all_nodegroups : [options[:group_name]]
|
214
233
|
ng.map {|n| NodeGroup.new(cluster_name, n)}
|
215
234
|
end
|
235
|
+
|
236
|
+
def options_or_env(k)
|
237
|
+
v = options[k] || ENV[env_param_name(k)]
|
238
|
+
if v == nil || v == ""
|
239
|
+
Log.error "missing #{k} or #{env_param_name(k)}"
|
240
|
+
exit 1
|
241
|
+
end
|
242
|
+
v
|
243
|
+
end
|
244
|
+
|
245
|
+
def env_param_name(k)
|
246
|
+
"EKS_CLI_#{k.to_s.upcase}"
|
247
|
+
end
|
216
248
|
end
|
217
249
|
|
218
250
|
end
|
data/lib/eks_cli/config.rb
CHANGED
@@ -2,6 +2,7 @@ require 'json'
|
|
2
2
|
require_relative 'log'
|
3
3
|
require 'active_support/core_ext/hash'
|
4
4
|
require 'fileutils'
|
5
|
+
require 'aws-sdk-s3'
|
5
6
|
module EksCli
|
6
7
|
class Config
|
7
8
|
|
@@ -16,6 +17,13 @@ module EksCli
|
|
16
17
|
new(cluster_name)
|
17
18
|
end
|
18
19
|
|
20
|
+
def s3_bucket=(bucket)
|
21
|
+
@s3_bucket = bucket
|
22
|
+
end
|
23
|
+
|
24
|
+
def s3_bucket
|
25
|
+
@s3_bucket || raise("no s3 bucket set")
|
26
|
+
end
|
19
27
|
end
|
20
28
|
|
21
29
|
def initialize(cluster_name)
|
@@ -24,7 +32,10 @@ module EksCli
|
|
24
32
|
|
25
33
|
def delete
|
26
34
|
Log.info "deleting configuration for #{@cluster_name} at #{dir}"
|
27
|
-
|
35
|
+
s3.delete_object(bucket: s3_bucket, key: config_path)
|
36
|
+
s3.delete_object(bucket: s3_bucket, key: state_path)
|
37
|
+
s3.delete_object(bucket: s3_bucket, key: groups_path)
|
38
|
+
s3.delete_object(bucket: s3_bucket, key: dir)
|
28
39
|
end
|
29
40
|
|
30
41
|
def read_from_disk
|
@@ -91,33 +102,37 @@ module EksCli
|
|
91
102
|
end
|
92
103
|
|
93
104
|
def write_to_file(attrs, path)
|
94
|
-
|
105
|
+
s3.put_object(bucket: s3_bucket, key: path, body: attrs.to_json)
|
95
106
|
end
|
96
107
|
|
97
108
|
def read(path)
|
98
|
-
|
99
|
-
|
109
|
+
resp = s3.get_object(bucket: s3_bucket, key: path)
|
110
|
+
body = resp.body.read
|
111
|
+
JSON.parse(body)
|
100
112
|
end
|
101
113
|
|
102
114
|
def groups_path
|
103
|
-
|
115
|
+
"#{dir}/groups.json"
|
104
116
|
end
|
105
117
|
|
106
118
|
def state_path
|
107
|
-
|
119
|
+
"#{dir}/state.json"
|
108
120
|
end
|
109
121
|
|
110
122
|
def config_path
|
111
|
-
|
123
|
+
"#{dir}/config.json"
|
112
124
|
end
|
113
125
|
|
114
126
|
def dir
|
115
|
-
"
|
127
|
+
"eks-cli/#{@cluster_name}"
|
128
|
+
end
|
129
|
+
|
130
|
+
def s3_bucket
|
131
|
+
self.class.s3_bucket
|
116
132
|
end
|
117
133
|
|
118
|
-
def
|
119
|
-
|
120
|
-
yield dir
|
134
|
+
def s3
|
135
|
+
@s3 ||= Aws::S3::Client.new
|
121
136
|
end
|
122
137
|
|
123
138
|
end
|
data/lib/eks_cli/version.rb
CHANGED
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.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erez Rabih
|
@@ -10,6 +10,20 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2018-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk-s3
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: thor
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|