Compare commits
9 Commits
5f03b8ad6d
...
v0.1.0
Author | SHA1 | Date | |
---|---|---|---|
4e23b8de1c | |||
842cb5ad2c | |||
dd87a3a570 | |||
676f9b7755 | |||
b5b7ceb85a | |||
c8e461729f | |||
95aa1e47d1 | |||
070e94fb55 | |||
a2ca3622a6 |
133
.gitea/workflows/ci.yml
Normal file
133
.gitea/workflows/ci.yml
Normal file
@ -0,0 +1,133 @@
|
||||
name: Build and Publish
|
||||
on:
|
||||
push:
|
||||
tags: ["v*"]
|
||||
branches: ["main"]
|
||||
|
||||
env:
|
||||
PACKAGE_NAME: go-server-with-otel
|
||||
BINARY_PATH: bin
|
||||
BINARY_NAME: go-server-with-otel
|
||||
GO_MOD_PATH: gitea.libretechconsulting.com/rmcguire/go-server-with-otel
|
||||
GO_GIT_HOST: gitea.libretechconsulting.com
|
||||
VER_PKG: gitea.libretechconsulting.com/rmcguire/go-app/pkg/config.Version
|
||||
VERSION: ${{ github.ref_name }}
|
||||
PLATFORMS: linux/amd64 linux/arm64 darwin/amd64 darwin/arm64
|
||||
DOCKER_REGISTRY: gitea.libretechconsulting.com
|
||||
DOCKER_USER: rmcguire
|
||||
DOCKER_REPO: rmcguire/go-server-with-otel
|
||||
DOCKER_IMG: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_REPO }}
|
||||
CHART_DIR: helm/
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
if: startsWith(github.ref, 'refs/tags/v') # Only run on tag push
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go Environment
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.23'
|
||||
|
||||
- name: Build Binary
|
||||
run: make build
|
||||
|
||||
- name: Upload Binaries to Generic Registry
|
||||
env:
|
||||
API_TOKEN: ${{ secrets.API_TOKEN }}
|
||||
run: |
|
||||
for platform in $PLATFORMS; do
|
||||
OS=$(echo $platform | cut -d/ -f1)
|
||||
ARCH=$(echo $platform | cut -d/ -f2)
|
||||
BINARY_FILE="${BINARY_PATH}/${PACKAGE_NAME}-${OS}-${ARCH}"
|
||||
echo "Uploading $BINARY_FILE"
|
||||
if [ -f "$BINARY_FILE" ]; then
|
||||
curl -X PUT \
|
||||
-H "Authorization: token ${API_TOKEN}" \
|
||||
--upload-file "$BINARY_FILE" \
|
||||
"${GITHUB_SERVER_URL}/api/packages/${GITHUB_REPOSITORY_OWNER}/generic/${PACKAGE_NAME}/${{ github.ref_name }}/${PACKAGE_NAME}-${OS}-${ARCH}"
|
||||
else
|
||||
echo "Error: Binary $BINARY_FILE not found."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
- name: Run Go List
|
||||
continue-on-error: true
|
||||
env:
|
||||
TAG_NAME: ${{ github.ref_name }} # Use the pushed tag name
|
||||
run: |
|
||||
if [[ "$TAG_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
GOPROXY=proxy.golang.org go list -m ${GO_GIT_HOST}/${GITHUB_REPOSITORY}@$TAG_NAME
|
||||
else
|
||||
echo "Error: Invalid tag format '$TAG_NAME'. Expected 'vX.X.X'."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to Custom Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ env.DOCKER_REGISTRY }}
|
||||
username: ${{ env.DOCKER_USER }}
|
||||
password: ${{ secrets.API_TOKEN }}
|
||||
|
||||
- name: Build and Push Docker Image
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: |
|
||||
${{ env.DOCKER_IMG }}:${{ github.ref_name }}
|
||||
${{ env.DOCKER_IMG }}:latest
|
||||
build-args: |
|
||||
VER_PKG=${{ env.VER_PKG }}
|
||||
VERSION=${{ github.ref_name }}
|
||||
|
||||
# Detect if the helm chart was updated
|
||||
check-chart:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
chart-updated: ${{ steps.filter.outputs.chart }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Check Chart Changed
|
||||
uses: dorny/paths-filter@v3
|
||||
id: filter
|
||||
with:
|
||||
base: ${{ github.ref }}
|
||||
filters: |
|
||||
chart:
|
||||
- helm/Chart.yaml
|
||||
|
||||
helm-release:
|
||||
runs-on: ubuntu-latest
|
||||
needs: check-chart
|
||||
if: ${{ needs.check-chart.outputs.chart-updated == 'true' }}
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Helm
|
||||
env:
|
||||
BINARY_NAME: helm
|
||||
run: |
|
||||
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
|
||||
|
||||
- name: Package Chart
|
||||
run: |
|
||||
helm package --app-version ${VERSION} ${CHART_DIR}
|
||||
|
||||
- name: Publish Chart
|
||||
env:
|
||||
API_TOKEN: ${{ secrets.API_TOKEN }}
|
||||
run: |
|
||||
curl -X POST \
|
||||
-H "Authorization: token ${API_TOKEN}" \
|
||||
--upload-file ./${PACKAGE_NAME}-*.tgz \
|
||||
https://gitea.libretechconsulting.com/api/packages/${GITHUB_REPOSITORY_OWNER}/helm/api/charts
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -23,3 +23,5 @@ go.work
|
||||
|
||||
# Environment
|
||||
.env
|
||||
|
||||
bin/*
|
||||
|
39
Makefile
39
Makefile
@ -1,14 +1,13 @@
|
||||
CMD_NAME := demo-app # TODO: Update app name
|
||||
|
||||
.PHONY: all test build docker install clean proto check_protoc
|
||||
|
||||
VERSION ?= development # Default to "development" if VERSION is not set
|
||||
CMD_NAME := demo-app
|
||||
VERSION ?= development
|
||||
API_DIR := api/
|
||||
PROTO_DIRS := $(wildcard proto/demo/app/*) # TODO: Update path (probably not demo)
|
||||
PLATFORMS := linux/amd64 linux/arm64 darwin/amd64 darwin/arm64
|
||||
OUTPUT_DIR := bin
|
||||
VER_PKG := gitea.libretechconsulting.com/rmcguire/go-app/pkg/config.Version
|
||||
DOCKER_IMG := gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel
|
||||
GIT_REPO := gitea.libretechconsulting.com/rmcguire/go-server-with-otel
|
||||
|
||||
all: proto test build docker
|
||||
|
||||
@ -29,7 +28,9 @@ build: test
|
||||
OS=$$(echo $$platform | cut -d/ -f1); \
|
||||
ARCH=$$(echo $$platform | cut -d/ -f2); \
|
||||
OUTPUT="$(OUTPUT_DIR)/$(CMD_NAME)-$$OS-$$ARCH"; \
|
||||
GOOS=$$OS GOARCH=$$ARCH go build -ldflags "-X $(VER_PKG)=$(VERSION)" -o $$OUTPUT; \
|
||||
mkdir -vp $(OUTPUT_DIR); \
|
||||
echo "Building for $$platform into $$OUTPUT"; \
|
||||
GOOS=$$OS GOARCH=$$ARCH go build -ldflags "-X $(VER_PKG)=$(VERSION)" -o $$OUTPUT .; \
|
||||
echo "Built $$OUTPUT"; \
|
||||
done
|
||||
go build -ldflags "-X $(VER_PKG)=$(VERSION)" -o bin/${CMD_NAME}
|
||||
@ -38,12 +39,12 @@ schema:
|
||||
go run . -schema > contrib/schema.json
|
||||
|
||||
docker:
|
||||
@echo "Building Docker image $(DOCKER_IMG):$(VERSION)"
|
||||
@echo "Building Docker image $(GIT_REPO):$(VERSION)"
|
||||
docker build \
|
||||
--build-arg VER_PKG=$(VER_PKG) \
|
||||
--build-arg VERSION=$(VERSION) \
|
||||
-t $(DOCKER_IMG):$(VERSION) .
|
||||
docker push $(DOCKER_IMG):$(VERSION)
|
||||
-t $(GIT_REPO):$(VERSION) .
|
||||
docker push $(GIT_REPO):$(VERSION)
|
||||
|
||||
install:
|
||||
go install -v -ldflags "-X $(VER_PKG)=$(VERSION)" .
|
||||
@ -60,3 +61,25 @@ check_protoc:
|
||||
echo "Error: protoc-gen-go-grpc not found in PATH"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
rename:
|
||||
@echo "Current module path: $(GIT_REPO)"
|
||||
@echo "Usage: make rename NAME=your/new/module/name"
|
||||
@if [ -z "$(NAME)" ]; then \
|
||||
echo "No name provided. Aborting."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@echo "New name: $(NAME)"
|
||||
@echo "Are you sure you want to proceed? (y/N): " && read CONFIRM && if [ "$$CONFIRM" != "y" ] && [ "$$CONFIRM" != "Y" ]; then \
|
||||
echo "Aborted."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@find . -type f -a \
|
||||
\( -name '*.go' -o -name 'go.mod' \
|
||||
-o -name 'go.sum' -o -name '*.proto' \
|
||||
-o -name 'Makefile' \
|
||||
-o -name '*.yml' -o -name '*.yaml' \
|
||||
\) \
|
||||
-not -path './.git' -not -path './.git/*' \
|
||||
-exec sed -i "s|$(GIT_REPO)|$(NAME)|g" {} +
|
||||
@echo "Project renamed to $(NAME)"
|
||||
|
67
README.md
67
README.md
@ -1,3 +1,66 @@
|
||||
# go-http-server-with-otel
|
||||
# go-server-with-otel 🚀
|
||||
|
||||
Template for a go http server with OTEL support
|
||||
A powerful and flexible template for building Go HTTP + GRPC servers with full OpenTelemetry (OTEL) support.
|
||||
Bootstrapped with the go-app framework to provide all the bells and whistles right out of the box.
|
||||
Ideal for rapidly creating production-ready microservices.
|
||||
|
||||
Check out the [go-app framework](https://gitea.libretechconsulting.com/rmcguire/go-app) for more detail there.
|
||||
|
||||
## 🌟 Features
|
||||
|
||||
- **📈 OpenTelemetry (OTEL) Metrics & Traces** – Comprehensive observability with built-in support for metrics and traces.
|
||||
- 📝 Logging with Zerolog – High-performance structured logging with zerolog for ultra-fast, leveled logging.
|
||||
- **💬 GRPC + GRPC-Gateway** – Supports RESTful JSON APIs alongside gRPC with auto-generated Swagger (OpenAPI2) specs.
|
||||
- 🌐 HTTP and GRPC Middleware – Flexible middleware support for HTTP and GRPC to enhance request handling, authentication, and observability.
|
||||
- **📦 Multi-Arch Builds** – Robust Makefile that supports building for multiple architectures (amd64, arm64, etc.).
|
||||
- **🐳 Docker Image Generation** – Easily build Docker images using `make docker`.
|
||||
- **📜 Config Schema Generation** – Automatically generate JSON schemas for configuration validation.
|
||||
- **📝 Proto Compilation** – Seamlessly compile .proto files with `make proto`.
|
||||
- **🔄 Project Renaming** – Easily rename your project using `make rename NAME=your.gitremote.com/pathto/repo`.
|
||||
- **📦 Helm Chart** – Deploy your application with Kubernetes using the provided Helm chart.
|
||||
- **🤖 Gitea CI Integration** – Out-of-the-box Gitea CI pipeline configuration with `.gitea/workflows/ci.yaml`.
|
||||
- **⚙️ Expandable Configuration** – Extend your app-specific configuration with go-app's built-in logging, HTTP, and GRPC config support.
|
||||
|
||||
---
|
||||
|
||||
## 📚 Getting Started
|
||||
|
||||
1. **Rename your package:**
|
||||
```sh
|
||||
make rename NAME=my.gitremote.com/pathto/repo
|
||||
```
|
||||
|
||||
2. **Review the config struct:**
|
||||
Update and customize your app-specific configuration. This merges with go-app's configuration, providing logging, HTTP, and GRPC config for free.
|
||||
|
||||
3. **Generate a new JSON schema:**
|
||||
```sh
|
||||
make schema
|
||||
```
|
||||
- Ensure your structs have `yaml` and `json` tags.
|
||||
- With the `yaml-language-server` LSP plugin, the schema will be auto-detected in your `config.yaml`.
|
||||
|
||||
4. **Compile proto files:**
|
||||
```sh
|
||||
make proto
|
||||
```
|
||||
- Add paths under `proto/` as necessary.
|
||||
|
||||
5. **Implement your application logic.**
|
||||
|
||||
6. **Update Gitea CI configuration:**
|
||||
Modify parameters in `.gitea/workflows/ci.yaml` as needed.
|
||||
|
||||
---
|
||||
|
||||
## 📂 Project Structure
|
||||
- `proto/` - Protobuf definitions and generated files.
|
||||
- `api/` - Auto-generated code for proto, grpc-gateway, and OpenAPI2 spec
|
||||
- `pkg/config/` - Custom config, merged with go-app configuration
|
||||
- `pkg/demo(http|grpc)/` - HTTP and GRPC server implementations
|
||||
- `helm/` - Helm chart for deploying your application to Kubernetes.
|
||||
- `.gitea/workflows/` - CI pipelines for automated builds and tests.
|
||||
|
||||
---
|
||||
|
||||
## 🔥 Ready to build something awesome? Let's go! 🎉
|
||||
|
8
TODO.md
8
TODO.md
@ -1,6 +1,6 @@
|
||||
# Demo app TODO
|
||||
|
||||
- [ ] Rename project
|
||||
- [ ] Finish grpc sample implementation
|
||||
- [ ] Add Dockerfile
|
||||
- [ ] Add gitea CI
|
||||
- [x] Rename project
|
||||
- [x] Finish grpc sample implementation
|
||||
- [x] Add Dockerfile
|
||||
- [x] Add gitea CI
|
||||
|
@ -153,7 +153,7 @@ const file_demo_app_v1alpha1_app_proto_rawDesc = "" +
|
||||
"\x06source\x18\x03 \x01(\tR\x06source\x12\x1a\n" +
|
||||
"\blanguage\x18\x04 \x01(\tR\blanguage2z\n" +
|
||||
"\x0eDemoAppService\x12h\n" +
|
||||
"\aGetDemo\x12!.demo.app.v1alpha1.GetDemoRequest\x1a\".demo.app.v1alpha1.GetDemoResponse\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/v1alpha1/demoBSZQgitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/api/v1alpha1/demob\x06proto3"
|
||||
"\aGetDemo\x12!.demo.app.v1alpha1.GetDemoRequest\x1a\".demo.app.v1alpha1.GetDemoResponse\"\x16\x82\xd3\xe4\x93\x02\x10\x12\x0e/v1alpha1/demoBNZLgitea.libretechconsulting.com/rmcguire/go-server-with-otel/api/v1alpha1/demob\x06proto3"
|
||||
|
||||
var (
|
||||
file_demo_app_v1alpha1_app_proto_rawDescOnce sync.Once
|
||||
|
@ -14,7 +14,7 @@ logging:
|
||||
enabled: true
|
||||
otel:
|
||||
enabled: true
|
||||
stdoutEnabled: true
|
||||
stdoutEnabled: false
|
||||
http:
|
||||
enabled: true
|
||||
listen: :8080
|
||||
|
@ -1,5 +1,5 @@
|
||||
# App Config
|
||||
APP_NAME="go-http-server-with-otel"
|
||||
APP_NAME="go-server-with-otel"
|
||||
APP_LOG_LEVEL=trace ## For testing only
|
||||
APP_LOG_FORMAT=console ## console, json
|
||||
APP_LOG_TIME_FORMAT=long ## long, short, unix, rfc3339, off
|
||||
@ -10,5 +10,5 @@ APP_OTEL_METRIC_INTERVAL_SECS=15
|
||||
|
||||
# OTEL SDK Config
|
||||
OTEL_EXPORTER_OTLP_ENDPOINT="otel-collector.otel.svc.cluster.local" # Set to your otel collector
|
||||
OTEL_SERVICE_NAME="go-http-server-with-otel"
|
||||
OTEL_SERVICE_NAME="go-server-with-otel"
|
||||
OTEL_RESOURCE_ATTRIBUTES="env=development,service.version=(devel)"
|
||||
|
7
go.mod
7
go.mod
@ -1,4 +1,4 @@
|
||||
module gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel
|
||||
module gitea.libretechconsulting.com/rmcguire/go-server-with-otel
|
||||
|
||||
go 1.24.1
|
||||
|
||||
@ -7,11 +7,11 @@ require (
|
||||
github.com/go-resty/resty/v2 v2.16.5
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3
|
||||
github.com/rs/zerolog v1.34.0
|
||||
go.opentelemetry.io/otel/trace v1.35.0
|
||||
golang.org/x/sys v0.31.0
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463
|
||||
google.golang.org/grpc v1.71.0
|
||||
google.golang.org/protobuf v1.36.6
|
||||
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e
|
||||
)
|
||||
|
||||
require (
|
||||
@ -23,7 +23,7 @@ require (
|
||||
github.com/swaggest/refl v1.3.1 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
|
||||
go.opentelemetry.io/otel v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel v1.35.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/prometheus v0.57.0 // indirect
|
||||
@ -51,7 +51,6 @@ require (
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.35.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
|
||||
golang.org/x/net v0.38.0 // indirect
|
||||
golang.org/x/text v0.23.0 // indirect
|
||||
|
6
go.sum
6
go.sum
@ -1,5 +1,3 @@
|
||||
gitea.libretechconsulting.com/rmcguire/go-app v0.9.1 h1:QihWX1YeCqttpAjXq6nHWvNk1MpIhuW8bSO3G+fbsRg=
|
||||
gitea.libretechconsulting.com/rmcguire/go-app v0.9.1/go.mod h1:W6YHFSGf4nJrgs9DqEaw+3J6ufIARsr1zpOs/V6gRTQ=
|
||||
gitea.libretechconsulting.com/rmcguire/go-app v0.9.2 h1:DTbGae0TR7O+kKI1ZE8txgFnGb0vsYX/urFUFuoZfQM=
|
||||
gitea.libretechconsulting.com/rmcguire/go-app v0.9.2/go.mod h1:W6YHFSGf4nJrgs9DqEaw+3J6ufIARsr1zpOs/V6gRTQ=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
@ -128,6 +126,8 @@ golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
|
||||
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
|
||||
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
|
||||
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
||||
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
|
||||
@ -141,5 +141,3 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
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/utils v0.0.0-20250321185631-1f6e0b77f77e h1:KqK5c/ghOm8xkHYhlodbp6i6+r+ChV2vuAuVRdFbLro=
|
||||
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
|
2
helm/.gitignore
vendored
Normal file
2
helm/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
charts/
|
||||
Chart.lock
|
30
helm/Chart.yaml
Normal file
30
helm/Chart.yaml
Normal file
@ -0,0 +1,30 @@
|
||||
apiVersion: v2
|
||||
name: go-server-with-otel
|
||||
description: Golang HTTP and GRPC server with OTEL
|
||||
|
||||
# A chart can be either an 'application' or a 'library' chart.
|
||||
#
|
||||
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||
# to be deployed.
|
||||
#
|
||||
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 0.1.0
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||
# It is recommended to use it with quotes.
|
||||
appVersion: "v0.1.0"
|
||||
|
||||
dependencies:
|
||||
- name: hull
|
||||
repository: https://vidispine.github.io/hull
|
||||
version: 1.32.2
|
||||
|
643
helm/library-hull.yaml
Normal file
643
helm/library-hull.yaml
Normal file
@ -0,0 +1,643 @@
|
||||
################################
|
||||
### values.yaml for HULL
|
||||
### The basic pre-configuration takes place here.
|
||||
###
|
||||
### Do not change this file, use additional values.hull.yaml
|
||||
### to overwrite the selected fields!
|
||||
################################
|
||||
|
||||
###################################################
|
||||
### CONFIG
|
||||
config:
|
||||
general:
|
||||
rbac: true
|
||||
fullnameOverride: ""
|
||||
nameOverride: ""
|
||||
namespaceOverride: ""
|
||||
noObjectNamePrefixes: false
|
||||
createImagePullSecretsFromRegistries: true
|
||||
globalImageRegistryServer: ""
|
||||
globalImageRegistryToFirstRegistrySecretServer: false
|
||||
serialization:
|
||||
configmap:
|
||||
enabled: true
|
||||
fileExtensions:
|
||||
json: toPrettyJson
|
||||
yml: toYaml
|
||||
yaml: toYaml
|
||||
secret:
|
||||
enabled: true
|
||||
fileExtensions:
|
||||
json: toPrettyJson
|
||||
yml: toYaml
|
||||
yaml: toYaml
|
||||
render:
|
||||
passes: 3
|
||||
emptyLabels: false
|
||||
emptyAnnotations: false
|
||||
emptyTemplateLabels: false
|
||||
emptyTemplateAnnotations: false
|
||||
emptyHullObjects: false
|
||||
postRender:
|
||||
globalStringReplacements:
|
||||
instanceKey:
|
||||
enabled: false
|
||||
string: _HULL_OBJECT_TYPE_DEFAULT_
|
||||
replacement: OBJECT_INSTANCE_KEY
|
||||
instanceKeyResolved:
|
||||
enabled: false
|
||||
string: _HULL_OBJECT_TYPE_DEFAULT_
|
||||
replacement: OBJECT_INSTANCE_KEY_RESOLVED
|
||||
instanceName:
|
||||
enabled: false
|
||||
string: _HULL_OBJECT_TYPE_DEFAULT_
|
||||
replacement: OBJECT_INSTANCE_NAME
|
||||
errorChecks:
|
||||
objectYamlValid: true
|
||||
hullGetTransformationReferenceValid: true
|
||||
containerImageValid: true
|
||||
virtualFolderDataPathExists: true
|
||||
virtualFolderDataInlineValid: false
|
||||
debug:
|
||||
renderBrokenHullGetTransformationReferences: false
|
||||
renderNilWhenInlineIsNil: false
|
||||
renderPathMissingWhenPathIsNonExistent: false
|
||||
metadata:
|
||||
labels:
|
||||
common:
|
||||
'app.kubernetes.io/managed-by':
|
||||
'app.kubernetes.io/version':
|
||||
'app.kubernetes.io/part-of':
|
||||
'app.kubernetes.io/name':
|
||||
'app.kubernetes.io/instance':
|
||||
'app.kubernetes.io/component':
|
||||
'helm.sh/chart':
|
||||
'vidispine.hull/version':
|
||||
custom: {}
|
||||
annotations:
|
||||
hashes: false
|
||||
custom: {}
|
||||
data: {}
|
||||
specific: {}
|
||||
templates:
|
||||
pod:
|
||||
global: {}
|
||||
container:
|
||||
global: {}
|
||||
###################################################
|
||||
|
||||
###################################################
|
||||
### OBJECTS
|
||||
objects:
|
||||
|
||||
# NAMESPACE
|
||||
namespace:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
staticName: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# CONFIGMAPS
|
||||
configmap:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# SECRETS
|
||||
secret:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# REGISTRIES
|
||||
registry:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# SERVICEACCOUNTS
|
||||
serviceaccount:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
default:
|
||||
enabled: _HT?eq (dig "serviceAccountName" "" _HT*hull.config.templates.pod.global) ""
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# ROLES
|
||||
role:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
rules:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
default:
|
||||
enabled: _HT?eq (dig "serviceAccountName" "" _HT*hull.config.templates.pod.global) ""
|
||||
rules: {}
|
||||
###################################################
|
||||
|
||||
# ROLEBINDINGS
|
||||
rolebinding:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
default:
|
||||
enabled: _HT?eq (dig "serviceAccountName" "" _HT*hull.config.templates.pod.global) ""
|
||||
roleRef:
|
||||
apiGroup: "rbac.authorization.k8s.io"
|
||||
kind: "Role"
|
||||
name: _HT^default
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: _HT^default
|
||||
namespace: _HT**Release.Namespace
|
||||
###################################################
|
||||
|
||||
# CLUSTERROLES
|
||||
clusterrole:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
rules:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
###################################################
|
||||
|
||||
# CLUSTERROLEBINDINGS
|
||||
clusterrolebinding:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# CUSTOMRESOURCEDEFINITIONS (deprecated with Helm3)
|
||||
# customresourcedefinitions:
|
||||
# _HULL_OBJECT_TYPE_DEFAULT_:
|
||||
# enabled: true
|
||||
# annotations: {}
|
||||
# labels: {}
|
||||
###################################################
|
||||
|
||||
# CUSTOMRESOURCES
|
||||
customresource:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# PERSISTENTVOLUMECLAIMS
|
||||
persistentvolumeclaim:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# PERSISTENTVOLUMES
|
||||
persistentvolume:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# STORAGECLASSES
|
||||
storageclass:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# SERVICES
|
||||
service:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
ports:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
|
||||
###################################################
|
||||
|
||||
# INGRESSES
|
||||
ingress:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
tls:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
rules:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
http:
|
||||
paths:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
|
||||
###################################################
|
||||
|
||||
# INGRESSCLASSES
|
||||
ingressclass:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
|
||||
###################################################
|
||||
|
||||
# DEPLOYMENTS
|
||||
deployment:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
templateAnnotations: {}
|
||||
templateLabels: {}
|
||||
pod:
|
||||
initContainers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
containers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumes:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
###################################################
|
||||
|
||||
# JOBS
|
||||
job:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
templateAnnotations: {}
|
||||
templateLabels: {}
|
||||
pod:
|
||||
initContainers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
containers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumes:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
###################################################
|
||||
|
||||
# CRONJOBS
|
||||
cronjob:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
job:
|
||||
templateAnnotations: {}
|
||||
templateLabels: {}
|
||||
pod:
|
||||
initContainers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
containers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumes:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
###################################################
|
||||
|
||||
# DAEMONSETS
|
||||
daemonset:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
templateAnnotations: {}
|
||||
templateLabels: {}
|
||||
pod:
|
||||
initContainers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
containers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumes:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
###################################################
|
||||
|
||||
# STATEFULSETS
|
||||
statefulset:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
templateAnnotations: {}
|
||||
templateLabels: {}
|
||||
pod:
|
||||
initContainers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
containers:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
env:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
envFrom:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumeMounts:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
volumes:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
###################################################
|
||||
|
||||
# SERVICEMONITORS
|
||||
servicemonitor:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# HORIZONTALPODAUTOSCALER
|
||||
horizontalpodautoscaler:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# PODDISRUPTIONBUDGET
|
||||
poddisruptionbudget:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# PRIORITYCLASS
|
||||
priorityclass:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# ENDPOINTS
|
||||
endpoints:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# ENDPOINTSLICE
|
||||
endpointslice:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# LIMITRANGE
|
||||
limitrange:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
###################################################
|
||||
|
||||
# MUTATINGWEBHOOKCONFIGURATION
|
||||
mutatingwebhookconfiguration:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
webhooks:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
###################################################
|
||||
|
||||
# VALIDATINGWEBHOOKCONFIGURATION
|
||||
validatingwebhookconfiguration:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
webhooks:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
###################################################
|
||||
|
||||
# RESOURCEQUOTA
|
||||
resourcequota:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
##################################################
|
||||
|
||||
# NETWORKPOLICY
|
||||
networkpolicy:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - BACKENDLBPOLICY
|
||||
backendlbpolicy:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
targetRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - BACKENDTLSPOLICY
|
||||
backendtlspolicy:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
targetRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - GATEWAYCLASS
|
||||
gatewayclass:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - GATEWAY
|
||||
gateway:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
addresses:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
listeners:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
tls:
|
||||
certificateRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
frontendValidation:
|
||||
caCertificateRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
allowedRoutes:
|
||||
kinds:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - GRPCROUTE
|
||||
grpcroute:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
parentRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
rules:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
matches:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
filters:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
backendRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
filters:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - REFERENCEGRANT
|
||||
referencegrant:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
from:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
to:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - TCPROUTE
|
||||
tcproute:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
parentRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
rules:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
backendRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - TLSROUTE
|
||||
tlsroute:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
parentRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
rules:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
backendRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - UDPROUTE
|
||||
udproute:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
parentRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
rules:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
backendRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
##################################################
|
||||
|
||||
# GATEWAY API - HTTPROUTE
|
||||
httproute:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
enabled: true
|
||||
annotations: {}
|
||||
labels: {}
|
||||
parentRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
rules:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
matches:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
filters:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
backendRefs:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_:
|
||||
filters:
|
||||
_HULL_OBJECT_TYPE_DEFAULT_: {}
|
||||
##################################################
|
1
helm/templates/app.yaml
Normal file
1
helm/templates/app.yaml
Normal file
@ -0,0 +1 @@
|
||||
{{- include "hull.objects.prepare.all" (dict "HULL_ROOT_KEY" "hull" "ROOT_CONTEXT" $) }}
|
195
helm/values.yaml
Normal file
195
helm/values.yaml
Normal file
@ -0,0 +1,195 @@
|
||||
# yaml-language-server: $schema=https://raw.githubusercontent.com/vidispine/hull/refs/heads/main/hull/values.schema.json
|
||||
hull:
|
||||
config:
|
||||
## go-server-with-otel custom settings (config.yaml)
|
||||
appConfig:
|
||||
# Custom app config
|
||||
timezone: EST5EDT
|
||||
opts:
|
||||
factLang: en
|
||||
factType: random
|
||||
# go-app config
|
||||
name: Demo go-app
|
||||
logging:
|
||||
format: json
|
||||
level: debug
|
||||
enabled: true
|
||||
otel:
|
||||
enabled: true
|
||||
stdoutEnabled: false
|
||||
http:
|
||||
enabled: true
|
||||
listen: :8080
|
||||
logRequests: true
|
||||
grpc:
|
||||
enabled: true
|
||||
enableReflection: true
|
||||
listen: :8081
|
||||
grpcGatewayPath: /api
|
||||
enableGRPCGateway: true
|
||||
enableInstrumentation: true
|
||||
logRequests: true
|
||||
## Chart settings
|
||||
settings:
|
||||
resources: {} # Applies to the app container
|
||||
repo: gitea.libretechconsulting.com/rmcguire/go-server-with-otel
|
||||
tag: _HT**Chart.AppVersion
|
||||
|
||||
httpPort: 8080 # Should match appConfig http.listen
|
||||
grpcPort: 8081 # Should match appConfig grpc.listen
|
||||
|
||||
# Use this as a shortcut, or create your own hull.objects.httproute
|
||||
httproute:
|
||||
enabled: false
|
||||
hostnames:
|
||||
- app.mydomain.com
|
||||
gatewayName: istio-ingressgateway
|
||||
gatewayNamespace: istio-system
|
||||
|
||||
# Use this as a shortcut, or create your own hull.objects.grpcroute
|
||||
grpcroute:
|
||||
enabled: false
|
||||
hostnames:
|
||||
- app.mydomain.com
|
||||
gatewayName: istio-ingressgateway
|
||||
gatewayNamespace: istio-system
|
||||
|
||||
otelServiceName: go-server-with-otel
|
||||
otelResourceAttributes: app=go-server-with-otel
|
||||
otlpEndpoint: http://otel.otel.svc.cluster.local:4317 # Replace me
|
||||
|
||||
serviceType: ClusterIP
|
||||
serviceLbIP: "" # Used if serviceTyps=LoadBalancer
|
||||
|
||||
general:
|
||||
rbac: false
|
||||
render:
|
||||
passes: 2
|
||||
# Applies to all objects
|
||||
metadata:
|
||||
labels:
|
||||
custom:
|
||||
app: _HT**Release.Name
|
||||
version: _HT**Chart.AppVersion
|
||||
|
||||
objects:
|
||||
configmap:
|
||||
config:
|
||||
data:
|
||||
config.yaml:
|
||||
serialization: toYaml
|
||||
inline: _HT*hull.config.appConfig
|
||||
environment:
|
||||
data:
|
||||
OTEL_EXPORTER_OTLP_ENDPOINT:
|
||||
serialization: none
|
||||
inline: _HT*hull.config.settings.otlpEndpoint
|
||||
OTEL_SERVICE_NAME:
|
||||
serialization: none
|
||||
inline: _HT*hull.config.settings.otelServiceName
|
||||
OTEL_RESOURCE_ATTRIBUTES:
|
||||
serialization: none
|
||||
inline: _HT!
|
||||
{{ printf "deployment.name=%s,%s" _HT**Release.Name _HT*hull.config.settings.otelResourceAttributes }}
|
||||
serviceaccount:
|
||||
default:
|
||||
enabled: false
|
||||
role:
|
||||
default:
|
||||
enabled: false
|
||||
rolebinding:
|
||||
default:
|
||||
enabled: false
|
||||
|
||||
deployment:
|
||||
main:
|
||||
pod:
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: _HT*hull.config.settings.repo
|
||||
tag: _HT*hull.config.settings.tag
|
||||
imagePullPolicy: Always
|
||||
args:
|
||||
- -config
|
||||
- /app/config.yaml
|
||||
ports:
|
||||
http:
|
||||
containerPort: _HT*hull.config.settings.httpPort
|
||||
grpc:
|
||||
containerPort: _HT*hull.config.settings.grpcPort
|
||||
envFrom:
|
||||
main:
|
||||
configMapRef:
|
||||
name: environment
|
||||
resources: _HT*hull.config.settings.resources
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
periodSeconds: 10
|
||||
failureThreshold: 2
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
periodSeconds: 10
|
||||
failureThreshold: 2
|
||||
volumeMounts:
|
||||
config:
|
||||
name: config
|
||||
mountPath: /app/config.yaml
|
||||
subPath: config.yaml
|
||||
volumes:
|
||||
environment:
|
||||
configMap:
|
||||
name: environment
|
||||
config:
|
||||
configMap:
|
||||
name: config
|
||||
|
||||
service:
|
||||
main:
|
||||
type: _HT*hull.config.settings.serviceType
|
||||
loadBalancerIP: _HT*hull.config.settings.serviceLbIP
|
||||
ports:
|
||||
http:
|
||||
port: _HT*hull.config.settings.httpPort
|
||||
targetPort: http
|
||||
grpc:
|
||||
port: _HT*hull.config.settings.grpcPort
|
||||
targetPort: grpc
|
||||
|
||||
httproute:
|
||||
main:
|
||||
enabled: _HT*hull.config.settings.httproute.enabled
|
||||
hostnames: _HT*hull.config.settings.httproute.hostnames
|
||||
parentRefs:
|
||||
- group: gateway.networking.k8s.io
|
||||
kind: Gateway
|
||||
name: _HT*hull.config.settings.httproute.gatewayName
|
||||
namespace: _HT*hull.config.settings.httproute.gatewayNamespace
|
||||
rules:
|
||||
- backendRefs:
|
||||
- group: ""
|
||||
kind: Service
|
||||
name: _HT^main
|
||||
port: _HT*hull.config.settings.httpPort
|
||||
|
||||
grpcroute:
|
||||
main:
|
||||
enabled: _HT*hull.config.settings.grpcroute.enabled
|
||||
hostnames: _HT*hull.config.settings.grpcroute.hostnames
|
||||
parentRefs:
|
||||
- group: gateway.networking.k8s.io
|
||||
kind: Gateway
|
||||
name: _HT*hull.config.settings.grpcroute.gatewayName
|
||||
namespace: _HT*hull.config.settings.grpcroute.gatewayNamespace
|
||||
rules:
|
||||
- backendRefs:
|
||||
- group: ""
|
||||
kind: Service
|
||||
name: _HT^main
|
||||
port: _HT*hull.config.settings.grpcPort
|
10
main.go
10
main.go
@ -20,12 +20,12 @@ import (
|
||||
"golang.org/x/sys/unix"
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/app"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/grpc/opts"
|
||||
optsgrpc "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/grpc/opts"
|
||||
optshttp "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/http/opts"
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/pkg/config"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/pkg/demogrpc"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/pkg/demohttp"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-server-with-otel/pkg/config"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-server-with-otel/pkg/demogrpc"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-server-with-otel/pkg/demohttp"
|
||||
)
|
||||
|
||||
var flagSchema bool
|
||||
@ -54,7 +54,7 @@ func main() {
|
||||
// Prepare app
|
||||
app := &app.App{
|
||||
AppContext: ctx,
|
||||
GRPC: &opts.AppGRPC{
|
||||
GRPC: &optsgrpc.AppGRPC{
|
||||
Services: demoGRPC.GetServices(),
|
||||
GRPCDialOpts: demoGRPC.GetDialOpts(),
|
||||
},
|
||||
|
@ -15,8 +15,8 @@ import (
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel"
|
||||
|
||||
pb "gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/api/demo/app/v1alpha1"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/pkg/config"
|
||||
pb "gitea.libretechconsulting.com/rmcguire/go-server-with-otel/api/demo/app/v1alpha1"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-server-with-otel/pkg/config"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -3,7 +3,7 @@ package demogrpc
|
||||
import (
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
|
||||
pb "gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/api/demo/app/v1alpha1"
|
||||
pb "gitea.libretechconsulting.com/rmcguire/go-server-with-otel/api/demo/app/v1alpha1"
|
||||
)
|
||||
|
||||
type RandomFact struct {
|
||||
|
@ -5,7 +5,7 @@ import (
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/credentials/insecure"
|
||||
|
||||
demoAppPb "gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/api/demo/app/v1alpha1"
|
||||
demoAppPb "gitea.libretechconsulting.com/rmcguire/go-server-with-otel/api/demo/app/v1alpha1"
|
||||
)
|
||||
|
||||
func (ds *DemoGRPCServer) GetDialOpts() []grpc.DialOption {
|
||||
|
@ -6,7 +6,7 @@ import (
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/http/opts"
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/pkg/config"
|
||||
"gitea.libretechconsulting.com/rmcguire/go-server-with-otel/pkg/config"
|
||||
)
|
||||
|
||||
type DemoHTTPServer struct {
|
||||
|
@ -4,7 +4,7 @@ package demo.app.v1alpha1;
|
||||
import "google/api/annotations.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
||||
option go_package = "gitea.libretechconsulting.com/rmcguire/go-http-server-with-otel/api/v1alpha1/demo";
|
||||
option go_package = "gitea.libretechconsulting.com/rmcguire/go-server-with-otel/api/v1alpha1/demo";
|
||||
|
||||
// Options for random fact, in this case
|
||||
// just a language
|
||||
|
Reference in New Issue
Block a user