Skip to content

Commit d78cb4e

Browse files
committed
Add NewK8sProvider support for eks and CLI related changes to incorporate eks funcionalities
Signed-off-by: Drumil Patel <[email protected]>
1 parent 6df76ee commit d78cb4e

File tree

4 files changed

+88
-7
lines changed

4 files changed

+88
-7
lines changed

infra/infra.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ func main() {
8181
k8sEKS := app.Command("eks", "Amazon Elastic Kubernetes Service - https://aws.amazon.com/eks").
8282
Action(e.NewEKSClient)
8383
k8sEKS.Flag("auth", "filename which consist eks credentials.").
84-
PlaceHolder("service-account.json").
85-
Short("a").
84+
PlaceHolder("credentials").
85+
Short('a').
8686
StringVar(&e.AuthFilename)
8787
k8sEKS.Flag("file", "yaml file or folder that describes the parameters for the object that will be deployed.").
8888
Required().
@@ -99,6 +99,35 @@ func main() {
9999
Default("_").
100100
StringVar(&e.Separator)
101101

102+
// EKS Cluster operations
103+
k8sEKSCluster := k8sEKS.Command("cluster", "manage EKS clusters").
104+
Action(e.EKSDeploymentParse)
105+
k8sEKSCluster.Command("create", "eks cluster create -a credentials -f FileOrFolder").
106+
Action(e.ClusterCreate)
107+
k8sEKSCluster.Command("delete", "eks cluster delete -a credentials -f FileOrFolder").
108+
Action(e.ClusterDelete)
109+
110+
// Cluster node-pool operations
111+
k8sEKSNodeGroup := k8sEKS.Command("nodegroup", "manage EKS clusters nodegroups").
112+
Action(e.EKSDeploymentParse)
113+
k8sEKSNodeGroup.Command("create", "eks nodegroup create -a credentials -f FileOrFolder").
114+
Action(e.NodeGroupCreate)
115+
k8sEKSNodeGroup.Command("delete", "eks nodegroup delete -a credentials -f FileOrFolder").
116+
Action(e.NodeGroupDelete)
117+
k8sEKSNodeGroup.Command("check-running", "eks nodegroup check-running -a credentails -f FileOrFolder").
118+
Action(e.AllNodeGroupsRunning)
119+
k8sEKSNodeGroup.Command("check-deleted", "eks nodegroup check-deleted -a credentials -f FileOrFolder").
120+
Action(e.AllNodeGroupsDeleted)
121+
122+
// K8s resource operations.
123+
k8sEKSResource := k8sEKS.Command("resource", `Apply and delete different k8s resources - deployments, services, config maps etc.Required variables -v PROJECT_ID, -v ZONE: -west1-b -v CLUSTER_NAME`).
124+
Action(e.NewK8sProvider).
125+
Action(e.K8SDeploymentsParse)
126+
k8sEKSResource.Command("apply", "eks resource apply -a credentials -f manifestsFileOrFolder -v PROJECT_ID:test -v ZONE:europe-west1-b -v CLUSTER_NAME:test -v hashStable:COMMIT1 -v hashTesting:COMMIT2").
127+
Action(e.ResourceApply)
128+
k8sEKSResource.Command("delete", "eks resource delete -a credentials -f manifestsFileOrFolder -v PROJECT_ID:test -v ZONE:europe-west1-b -v CLUSTER_NAME:test -v hashStable:COMMIT1 -v hashTesting:COMMIT2").
129+
Action(e.ResourceDelete)
130+
102131
if _, err := app.Parse(os.Args[1:]); err != nil {
103132
fmt.Fprintln(os.Stderr, errors.Wrapf(err, "Error parsing commandline arguments"))
104133
app.Usage(os.Args[1:])

pkg/provider/eks/eks.go

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package eks
1515

1616
import (
17+
"context"
1718
"fmt"
1819
"log"
1920
"os"
@@ -33,6 +34,7 @@ import (
3334

3435
"k8s.io/apimachinery/pkg/runtime"
3536
"k8s.io/client-go/kubernetes/scheme"
37+
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
3638
)
3739

3840
type Resource = provider.Resource
@@ -214,7 +216,7 @@ func (c *EKS) ClusterDelete(*kingpin.ParseContext) error {
214216
ClusterName: req.Cluster.Name,
215217
}
216218

217-
for true {
219+
for {
218220
resL, err := c.clientEKS.ListNodegroups(reqL)
219221
if err != nil {
220222
log.Fatalf("listing nodepools err:%v", err)
@@ -455,7 +457,57 @@ func (c *EKS) AllNodeGroupsDeleted(*kingpin.ParseContext) error {
455457
// NewK8sProvider sets the k8s provider used for deploying k8s manifests
456458
func (c *EKS) NewK8sProvider(*kingpin.ParseContext) error {
457459

458-
// TODO: Complete this function
460+
clusterName, ok := c.DeploymentVars["CLUSTER_NAME"]
461+
if !ok {
462+
return fmt.Errorf("missing required CLUSTER_NAME variable")
463+
}
464+
arnRole, ok := c.DeploymentVars["ROLE_ARN"]
465+
if !ok {
466+
return fmt.Errorf("missing required CLUSTER_NAME variable")
467+
}
468+
469+
req := &eks.DescribeClusterInput{
470+
Name: &clusterName,
471+
}
472+
473+
rep, err := c.clientEKS.DescribeCluster(req)
474+
if err != nil {
475+
log.Fatalf("failed to get cluster details: %v", err)
476+
}
477+
478+
cluster := clientcmdapi.NewCluster()
479+
cluster.CertificateAuthorityData = []byte(rep.Cluster.CertificateAuthority.String())
480+
cluster.Server = *rep.Cluster.Endpoint
481+
482+
clusterContext := clientcmdapi.NewContext()
483+
clusterContext.Cluster = "kubernetes"
484+
clusterContext.AuthInfo = "aws"
485+
486+
authInfo := clientcmdapi.NewAuthInfo()
487+
authInfo.Exec = &clientcmdapi.ExecConfig{
488+
APIVersion: "client.authentication.k8s.io/v1alpha1",
489+
Command: "aws",
490+
Args: []string{"eks", "get-token", "--cluster-name", clusterName, "--role", arnRole},
491+
Env: []clientcmdapi.ExecEnvVar{
492+
{
493+
Name: "AWS_PROFILE",
494+
Value: "prombench",
495+
},
496+
},
497+
}
498+
499+
config := clientcmdapi.NewConfig()
500+
config.AuthInfos["aws"] = authInfo
501+
config.Contexts["aws"] = clusterContext
502+
config.Clusters["kubernetes"] = cluster
503+
config.CurrentContext = "aws"
504+
config.Kind = "Config"
505+
config.APIVersion = "v1"
506+
507+
c.k8sProvider, err = k8sProvider.New(context.Background(), config)
508+
if err != nil {
509+
log.Fatal("k8s provider error", err)
510+
}
459511

460512
return nil
461513
}

prombench/manifests/environment/eks/cluster.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ nodegroups:
1919
maxsize: 1
2020
minsize: 1
2121
labels:
22-
node-type: main-node
22+
node-name: main-node
2323

2424

2525

prombench/manifests/environment/eks/nodegroups.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ nodegroups:
1212
minsize: 2
1313
labels:
1414
isolation: prometheus
15-
node-type: prometheus-{{ .PR_NUMBER }}
15+
node-name: prometheus-{{ .PR_NUMBER }}
1616
- nodegroupname: nodes-{{ .PR_NUMBER }}
1717
noderole: {{ .NODE_ROLE }}
1818
disksize: 100
@@ -24,6 +24,6 @@ nodegroups:
2424
minsize: 1
2525
labels:
2626
isolation: none
27-
node-type: nodes-{{ .PR_NUMBER }}
27+
node-name: nodes-{{ .PR_NUMBER }}
2828

2929

0 commit comments

Comments
 (0)