Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions assignment1-solution/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM golang:alpine3.16

COPY . /res-crud

WORKDIR /res-crud

RUN go build -o main && \
chmod 777 /res-crud

CMD ["./main"]
Binary file added assignment1-solution/ass1
Binary file not shown.
78 changes: 78 additions & 0 deletions assignment1-solution/clientgo/configmap.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package clientgo

import (
"context"
"fmt"

apiv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)

func CreateConfigmap(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("*** CREATE CONFIGMAP ***")
new_cmap := &apiv1.ConfigMap{
TypeMeta: metav1.TypeMeta{Kind: "ConfigMap"},
ObjectMeta: metav1.ObjectMeta{
Name: "configmap-demo",
},
Data: map[string]string{
"ass-1": "configmap-lbl-demo",
},
}
_, err := clientset.CoreV1().ConfigMaps("default").Create(ctx, new_cmap, metav1.CreateOptions{})
if err != nil {
fmt.Println("Failed to create a configmap, error:", err)
return
}
fmt.Println("Configmap created successfully!")
fmt.Println("--------------------------------")
}

func ListConfigmaps(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("*** GET CONFIGMAP ***")
cmap, err := clientset.CoreV1().ConfigMaps("default").List(ctx, metav1.ListOptions{})
if err != nil {
fmt.Println("Failed to get configmap, error:", err)
return
}
fmt.Println("Total configmaps in the default namespace: ", len(cmap.Items))

for _, item := range cmap.Items {
fmt.Println(item.Name)
}
fmt.Println("--------------------------------")
}

func UpdateConfigmap(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("*** UPDATE CONFIGMAP ***")
modified_cmap, err := clientset.CoreV1().ConfigMaps("default").Get(ctx, "configmap-demo", metav1.GetOptions{})
if err != nil {
fmt.Println("Failed to Get configmap, error:", err)
return
}

if modified_cmap.Labels == nil {
modified_cmap.Labels = make(map[string]string)
}

modified_cmap.Labels["app"] = "configmap-clientgo-lbl"
_, err = clientset.CoreV1().ConfigMaps("default").Update(ctx, modified_cmap, metav1.UpdateOptions{})
if err != nil {
fmt.Println("Failed to update the configmap, error: ", err)
return
}
fmt.Println("Configmap updated successfully!")
fmt.Println("--------------------------------")
}

func DeleteConfigmap(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("*** DELETE CONFIGMAP ***")
err := clientset.CoreV1().ConfigMaps("default").Delete(ctx, "configmap-demo", metav1.DeleteOptions{})
if err != nil {
fmt.Println("Failed to delete configmaps, error:", err)
return
}
fmt.Println("Configmap deleted successfully!")
fmt.Println("--------------------------------")
}
103 changes: 103 additions & 0 deletions assignment1-solution/clientgo/deployment.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package clientgo

import (
"context"
"fmt"

appsv1 "k8s.io/api/apps/v1"
apiv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)

func CreateDeployment(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("***CREATE DEPLOYMENT***")
var replicas int32 = 2
new_deploy := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: "nginx-deployment-demo",
},
Spec: appsv1.DeploymentSpec{
Replicas: &replicas,
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
"app": "client-go-app",
},
},
Template: apiv1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
"app": "client-go-app",
},
},
Spec: apiv1.PodSpec{
Containers: []apiv1.Container{
{
Name: "nginx-deployment",
Image: "nginx:latest",
Command: []string{"sleep", "2000"},
},
},
},
},
},
}

_, err := clientset.AppsV1().Deployments("default").Create(ctx, new_deploy, metav1.CreateOptions{})
if err != nil {
fmt.Println("Error occured during deployment create: ", err)
return
}
fmt.Println("Deployment created successfully")
fmt.Println("--------------------------------")
}

func ListDeployments(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("***GET DEPLOYMENT***")
deployment, err := clientset.AppsV1().Deployments("default").List(ctx, metav1.ListOptions{})
if err != nil {
fmt.Println("Error occured in deployment list: ", err)
return
}

fmt.Println("Total Deployments: ", len(deployment.Items))
for _, deploy := range deployment.Items {
fmt.Println(deploy.Name, deploy.Status.Replicas, deploy.Status.AvailableReplicas)
}
fmt.Println("--------------------------------")
}

func UpdateDeployment(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("***UPDATE DEPLOYMENT***")
// get the deployment first and update the deployment labels
dep, err := clientset.AppsV1().Deployments("default").Get(ctx, "proxy-app", metav1.GetOptions{})
if err != nil {
fmt.Println("Error occured during get deployment: ", err)
return
}

if dep.Labels == nil {
dep.Labels = make(map[string]string)
}

dep.Labels["ass-1"] = "client-go-app-deployment"
_, err = clientset.AppsV1().Deployments("default").Update(ctx, dep, metav1.UpdateOptions{})
if err != nil {
fmt.Println("Error occured during update deployment: ", err)
return
}
fmt.Println("Deployment updated successfully!")
fmt.Println("--------------------------------")
}

