From 0d167e309102af3302edf2869098db132f09564b Mon Sep 17 00:00:00 2001 From: Arijit Nayak Date: Wed, 6 Dec 2023 01:37:35 +0530 Subject: [PATCH 1/2] feat: added first assignment code --- assign1/go.mod | 65 ++++++++++++++++ assign1/go.sum | 203 ++++++++++++++++++++++++++++++++++++++++++++++++ assign1/main.go | 135 ++++++++++++++++++++++++++++++++ 3 files changed, 403 insertions(+) create mode 100644 assign1/go.mod create mode 100644 assign1/go.sum create mode 100644 assign1/main.go diff --git a/assign1/go.mod b/assign1/go.mod new file mode 100644 index 0000000..be14051 --- /dev/null +++ b/assign1/go.mod @@ -0,0 +1,65 @@ +module assig1 + +go 1.21.4 + +require ( + k8s.io/api v0.28.4 + k8s.io/apimachinery v0.28.4 + k8s.io/client-go v0.28.4 + sigs.k8s.io/controller-runtime v0.16.3 +) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-logr/logr v1.2.4 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/imdario/mergo v0.3.6 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.16.0 // indirect + github.com/prometheus/client_model v0.4.0 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/time v0.3.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apiextensions-apiserver v0.28.3 // indirect + k8s.io/component-base v0.28.3 // indirect + k8s.io/klog/v2 v2.100.1 // indirect + k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect + k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/assign1/go.sum b/assign1/go.sum new file mode 100644 index 0000000..a468af9 --- /dev/null +++ b/assign1/go.sum @@ -0,0 +1,203 @@ +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= +go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= +golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= +k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= +k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08= +k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc= +k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= +k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= +k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= +k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= +k8s.io/component-base v0.28.3 h1:rDy68eHKxq/80RiMb2Ld/tbH8uAE75JdCqJyi6lXMzI= +k8s.io/component-base v0.28.3/go.mod h1:fDJ6vpVNSk6cRo5wmDa6eKIG7UlIQkaFmZN2fYgIUD8= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= +k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= +sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/assign1/main.go b/assign1/main.go new file mode 100644 index 0000000..d1d8685 --- /dev/null +++ b/assign1/main.go @@ -0,0 +1,135 @@ +package main + +import ( + "context" + "fmt" + + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/client-go/util/retry" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +func main() { + config, err := rest.InClusterConfig() + if err != nil { + panic(err.Error()) + } + + clientset, err := kubernetes.NewForConfig(config) + if err != nil { + panic(err.Error()) + } + + controllerConfig := ctrl.GetConfigOrDie() + controllerClient, err := client.New(controllerConfig, client.Options{}) + if err != nil { + panic(err.Error()) + } + + pod := &corev1.Pod{ + ObjectMeta: v1.ObjectMeta{ + Name: "example-pod", + Namespace: "default", + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "nginx", + Image: "nginx", + }, + }, + }, + } + // Create a Pod + createdPod, err := clientset.CoreV1().Pods("default").Create(context.Background(), pod, v1.CreateOptions{}) + if err != nil { + panic(err.Error()) + } + fmt.Println("Created Pod:", createdPod.Name) + + // Get a Pod + foundPod, err := clientset.CoreV1().Pods("default").Get(context.Background(), "example-pod", v1.GetOptions{}) + if err != nil { + panic(err.Error()) + } + fmt.Println("Found Pod:", foundPod.Name) + + // Update a Pod + retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + foundPod.Spec.Containers[0].Image = "nginx:latest" + _, updateErr := clientset.CoreV1().Pods("default").Update(context.Background(), foundPod, v1.UpdateOptions{}) + return updateErr + }) + if retryErr != nil { + panic(retryErr.Error()) + } + fmt.Println("Updated Pod image") + + // Delete a Pod + deletePolicy := v1.DeletePropagationForeground + if err := clientset.CoreV1().Pods("default").Delete(context.Background(), "example-pod", v1.DeleteOptions{ + PropagationPolicy: &deletePolicy, + }); err != nil { + panic(err.Error()) + } + fmt.Println("Deleted Pod") + + // Example operations using controller-runtime + deployment := &appsv1.Deployment{ + ObjectMeta: v1.ObjectMeta{ + Name: "example-deployment", + Namespace: "default", + }, + Spec: appsv1.DeploymentSpec{ + Replicas: func(i int32) *int32 { return &i }(2), + Selector: &v1.LabelSelector{ + MatchLabels: map[string]string{"app": "example"}, + }, + Template: corev1.PodTemplateSpec{ + ObjectMeta: v1.ObjectMeta{ + Labels: map[string]string{"app": "example"}, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "nginx", + Image: "nginx", + }, + }, + }, + }, + }, + } + + // Create a Deployment using controller-runtime client + if err := controllerClient.Create(context.Background(), deployment); err != nil { + panic(err.Error()) + } + fmt.Println("Created Deployment") + + // Get a Deployment using controller-runtime client + foundDeployment := &appsv1.Deployment{} + if err := controllerClient.Get(context.Background(), client.ObjectKey{Namespace: "default", Name: "example-deployment"}, foundDeployment); err != nil { + panic(err.Error()) + } + fmt.Println("Found Deployment:", foundDeployment.Name) + + // Update a Deployment using controller-runtime client + foundDeployment.Spec.Replicas = func(i int32) *int32 { return &i }(3) + if err := controllerClient.Update(context.Background(), foundDeployment); err != nil { + panic(err.Error()) + } + fmt.Println("Updated Deployment") + + // Delete a Deployment using controller-runtime client + if err := controllerClient.Delete(context.Background(), foundDeployment); err != nil { + panic(err.Error()) + } + fmt.Println("Deleted Deployment") +} From 6c1bb8216d4abda81d8246470739688b0145d111 Mon Sep 17 00:00:00 2001 From: Arijit Nayak Date: Wed, 6 Dec 2023 05:33:11 +0530 Subject: [PATCH 2/2] refactor: added rest part of the code --- assign1/client-go/client.go | 65 ++++++ assign1/client-go/deployment.go | 90 ++++++++ assign1/client-go/pod.go | 64 ++++++ assign1/client-go/service.go | 73 +++++++ assign1/constants/clientog.go | 5 + assign1/controller-runtime/crt.go | 41 ++++ assign1/controller-runtime/deployment.go | 1 + assign1/controller-runtime/pod.go | 75 +++++++ assign1/controller-runtime/service.go | 78 +++++++ assign1/go.mod | 13 -- assign1/go.sum | 11 - assign1/main.go | 256 ++++++++++++----------- assign1/models/clientgo.go | 9 + 13 files changed, 632 insertions(+), 149 deletions(-) create mode 100644 assign1/client-go/client.go create mode 100644 assign1/client-go/deployment.go create mode 100644 assign1/client-go/pod.go create mode 100644 assign1/client-go/service.go create mode 100644 assign1/constants/clientog.go create mode 100644 assign1/controller-runtime/crt.go create mode 100644 assign1/controller-runtime/deployment.go create mode 100644 assign1/controller-runtime/pod.go create mode 100644 assign1/controller-runtime/service.go create mode 100644 assign1/models/clientgo.go diff --git a/assign1/client-go/client.go b/assign1/client-go/client.go new file mode 100644 index 0000000..aa32cb5 --- /dev/null +++ b/assign1/client-go/client.go @@ -0,0 +1,65 @@ +package clientgo + +import ( + "assig1/models" + "fmt" + + appsv1 "k8s.io/api/apps/v1" + core "k8s.io/api/core/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes" + appV1 "k8s.io/client-go/kubernetes/typed/apps/v1" + v1 "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/rest" +) + +// ClientGo ... +type ClientGo interface { + CreatePod() (*core.Pod, error) + UpdatePod(podName string) error + GetPods(podName string) (*core.PodList, error) + DeletePod(podName string) error + + CreateDeployment() (*appsv1.Deployment, error) + UpdateDeployment(deploymentName string) error + GetDeployments() (*appsv1.DeploymentList, error) + DeleteDeployment(deploymentName string) error + + CreateService() (*corev1.Service, error) + UpdateService(serviceName string) error + GetServices() (*corev1.ServiceList, error) + DeleteService(podName string) error +} + +// ClientGoClient ... +type ClientGoClient struct { + podClient v1.PodInterface + serviceClient v1.ServiceInterface + deploymentClient appV1.DeploymentInterface + setUpEssentials *models.ClientGoEssentials +} + +// NewClientGoClient ... +func NewClientGoClient(setUpEssentials *models.ClientGoEssentials) (*ClientGoClient, error) { + config, err := rest.InClusterConfig() + if err != nil { + fmt.Printf("Error creating in-cluster config: %v\n", err) + return nil, err + } + + clientset, err := kubernetes.NewForConfig(config) + if err != nil { + fmt.Printf("Error creating clientset: %v\n", err) + return nil, err + } + + podClient := clientset.CoreV1().Pods(setUpEssentials.Namespace) + serviceClient := clientset.CoreV1().Services(setUpEssentials.Namespace) + deploymentClient := clientset.AppsV1().Deployments(setUpEssentials.Namespace) + return &ClientGoClient{ + setUpEssentials: setUpEssentials, + podClient: podClient, + serviceClient: serviceClient, + deploymentClient: deploymentClient, + }, nil +} diff --git a/assign1/client-go/deployment.go b/assign1/client-go/deployment.go new file mode 100644 index 0000000..93807af --- /dev/null +++ b/assign1/client-go/deployment.go @@ -0,0 +1,90 @@ +package clientgo + +import ( + "assig1/constants" + "context" + "fmt" + + appsv1 "k8s.io/api/apps/v1" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CreateDeployment ... +func (cg *ClientGoClient) CreateDeployment() (*appsv1.Deployment, error) { + replicas := int32(2) + newDeployment := &appsv1.Deployment{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "apps/v1", + Kind: "Deployment", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: cg.setUpEssentials.DeploymentName, + Namespace: cg.setUpEssentials.Namespace, + Labels: map[string]string{ + "app": "ariarijitAssign1", + }, + }, + Spec: appsv1.DeploymentSpec{ + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app": "arijitAssign1", + }, + }, + Replicas: &replicas, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "app": "arijitAssign1", + }, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "nginx", + Image: constants.NginxImage, + }, + }, + }, + }, + }, + } + + createdDeployment, err := cg.deploymentClient.Create(context.Background(), newDeployment, metav1.CreateOptions{}) + if err != nil { + return nil, err + } + + return createdDeployment, nil +} + +// UpdateDeployment ... +func (cg *ClientGoClient) UpdateDeployment(deploymentName string) error { + updatedDeployment, err := cg.deploymentClient.Get(context.Background(), deploymentName, metav1.GetOptions{}) + if err != nil { + return fmt.Errorf("error getting Pod for update: %v", err) + } + + updatedDeployment.SetGenerateName("generated-updated-deployment") + + _, err = cg.deploymentClient.Update(context.Background(), updatedDeployment, metav1.UpdateOptions{}) + if err != nil { + return fmt.Errorf("error updating Pod: %v", err) + } + + return nil +} + +// GetDeployments ... +func (cg *ClientGoClient) GetDeployments() (*appsv1.DeploymentList, error) { + return cg.deploymentClient.List(context.Background(), metav1.ListOptions{}) +} + +// DeleteDeployment ... +func (cg *ClientGoClient) DeleteDeployment(deploymentName string) error { + deletePolicy := metav1.DeletePropagationForeground + return cg.deploymentClient.Delete(context.Background(), deploymentName, metav1.DeleteOptions{ + PropagationPolicy: &deletePolicy, + }) +} diff --git a/assign1/client-go/pod.go b/assign1/client-go/pod.go new file mode 100644 index 0000000..8296f7d --- /dev/null +++ b/assign1/client-go/pod.go @@ -0,0 +1,64 @@ +package clientgo + +import ( + "assig1/constants" + "context" + "fmt" + + core "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CreatePod ... +func (cg *ClientGoClient) CreatePod() (*core.Pod, error) { + newPod := &core.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: cg.setUpEssentials.PodName, + Namespace: cg.setUpEssentials.Namespace, + }, + Spec: core.PodSpec{ + Containers: []core.Container{ + { + Name: "nginx", + Image: constants.NginxImage, + ImagePullPolicy: core.PullIfNotPresent, + }, + }, + }, + } + + createdPod, err := cg.podClient.Create(context.Background(), newPod, metav1.CreateOptions{}) + if err != nil { + return nil, err + } + + return createdPod, nil +} + +// UpdatePod ... +func (cg *ClientGoClient) UpdatePod(podName string) error { + updatedPod, err := cg.podClient.Get(context.Background(), podName, metav1.GetOptions{}) + if err != nil { + return fmt.Errorf("error getting Pod for update: %v", err) + } + + updatedPod.SetGenerateName("generated-updated-name") + updatedPod.Spec.Containers[0].Image = "nginx:1.21" + + _, err = cg.podClient.Update(context.Background(), updatedPod, metav1.UpdateOptions{}) + if err != nil { + return fmt.Errorf("error updating Pod: %v", err) + } + + return nil +} + +// GetPods ... +func (cg *ClientGoClient) GetPods() (*core.PodList, error) { + return cg.podClient.List(context.Background(), metav1.ListOptions{}) +} + +// DeletePod ... +func (cg *ClientGoClient) DeletePod(podName string) error { + return cg.podClient.Delete(context.Background(), podName, metav1.DeleteOptions{}) +} diff --git a/assign1/client-go/service.go b/assign1/client-go/service.go new file mode 100644 index 0000000..88fc52e --- /dev/null +++ b/assign1/client-go/service.go @@ -0,0 +1,73 @@ +package clientgo + +import ( + "context" + "fmt" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// CreateService ... +func (cg *ClientGoClient) CreateService() (*corev1.Service, error) { + newService := &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "Service", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: cg.setUpEssentials.ServiceName, + Namespace: cg.setUpEssentials.Namespace, + }, + Spec: corev1.ServiceSpec{ + Selector: map[string]string{ + "app": "arijitAssign1", + }, + Ports: []corev1.ServicePort{ + { + Protocol: corev1.ProtocolTCP, + Port: 8081, + TargetPort: intstr.FromInt(8081), + }, + }, + }, + } + + createdService, err := cg.serviceClient.Create(context.Background(), newService, metav1.CreateOptions{}) + if err != nil { + return nil, err + } + + return createdService, nil +} + +// UpdateService ... +func (cg *ClientGoClient) UpdateService(serviceName string) error { + updatedService, err := cg.serviceClient.Get(context.Background(), serviceName, metav1.GetOptions{}) + if err != nil { + return fmt.Errorf("error getting Pod for update: %v", err) + } + + updatedService.SetGenerateName("generated-updated-service") + + _, err = cg.serviceClient.Update(context.Background(), updatedService, metav1.UpdateOptions{}) + if err != nil { + return fmt.Errorf("error updating Pod: %v", err) + } + + return nil +} + +// GetServices ... +func (cg *ClientGoClient) GetServices() (*corev1.ServiceList, error) { + return cg.serviceClient.List(context.Background(), metav1.ListOptions{}) +} + +// DeleteService ... +func (cg *ClientGoClient) DeleteService(podName string) error { + deletePolicy := metav1.DeletePropagationForeground + return cg.serviceClient.Delete(context.Background(), podName, metav1.DeleteOptions{ + PropagationPolicy: &deletePolicy, + }) +} diff --git a/assign1/constants/clientog.go b/assign1/constants/clientog.go new file mode 100644 index 0000000..6390ada --- /dev/null +++ b/assign1/constants/clientog.go @@ -0,0 +1,5 @@ +package constants + +const ( + NginxImage string = "nginx:latest" +) diff --git a/assign1/controller-runtime/crt.go b/assign1/controller-runtime/crt.go new file mode 100644 index 0000000..6a3281d --- /dev/null +++ b/assign1/controller-runtime/crt.go @@ -0,0 +1,41 @@ +package crt + +import ( + "fmt" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/config" +) + +// CRT ... +type CRT interface { + CreatePod(podName string) error + UpdatePod(podName string) error + DeletePod(podName string) error + GetPod(podName string) (*appsv1.Deployment, error) + + CreateService(serviceName string) error + UpdateService(serviceName string) error + DeleteService(serviceName string) error + GetService(serviceName string) (*corev1.Service, error) +} + +// CRTClient ... +type CRTClient struct { + apiServerClient client.Client + namespace string +} + +// NewCRTClient ... +func NewCRTClient(namespace string) (*CRTClient, error) { + apiServerClient, err := client.New(config.GetConfigOrDie(), client.Options{}) + if err != nil { + return nil, fmt.Errorf("failed to initialize the crt client : %v", err) + } + return &CRTClient{ + apiServerClient: apiServerClient, + namespace: namespace, + }, nil +} diff --git a/assign1/controller-runtime/deployment.go b/assign1/controller-runtime/deployment.go new file mode 100644 index 0000000..675c8b0 --- /dev/null +++ b/assign1/controller-runtime/deployment.go @@ -0,0 +1 @@ +package crt diff --git a/assign1/controller-runtime/pod.go b/assign1/controller-runtime/pod.go new file mode 100644 index 0000000..8a30cad --- /dev/null +++ b/assign1/controller-runtime/pod.go @@ -0,0 +1,75 @@ +package crt + +import ( + "assig1/constants" + "context" + + appsv1 "k8s.io/api/apps/v1" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// CreatePod ... +func (c *CRTClient) CreatePod(podName string) error { + pod := &corev1.Pod{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "Pod", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: podName, + Namespace: c.namespace, + }, + Spec: corev1.PodSpec{ + RestartPolicy: corev1.RestartPolicyOnFailure, + Containers: []corev1.Container{ + { + Name: "nginx-crt", + Image: constants.NginxImage, + ImagePullPolicy: corev1.PullIfNotPresent, + }, + }, + }, + } + return c.apiServerClient.Create(context.Background(), pod, &client.CreateOptions{}) +} + +// UpdatePod ... +func (c *CRTClient) UpdatePod(podName string) error { + oldDeployment := &appsv1.Deployment{} + err := c.apiServerClient.Get(context.Background(), client.ObjectKey{Namespace: c.namespace, Name: podName}, oldDeployment) + if err != nil { + return err + } + oldDeployment.SetGenerateName("updated-ctr-deployment") + oldDeployment.Spec.Replicas = func(i int32) *int32 { return &i }(3) + err = c.apiServerClient.Update(context.Background(), oldDeployment, &client.UpdateOptions{}) + if err != nil { + return err + } + + return nil +} + +// DeletePod ... +func (c *CRTClient) DeletePod(podName string) error { + existingDeployment := &appsv1.Deployment{} + err := c.apiServerClient.Get(context.Background(), client.ObjectKey{Namespace: c.namespace, Name: podName}, existingDeployment) + if err != nil { + return err + } + return c.apiServerClient.Delete(context.Background(), existingDeployment) +} + +// GetPod ... +func (c *CRTClient) GetPod(podName string) (*appsv1.Deployment, error) { + oldDeployment := &appsv1.Deployment{} + err := c.apiServerClient.Get(context.Background(), client.ObjectKey{Namespace: c.namespace, Name: podName}, oldDeployment) + if err != nil { + return nil, err + } + + return oldDeployment, nil +} diff --git a/assign1/controller-runtime/service.go b/assign1/controller-runtime/service.go new file mode 100644 index 0000000..beddf37 --- /dev/null +++ b/assign1/controller-runtime/service.go @@ -0,0 +1,78 @@ +package crt + +import ( + "context" + "fmt" + "log" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/intstr" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// CreateService ... +func (c *CRTClient) CreateService(serviceName string) error { + pod := &corev1.Service{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "v1", + Kind: "Service", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: serviceName, + Namespace: c.namespace, + }, + Spec: corev1.ServiceSpec{ + Type: corev1.ServiceTypeClusterIP, + Ports: []corev1.ServicePort{ + { + Port: 8091, + TargetPort: intstr.FromInt(8091), + Protocol: corev1.ProtocolTCP, + }, + }, + }, + } + return c.apiServerClient.Create(context.Background(), pod, &client.CreateOptions{}) +} + +// UpdateService ... +func (c *CRTClient) UpdateService(serviceName string) error { + oldService, err := c.GetService(serviceName) + if err != nil { + log.Println("failed to get old service : ", err) + return err + } + + oldService.SetGenerateName("updated-ctr-service") + err = c.apiServerClient.Update(context.Background(), oldService, &client.UpdateOptions{}) + if err != nil { + return err + } + + return nil +} + +// DeleteService ... +func (c *CRTClient) DeleteService(serviceName string) error { + existingService, err := c.GetService(serviceName) + if err != nil { + fmt.Println("error getting a service : ", err) + return err + } + + return c.apiServerClient.Delete(context.Background(), existingService) +} + +// GetService ... +func (c *CRTClient) GetService(serviceName string) (*corev1.Service, error) { + retrivedService := &corev1.Service{} + err := c.apiServerClient.Get(context.Background(), types.NamespacedName{Name: serviceName, Namespace: c.namespace}, retrivedService) + if err != nil { + fmt.Println("error getting a service : ", err) + return nil, err + } + + return retrivedService, nil +} diff --git a/assign1/go.mod b/assign1/go.mod index be14051..e2dfc4a 100644 --- a/assign1/go.mod +++ b/assign1/go.mod @@ -10,18 +10,14 @@ require ( ) require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.5.9 // indirect @@ -31,31 +27,22 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.16.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.10.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sys v0.13.0 // indirect golang.org/x/term v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect - gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.28.3 // indirect - k8s.io/component-base v0.28.3 // indirect k8s.io/klog/v2 v2.100.1 // indirect k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect diff --git a/assign1/go.sum b/assign1/go.sum index a468af9..c6a2d60 100644 --- a/assign1/go.sum +++ b/assign1/go.sum @@ -8,8 +8,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= -github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -29,9 +27,6 @@ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEe github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= @@ -107,8 +102,6 @@ github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= -go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= @@ -129,14 +122,12 @@ golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= @@ -185,8 +176,6 @@ k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= -k8s.io/component-base v0.28.3 h1:rDy68eHKxq/80RiMb2Ld/tbH8uAE75JdCqJyi6lXMzI= -k8s.io/component-base v0.28.3/go.mod h1:fDJ6vpVNSk6cRo5wmDa6eKIG7UlIQkaFmZN2fYgIUD8= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= diff --git a/assign1/main.go b/assign1/main.go index d1d8685..647d299 100644 --- a/assign1/main.go +++ b/assign1/main.go @@ -1,135 +1,141 @@ package main import ( - "context" + clientgo "assig1/client-go" + crt "assig1/controller-runtime" + "assig1/models" "fmt" + "log" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" - "k8s.io/client-go/util/retry" - - appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" ) func main() { - config, err := rest.InClusterConfig() - if err != nil { - panic(err.Error()) - } - - clientset, err := kubernetes.NewForConfig(config) - if err != nil { - panic(err.Error()) - } - - controllerConfig := ctrl.GetConfigOrDie() - controllerClient, err := client.New(controllerConfig, client.Options{}) - if err != nil { - panic(err.Error()) - } - - pod := &corev1.Pod{ - ObjectMeta: v1.ObjectMeta{ - Name: "example-pod", - Namespace: "default", - }, - Spec: corev1.PodSpec{ - Containers: []corev1.Container{ - { - Name: "nginx", - Image: "nginx", - }, - }, - }, - } - // Create a Pod - createdPod, err := clientset.CoreV1().Pods("default").Create(context.Background(), pod, v1.CreateOptions{}) - if err != nil { - panic(err.Error()) - } - fmt.Println("Created Pod:", createdPod.Name) - - // Get a Pod - foundPod, err := clientset.CoreV1().Pods("default").Get(context.Background(), "example-pod", v1.GetOptions{}) - if err != nil { - panic(err.Error()) - } - fmt.Println("Found Pod:", foundPod.Name) - - // Update a Pod - retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { - foundPod.Spec.Containers[0].Image = "nginx:latest" - _, updateErr := clientset.CoreV1().Pods("default").Update(context.Background(), foundPod, v1.UpdateOptions{}) - return updateErr - }) - if retryErr != nil { - panic(retryErr.Error()) - } - fmt.Println("Updated Pod image") - - // Delete a Pod - deletePolicy := v1.DeletePropagationForeground - if err := clientset.CoreV1().Pods("default").Delete(context.Background(), "example-pod", v1.DeleteOptions{ - PropagationPolicy: &deletePolicy, - }); err != nil { - panic(err.Error()) - } - fmt.Println("Deleted Pod") - - // Example operations using controller-runtime - deployment := &appsv1.Deployment{ - ObjectMeta: v1.ObjectMeta{ - Name: "example-deployment", - Namespace: "default", - }, - Spec: appsv1.DeploymentSpec{ - Replicas: func(i int32) *int32 { return &i }(2), - Selector: &v1.LabelSelector{ - MatchLabels: map[string]string{"app": "example"}, - }, - Template: corev1.PodTemplateSpec{ - ObjectMeta: v1.ObjectMeta{ - Labels: map[string]string{"app": "example"}, - }, - Spec: corev1.PodSpec{ - Containers: []corev1.Container{ - { - Name: "nginx", - Image: "nginx", - }, - }, - }, - }, - }, - } - - // Create a Deployment using controller-runtime client - if err := controllerClient.Create(context.Background(), deployment); err != nil { - panic(err.Error()) - } - fmt.Println("Created Deployment") - - // Get a Deployment using controller-runtime client - foundDeployment := &appsv1.Deployment{} - if err := controllerClient.Get(context.Background(), client.ObjectKey{Namespace: "default", Name: "example-deployment"}, foundDeployment); err != nil { - panic(err.Error()) - } - fmt.Println("Found Deployment:", foundDeployment.Name) - - // Update a Deployment using controller-runtime client - foundDeployment.Spec.Replicas = func(i int32) *int32 { return &i }(3) - if err := controllerClient.Update(context.Background(), foundDeployment); err != nil { - panic(err.Error()) - } - fmt.Println("Updated Deployment") - - // Delete a Deployment using controller-runtime client - if err := controllerClient.Delete(context.Background(), foundDeployment); err != nil { - panic(err.Error()) - } - fmt.Println("Deleted Deployment") + // client-go related ops + go func() { + specs := &models.ClientGoEssentials{ + Namespace: corev1.NamespaceDefault, + ServiceName: "my-service", + PodName: "my-pod", + DeploymentName: "my-deployment", + } + client, err := clientgo.NewClientGoClient(specs) + if err != nil { + log.Println("failed to initialize new client-go : ", err) + return + } + + // create pod + createdPod, err := client.CreatePod() + if err != nil { + log.Println("failed to create the pod : ", err) + return + } + log.Printf("created pod details: %v\n", createdPod) + + // create service + createService, err := client.CreateService() + if err != nil { + log.Println("failed to create the service : ", err) + return + } + log.Printf("created service details: %v\n", createService) + + // create deployment + createdDeployment, err := client.CreateDeployment() + if err != nil { + log.Println("failed to create the deployment : ", err) + return + } + log.Printf("created deploment details: %v\n", createdDeployment) + + // get pods + allPods, err := client.GetPods() + if err != nil { + log.Println("failed to get all pods : ", err) + return + } + fmt.Printf("all pods : %v\n", allPods) + + allServices, err := client.GetServices() + if err != nil { + log.Println("failed to get all servcies : ", err) + return + } + fmt.Printf("all services : %v\n", allServices) + + allDeployments, err := client.GetDeployments() + if err != nil { + log.Println("failed to get all deployments : ", err) + return + } + fmt.Printf("all deployments : %v\n", allDeployments) + + // update ops + err = client.UpdatePod(specs.PodName) + if err != nil { + log.Println("failed to update the pod : ", err) + return + } + + err = client.UpdateService(specs.ServiceName) + if err != nil { + log.Println("failed to update the servcie : ", err) + return + } + + err = client.UpdateDeployment(specs.DeploymentName) + if err != nil { + log.Println("failed to update the deployment : ", err) + return + } + + // delete ops + err = client.DeletePod(specs.PodName) + if err != nil { + log.Println("failed to delete the pod : ", err) + return + } + + err = client.DeleteService(specs.ServiceName) + if err != nil { + log.Println("failed to delete the servcie : ", err) + return + } + + err = client.DeleteDeployment(specs.DeploymentName) + if err != nil { + log.Println("failed to delete the deployment : ", err) + return + } + }() + + // controller-runtime related ops + + go func() { + podName := "pod-crt" + crtClient, err := crt.NewCRTClient(corev1.NamespaceDefault) + if err != nil { + log.Println("failed to initialize new client-go : ", err) + return + } + + err = crtClient.CreatePod(podName) + if err != nil { + log.Println("failed to create the pod : ", err) + return + } + podDetails, err := crtClient.GetPod(podName) + if err != nil { + log.Println("failed to get the pod details : ", err) + return + } + fmt.Printf("retrived pod details : %v\n", podDetails) + + err = crtClient.UpdatePod(podName) + if err != nil { + log.Println("failed to get the update pod details : ", err) + return + } + }() } diff --git a/assign1/models/clientgo.go b/assign1/models/clientgo.go new file mode 100644 index 0000000..de093a4 --- /dev/null +++ b/assign1/models/clientgo.go @@ -0,0 +1,9 @@ +package models + +// ClientGoEssentials ... +type ClientGoEssentials struct { + ServiceName string + PodName string + DeploymentName string + Namespace string +}