From 93fdf569416a631dfc9aa0f5e0173c70a70d931a Mon Sep 17 00:00:00 2001 From: Jan Malkiewicz Date: Wed, 30 Sep 2020 11:29:19 +0200 Subject: [PATCH] [OOM-K8S-CERT-EXTERNAL-PROVIDER] Add project This project is a GOlang implementation of an external provider for kubernetes cert-manager. External provider will use OOM CertService as backend signing CA. Issue-ID: OOM-2559 Signed-off-by: Jan Malkiewicz Change-Id: Ide31ca64c29763c9d4e9bdf58d8f50ffddcaaf5d --- certServiceK8sExternalProvider/.gitignore | 1 + certServiceK8sExternalProvider/Dockerfile | 22 ++++ certServiceK8sExternalProvider/Makefile | 9 ++ certServiceK8sExternalProvider/README.md | 9 ++ certServiceK8sExternalProvider/go.mod | 9 ++ certServiceK8sExternalProvider/go.sum | 17 +++ certServiceK8sExternalProvider/main.go | 24 ++++ certServiceK8sExternalProvider/pom.xml | 144 +++++++++++++++++++++ .../certservice-provisioner.go | 7 + .../certservice-provisioner_test.go | 13 ++ pom.xml | 1 + 11 files changed, 256 insertions(+) create mode 100644 certServiceK8sExternalProvider/.gitignore create mode 100644 certServiceK8sExternalProvider/Dockerfile create mode 100644 certServiceK8sExternalProvider/Makefile create mode 100644 certServiceK8sExternalProvider/README.md create mode 100644 certServiceK8sExternalProvider/go.mod create mode 100644 certServiceK8sExternalProvider/go.sum create mode 100644 certServiceK8sExternalProvider/main.go create mode 100644 certServiceK8sExternalProvider/pom.xml create mode 100644 certServiceK8sExternalProvider/src/certservice-provisioner/certservice-provisioner.go create mode 100644 certServiceK8sExternalProvider/test/certservice-provisioner/certservice-provisioner_test.go diff --git a/certServiceK8sExternalProvider/.gitignore b/certServiceK8sExternalProvider/.gitignore new file mode 100644 index 00000000..ba077a40 --- /dev/null +++ b/certServiceK8sExternalProvider/.gitignore @@ -0,0 +1 @@ +bin diff --git a/certServiceK8sExternalProvider/Dockerfile b/certServiceK8sExternalProvider/Dockerfile new file mode 100644 index 00000000..baea932b --- /dev/null +++ b/certServiceK8sExternalProvider/Dockerfile @@ -0,0 +1,22 @@ +# Build the manager binary +FROM golang:1.15.2 as builder + +WORKDIR /workspace +# Copy the Go Modules manifests +COPY go.* ./ +# cache deps before building and copying source so that we don't need to re-download as much +# and so that source changes don't invalidate our downloaded layer +RUN go mod download + +# Copy the go source +COPY main.go main.go + +# Build +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o oom-certservice-k8s-external-provider main.go + + +# Runtime container definition +FROM gcr.io/distroless/static:latest +WORKDIR / +COPY --from=builder /workspace/oom-certservice-k8s-external-provider . +ENTRYPOINT ["/oom-certservice-k8s-external-provider"] diff --git a/certServiceK8sExternalProvider/Makefile b/certServiceK8sExternalProvider/Makefile new file mode 100644 index 00000000..2fac43e0 --- /dev/null +++ b/certServiceK8sExternalProvider/Makefile @@ -0,0 +1,9 @@ +build: + go build -v -o bin//oom-certservice-k8s-external-provider oom-certservice/k8s-external-provider + +build-docker-image: + docker build -t onap/oom-certservice-k8s-external-provider . + +run-docker-image: + docker run -it onap/oom-certservice-k8s-external-provider + diff --git a/certServiceK8sExternalProvider/README.md b/certServiceK8sExternalProvider/README.md new file mode 100644 index 00000000..55eb0d0c --- /dev/null +++ b/certServiceK8sExternalProvider/README.md @@ -0,0 +1,9 @@ +## Project seed for applications written in go lang + +### Build project + +Just run **mvn** command without any parameters (which is by default equal to **mvn clean package**). + +The output executable file will be present in bin directory with name: **onap-golang-helloworld-1.0.0-SNAPSHOT** + +To run the program just type: **bin/onap-golang-helloworld-1.0.0-SNAPSHOT** diff --git a/certServiceK8sExternalProvider/go.mod b/certServiceK8sExternalProvider/go.mod new file mode 100644 index 00000000..2d611841 --- /dev/null +++ b/certServiceK8sExternalProvider/go.mod @@ -0,0 +1,9 @@ +module onap.org/oom-certservice/k8s-external-provider + +go 1.15 + +require ( + // Apache 2.0 license: https://github.com/levigross/grequests/blob/master/LICENSE + github.com/levigross/grequests v0.0.0-20190908174114-253788527a1a + golang.org/x/net v0.0.0-20200927032502-5d4f70055728 // indirect +) diff --git a/certServiceK8sExternalProvider/go.sum b/certServiceK8sExternalProvider/go.sum new file mode 100644 index 00000000..c2501685 --- /dev/null +++ b/certServiceK8sExternalProvider/go.sum @@ -0,0 +1,17 @@ +github.com/go-logr/logr v0.2.1 h1:fV3MLmabKIZ383XifUjFSwcoGee0v9qgPp8wy5svibE= +github.com/go-logr/logr v0.2.1/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/levigross/grequests v0.0.0-20190908174114-253788527a1a h1:DGFy/362j92vQRE3ThU1yqg9TuJS8YJOSbQuB7BP9cA= +github.com/levigross/grequests v0.0.0-20190908174114-253788527a1a/go.mod h1:jVntzcUU+2BtVohZBQmSHWUmh8B55LCNfPhcNCIvvIg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1 h1:Y/KGZSOdz/2r0WJ9Mkmz6NJBusp0kiNx1Cn82lzJQ6w= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200927032502-5d4f70055728 h1:5wtQIAulKU5AbLQOkjxl32UufnIOqgBX72pS0AV14H0= +golang.org/x/net v0.0.0-20200927032502-5d4f70055728/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +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-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/certServiceK8sExternalProvider/main.go b/certServiceK8sExternalProvider/main.go new file mode 100644 index 00000000..77ede105 --- /dev/null +++ b/certServiceK8sExternalProvider/main.go @@ -0,0 +1,24 @@ +package main + +import ( + "fmt" + "github.com/levigross/grequests" + "log" + certservice_provisioner "onap.org/oom-certservice/k8s-external-provider/src/certservice-provisioner" +) + +func main() { + fmt.Println(" *** Hello World Golang App ***") + fmt.Println() + + resp, err := grequests.Get("http://jenkins.onap.org/", nil) + + if err != nil { + log.Fatalln("Unable to make request: ", err) + } + + fmt.Println("Checking if jenkins.onap.org is reachable:", resp.StatusCode) + + fmt.Println("Signing certificate...") + certservice_provisioner.SignCertificate() +} diff --git a/certServiceK8sExternalProvider/pom.xml b/certServiceK8sExternalProvider/pom.xml new file mode 100644 index 00000000..6be62b77 --- /dev/null +++ b/certServiceK8sExternalProvider/pom.xml @@ -0,0 +1,144 @@ + + + + oom-certservice + org.onap.oom.platform.cert-service + 2.1.1-SNAPSHOT + + 4.0.0 + + oom-certservice-k8s-external-provider + mvn-golang + + + 3.1.0 + 2.3.5 + + + + + ${basedir} + ${basedir}${file.separator}bin + + clean package + + + + org.apache.maven.plugins + maven-clean-plugin + ${version.mvn-clean-plugin} + + false + true + + + ${basedir}${file.separator}bin + + + + + + com.igormaznitsa + mvn-golang-wrapper + ${version.mvn-golang-wrapper-plugin} + true + + + run + + run + + + + onap.org/oom-certservice/k8s-external-provider + + + + + install + + install + + + + onap.org/oom-certservice/k8s-external-provider/main + onap.org/oom-certservice/k8s-external-provider/certservice-provisioner + + + + + + + + + + + + docker-staging + + ${project.version}-STAGING-${maven.build.timestamp} + ${project.version}-STAGING-latest + + + + + docker + + false + + + linux + x86_64 + ${os.detected.name}-${os.detected.arch} + + + + + io.fabric8 + docker-maven-plugin + ${docker-maven-plugin.version} + + + docker-build-image + package + + build + + + + docker-push-image + deploy + + push + + + + + ${skipDockerPush} + true + IfNotPresent + + + ${project.artifactId} + ${docker-image.namespace}/${docker-image.name}:${docker-image.tag.latest} + + ${docker-image.registry} + + ${project.basedir} + + ${project.version}-${maven.build.timestamp}Z + + + + + + + + + + + + + diff --git a/certServiceK8sExternalProvider/src/certservice-provisioner/certservice-provisioner.go b/certServiceK8sExternalProvider/src/certservice-provisioner/certservice-provisioner.go new file mode 100644 index 00000000..5648082a --- /dev/null +++ b/certServiceK8sExternalProvider/src/certservice-provisioner/certservice-provisioner.go @@ -0,0 +1,7 @@ +package certservice_provisioner + +import "fmt" + +func SignCertificate() { + fmt.Println("--> This method is currently a stub.") +} diff --git a/certServiceK8sExternalProvider/test/certservice-provisioner/certservice-provisioner_test.go b/certServiceK8sExternalProvider/test/certservice-provisioner/certservice-provisioner_test.go new file mode 100644 index 00000000..a9435e2d --- /dev/null +++ b/certServiceK8sExternalProvider/test/certservice-provisioner/certservice-provisioner_test.go @@ -0,0 +1,13 @@ +package certservice_provisioner + +import ( + certservice_provisioner "onap.org/oom-certservice/k8s-external-provider/src/certservice-provisioner" + "testing" +) + +func TestSignCertificate(t *testing.T) { + + certservice_provisioner.SignCertificate() + + t.Logf("Everything is OK.") +} diff --git a/pom.xml b/pom.xml index 528993b1..a867349f 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,7 @@ certService certServiceClient certServicePostProcessor + certServiceK8sExternalProvider -- 2.16.6