func DeleteDeployment(clientset *kubernetes.Clientset, ctx context.Context) {

fmt.Println("***DELETE DEPLOYMENT***")
err := clientset.AppsV1().Deployments("default").Delete(ctx, "nginx-deployment-demo", metav1.DeleteOptions{})
if err != nil {
fmt.Println("Error occured during deployment delete: ", err)
return
}
fmt.Println("Deployment deleted successfully!")
fmt.Println("--------------------------------")
}
49 changes: 49 additions & 0 deletions assignment1-solution/clientgo/resources.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package clientgo

import (
"context"
"time"

"k8s.io/client-go/kubernetes"
)

func Resources(clientset *kubernetes.Clientset) {
ctx := context.Background()

// SERVICES CRUD
CreateService(clientset, ctx)
ListServices(clientset, ctx)

UpdateService(clientset, ctx)
time.Sleep(5 * time.Second)
ListServices(clientset, ctx)

DeleteService(clientset, ctx)
time.Sleep(5 * time.Second)
ListServices(clientset, ctx)

// DEPLOYMENTS CRUD
CreateDeployment(clientset, ctx)

ListDeployments(clientset, ctx)

UpdateDeployment(clientset, ctx)
time.Sleep(5 * time.Second)
ListDeployments(clientset, ctx)

DeleteDeployment(clientset, ctx)
time.Sleep(5 * time.Second)
ListDeployments(clientset, ctx)

// CONFIGMAPS CRUD
CreateConfigmap(clientset, ctx)
ListConfigmaps(clientset, ctx)

UpdateConfigmap(clientset, ctx)
time.Sleep(5 * time.Second)
ListConfigmaps(clientset, ctx)

DeleteConfigmap(clientset, ctx)
time.Sleep(5 * time.Second)
ListConfigmaps(clientset, ctx)
}
89 changes: 89 additions & 0 deletions assignment1-solution/clientgo/services.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package clientgo

import (
"context"
"fmt"

v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/client-go/kubernetes"
)

func CreateService(clientset *kubernetes.Clientset, ctx context.Context) {

fmt.Println("***CREATE SERVICE***")
new_svc := &v1.Service{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{
Name: "svc-demo",
},
Spec: v1.ServiceSpec{
Type: "ClusterIP",
Ports: []v1.ServicePort{
{
Name: "http",
Port: 80,
TargetPort: intstr.FromInt(80),
},
},
},
}

_, err := clientset.CoreV1().Services("default").Create(ctx, new_svc, metav1.CreateOptions{})
if err != nil {
fmt.Println("Error occured during service creation, error: ", err)
return
}
fmt.Println("Service created successfully!")
fmt.Println("--------------------------------")
}

func ListServices(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("***LIST SERVICE***")

svc, err := clientset.CoreV1().Services("default").List(ctx, metav1.ListOptions{})
if err != nil {
fmt.Println("Error occured during get services: ", err)
return
}
fmt.Println("Total services: ", len(svc.Items))

for _, svc := range svc.Items {
fmt.Println(svc.Name, svc.Spec.Type, svc.Spec.ClusterIP, svc.Spec.Ports)
}
fmt.Println("--------------------------------")
}

func UpdateService(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("***UPDATE SERVICE***")
svc1, err := clientset.CoreV1().Services("default").Get(ctx, "svc-demo", metav1.GetOptions{})
if err != nil {
fmt.Println("Service not found, error:", err)
return
}

if svc1.Spec.Selector == nil {
svc1.Spec.Selector = make(map[string]string)
}

svc1.Spec.Selector["app-1"] = "client-go-app-svc"
_, err = clientset.CoreV1().Services("default").Update(ctx, svc1, metav1.UpdateOptions{})
if err != nil {
fmt.Println("Error occured during update service, error: ", err)
return
}
fmt.Println("Service Updated successfully!")
fmt.Println("--------------------------------")
}

func DeleteService(clientset *kubernetes.Clientset, ctx context.Context) {
fmt.Println("***DELETE SERVICE***")
err := clientset.CoreV1().Services("default").Delete(ctx, "svc-demo", metav1.DeleteOptions{})
if err != nil {
fmt.Println("Error occured during delete operation!", err)
return
}
fmt.Println("Service deleted successfully!")
fmt.Println("--------------------------------")
}
Loading