├── .gitignore ├── go.mod ├── Dockerfile ├── go.sum ├── drivers.json ├── cloudbuild.yml ├── .github └── workflows │ └── go.yml ├── driver.go ├── cloudbuild.prod.yaml └── k8s └── driver.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | .idea -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module driver 2 | 3 | go 1.13 4 | 5 | require github.com/gorilla/mux v1.7.4 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.14-alpine 2 | 3 | WORKDIR /go/src/ 4 | COPY . . 5 | RUN GOOS=linux go build driver.go 6 | CMD ["./driver"] 7 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= 2 | github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= 3 | -------------------------------------------------------------------------------- /drivers.json: -------------------------------------------------------------------------------- 1 | { 2 | "drivers": [ 3 | { 4 | "uuid": "45688cd6-7a27-4a7b-89c5-a9b604eefe2f", 5 | "name": "Wesley W" 6 | }, 7 | { 8 | "uuid": "9a118e4d-821a-44c7-accc-fa99ac4be01a", 9 | "name": "Luiz" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /cloudbuild.yml: -------------------------------------------------------------------------------- 1 | steps: 2 | - name: mirror.gcr.io/library/golang 3 | env: ['GO111MODULE=on'] 4 | args: ['go','build','./...'] 5 | 6 | - name: 'gcr.io/cloud-builders/docker' 7 | args: ['build', '--tag=gcr.io/$PROJECT_ID/maratona-driver', '.'] 8 | 9 | images: ['gcr.io/$PROJECT_ID/maratona-driver'] -------------------------------------------------------------------------------- /.github/workflows/go.yml: -------------------------------------------------------------------------------- 1 | name: Go 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | pull_request: 7 | branches: [master] 8 | 9 | 10 | jobs: 11 | build: 12 | name: Build 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: Setup Go 17 | uses: actions/setup-go@v1 18 | with: 19 | go-version: 1.14 20 | id: go 21 | 22 | - name: Checkout 23 | uses: actions/checkout@v2 24 | 25 | - name: Build App 26 | run: go build driver.go -------------------------------------------------------------------------------- /driver.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "io/ioutil" 6 | "net/http" 7 | "os" 8 | 9 | "github.com/gorilla/mux" 10 | ) 11 | 12 | type Driver struct { 13 | Uuid string `json:"uuid"` 14 | Name string `json:"name"` 15 | } 16 | 17 | type Drivers struct { 18 | Drivers []Driver 19 | } 20 | 21 | func loadDrivers() []byte { 22 | 23 | jsonFile, err := os.Open("drivers.json") 24 | if err != nil { 25 | panic(err.Error()) 26 | } 27 | 28 | defer jsonFile.Close() 29 | 30 | data, err := ioutil.ReadAll(jsonFile) 31 | if err != nil { 32 | panic(err.Error()) 33 | } 34 | return data 35 | } 36 | 37 | func ListDrivers(w http.ResponseWriter, r *http.Request) { 38 | drivers := loadDrivers() 39 | w.Write([]byte(drivers)) 40 | } 41 | 42 | func GetDriverById(w http.ResponseWriter, r *http.Request) { 43 | vars := mux.Vars(r) 44 | data := loadDrivers() 45 | 46 | var drivers Drivers 47 | json.Unmarshal(data, &drivers) 48 | 49 | for _, v := range drivers.Drivers { 50 | if v.Uuid == vars["id"] { 51 | driver, _ := json.Marshal(v) 52 | w.Write([]byte(driver)) 53 | } 54 | } 55 | } 56 | 57 | func main() { 58 | r := mux.NewRouter() 59 | r.HandleFunc("/drivers", ListDrivers) 60 | r.HandleFunc("/drivers/{id}", GetDriverById) 61 | http.ListenAndServe(":8081", r) 62 | } 63 | -------------------------------------------------------------------------------- /cloudbuild.prod.yaml: -------------------------------------------------------------------------------- 1 | steps: 2 | - name: mirror.gcr.io/library/golang 3 | env: ['GO111MODULE=on'] 4 | args: ['go', 'build', './...'] 5 | 6 | - name: mirror.gcr.io/library/golang 7 | env: ['GO111MODULE=on'] 8 | args: ['go', 'test'] 9 | 10 | - name: mirror.gcr.io/library/golang 11 | env: ['GO111MODULE=on'] 12 | args: ['go', 'build','driver.go'] 13 | 14 | - name: 'gcr.io/cloud-builders/docker' 15 | args: ['build', '--tag=gcr.io/$PROJECT_ID/maratona-driver:$SHORT_SHA', '.'] 16 | 17 | - id: "Pushing Image" 18 | name: 'gcr.io/cloud-builders/docker' 19 | args: ['push','gcr.io/$PROJECT_ID/maratona-driver:$SHORT_SHA'] 20 | 21 | - id: Ajust deployment for kubectl 22 | name: 'gcr.io/cloud-builders/gcloud' 23 | entrypoint: '/bin/sh' 24 | args: 25 | - '-c' 26 | - | 27 | sed 's#img-deployment#gcr.io/$PROJECT_ID/maratona-driver:$SHORT_SHA#g' ./k8s/driver.yaml > k8s/driver-new.yaml; 28 | cat k8s/driver-new.yaml; 29 | 30 | - id: "Deploying to kubernetes" 31 | name: 'gcr.io/cloud-builders/kubectl' 32 | args: 33 | - 'apply' 34 | - '-f' 35 | - 'k8s/driver-new.yaml' 36 | env: 37 | - 'CLOUDSDK_COMPUTE_ZONE=us-central1-c' 38 | - 'CLOUDSDK_CONTAINER_CLUSTER=maratona-istio' 39 | 40 | images: ['gcr.io/$PROJECT_ID/maratona-driver'] -------------------------------------------------------------------------------- /k8s/driver.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: driver 5 | spec: 6 | selector: 7 | matchLabels: 8 | app: driver 9 | 10 | template: 11 | metadata: 12 | labels: 13 | app: driver 14 | spec: 15 | containers: 16 | - name: driver 17 | image: img-deployment 18 | ports: 19 | - containerPort: 8081 20 | 21 | --- 22 | 23 | apiVersion: v1 24 | kind: Service 25 | metadata: 26 | name: driver-service 27 | spec: 28 | ports: 29 | - port: 8081 30 | targetPort: 8081 31 | selector: 32 | app: driver 33 | 34 | --- 35 | 36 | apiVersion: networking.istio.io/v1alpha3 37 | kind: Gateway 38 | metadata: 39 | name: driver-gateway 40 | spec: 41 | selector: 42 | istio: ingressgateway # use Istio default gateway implementation 43 | servers: 44 | - port: 45 | number: 80 46 | name: http 47 | protocol: HTTP 48 | hosts: 49 | - "*" 50 | 51 | --- 52 | 53 | apiVersion: networking.istio.io/v1alpha3 54 | kind: VirtualService 55 | metadata: 56 | name: driver-vs 57 | spec: 58 | hosts: 59 | - "*" 60 | gateways: 61 | - driver-gateway 62 | http: 63 | - match: 64 | - uri: 65 | prefix: /drivers 66 | route: 67 | - destination: 68 | port: 69 | number: 8081 70 | host: driver-service --------------------------------------------------------------------------------