diff --git a/README.md b/README.md index 739a284..dbec768 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # OS2IoT-docker -This repository contains the docker-compose file and configuration needed to run the OS2IoT project. +This repository contains the Docker Compose file and configuration needed to run the OS2IoT project. Documentation is available at: https://os2iot.readthedocs.io/en/latest/ @@ -18,9 +18,77 @@ OS2IoT From the `OS2IoT-docker` folder in a suitable terminal use: ``` -docker-compose up +docker compose up --detach ``` +### Quick Start with Task Runner (Recommended) + +This project includes a [Taskfile](https://taskfile.dev/) to simplify common operations. Install go-task first: + +```bash +# macOS +brew install go-task + +# Linux (snap) +sudo snap install task --classic + +# Other methods: https://taskfile.dev/installation/ +``` + +**Full setup from scratch:** + +```bash +# 1. Clone repos, fix line endings, and generate certificates +task setup + +# 2. Build and start all services +docker compose up --build --detach + +# 3. Wait for services to be healthy (check with: docker compose ps) +# The backend may take a minute to initialize the database + +# 4. Create default organization (required for frontend to work) +task setup:org + +# 5. Open the frontend in browser +task open +``` + +**Default login credentials:** +- Email: `global-admin@os2iot.dk` +- Password: `hunter2` + +**Available tasks:** + +```bash +task setup # Clone sibling repos, fix line endings, generate certs +task setup:check # Verify setup status +task setup:org # Create default organization (requires services running) +task setup:chirpstack # Configure ChirpStack API key (for LoRaWAN integration) +task status # Show status of all containers +task build # Build all Docker images +task clean # Remove containers, volumes, and images +task open # Open frontend in browser +``` + +### ChirpStack Integration (Optional) + +If you're using LoRaWAN features, you need to configure the ChirpStack API key: + +```bash +# Run the setup task - it will guide you through the process +task setup:chirpstack +``` + +Or manually: +1. Open ChirpStack UI: `task open:chirpstack` +2. Login with `admin` / `admin` +3. Go to **API Keys** → Create a new API key +4. Add to `.env` file: `CHIRPSTACK_API_KEY=your-key-here` +5. Restart backend: `docker compose up -d os2iot-backend` + +Without this configuration, you'll see `InvalidToken` errors in the backend logs - these can be ignored if you're not using LoRaWAN features. + ## Configuration Edit the files in the configuration folder to adjust settings for each requirement. @@ -28,7 +96,7 @@ Edit the files in the configuration folder to adjust settings for each requireme ## Contents - Postgres from the official image. -- Chirpstack using their docker-compose +- Chirpstack using their Docker Compose ## Troubleshooting FAQ @@ -43,7 +111,7 @@ ERROR: Encountered errors while bringing up the project. ``` Cause: -Docker doesn't have acceess to mount the volumes. +Docker doesn't have access to mount the volumes. Solution: On Windows: Go to Docker Desktop (tray icon) -> Settings -> Resources -> File Sharing -> Add the directory which is the parent directory of "OS2IoT-docker" or a parent of that. -> Apply & Restart @@ -61,24 +129,24 @@ Cause: Database has not been setup correctly on local machine. Solution: -docker-compose down --volumes -dos2unix configuration/os2iot-postgresql/initdb/\* <-- Skal køres fra git bash -docker-compose up +docker compose down --volumes +dos2unix configuration/os2iot-postgresql/initdb/* # Run from git bash on Windows +docker compose up ### error: Error: connect ETIMEDOUT xxx.xxx.xxx.xxx:xxxx at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) Cause: -Docker is trying to connect to the wrong ip. +Docker is trying to connect to the wrong IP. Solution: 1. Navigate to hosts file: C:\Windows\System32\drivers\etc 2. Open hosts file as administrator -3. Change related ip of host.docker.internal and gateway.docker.internal to your new ip (found in terminal using the ipconfig command: e.g. 192.168.0.1) -4. save -5. restart the application. +3. Change related IP of host.docker.internal and gateway.docker.internal to your new IP (found in terminal using the ipconfig command: e.g. 192.168.0.1) +4. Save +5. Restart the application. ## Adding an ADR Algorithm -When the ADR Algorithm has been tested, and is ready for deployment, the ADR Algorithm has to be added to chirpstack. It is mandatory that the custom adr module is writtin in js. +When the ADR Algorithm has been tested, and is ready for deployment, the ADR Algorithm has to be added to chirpstack. It is mandatory that the custom ADR module is written in JavaScript. ## Adding the Plugin to Chirpstack @@ -98,18 +166,4 @@ You should now be able to restart the chirpstack server and the new adr algorith ### Helm -When hosting via helm the steps are slightly different. - -1. Make sure that the persistent volume claim belonging to the chirpstack exists in your hosted setup. -2. Find the actual name of the network-server pod. This can be done in a few ways. If you're have a connection via a GUI like `Lens` it can be found under the `Pods` list. If you're hosting on an Azure Kubernetes service, it can be found under the side menu `Workloads -> Pods` -3. Use `kubectl` to copy the module into the pod - ```bash - kubectl cp ./path/to/module/adr-module chirpstack-xxxxxxxxx-xxxxx:/etc/chirpstack/adr-modules - ``` -4. Update `configmap.yaml` located under `/helm/charts/chirpstack/templates` with the path to the plugin under `[network]`, like this: - ```toml - [network] - adr_plugins=["/etc/chirpstack/adr-modules/example-file.js"] - ``` - The first line already exists -5. Once the helm chart has redeployed restart the network server to enable the new module. \ No newline at end of file +See for an example Helm setup. diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..8cdd0e6 --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,216 @@ +version: '3' + +vars: + PARENT_DIR: '{{.ROOT_DIR}}/..' + BACKEND_DIR: '{{.PARENT_DIR}}/OS2IoT-backend' + FRONTEND_DIR: '{{.PARENT_DIR}}/OS2IoT-frontend' + +tasks: + default: + desc: Show available tasks + cmds: + - task --list + silent: true + + # Setup tasks + setup: + desc: Run all setup steps (clone repos, fix line endings, generate certs) + cmds: + - task: setup:clone-repos + - task: setup:fix-line-endings + - task: setup:certs + - task: setup:check + + setup:clone-repos: + desc: Clone OS2IoT-backend and OS2IoT-frontend to sibling directories + silent: true + cmds: + - | + if [ ! -d "{{.BACKEND_DIR}}" ]; then + echo "Cloning OS2IoT-backend..." + git clone https://github.com/OS2iot/OS2IoT-backend.git "{{.BACKEND_DIR}}" + else + echo "OS2IoT-backend already exists" + fi + - | + if [ ! -d "{{.FRONTEND_DIR}}" ]; then + echo "Cloning OS2IoT-frontend..." + git clone https://github.com/OS2iot/OS2IoT-frontend.git "{{.FRONTEND_DIR}}" + else + echo "OS2IoT-frontend already exists" + fi + + setup:fix-line-endings: + desc: Fix line endings on database init scripts (for Windows/cross-platform) + silent: true + cmds: + - | + if command -v dos2unix &> /dev/null; then + dos2unix configuration/os2iot-postgresql/initdb/*.sh 2>/dev/null || true + dos2unix configuration/postgres/initdb/*.sh 2>/dev/null || true + dos2unix configuration/postgresql/initdb/*.sh 2>/dev/null || true + echo "Line endings fixed" + else + echo "dos2unix not installed - skipping (install with: apt install dos2unix)" + fi + + setup:certs: + desc: Generate MQTT broker certificates (CA and server) + silent: true + dir: configuration/mosquitto-broker-os2iot + cmds: + - | + if [ -f "ca.crt" ] && [ -f "ca.key" ] && [ -f "server.crt" ] && [ -f "server.key" ]; then + echo "Certificates already exist" + else + # Remove directories if they exist (created by Docker when files were missing) + rm -rf ca.crt ca.key server.crt server.key ca.srl server.csr 2>/dev/null || true + echo "Generating CA certificate..." + openssl genrsa -out ca.key 2048 + openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=OS2IoT-CA" + echo "Generating server certificate..." + openssl genrsa -out server.key 2048 + openssl req -new -key server.key -out server.csr -subj "/CN=mosquitto-os2iot" + openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 + rm -f server.csr + chmod 644 ca.key server.key + echo "Certificates generated successfully" + fi + + setup:check: + desc: Verify sibling repos exist and show status + silent: true + cmds: + - | + echo "=== Setup Status ===" + if [ -d "{{.BACKEND_DIR}}" ]; then + echo "✓ OS2IoT-backend: found" + else + echo "✗ OS2IoT-backend: NOT FOUND (run: task setup:clone-repos)" + fi + if [ -d "{{.FRONTEND_DIR}}" ]; then + echo "✓ OS2IoT-frontend: found" + else + echo "✗ OS2IoT-frontend: NOT FOUND (run: task setup:clone-repos)" + fi + if [ -f "configuration/mosquitto-broker-os2iot/ca.crt" ] && [ -f "configuration/mosquitto-broker-os2iot/ca.key" ]; then + echo "✓ MQTT certificates: found" + else + echo "✗ MQTT certificates: NOT FOUND (run: task setup:certs)" + fi + + setup:org: + desc: Create default organization (requires services running) + silent: true + cmds: + - | + NGINX_PORT=$(docker compose port nginx 80 | cut -d: -f2) + if [ -z "$NGINX_PORT" ]; then + echo "✗ Services not running (run: docker compose up --detach)" + exit 1 + fi + TOKEN=$(curl -s -X POST "http://localhost:${NGINX_PORT}/api/v1/auth/login" \ + -H "Content-Type: application/json" \ + -d '{"username":"global-admin@os2iot.dk","password":"hunter2"}' | jq -r '.accessToken') + if [ "$TOKEN" = "null" ] || [ -z "$TOKEN" ]; then + echo "✗ Failed to login - ensure services are running" + exit 1 + fi + RESULT=$(curl -s -X POST "http://localhost:${NGINX_PORT}/api/v1/organization" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"name":"Default Organization"}') + if echo "$RESULT" | grep -q '"id"'; then + echo "✓ Default Organization created" + else + echo "Organization may already exist or error: $RESULT" + fi + + setup:chirpstack: + desc: Configure ChirpStack API key for LoRaWAN integration + silent: true + cmds: + - | + CHIRPSTACK_PORT=$(docker compose port chirpstack 8080 2>/dev/null | cut -d: -f2) + if [ -z "$CHIRPSTACK_PORT" ]; then + echo "✗ ChirpStack not running (run: docker compose up --detach)" + exit 1 + fi + echo "=== ChirpStack API Key Setup ===" + echo "" + echo "1. Opening ChirpStack UI at http://localhost:${CHIRPSTACK_PORT}" + echo "2. Login with: admin / admin" + echo "3. Go to: API Keys (in the left menu)" + echo "4. Click 'Add API key'" + echo "5. Give it a name and click 'Submit'" + echo "6. Copy the generated token" + echo "" + # Try to open in browser + if command -v xdg-open &> /dev/null; then + xdg-open "http://localhost:${CHIRPSTACK_PORT}" 2>/dev/null & + elif command -v open &> /dev/null; then + open "http://localhost:${CHIRPSTACK_PORT}" 2>/dev/null & + fi + echo "Paste your API key here (or press Ctrl+C to cancel):" + read -r API_KEY + if [ -n "$API_KEY" ]; then + if [ -f ".env" ]; then + if grep -q "^CHIRPSTACK_API_KEY=" .env; then + sed -i.bak "s/^CHIRPSTACK_API_KEY=.*/CHIRPSTACK_API_KEY=${API_KEY}/" .env && rm -f .env.bak + echo "✓ Updated CHIRPSTACK_API_KEY in .env" + else + echo "CHIRPSTACK_API_KEY=${API_KEY}" >> .env + echo "✓ Added CHIRPSTACK_API_KEY to .env" + fi + else + echo "CHIRPSTACK_API_KEY=${API_KEY}" > .env + echo "✓ Created .env with CHIRPSTACK_API_KEY" + fi + echo "" + echo "Restarting backend to apply changes..." + docker compose up -d os2iot-backend + echo "✓ Done! Backend restarted with new API key" + else + echo "✗ No API key provided" + fi + + open:chirpstack: + desc: Open ChirpStack UI in browser + cmds: + - | + URL="http://$(docker compose port chirpstack 8080)" + if command -v xdg-open &> /dev/null; then + xdg-open "$URL" + elif command -v open &> /dev/null; then + open "$URL" + else + echo "Open in browser: $URL" + fi + + status: + desc: Show status of all containers + cmds: + - docker compose ps --format 'table {{"{{"}}.Name{{"}}"}} {{"{{"}}.Status{{"}}"}}' + + build: + desc: Build all images without starting + cmds: + - docker compose build + + clean: + desc: Remove all containers, volumes, and images for this project + cmds: + - docker compose down --volumes --rmi local + + open: + desc: Open the frontend in browser + cmds: + - | + URL="http://$(docker compose port nginx 80)" + if command -v xdg-open &> /dev/null; then + xdg-open "$URL" + elif command -v open &> /dev/null; then + open "$URL" + else + echo "Open in browser: $URL" + fi diff --git a/configuration/chirpstack-application-server/chirpstack-application-server.toml b/configuration/chirpstack-application-server/chirpstack-application-server.toml deleted file mode 100644 index b019310..0000000 --- a/configuration/chirpstack-application-server/chirpstack-application-server.toml +++ /dev/null @@ -1,18 +0,0 @@ -# See https://www.chirpstack.io/application-server/install/config/ for a full -# configuration example and documentation. - -[postgresql] -dsn="postgres://chirpstack_as:chirpstack_as@postgresql/chirpstack_as?sslmode=disable" - -[redis] -url="redis://redis:6379" - -[application_server.integration.mqtt] -server="tcp://mosquitto:1883" - -[application_server.api] -public_host="chirpstack-application-server:8001" - -[application_server.external_api] -bind="0.0.0.0:8080" -jwt_secret="verysecret" diff --git a/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/go.mod b/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/go.mod deleted file mode 100644 index 28136b8..0000000 --- a/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module sensade-adr-mod - -go 1.13 - -require ( - github.com/brocaar/chirpstack-network-server/v3 v3.15.5 - github.com/hashicorp/go-plugin v1.4.0 - github.com/sirupsen/logrus v1.8.1 -) diff --git a/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/go.sum b/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/go.sum deleted file mode 100644 index ddc940b..0000000 --- a/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/go.sum +++ /dev/null @@ -1,806 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.63.0/go.mod h1:GmezbQc7T2snqkEXWfZ0sy0VfkB/ivI2DdtJL2DEmlg= -cloud.google.com/go v0.64.0/go.mod h1:xfORb36jGvE+6EexW71nMEtL025s3x6xvuYUKM4JLv4= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/spanner v1.9.0/go.mod h1:xvlEn0NZ5v1iJPYsBnUVRDNvccDxsBTEi16pJRKQVws= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-amqp-common-go v1.1.4/go.mod h1:FhZtXirFANw40UXI2ntweO+VOkfaw8s6vZxUiRhLYW8= -github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU= -github.com/Azure/azure-sdk-for-go v21.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest v11.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ClickHouse/clickhouse-go v1.3.12/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/NickBall/go-aes-key-wrap v0.0.0-20170929221519-1c3aa3e4dfc5/go.mod h1:w5D10RxC0NmPYxmQ438CC1S07zaC1zpvuNW7s5sUk2Q= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/apache/arrow/go/arrow v0.0.0-20200601151325-b2287a20f230/go.mod h1:QNYViu/X0HXDHw7m3KXzWSVXIbfUvJqBFe6Gj8/pYA0= -github.com/apex/log v1.1.0/go.mod h1:yA770aXIDQrhVOIGurT/pVdfCpSq1GQV/auzMN5fzvY= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/aws/aws-sdk-go v1.15.64/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= -github.com/aws/aws-sdk-go v1.17.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= -github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4= -github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/brocaar/chirpstack-api/go/v3 v3.12.4/go.mod h1:v8AWP19nOJK4rwJsr1+weDfpUc4UNLbRh8Eygn4Oh00= -github.com/brocaar/chirpstack-network-server/v3 v3.15.5 h1:Iwe/PU8ObKv6hOEWa9dYQ2hD6i+jebr74mT9KGlubvc= -github.com/brocaar/chirpstack-network-server/v3 v3.15.5/go.mod h1:CICdIkx7TqPxE8kUyCDT/G7dTEtnnTalQCtxVcsdx/M= -github.com/brocaar/lorawan v0.0.0-20211213100234-63df6954a2f3 h1:as8V3iH+RP5ETPyjs8e2q+YF9k8AeR/8E2bmTQL6rug= -github.com/brocaar/lorawan v0.0.0-20211213100234-63df6954a2f3/go.mod h1:Vlf3gOwizqX4y3snWe/i2EqRT83HvYuwBjRu39PevW0= -github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= -github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= -github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= -github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/cockroach-go v0.0.0-20190925194419-606b3d062051/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= -github.com/containerd/containerd v1.4.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/cznic/mathutil v0.0.0-20180504122225-ca4c9f2c1369/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dhui/dktest v0.3.3/go.mod h1:EML9sP4sqJELHn4jV7B0TY8oF6077nk83/tz7M56jcQ= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v17.12.0-ce-rc1.0.20200618181300-9dc6525e6118+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-redis/redis/v8 v8.8.3/go.mod h1:ik7vb7+gm8Izylxu6kf6wG26/t2VljgCfSQ1DM4O1uU= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= -github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= -github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-migrate/migrate/v4 v4.14.1/go.mod h1:l7Ks0Au6fYHuUIxUhQ0rcVX1uLlJg54C/VvW7tvxSz0= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -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.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20190328170749-bb2674552d8f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/goreleaser/goreleaser v0.106.0/go.mod h1:YCWszXb4t6HZ7gzeg5TcbPJC2Ad8cFvsknUS0CwS3yY= -github.com/goreleaser/nfpm v0.11.0/go.mod h1:F2yzin6cBAL9gb+mSiReuXdsfTrOQwDMsuSpULof+y4= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.11.3/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-plugin v1.4.0 h1:b0O7rs5uiJ99Iu9HugEzsM67afboErkHUWddUSpUO3A= -github.com/hashicorp/go-plugin v1.4.0/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.3.2/go.mod h1:LvCquS3HbBKwgl7KbX9KyqEIumJAbm1UMcTvGaIf3bM= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jacobsa/crypto v0.0.0-20190317225127-9f44e2d11115 h1:YuDUUFNM21CAbyPOpOP8BicaTD/0klJEKt5p8yuw+uY= -github.com/jacobsa/crypto v0.0.0-20190317225127-9f44e2d11115/go.mod h1:LadVJg0XuawGk+8L1rYnIED8451UyNxEMdTWCEt5kmU= -github.com/jacobsa/oglematchers v0.0.0-20150720000706-141901ea67cd/go.mod h1:TlmyIZDpGmwRoTWiakdr+HA1Tukze6C6XbRVidYq02M= -github.com/jacobsa/oglemock v0.0.0-20150831005832-e94d794d06ff/go.mod h1:gJWba/XXGl0UoOmBQKRWCJdHrr3nE0T65t6ioaj3mLI= -github.com/jacobsa/ogletest v0.0.0-20170503003838-80d50a735a11/go.mod h1:+DBdDyfoO2McrOyDemRBq0q9CMEByef7sYl7JH5Q3BI= -github.com/jacobsa/reqtrace v0.0.0-20150505043853-245c9e0234cb/go.mod h1:ivcmUvxXWjb27NsPEaiYK7AidlZXS7oQ5PowUS9z3I4= -github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= -github.com/kamilsk/retry/v4 v4.0.0/go.mod h1:0af33qDvzbhQqdOBi7iOjEpmP4brbPmNZpo7chYlgcc= -github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -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/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/ktrysmt/go-bitbucket v0.6.4/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-zglob v0.0.0-20171230104132-4959821b4817/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= -github.com/mattn/go-zglob v0.0.0-20180803001819-2ea3427bfa53/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mutecomm/go-sqlcipher/v4 v4.4.0/go.mod h1:PyN04SaWalavxRGH9E8ZftG6Ju7rsPrGmQRjrEaVpiY= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8/go.mod h1:86wM1zFnC6/uDBfZGNwB65O+pR2OFi5q/YQaEUid1qA= -github.com/neo4j/neo4j-go-driver v1.8.1-0.20200803113522-b626aa943eba/go.mod h1:ncO5VaFWh0Nrt+4KT4mOZboaczBZcLuHrG+/sUeP8gI= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/snowflakedb/glog v0.0.0-20180824191149-f5055e6f21ce/go.mod h1:EB/w24pR5VKI60ecFnKqXzxX3dOorz1rnVicQTQrGM0= -github.com/snowflakedb/gosnowflake v1.3.5/go.mod h1:13Ky+lxzIm3VqNDZJdyvu9MCGy+WgRdYFdXp96UcLZU= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVThkpGiXrs= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.mongodb.org/mongo-driver v1.1.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -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-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190225153610-fe579d43d832/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201029221708-28c70e62bb1d/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181030150119-7e31e0c00fa0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190402054613-e4093980e83e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201029080932-201ba4db2418/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/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 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200806022845-90696ccdc692/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200814230902-9882f1d1823d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200817023811-d00afeaade8f/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200818005847-188abfa75333/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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= -gonum.org/v1/gonum v0.0.0-20190115205657-1b07048b32c6/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/netlib v0.0.0-20190219113230-9992c5f5eae4/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200911024640-645f7a48b24f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201030142918-24207fddd1c3 h1:sg8vLDNIxFPHTchfhH1E3AI32BL3f23oie38xUWnJM8= -google.golang.org/genproto v0.0.0-20201030142918-24207fddd1c3/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1 h1:DGeFlSan2f+WEtCERJ4J9GJWk15TxUi8QGagfI87Xyc= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -modernc.org/b v1.0.0/go.mod h1:uZWcZfRj1BpYzfN9JTerzlNUnnPsV9O2ZA8JsRcubNg= -modernc.org/db v1.0.0/go.mod h1:kYD/cO29L/29RM0hXYl4i3+Q5VojL31kTUVpVJDw0s8= -modernc.org/file v1.0.0/go.mod h1:uqEokAEn1u6e+J45e54dsEA/pw4o7zLrA2GwyntZzjw= -modernc.org/fileutil v1.0.0/go.mod h1:JHsWpkrk/CnVV1H/eGlFf85BEpfkrp56ro8nojIq9Q8= -modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/internal v1.0.0/go.mod h1:VUD/+JAkhCpvkUitlEOnhpVxCgsBI90oTzSCRcqQVSM= -modernc.org/lldb v1.0.0/go.mod h1:jcRvJGWfCGodDZz8BPwiKMJxGJngQ/5DrRapkQnLob8= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/ql v1.0.0/go.mod h1:xGVyrLIatPcO2C1JvI/Co8c0sr6y91HKFNy4pt9JXEY= -modernc.org/sortutil v1.1.0/go.mod h1:ZyL98OQHJgH9IEfN71VsamvJgrtRX9Dj2gX+vH86L1k= -modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/zappy v1.0.0/go.mod h1:hHe+oGahLVII/aTTyWK/b53VDHMAGCBYYeZ9sn83HC4= -pack.ag/amqp v0.8.0/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= -pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= -pack.ag/amqp v0.12.1/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/main.go b/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/main.go deleted file mode 100644 index a196f6f..0000000 --- a/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/main.go +++ /dev/null @@ -1,141 +0,0 @@ -package main - -import ( - "github.com/hashicorp/go-plugin" - log "github.com/sirupsen/logrus" - - "github.com/brocaar/chirpstack-network-server/v3/adr" -) - -// DefaultHandler implements the default ADR handler. -type SlowHandler struct{} - -// ID returns the default ID. -func (h *SlowHandler) ID() (string, error) { - return "scadra", nil -} - -// Name returns the default name. -func (h *SlowHandler) Name() (string, error) { - return "Slowly Correcting ADR Algorithm", nil -} - -// Handle handles the ADR request. -func (h *SlowHandler) Handle(req adr.HandleRequest) (adr.HandleResponse, error) { - // This defines the default response, which is equal to the current device - // state. - resp := adr.HandleResponse{ - DR: req.DR, - TxPowerIndex: req.TxPowerIndex, - NbTrans: req.NbTrans, - } - - resp.TxPowerIndex = 0 - - // If ADR is disabled, return with current values. - if !req.ADR { - return resp, nil - } - - lostPackageCnt := h.getLostPackageCount(req) - // If 5 or more packages are lost during the last received packages, we decrease the data-rate - if lostPackageCnt >= 5 { - resp.DR -= 1 - } else if len(req.UplinkHistory) == 20 && h.getLostPackageCount(req, 20) <= 2 { - // If 2 or fewer packages are lost during the last 20 received packages, the dr might be able to be increased - - // We only want to increase the dr if none of the previously received packages - // are within the installationMargin of the minimum required snr for the current dr - // The installationMargin should prevent us from increasing the dr too much, such that packages are lost - // when cars park in a spot. - minSNR := h.getMinSNR(req) - installationMargin := float32(10) - // A margin of around 10 seems okay - // This value has been chosen based on the loRaSNR values from sensors installed in a parking lot, - // where a fluctuation of +- 10 can be seen (should be caused by cars parking and leaving). - diffSNR := minSNR - req.RequiredSNRForDR - installationMargin - - // Examples: - // minSNR = -5 - // requiredSNRforDR = -10 - // installationMargin = 10 - // diffSNR = -5 - -10 - 10 = -5 - // => Not safe to increase the dr - - // minSNR = 5 - // requiredSNRforDR = -10 - // installationMargin = 10 - // diffSNR = 5 - -10 - 10 = 5 - // => The dr should be safe to increase - - if diffSNR > 0 { - resp.DR += 1 - } - } - - // If the data rate is increased or reduced to something outside the Min - Max range, - // we set it to the respective limit - if req.MaxDR < resp.DR { - resp.DR = req.MaxDR - } - - if req.MinDR > resp.DR { - resp.DR = req.MinDR - } - - return resp, nil -} - -func (h *SlowHandler) getMinSNR(req adr.HandleRequest) float32 { - var snrM float32 = 999 - for _, m := range req.UplinkHistory { - if m.MaxSNR < snrM { - snrM = m.MaxSNR - } - } - return snrM -} - -func (h *SlowHandler) getLostPackageCount(req adr.HandleRequest, lastXElement ...int) int { - if len(req.UplinkHistory) < 2 { - return 0 - } - - elements := req.UplinkHistory - - if len(lastXElement) > 0 { - x := lastXElement[0] - if x < len(elements) { - elements = elements[len(elements)-x:] - } - } - - var lostPackets uint32 - var previousFCnt uint32 - - for i, m := range elements { - if i == 0 { - previousFCnt = m.FCnt - continue - } - - lostPackets += m.FCnt - previousFCnt - 1 // there is always an expected difference of 1 - previousFCnt = m.FCnt - } - - return int(lostPackets) -} - -func main() { - handler := &SlowHandler{} - - pluginMap := map[string]plugin.Plugin{ - "handler": &adr.HandlerPlugin{Impl: handler}, - } - - log.Info("Starting ADR plugin") - plugin.Serve(&plugin.ServeConfig{ - HandshakeConfig: adr.HandshakeConfig, - Plugins: pluginMap, - }) -} diff --git a/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/sensade-adr-mod b/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/sensade-adr-mod deleted file mode 100644 index 34ad344..0000000 Binary files a/configuration/chirpstack-network-server/adr-modules/sensade-adr-mod/sensade-adr-mod and /dev/null differ diff --git a/configuration/chirpstack-network-server/chirpstack-network-server.toml b/configuration/chirpstack-network-server/chirpstack-network-server.toml deleted file mode 100644 index ed76b0b..0000000 --- a/configuration/chirpstack-network-server/chirpstack-network-server.toml +++ /dev/null @@ -1,51 +0,0 @@ -# See https://www.chirpstack.io/network-server/install/config/ for a full -# configuration example and documentation. -# -# This file is for the EU868 band. See the examples/ folder for more -# configuration examples. - -[postgresql] -dsn="postgres://chirpstack_ns:chirpstack_ns@postgresql/chirpstack_ns?sslmode=disable" - -[redis] -url="redis://redis:6379" - -[network_server] -net_id="000000" - -[network_server.band] -name="EU868" - -[network_server.network_settings] -adr_plugins=["/etc/chirpstack-network-server/adr-modules/sensade-adr-mod/sensade-adr-mod"] - - [[network_server.network_settings.extra_channels]] - frequency=867100000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867300000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867500000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867700000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867900000 - min_dr=0 - max_dr=5 - -[network_server.gateway.backend.mqtt] -server="tcp://mosquitto:1883" - -[join_server.default] -server="http://chirpstack-application-server:8003" diff --git a/configuration/chirpstack-network-server/examples/chirpstack-network-server.eu868.toml b/configuration/chirpstack-network-server/examples/chirpstack-network-server.eu868.toml deleted file mode 100644 index 10ec39c..0000000 --- a/configuration/chirpstack-network-server/examples/chirpstack-network-server.eu868.toml +++ /dev/null @@ -1,53 +0,0 @@ -# See https://www.chirpstack.io/network-server/install/config/ for a full -# configuration example and documentation. -# -# This file is for the EU868 band. See the examples/ folder for more -# configuration examples. - -[postgresql] -dsn="postgres://chirpstack_ns:chirpstack_ns@postgresql/chirpstack_ns?sslmode=disable" - -[redis] -url="redis://redis:6379" - -[network_server] -net_id="000000" - -[network_server.band] -name="EU868" - -[network_server.network_settings] - - [[network_server.network_settings.extra_channels]] - frequency=867100000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867300000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867500000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867700000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867900000 - min_dr=0 - max_dr=5 - -[network_server.gateway.backend.mqtt] -server="tcp://mosquitto:1883" - -[join_server.default] -server="http://chirpstack-application-server:8003" - -[geolocation_server] -server="chirpstack-geolocation-server:8005" diff --git a/configuration/chirpstack-network-server/examples/chirpstack-network-server.us915.0.toml b/configuration/chirpstack-network-server/examples/chirpstack-network-server.us915.0.toml deleted file mode 100644 index b21c6ae..0000000 --- a/configuration/chirpstack-network-server/examples/chirpstack-network-server.us915.0.toml +++ /dev/null @@ -1,29 +0,0 @@ -# See https://www.chirpstack.io/network-server/install/config/ for a full -# configuration example and documentation. -# -# This file is for the US915 band (channels 0-7). See the examples/ folder for more -# configuration examples. - -[postgresql] -dsn="postgres://chirpstack_ns:chirpstack_ns@postgresql/chirpstack_ns?sslmode=disable" - -[redis] -url="redis://redis:6379" - -[network_server] -net_id="000000" - -[network_server.band] -name="US915" - - [network_server.network_settings] - enabled_uplink_channels=[0, 1, 2, 3, 4, 5, 6, 7] - -[network_server.gateway.backend.mqtt] -server="tcp://mosquitto:1883" - -[join_server.default] -server="http://chirpstack-application-server:8003" - -[geolocation_server] -server="chirpstack-geolocation-server:8005" diff --git a/configuration/chirpstack-network-server/examples/chirpstack-network-server.us915.1.toml b/configuration/chirpstack-network-server/examples/chirpstack-network-server.us915.1.toml deleted file mode 100644 index 8fc9122..0000000 --- a/configuration/chirpstack-network-server/examples/chirpstack-network-server.us915.1.toml +++ /dev/null @@ -1,31 +0,0 @@ -# See https://www.chirpstack.io/network-server/install/config/ for a full -# configuration example and documentation. -# -# This file is for the US915 band (channels 8-15). See the examples/ folder for more -# configuration examples. -# -# Note: these channels are also used by TTN. - -[postgresql] -dsn="postgres://chirpstack_ns:chirpstack_ns@postgresql/chirpstack_ns?sslmode=disable" - -[redis] -url="redis://redis:6379" - -[network_server] -net_id="000000" - -[network_server.band] -name="US915" - - [network_server.network_settings] - enabled_uplink_channels=[8, 9, 10, 11, 12, 13, 14, 15] - -[network_server.gateway.backend.mqtt] -server="tcp://mosquitto:1883" - -[join_server.default] -server="http://chirpstack-application-server:8003" - -[geolocation_server] -server="chirpstack-geolocation-server:8005" diff --git a/configuration/chirpstack/chirpstack.toml b/configuration/chirpstack/chirpstack.toml index 1612dd7..a002c21 100644 --- a/configuration/chirpstack/chirpstack.toml +++ b/configuration/chirpstack/chirpstack.toml @@ -1,5 +1,5 @@ [postgresql] -dsn="postgres://chirpstack:chirpstack@postgresChirpstackV4/chirpstack?sslmode=disable" +dsn="postgres://chirpstack:chirpstack@postgres/chirpstack?sslmode=disable" [redis] servers=["redis://redis:6379"] diff --git a/configuration/chirpstack/region_eu868.toml b/configuration/chirpstack/region_eu868.toml index 89ec49d..9f656d5 100644 --- a/configuration/chirpstack/region_eu868.toml +++ b/configuration/chirpstack/region_eu868.toml @@ -135,4 +135,4 @@ [[regions.network.extra_channels]] frequency=867900000 min_dr=0 - max_dr=7 \ No newline at end of file + max_dr=7 diff --git a/configuration/mosquitto-broker-os2iot/mosquitto-os2iot.conf b/configuration/mosquitto-broker-os2iot/mosquitto-os2iot.conf index d95d908..4454977 100644 --- a/configuration/mosquitto-broker-os2iot/mosquitto-os2iot.conf +++ b/configuration/mosquitto-broker-os2iot/mosquitto-os2iot.conf @@ -8,16 +8,16 @@ tls_version tlsv1.3 auth_opt_backends postgres -auth_opt_pg_host **INSERT HOSTNAME** -auth_opt_pg_port **INSERT PORT** -auth_opt_pg_user **INSERT USER** -auth_opt_pg_password **INSERT PASSWORD** -auth_opt_pg_dbname **INSERT DBNAME** +auth_opt_pg_host os2iot-postgresql +auth_opt_pg_port 5432 +auth_opt_pg_user os2iot +auth_opt_pg_password toi2so +auth_opt_pg_dbname os2iot auth_opt_pg_userquery SELECT mqttpasswordhash FROM iot_device WHERE mqttUsername = $1 limit 1 auth_opt_pg_superquery SELECT COUNT(*) FROM iot_device WHERE (mqttusername = $1 AND permissions = 'superUser') auth_opt_pg_aclquery SELECT mqttTopicName FROM iot_device WHERE (mqttUsername = $1 AND permissions = 'write') OR (9 = $2 AND mqttUsername = $1) -auth_opt_pg_sslmode verify-ca +auth_opt_pg_sslmode disable auth_opt_hasher pbkdf2 auth_opt_hasher_salt_size 16 @@ -34,16 +34,16 @@ use_identity_as_username true auth_opt_backends postgres -auth_opt_pg_host **INSERT HOSTNAME** -auth_opt_pg_port **INSERT PORT** -auth_opt_pg_user **INSERT USER** -auth_opt_pg_password **INSERT PASSWORD** -auth_opt_pg_dbname **INSERT DBNAME** +auth_opt_pg_host os2iot-postgresql +auth_opt_pg_port 5432 +auth_opt_pg_user os2iot +auth_opt_pg_password toi2so +auth_opt_pg_dbname os2iot auth_opt_pg_userquery SELECT mqttpasswordhash FROM iot_device WHERE mqttUsername = $1 limit 1 auth_opt_pg_superquery SELECT COUNT(*) FROM iot_device WHERE (mqttusername = $1 AND permissions = 'superUser') auth_opt_pg_aclquery SELECT mqttTopicName FROM iot_device WHERE (mqttUsername = $1 AND permissions = 'write') OR (9 = $2 AND mqttUsername = $1) -auth_opt_pg_sslmode verify-ca +auth_opt_pg_sslmode disable cafile /etc/mosquitto/ca_certificates/ca.crt keyfile /etc/mosquitto/certs/server.key diff --git a/configuration/nginx/nginx.conf b/configuration/nginx/nginx.conf new file mode 100644 index 0000000..4b81cb1 --- /dev/null +++ b/configuration/nginx/nginx.conf @@ -0,0 +1,37 @@ +events { + worker_connections 1024; +} + +http { + upstream frontend { + server os2iot-frontend:8081; + } + + upstream backend { + server os2iot-backend:3000; + } + + server { + listen 80; + + # Frontend + location / { + proxy_pass http://frontend; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + } + + # Backend API + location /api/ { + proxy_pass http://backend/api/; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + } +} diff --git a/configuration/postgresChirpstackV4/initdb/.gitattributes b/configuration/postgres/initdb/.gitattributes similarity index 100% rename from configuration/postgresChirpstackV4/initdb/.gitattributes rename to configuration/postgres/initdb/.gitattributes diff --git a/configuration/postgresChirpstackV4/initdb/001-init-chirpstack.sh b/configuration/postgres/initdb/001-init-chirpstack.sh similarity index 100% rename from configuration/postgresChirpstackV4/initdb/001-init-chirpstack.sh rename to configuration/postgres/initdb/001-init-chirpstack.sh diff --git a/configuration/postgresChirpstackV4/initdb/002-chirpstack_extensions.sh b/configuration/postgres/initdb/002-chirpstack_extensions.sh similarity index 100% rename from configuration/postgresChirpstackV4/initdb/002-chirpstack_extensions.sh rename to configuration/postgres/initdb/002-chirpstack_extensions.sh diff --git a/configuration/postgresql/initdb/.gitattributes b/configuration/postgresql/initdb/.gitattributes deleted file mode 100644 index 50ca329..0000000 --- a/configuration/postgresql/initdb/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.sh eol=lf diff --git a/configuration/postgresql/initdb/001-init-chirpstack_ns.sh b/configuration/postgresql/initdb/001-init-chirpstack_ns.sh deleted file mode 100644 index 685e3f8..0000000 --- a/configuration/postgresql/initdb/001-init-chirpstack_ns.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -e - -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL - create role chirpstack_ns with login password 'chirpstack_ns'; - create database chirpstack_ns with owner chirpstack_ns; -EOSQL diff --git a/configuration/postgresql/initdb/002-init-chirpstack_as.sh b/configuration/postgresql/initdb/002-init-chirpstack_as.sh deleted file mode 100644 index 1dc2ed8..0000000 --- a/configuration/postgresql/initdb/002-init-chirpstack_as.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -e - -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL - create role chirpstack_as with login password 'chirpstack_as'; - create database chirpstack_as with owner chirpstack_as; -EOSQL diff --git a/configuration/postgresql/initdb/003-chirpstack_as_trgm.sh b/configuration/postgresql/initdb/003-chirpstack_as_trgm.sh deleted file mode 100644 index b1e6c0c..0000000 --- a/configuration/postgresql/initdb/003-chirpstack_as_trgm.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -e - -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname="chirpstack_as" <<-EOSQL - create extension pg_trgm; -EOSQL diff --git a/configuration/postgresql/initdb/004-chirpstack_as_hstore.sh b/configuration/postgresql/initdb/004-chirpstack_as_hstore.sh deleted file mode 100644 index 920de9c..0000000 --- a/configuration/postgresql/initdb/004-chirpstack_as_hstore.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -e - -psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname="chirpstack_as" <<-EOSQL - create extension hstore; -EOSQL diff --git a/docker-compose.yml b/docker-compose.yml index 830fc1b..64a42f5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,25 +1,13 @@ -version: "3.8" - services: - #Chirpstack - chirpstack-network-server: - image: chirpstack/chirpstack-network-server:3.16.8 - volumes: - - ./configuration/chirpstack-network-server:/etc/chirpstack-network-server - - chirpstack-application-server: - image: chirpstack/chirpstack-application-server:3.17.9 - ports: - - 8084:8080 - volumes: - - ./configuration/chirpstack-application-server:/etc/chirpstack-application-server - chirpstack-gateway-bridge: image: chirpstack/chirpstack-gateway-bridge:4.0.10 ports: - - 1700:1700/udp + - "1700" volumes: - ./configuration/chirpstack-gateway-bridge:/etc/chirpstack-gateway-bridge + depends_on: + mosquitto: + condition: service_healthy chirpstack: image: chirpstack/chirpstack:4.6 @@ -27,41 +15,76 @@ services: volumes: - ./configuration/chirpstack:/etc/chirpstack ports: - - 8080:8080 - - postgresql: - image: postgres:9.6-alpine - environment: - - POSTGRES_PASSWORD=root - ports: - - 5434:5432 - volumes: - - ./configuration/postgresql/initdb:/docker-entrypoint-initdb.d - - postgresqldata:/var/lib/postgresql/data + - "8080" + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + mosquitto: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:8080 || exit 1"] + interval: 10s + timeout: 5s + retries: 5 - postgresChirpstackV4: + postgres: image: postgres:bookworm volumes: - - ./configuration/postgresChirpstackV4/initdb:/docker-entrypoint-initdb.d - - postgresqldata:/var/lib/postgresChirpstackV4/data + - ./configuration/postgres/initdb:/docker-entrypoint-initdb.d + - postgresqldata:/var/lib/postgres/data environment: - POSTGRES_PASSWORD=root - ports: - - 5435:5432 - + ports: + - "5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + redis: image: redis:5-alpine volumes: - redisdata:/data - ports: - - 6379:6379 + ports: + - "6379" + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 mosquitto: image: eclipse-mosquitto:2 ports: - - 1883:1883 + - "1883" volumes: - ./configuration/eclipse-mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf + healthcheck: + test: ["CMD-SHELL", "mosquitto_sub -t '$$SYS/#' -C 1 -i healthcheck -W 3"] + interval: 10s + timeout: 5s + retries: 5 + + # Nginx reverse proxy + nginx: + image: nginx:alpine + ports: + - "80" + volumes: + - ./configuration/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + depends_on: + os2iot-frontend: + condition: service_started + os2iot-backend: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:80 || exit 1"] + interval: 10s + timeout: 5s + retries: 5 #OS2IoT os2iot-frontend: @@ -70,11 +93,16 @@ services: context: "../OS2IoT-frontend" dockerfile: "Dockerfile-prod" ports: - - "8081:8081" + - "8081" environment: PRODUCTION: "false" - BASE_URL: http://localhost:3000/api/v1/ + BASE_URL: /api/v1/ TABLE_PAGE_SIZE: 25 + healthcheck: + test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/127.0.0.1/8081'"] + interval: 10s + timeout: 5s + retries: 5 #OS2IoT os2iot-lorawanSimulator: @@ -83,7 +111,7 @@ services: context: "./simulator" dockerfile: "Dockerfile" ports: - - "8768:8000" + - "8768" os2iot-backend: image: "os2iot-backend" @@ -92,34 +120,40 @@ services: dockerfile: Dockerfile target: prod ports: - - 3000:3000 + - "3000" healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3000/status"] + test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:3000/api/v1/ || exit 1"] interval: 10s timeout: 5s retries: 5 + start_period: 60s depends_on: - - os2iot-postgresql + os2iot-postgresql: + condition: service_healthy + os2iot-kafka: + condition: service_healthy + chirpstack: + condition: service_healthy environment: - DATABASE_HOSTNAME: os2iot-postgresql - DATABASE_PORT: 5432 - KAFKA_HOSTNAME: os2iot-kafka - KAFKA_PORT: 9092 - CS_MQTT_HOSTNAME: mosquitto - CS_MQTT_PORT: 1883 - CHIRPSTACK_HOSTNAME: "chirpstack-svc" # Change this to the chirpstack hostname - CHIRPSTACK_PORT: 8080 - LOG_LEVEL: debug - EMAIL_PORT: 587 - EMAIL_HOST: smtp.ethereal.email # Change this for sending emails with OS2iot - EMAIL_USER: some-login-email@somehost.dk # Change this for sending emails with OS2iot - EMAIL_PASS: some-login-pass # Change this for sending emails with OS2iot - EMAIL_FROM: some-from-email@somehost.dk # Change this for sending emails with OS2iot - MQTT_BROKER_HOSTNAME: # Change this to the public ip/hostname of the mqtt broker - ENCRYPTION_SYMMETRIC_KEY: # Change this to the symmetric key generated - CA_KEY_PASSWORD: # Change this to the password of the generated CA certificate key - MQTT_SUPER_USER_PASSWORD: # Change this to the password for the internal super user. - CHIRPSTACK_API_KEY: # Change this to the API_KEY created in chirpstack. + DATABASE_HOSTNAME: ${DATABASE_HOSTNAME:-os2iot-postgresql} + DATABASE_PORT: ${DATABASE_PORT:-5432} + KAFKA_HOSTNAME: ${KAFKA_HOSTNAME:-os2iot-kafka} + KAFKA_PORT: ${KAFKA_PORT:-9092} + CS_MQTT_HOSTNAME: ${CS_MQTT_HOSTNAME:-mosquitto} + CS_MQTT_PORT: ${CS_MQTT_PORT:-1883} + CHIRPSTACK_HOSTNAME: ${CHIRPSTACK_HOSTNAME:-chirpstack} + CHIRPSTACK_PORT: ${CHIRPSTACK_PORT:-8080} + LOG_LEVEL: ${LOG_LEVEL:-debug} + EMAIL_PORT: ${EMAIL_PORT:-587} + EMAIL_HOST: ${EMAIL_HOST:-smtp.ethereal.email} + EMAIL_USER: ${EMAIL_USER:-} + EMAIL_PASS: ${EMAIL_PASS:-} + EMAIL_FROM: ${EMAIL_FROM:-} + MQTT_BROKER_HOSTNAME: ${MQTT_BROKER_HOSTNAME:-mosquitto-os2iot} + ENCRYPTION_SYMMETRIC_KEY: ${ENCRYPTION_SYMMETRIC_KEY:-0123456789abcdef0123456789abcdef} + CA_KEY_PASSWORD: ${CA_KEY_PASSWORD:-} + MQTT_SUPER_USER_PASSWORD: ${MQTT_SUPER_USER_PASSWORD:-super_user_password} + CHIRPSTACK_API_KEY: ${CHIRPSTACK_API_KEY:-} # Create in ChirpStack UI: http://localhost:8080 -> API Keys volumes: - ./configuration/mosquitto-broker-os2iot/ca.crt:/tmp/os2iot/backend/dist/resources/ca.crt - ./configuration/mosquitto-broker-os2iot/ca.key:/tmp/os2iot/backend/dist/resources/ca.key @@ -130,7 +164,7 @@ services: restart: always image: postgis/postgis # We need postgis to store geodata ports: - - 5433:5432 + - "5433" hostname: os2iot-pg healthcheck: test: ["CMD-SHELL", "pg_isready -U os2iot"] @@ -146,37 +180,49 @@ services: - pg-data:/var/lib/postgresql:Z os2iot-zookeeper: - image: "bitnami/zookeeper:latest" + image: "confluentinc/cp-zookeeper:7.6.0" ports: - - "2181:2181" + - "2181" environment: - - ALLOW_ANONYMOUS_LOGIN=yes + ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 volumes: - - os2iot-zookeeperdata:/data - tmpfs: "/datalog" + - os2iot-zookeeperdata:/var/lib/zookeeper/data + healthcheck: + test: ["CMD-SHELL", "bash -c 'echo ruok > /dev/tcp/localhost/2181'"] + interval: 10s + timeout: 5s + retries: 10 + start_period: 30s os2iot-kafka: - image: "bitnami/kafka:latest" + image: "confluentinc/cp-kafka:7.6.0" ports: - - "9092:9092" - - "9093:9093" + - "9092" + - "9093" environment: - - KAFKA_BROKER_ID=1 - - KAFKA_LISTENERS=PLAINTEXT://:9092,INTERNAL://:9093 - - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://os2iot-kafka:9092,INTERNAL://127.0.0.1:9093 - - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT - - KAFKA_ZOOKEEPER_CONNECT=os2iot-zookeeper:2181 - - ALLOW_PLAINTEXT_LISTENER=yes + KAFKA_BROKER_ID: 1 + KAFKA_ZOOKEEPER_CONNECT: os2iot-zookeeper:2181 + KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,INTERNAL://0.0.0.0:9093 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://os2iot-kafka:9092,INTERNAL://127.0.0.1:9093 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 volumes: - os2iot-kafkadata:/var/lib/kafka/data depends_on: - - os2iot-zookeeper + os2iot-zookeeper: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "kafka-broker-api-versions --bootstrap-server localhost:9092"] + interval: 10s + timeout: 10s + retries: 5 mosquitto-os2iot: image: os2iot-mosquitto ports: - - 8884:8884 - - 8885:8885 + - "8884" + - "8885" build: context: "./mosquitto-broker" dockerfile: "Dockerfile" @@ -186,6 +232,14 @@ services: - ./configuration/mosquitto-broker-os2iot/server.key:/etc/mosquitto/certs/server.key - ./configuration/mosquitto-broker-os2iot/server.crt:/etc/mosquitto/certs/server.crt - ./configuration/mosquitto-broker-os2iot/mosquitto-os2iot.conf:/etc/mosquitto/conf.d/go-auth.conf + depends_on: + os2iot-postgresql: + condition: service_healthy + healthcheck: + test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/127.0.0.1/8885'"] + interval: 10s + timeout: 5s + retries: 5 volumes: pg-data: diff --git a/helm/.helmignore b/helm/.helmignore deleted file mode 100644 index 50af031..0000000 --- a/helm/.helmignore +++ /dev/null @@ -1,22 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/helm/Chart.yaml b/helm/Chart.yaml deleted file mode 100644 index 595a946..0000000 --- a/helm/Chart.yaml +++ /dev/null @@ -1,29 +0,0 @@ -apiVersion: v2 -name: os2iot -description: A Helm chart for Kubernetes - -# 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. -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. -appVersion: 1.16.0 - -dependencies: - - name: os2iot-postgres - version: "1.0" - repository: "file://charts/os2iot-postgres" - - name: os2iot-backend - version: "0.1" - repository: "file://charts/os2iot-backend" diff --git a/helm/charts/chirpstack-application-server/Chart.yaml b/helm/charts/chirpstack-application-server/Chart.yaml deleted file mode 100644 index 36919bd..0000000 --- a/helm/charts/chirpstack-application-server/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: chirpstack-application-server -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/chirpstack-application-server/templates/configmap.yaml b/helm/charts/chirpstack-application-server/templates/configmap.yaml deleted file mode 100644 index 7832057..0000000 --- a/helm/charts/chirpstack-application-server/templates/configmap.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $.Chart.Name }}-configmap -data: # Remember this contains passwords - might be an idea to use secrets and environment variables instead. - chirpstack-application-server.toml: | - # See https://www.chirpstack.io/application-server/install/config/ for a full - # configuration example and documentation. - [general] - log_level=5 - - [postgresql] - dsn="postgres://chirpstack_as:chirpstack_as@postgres-svc/chirpstack_as?sslmode=disable" - - [redis] - url="redis://redis-svc:6379" - - [application_server.integration.mqtt] - server="tcp://mosquitto-svc:1883" - - [application_server.api] - bind="0.0.0.0:8001" - public_host="chirpstack-application-server-svc:8001" - - [application_server.external_api] - bind="0.0.0.0:8080" - jwt_secret="verysecret" - # cors_allow_origin="*" diff --git a/helm/charts/chirpstack-application-server/templates/deployment.yaml b/helm/charts/chirpstack-application-server/templates/deployment.yaml deleted file mode 100644 index fad651d..0000000 --- a/helm/charts/chirpstack-application-server/templates/deployment.yaml +++ /dev/null @@ -1,58 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - annotations: - sidecar.istio.io/inject: "false" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: http - containerPort: 8080 - protocol: TCP - - name: grpc-to-ns - containerPort: 8001 - protocol: TCP - - name: grpc-join - containerPort: 8003 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - volumeMounts: - - name: {{ $.Chart.Name }}-configmap - mountPath: /etc/chirpstack-application-server/chirpstack-application-server.toml - subPath: chirpstack-application-server.toml - volumes: - - name: "{{ $.Chart.Name }}-configmap" - configMap: - name: "{{ $.Chart.Name }}-configmap" - restartPolicy: Always diff --git a/helm/charts/chirpstack-application-server/templates/service.yaml b/helm/charts/chirpstack-application-server/templates/service.yaml deleted file mode 100644 index bbdbb3a..0000000 --- a/helm/charts/chirpstack-application-server/templates/service.yaml +++ /dev/null @@ -1,23 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: http - port: 8080 - targetPort: 8080 - protocol: TCP - - name: grpc-to-ns - port: 8001 - targetPort: 8001 - protocol: TCP - - name: grpc-join - port: 8003 - targetPort: 8003 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/chirpstack-application-server/templates/virtualservice.yaml b/helm/charts/chirpstack-application-server/templates/virtualservice.yaml deleted file mode 100644 index 8198658..0000000 --- a/helm/charts/chirpstack-application-server/templates/virtualservice.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: "{{ $.Chart.Name }}-virtualservice" -spec: - hosts: - - {{ .Values.INGRESS_ADDRESS | default (printf "%s-%s.%s" .Release.Namespace $.Chart.Name .Values.global.DOMAIN_NAME)}} - gateways: - - istio-system/istio-ingressgateway - http: - - name: {{ $.Chart.Name }} - route: - - destination: - port: - number: 8080 - host: "{{ $.Chart.Name }}-svc" - headers: - response: - add: - Cache-Control: no-cache # Telling browsers to not cache our responses. \ No newline at end of file diff --git a/helm/charts/chirpstack-application-server/values.yaml b/helm/charts/chirpstack-application-server/values.yaml deleted file mode 100644 index 10782a8..0000000 --- a/helm/charts/chirpstack-application-server/values.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: chirpstack - -# Image that needs to be used. -DOCKER_IMAGE_NAME: chirpstack-application-server -DOCKER_IMAGE_TAG: '3.17.9' - -DOCKER_IMAGE_PULL_POLICY: Always - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 diff --git a/helm/charts/chirpstack-gateway-bridge/Chart.yaml b/helm/charts/chirpstack-gateway-bridge/Chart.yaml deleted file mode 100644 index f842e95..0000000 --- a/helm/charts/chirpstack-gateway-bridge/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: chirpstack-gateway-bridge -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/chirpstack-gateway-bridge/templates/configmap.yaml b/helm/charts/chirpstack-gateway-bridge/templates/configmap.yaml deleted file mode 100644 index ed37a04..0000000 --- a/helm/charts/chirpstack-gateway-bridge/templates/configmap.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $.Chart.Name }}-configmap -data: # Remember this contains passwords - might be an idea to use secrets and environment variables instead. - chirpstack-gateway-bridge.toml: | - # See https://www.chirpstack.io/gateway-bridge/install/config/ for a full - # configuration example and documentation. - - # Integration configuration. - [integration] - # Payload marshaler. - # - # This defines how the MQTT payloads are encoded. Valid options are: - # * protobuf: Protobuf encoding - # * json: JSON encoding (for debugging) - marshaler="protobuf" - - [integration.mqtt] - # Event topic template. - event_topic_template="gateway/{{ .GatewayID }}/event/{{ .EventType }}" - - # State topic template. - state_topic_template="gateway/{{ .GatewayID }}/state/{{ .StateType }}" - - # Command topic template. - command_topic_template="gateway/{{ .GatewayID }}/command/#" - [integration.mqtt.auth] - # Type defines the MQTT authentication type to use. - # - # Set this to the name of one of the sections below. - type="generic" - [integration.mqtt.auth.generic] - servers=["tcp://mosquitto-svc:1883"] - username="" - password="" - diff --git a/helm/charts/chirpstack-gateway-bridge/templates/deployment.yaml b/helm/charts/chirpstack-gateway-bridge/templates/deployment.yaml deleted file mode 100644 index 7969597..0000000 --- a/helm/charts/chirpstack-gateway-bridge/templates/deployment.yaml +++ /dev/null @@ -1,52 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - annotations: - sidecar.istio.io/inject: "false" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: udp - containerPort: 1700 - protocol: UDP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - volumeMounts: - - name: {{ $.Chart.Name }}-configmap - mountPath: /etc/chirpstack-gateway-bridge/chirpstack-gateway-bridge.toml - subPath: chirpstack-gateway-bridge.toml - volumes: - - name: "{{ $.Chart.Name }}-configmap" - configMap: - name: "{{ $.Chart.Name }}-configmap" - restartPolicy: Always diff --git a/helm/charts/chirpstack-gateway-bridge/templates/service.yaml b/helm/charts/chirpstack-gateway-bridge/templates/service.yaml deleted file mode 100644 index 02152dd..0000000 --- a/helm/charts/chirpstack-gateway-bridge/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: LoadBalancer - ports: - - name: udp - port: 1700 - targetPort: 1700 - protocol: UDP - selector: - app: {{ $.Chart.Name }} diff --git a/helm/charts/chirpstack-gateway-bridge/values.yaml b/helm/charts/chirpstack-gateway-bridge/values.yaml deleted file mode 100644 index 7beaeef..0000000 --- a/helm/charts/chirpstack-gateway-bridge/values.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: chirpstack - -# Image that needs to be used. -DOCKER_IMAGE_NAME: chirpstack-gateway-bridge -DOCKER_IMAGE_TAG: '4.0.10' - -DOCKER_IMAGE_PULL_POLICY: Always - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 diff --git a/helm/charts/chirpstack-network-server/Chart.yaml b/helm/charts/chirpstack-network-server/Chart.yaml deleted file mode 100644 index f448472..0000000 --- a/helm/charts/chirpstack-network-server/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: chirpstack-network-server -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/chirpstack-network-server/templates/configmap.yaml b/helm/charts/chirpstack-network-server/templates/configmap.yaml deleted file mode 100644 index a3b76c8..0000000 --- a/helm/charts/chirpstack-network-server/templates/configmap.yaml +++ /dev/null @@ -1,58 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $.Chart.Name }}-configmap -data: # Remember this contains passwords - might be an idea to use secrets and environment variables instead. - chirpstack-network-server.toml: | - # See https://www.chirpstack.io/network-server/install/config/ for a full - # configuration example and documentation. - # - # This file is for the EU868 band. See the examples/ folder for more - # configuration examples. - [general] - log_level=5 - - [postgresql] - dsn="postgres://chirpstack_ns:chirpstack_ns@postgres-svc/chirpstack_ns?sslmode=disable" - - [redis] - url="redis://redis-svc:6379" - - [network_server] - net_id="000000" - - [network_server.band] - name="EU868" - - [network_server.network_settings] - - [[network_server.network_settings.extra_channels]] - frequency=867100000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867300000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867500000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867700000 - min_dr=0 - max_dr=5 - - [[network_server.network_settings.extra_channels]] - frequency=867900000 - min_dr=0 - max_dr=5 - - [network_server.gateway.backend.mqtt] - server="tcp://mosquitto-svc:1883" - - [join_server.default] - server="http://chirpstack-application-server-svc:8003" diff --git a/helm/charts/chirpstack-network-server/templates/deployment.yaml b/helm/charts/chirpstack-network-server/templates/deployment.yaml deleted file mode 100644 index dde3dcc..0000000 --- a/helm/charts/chirpstack-network-server/templates/deployment.yaml +++ /dev/null @@ -1,52 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - annotations: - sidecar.istio.io/inject: "false" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: grpc - containerPort: 8000 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - volumeMounts: - - name: {{ $.Chart.Name }}-configmap - mountPath: /etc/chirpstack-network-server/chirpstack-network-server.toml - subPath: chirpstack-network-server.toml - volumes: - - name: "{{ $.Chart.Name }}-configmap" - configMap: - name: "{{ $.Chart.Name }}-configmap" - restartPolicy: Always diff --git a/helm/charts/chirpstack-network-server/templates/service.yaml b/helm/charts/chirpstack-network-server/templates/service.yaml deleted file mode 100644 index 2288f7e..0000000 --- a/helm/charts/chirpstack-network-server/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: grpc - port: 8000 - targetPort: 8000 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/chirpstack-network-server/values.yaml b/helm/charts/chirpstack-network-server/values.yaml deleted file mode 100644 index 980a8e1..0000000 --- a/helm/charts/chirpstack-network-server/values.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: chirpstack - -# Image that needs to be used. -DOCKER_IMAGE_NAME: chirpstack-network-server -DOCKER_IMAGE_TAG: '3.16.8' - -DOCKER_IMAGE_PULL_POLICY: Always - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 diff --git a/helm/charts/chirpstack/Chart.yaml b/helm/charts/chirpstack/Chart.yaml deleted file mode 100644 index d7ae964..0000000 --- a/helm/charts/chirpstack/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: chirpstack -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/chirpstack/templates/configmap.yaml b/helm/charts/chirpstack/templates/configmap.yaml deleted file mode 100644 index d9a0725..0000000 --- a/helm/charts/chirpstack/templates/configmap.yaml +++ /dev/null @@ -1,169 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $.Chart.Name }}-configmap -data: - chirpstack.toml: | - [postgresql] - dsn="postgres://chirpstack:chirpstack@postgresChirpstackV4/chirpstack?sslmode=disable" - - [redis] - servers=["redis://redis:6379"] - - [network] - net_id="000000" - adr_plugins=["/etc/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js"] - enabled_regions=["eu868"] - - [api] - bind="0.0.0.0:8080" - jwt_secret="verysecret" - - [integration] - enabled=["mqtt"] - - [integration.mqtt] - server="tcp://mosquitto:1883" - json=true - - region_eu868.toml: | - # This file contains an example EU868 configuration. - [[regions]] - - # ID is an user-defined identifier for this region. - id="eu868" - - # Description is a short description for this region. - description="EU868" - - # Common-name refers to the common-name of this region as defined by - # the LoRa Alliance. - common_name="EU868" - - - # Gateway configuration. - [regions.gateway] - - # Force gateways as private. - # - # If enabled, gateways can only be used by devices under the same tenant. - force_gws_private=false - - - # Gateway backend configuration. - [regions.gateway.backend] - - # The enabled backend type. - enabled="mqtt" - - # MQTT configuration. - [regions.gateway.backend.mqtt] - - topic_prefix="" - - # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) - server="tcp://mosquitto:1883" - - # Gateway channel configuration. - # - # Note: this configuration is only used in case the gateway is using the - # ChirpStack Concentratord daemon. In any other case, this configuration - # is ignored. - [[regions.gateway.channels]] - frequency=868100000 - bandwidth=125000 - modulation="LORA" - spreading_factors=[7, 8, 9, 10, 11, 12] - - [[regions.gateway.channels]] - frequency=868300000 - bandwidth=125000 - modulation="LORA" - spreading_factors=[7, 8, 9, 10, 11, 12] - - [[regions.gateway.channels]] - frequency=868500000 - bandwidth=125000 - modulation="LORA" - spreading_factors=[7, 8, 9, 10, 11, 12] - - [[regions.gateway.channels]] - frequency=867100000 - bandwidth=125000 - modulation="LORA" - spreading_factors=[7, 8, 9, 10, 11, 12] - - [[regions.gateway.channels]] - frequency=867300000 - bandwidth=125000 - modulation="LORA" - spreading_factors=[7, 8, 9, 10, 11, 12] - - [[regions.gateway.channels]] - frequency=867500000 - bandwidth=125000 - modulation="LORA" - spreading_factors=[7, 8, 9, 10, 11, 12] - - [[regions.gateway.channels]] - frequency=867700000 - bandwidth=125000 - modulation="LORA" - spreading_factors=[7, 8, 9, 10, 11, 12] - - [[regions.gateway.channels]] - frequency=867900000 - bandwidth=125000 - modulation="LORA" - spreading_factors=[7, 8, 9, 10, 11, 12] - - [[regions.gateway.channels]] - frequency=868300000 - bandwidth=250000 - modulation="LORA" - spreading_factors=[7] - - [[regions.gateway.channels]] - frequency=868800000 - bandwidth=125000 - modulation="FSK" - datarate=50000 - - - # Region specific network configuration. - [regions.network] - - # Minimum data-rate. - min_dr=0 - - # Maximum data-rate. - max_dr=7 - - # Below is the common set of extra channels. Please make sure that these - # channels are also supported by the gateways. - [[regions.network.extra_channels]] - frequency=867100000 - min_dr=0 - max_dr=7 - - [[regions.network.extra_channels]] - frequency=867300000 - min_dr=0 - max_dr=7 - - [[regions.network.extra_channels]] - frequency=867500000 - min_dr=0 - max_dr=7 - - [[regions.network.extra_channels]] - frequency=867700000 - min_dr=0 - max_dr=7 - - [[regions.network.extra_channels]] - frequency=867900000 - min_dr=0 - max_dr=7 - - \ No newline at end of file diff --git a/helm/charts/chirpstack/templates/deployment.yaml b/helm/charts/chirpstack/templates/deployment.yaml deleted file mode 100644 index 73fca10..0000000 --- a/helm/charts/chirpstack/templates/deployment.yaml +++ /dev/null @@ -1,64 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - annotations: - sidecar.istio.io/inject: "false" - spec: - containers: - - name: {{ $.Chart.Name }} - args: ["-c", "/etc/chirpstack"] - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: grpc - containerPort: 8000 - protocol: TCP - - name: http - containerPort: 8080 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - volumeMounts: - - name: {{ $.Chart.Name }}-configmap - mountPath: /etc/chirpstack/chirpstack.toml - subPath: chirpstack.toml - - name: {{ $.Chart.Name }}-configmap - mountPath: /etc/chirpstack/region_eu868.toml - subPath: region_eu868.toml - - name: persistent-storage - mountPath: /etc/chirpstack/ - volumes: - - name: "{{ $.Chart.Name }}-configmap" - configMap: - name: "{{ $.Chart.Name }}-configmap" - - name: persistent-storage - persistentVolumeClaim: - claimName: persist-claim-chirpstack - restartPolicy: Always diff --git a/helm/charts/chirpstack/templates/service.yaml b/helm/charts/chirpstack/templates/service.yaml deleted file mode 100644 index 97ce7b8..0000000 --- a/helm/charts/chirpstack/templates/service.yaml +++ /dev/null @@ -1,55 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: LoadBalancer - ports: - - name: http - port: 8080 - targetPort: 8080 - protocol: TCP - - name: grpc-to-ns - port: 8001 - targetPort: 8001 - protocol: TCP - - name: grpc-join - port: 8003 - targetPort: 8003 - protocol: TCP - - name: grpc - port: 8000 - targetPort: 8000 - protocol: TCP - selector: - app: {{ $.Chart.Name }} - -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-clusterip-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: internal-http - port: 8081 - targetPort: 8080 - protocol: TCP - - name: internal-grpc-to-ns - port: 8002 - targetPort: 8001 - protocol: TCP - - name: internal-grpc-join - port: 8004 - targetPort: 8003 - protocol: TCP - - name: internal-grpc - port: 8005 - targetPort: 8000 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/chirpstack/templates/virtualservice.yaml b/helm/charts/chirpstack/templates/virtualservice.yaml deleted file mode 100644 index 4561dd9..0000000 --- a/helm/charts/chirpstack/templates/virtualservice.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: "{{ $.Chart.Name }}-virtualservice" -spec: - hosts: - - {{ .Values.INGRESS_ADDRESS | default (printf "%s-%s.%s" .Release.Namespace $.Chart.Name .Values.global.DOMAIN_NAME)}} - gateways: - - istio-system/istio-ingressgateway - http: - - name: {{ $.Chart.Name }} - route: - - destination: - port: - number: 8081 - host: "{{ $.Chart.Name }}-clusterip-svc" - headers: - response: - add: - Cache-Control: no-cache # Telling browsers to not cache our responses. \ No newline at end of file diff --git a/helm/charts/chirpstack/values.yaml b/helm/charts/chirpstack/values.yaml deleted file mode 100644 index ca396e5..0000000 --- a/helm/charts/chirpstack/values.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: chirpstack - -# Image that needs to be used. -DOCKER_IMAGE_NAME: chirpstack -DOCKER_IMAGE_TAG: '4.6' - -DOCKER_IMAGE_PULL_POLICY: Always - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 diff --git a/helm/charts/mosquitto-os2iot/Chart.yaml b/helm/charts/mosquitto-os2iot/Chart.yaml deleted file mode 100644 index dd97413..0000000 --- a/helm/charts/mosquitto-os2iot/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: mosquitto-os2iot -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/mosquitto-os2iot/templates/configmap.yaml b/helm/charts/mosquitto-os2iot/templates/configmap.yaml deleted file mode 100644 index e45151a..0000000 --- a/helm/charts/mosquitto-os2iot/templates/configmap.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $.Chart.Name }}-configmap -data: - go-auth.conf: | - auth_plugin /home/mosquitto-go-auth/go-auth.so - listener 8885 - - cafile /etc/mosquitto/ca_certificates/ca.crt - keyfile /etc/mosquitto/certs/server.key - certfile /etc/mosquitto/certs/server.crt - tls_version tlsv1.3 - - auth_opt_backends postgres - - auth_opt_pg_host {{ .Values.deployment.env.DATABASE_HOST }} - auth_opt_pg_port {{ .Values.deployment.env.DATABASE_PORT }} - auth_opt_pg_user {{ .Values.deployment.env.DATABASE_USERNAME }} - auth_opt_pg_password {{ .Values.deployment.env.DATABASE_PASSWORD }} - auth_opt_pg_dbname {{ .Values.deployment.env.DATABASE_NAME }} - auth_opt_pg_userquery SELECT mqttPassword FROM iot_device WHERE mqttUsername = $1 limit 1 - auth_opt_pg_superquery SELECT COUNT(*) FROM iot_device WHERE (mqttusername = $1 AND permissions = 'superUser') - auth_opt_pg_aclquery SELECT mqttTopicName FROM iot_device WHERE (mqttUsername = $1 AND permissions = 'write') OR (9 = $2 AND mqttUsername = $1) - - auth_opt_pg_sslmode verify-ca - auth_opt_hasher pbkdf2 - - auth_opt_hasher_salt_size 16 - auth_opt_hasher_iterations 1000 - auth_opt_hasher_keylen 32 - auth_opt_hasher_algorithm sha512 - - auth_opt_retry_count 5 - auth_opt_pg_connect_tries 5 - - listener 8884 - require_certificate true - use_identity_as_username true - - auth_opt_backends postgres - - auth_opt_pg_host {{ .Values.deployment.env.DATABASE_HOST }} - auth_opt_pg_port {{ .Values.deployment.env.DATABASE_PORT }} - auth_opt_pg_user {{ .Values.deployment.env.DATABASE_USERNAME }} - auth_opt_pg_password {{ .Values.deployment.env.DATABASE_PASSWORD }} - auth_opt_pg_dbname {{ .Values.deployment.env.DATABASE_NAME }} - auth_opt_pg_userquery SELECT mqttPassword FROM iot_device WHERE mqttUsername = $1 limit 1 - auth_opt_pg_superquery SELECT COUNT(*) FROM iot_device WHERE (mqttusername = $1 AND permissions = 'superUser') - auth_opt_pg_aclquery SELECT mqttTopicName FROM iot_device WHERE (mqttUsername = $1 AND permissions = 'write') OR (9 = $2 AND mqttUsername = $1) - - auth_opt_pg_sslmode verify-ca - - cafile /etc/mosquitto/ca_certificates/ca.crt - keyfile /etc/mosquitto/certs/server.key - certfile /etc/mosquitto/certs/server.crt - tls_version tlsv1.3 \ No newline at end of file diff --git a/helm/charts/mosquitto-os2iot/templates/deployment.yaml b/helm/charts/mosquitto-os2iot/templates/deployment.yaml deleted file mode 100644 index 8e05bc0..0000000 --- a/helm/charts/mosquitto-os2iot/templates/deployment.yaml +++ /dev/null @@ -1,65 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}" - imagePullPolicy: {{ .Values.deployment.image.pullPolicy }} - ports: - - name: mos-cert - containerPort: 8884 - protocol: TCP - - name: mos-userpass - containerPort: 8885 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - volumeMounts: - - name: {{ $.Chart.Name }}-configmap - mountPath: /etc/mosquitto/conf.d/go-auth.conf - subPath: go-auth.conf - - name: secret-ca-crt - mountPath: /etc/mosquitto/ca_certificates - readOnly: true - - name: secret-server-key - mountPath: /etc/mosquitto/certs - readOnly: true - volumes: - - name: "{{ $.Chart.Name }}-configmap" - configMap: - name: "{{ $.Chart.Name }}-configmap" - - name: secret-ca-crt - secret: - secretName: ca-keys - - name: secret-server-key - secret: - secretName: server-keys - restartPolicy: Always diff --git a/helm/charts/mosquitto-os2iot/templates/service.yaml b/helm/charts/mosquitto-os2iot/templates/service.yaml deleted file mode 100644 index 041c9f9..0000000 --- a/helm/charts/mosquitto-os2iot/templates/service.yaml +++ /dev/null @@ -1,19 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: mosquitto-os2iot - port: 8884 - targetPort: 8884 - protocol: TCP - - name: mosquitto-os2iot - port: 8885 - targetPort: 8885 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/mosquitto-os2iot/templates/virtualservice.yaml b/helm/charts/mosquitto-os2iot/templates/virtualservice.yaml deleted file mode 100644 index 2916e8d..0000000 --- a/helm/charts/mosquitto-os2iot/templates/virtualservice.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: "{{ $.Chart.Name }}-virtualservice" -spec: - hosts: - - {{ .Values.INGRESS_ADDRESS | default (printf "%s-%s.%s" .Release.Namespace $.Chart.Name .Values.global.DOMAIN_NAME)}} - gateways: - - istio-system/istio-ingressgateway - http: - - name: {{ $.Chart.Name }} - route: - - destination: - port: - number: 8884 - number: 8885 - host: "{{ $.Chart.Name }}-svc" diff --git a/helm/charts/mosquitto-os2iot/values.yaml b/helm/charts/mosquitto-os2iot/values.yaml deleted file mode 100644 index 49962b3..0000000 --- a/helm/charts/mosquitto-os2iot/values.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -# CONTAINER_REGISTRY: postgres - -# Image that needs to be used. -DOCKER_IMAGE_NAME: mosquitto-os2iot - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 - -deployment: - env: - "DATABASE_HOST": "" - "DATABASE_PORT": "" - "DATABASE_USERNAME": "" - "DATABASE_PASSWORD": "" - "DATABASE_NAME": "" diff --git a/helm/charts/mosquitto/Chart.yaml b/helm/charts/mosquitto/Chart.yaml deleted file mode 100644 index b39a1b7..0000000 --- a/helm/charts/mosquitto/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: mosquitto -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/mosquitto/templates/configmap.yaml b/helm/charts/mosquitto/templates/configmap.yaml deleted file mode 100644 index 35d6a0f..0000000 --- a/helm/charts/mosquitto/templates/configmap.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $.Chart.Name }}-configmap -data: - mosquitto.conf: | - listener 1883 - allow_anonymous true diff --git a/helm/charts/mosquitto/templates/deployment.yaml b/helm/charts/mosquitto/templates/deployment.yaml deleted file mode 100644 index 250981d..0000000 --- a/helm/charts/mosquitto/templates/deployment.yaml +++ /dev/null @@ -1,50 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: mosquitto - containerPort: 1883 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - volumeMounts: - - name: {{ $.Chart.Name }}-configmap - mountPath: /mosquitto/config/mosquitto.conf - subPath: mosquitto.conf - volumes: - - name: "{{ $.Chart.Name }}-configmap" - configMap: - name: "{{ $.Chart.Name }}-configmap" - restartPolicy: Always diff --git a/helm/charts/mosquitto/templates/service.yaml b/helm/charts/mosquitto/templates/service.yaml deleted file mode 100644 index 7f011b1..0000000 --- a/helm/charts/mosquitto/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: mosquitto - port: 1883 - targetPort: 1883 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/mosquitto/templates/virtualservice.yaml b/helm/charts/mosquitto/templates/virtualservice.yaml deleted file mode 100644 index dc2d7e9..0000000 --- a/helm/charts/mosquitto/templates/virtualservice.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: "{{ $.Chart.Name }}-virtualservice" -spec: - hosts: - - {{ .Values.INGRESS_ADDRESS | default (printf "%s-%s.%s" .Release.Namespace $.Chart.Name .Values.global.DOMAIN_NAME)}} - gateways: - - istio-system/istio-ingressgateway - http: - - name: {{ $.Chart.Name }} - route: - - destination: - port: - number: 1883 - host: "{{ $.Chart.Name }}-svc" diff --git a/helm/charts/mosquitto/values.yaml b/helm/charts/mosquitto/values.yaml deleted file mode 100644 index 9903a97..0000000 --- a/helm/charts/mosquitto/values.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -# CONTAINER_REGISTRY: postgres - -# Image that needs to be used. -DOCKER_IMAGE_NAME: eclipse-mosquitto -DOCKER_IMAGE_TAG: 2 - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 diff --git a/helm/charts/os2iot-backend/Chart.yaml b/helm/charts/os2iot-backend/Chart.yaml deleted file mode 100644 index c53b5a2..0000000 --- a/helm/charts/os2iot-backend/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: os2iot-backend -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/os2iot-backend/templates/deployment.yaml b/helm/charts/os2iot-backend/templates/deployment.yaml deleted file mode 100644 index 9026844..0000000 --- a/helm/charts/os2iot-backend/templates/deployment.yaml +++ /dev/null @@ -1,107 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - restartPolicy: Always - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: http - containerPort: 3000 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - livenessProbe: - httpGet: - path: /api/v1/healthcheck - port: 3000 - initialDelaySeconds: 30 - periodSeconds: 3 - env: - - name: DATABASE_HOSTNAME - value: os2iot-postgres-svc - - name: DATABASE_PORT - value: '5432' - - name: KAFKA_HOSTNAME - value: os2iot-kafka-svc - - name: KAFKA_PORT - value: '9092' - - name: CHIRPSTACK_HOSTNAME - value: chirpstack-svc - - name: CHIRPSTACK_PORT - value: 8084 - - name: CS_MQTT_HOSTNAME - value: mosquitto-svc - - name: CS_MQTT_PORT - value: '1883' - - name: BACKEND_BASEURL - value: 'https://test-os2iot-backend.os2iot.dk' - - name: KOMBIT_CERTIFICATEPRIVATEKEY - value: "{{ .Values.KOMBIT_CERTIFICATEPRIVATEKEY }}" - - name: KOMBIT_ENTRYPOINT - value: "{{ .Values.KOMBIT_ENTRYPOINT }}" - - name: LOG_LEVEL - value: error - - name: EMAIL_PORT - value: '587' - - name: EMAIL_HOST - value: smtp.ethereal.email - - name: EMAIL_USER - value: some-login-email@somehost.dk - - name: EMAIL_PASS - value: some-login-pass - - name: EMAIL_FROM - value: some-from-email@somehost.dk - - name: MQTT_SUPER_USER_PASSWORD - value: some-super-user-password - - name: MQTT_BROKER_HOSTNAME - value: some-mqtt-broker-hostname - - name: ENCRYPTION_SYMMETRIC_KEY - value: some-encryption-symmetric-key - - name: CA_KEY_PASSWORD - value: some-ca-key-password - - name: CHIRPSTACK_API_KEY - value: apikey - volumeMounts: - - name: secret-ca-crt - mountPath: /tmp/os2iot/backend/resources - readOnly: true - volumes: - - name: "{{ $.Chart.Name }}-configmap" - configMap: - name: "{{ $.Chart.Name }}-configmap" - - name: secret-ca-crt - secret: - secretName: ca-keys - restartPolicy: Always - - \ No newline at end of file diff --git a/helm/charts/os2iot-backend/templates/service.yaml b/helm/charts/os2iot-backend/templates/service.yaml deleted file mode 100644 index 72c8898..0000000 --- a/helm/charts/os2iot-backend/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: http - port: 3000 - targetPort: 3000 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/os2iot-backend/templates/virtualservice.yaml b/helm/charts/os2iot-backend/templates/virtualservice.yaml deleted file mode 100644 index e1a20ea..0000000 --- a/helm/charts/os2iot-backend/templates/virtualservice.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: "{{ $.Chart.Name }}-virtualservice" -spec: - hosts: - - {{ .Values.INGRESS_ADDRESS | default (printf "%s-%s.%s" .Release.Namespace $.Chart.Name .Values.global.DOMAIN_NAME)}} - gateways: - - istio-system/istio-ingressgateway - http: - - name: {{ $.Chart.Name }} - route: - - destination: - port: - number: 3000 - host: "{{ $.Chart.Name }}-svc" - headers: - response: - add: - Cache-Control: no-cache # Telling browsers to not cache our responses. \ No newline at end of file diff --git a/helm/charts/os2iot-backend/values.yaml b/helm/charts/os2iot-backend/values.yaml deleted file mode 100644 index 4726881..0000000 --- a/helm/charts/os2iot-backend/values.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: os2iot.azurecr.io - -# Image that needs to be used. -DOCKER_IMAGE_NAME: os2iot-backend -# DOCKER_IMAGE_TAG: latest - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 diff --git a/helm/charts/os2iot-frontend/Chart.yaml b/helm/charts/os2iot-frontend/Chart.yaml deleted file mode 100644 index 36c2df7..0000000 --- a/helm/charts/os2iot-frontend/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: os2iot-frontend -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/os2iot-frontend/templates/configmap.yaml b/helm/charts/os2iot-frontend/templates/configmap.yaml deleted file mode 100644 index 222155f..0000000 --- a/helm/charts/os2iot-frontend/templates/configmap.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $.Chart.Name }}-configmap -data: - PRODUCTION: "true" - BASE_URL: "http://localhost:3000/api/v1/" - TABLE_PAGE_SIZE: "25" \ No newline at end of file diff --git a/helm/charts/os2iot-frontend/templates/deployment.yaml b/helm/charts/os2iot-frontend/templates/deployment.yaml deleted file mode 100644 index 1fc33cb..0000000 --- a/helm/charts/os2iot-frontend/templates/deployment.yaml +++ /dev/null @@ -1,45 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: http - containerPort: 8081 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - envFrom: - - configMapRef: - name: {{ $.Chart.Name }}-configmap - restartPolicy: Always diff --git a/helm/charts/os2iot-frontend/templates/service.yaml b/helm/charts/os2iot-frontend/templates/service.yaml deleted file mode 100644 index fb4f6a0..0000000 --- a/helm/charts/os2iot-frontend/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: http - port: 8081 - targetPort: 8081 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/os2iot-frontend/templates/virtualservice.yaml b/helm/charts/os2iot-frontend/templates/virtualservice.yaml deleted file mode 100644 index faa75bb..0000000 --- a/helm/charts/os2iot-frontend/templates/virtualservice.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: "{{ $.Chart.Name }}-virtualservice" -spec: - hosts: # v - note no chart.name here. - - {{ .Values.INGRESS_ADDRESS | default (printf "%s.%s" .Release.Namespace .Values.global.DOMAIN_NAME)}} - gateways: - - istio-system/istio-ingressgateway - http: - - name: {{ $.Chart.Name }} - route: - - destination: - port: - number: 8081 - host: "{{ $.Chart.Name }}-svc" - headers: - response: - add: - Cache-Control: no-cache # Telling browsers to not cache our responses. \ No newline at end of file diff --git a/helm/charts/os2iot-frontend/values.yaml b/helm/charts/os2iot-frontend/values.yaml deleted file mode 100644 index 1c76400..0000000 --- a/helm/charts/os2iot-frontend/values.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: os2iot.azurecr.io - -# Image that needs to be used. -DOCKER_IMAGE_NAME: os2iot-frontend -# DOCKER_IMAGE_TAG: latest - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 diff --git a/helm/charts/os2iot-kafka/Chart.yaml b/helm/charts/os2iot-kafka/Chart.yaml deleted file mode 100644 index ad42ab0..0000000 --- a/helm/charts/os2iot-kafka/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: os2iot-kafka -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/os2iot-kafka/templates/deployment.yaml b/helm/charts/os2iot-kafka/templates/deployment.yaml deleted file mode 100644 index 2a12779..0000000 --- a/helm/charts/os2iot-kafka/templates/deployment.yaml +++ /dev/null @@ -1,59 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: plaintext - containerPort: 9092 - protocol: TCP - - name: internal - containerPort: 9093 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - # Custom bellow: - env: - - name: KAFKA_BROKER_ID - value: "{{ $.Values.KAFKA_BROKER_ID }}" - - name: KAFKA_LISTENERS - value: "{{ $.Values.KAFKA_LISTENERS }}" - - name: KAFKA_ADVERTISED_LISTENERS - value: "{{ $.Values.KAFKA_ADVERTISED_LISTENERS }}" - - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP - value: "{{ $.Values.KAFKA_LISTENER_SECURITY_PROTOCOL_MAP }}" - - name: KAFKA_ZOOKEEPER_CONNECT - value: "{{ $.Values.KAFKA_ZOOKEEPER_CONNECT }}" - - name: ALLOW_PLAINTEXT_LISTENER - value: "{{ $.Values.ALLOW_PLAINTEXT_LISTENER }}" - restartPolicy: Always diff --git a/helm/charts/os2iot-kafka/templates/service.yaml b/helm/charts/os2iot-kafka/templates/service.yaml deleted file mode 100644 index b810f97..0000000 --- a/helm/charts/os2iot-kafka/templates/service.yaml +++ /dev/null @@ -1,19 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: plaintext - port: 9092 - targetPort: 9092 - protocol: TCP - - name: internal - port: 9093 - targetPort: 9093 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/os2iot-kafka/values.yaml b/helm/charts/os2iot-kafka/values.yaml deleted file mode 100644 index e2717a9..0000000 --- a/helm/charts/os2iot-kafka/values.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: bitnami - -# Image that needs to be used. -DOCKER_IMAGE_NAME: kafka -DOCKER_IMAGE_TAG: latest - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 - -KAFKA_BROKER_ID: 1 -KAFKA_LISTENERS: PLAINTEXT://:9092,INTERNAL://:9093 -KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://os2iot-kafka-svc:9092,INTERNAL://127.0.0.1:9093 -KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT -KAFKA_ZOOKEEPER_CONNECT: os2iot-zookeeper-svc:2181 -ALLOW_PLAINTEXT_LISTENER: yes diff --git a/helm/charts/os2iot-postgresql/Chart.yaml b/helm/charts/os2iot-postgresql/Chart.yaml deleted file mode 100644 index eec4635..0000000 --- a/helm/charts/os2iot-postgresql/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: os2iot-postgres -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/os2iot-postgresql/templates/deployment.yaml b/helm/charts/os2iot-postgresql/templates/deployment.yaml deleted file mode 100644 index 0e86e74..0000000 --- a/helm/charts/os2iot-postgresql/templates/deployment.yaml +++ /dev/null @@ -1,62 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: db - containerPort: 5432 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - # Custom bellow: - env: - - name: POSTGRES_DB - value: os2iot - - name: POSTGRES_PASSWORD - value: toi2so - - name: PGPASSWORD - value: toi2so - - name: POSTGRES_USER - value: os2iot - readinessProbe: - exec: - command: ["psql", "-w", "-U", "os2iot", "-d", "os2iot", "-c", "SELECT 1"] - initialDelaySeconds: 15 - timeoutSeconds: 2 - livenessProbe: - exec: - command: ["psql", "-w", "-U", "os2iot", "-d", "os2iot", "-c", "SELECT 1"] - initialDelaySeconds: 45 - timeoutSeconds: 2 - restartPolicy: Always diff --git a/helm/charts/os2iot-postgresql/templates/service.yaml b/helm/charts/os2iot-postgresql/templates/service.yaml deleted file mode 100644 index 9cbc15a..0000000 --- a/helm/charts/os2iot-postgresql/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: db - port: 5432 - targetPort: 5432 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/os2iot-postgresql/values.yaml b/helm/charts/os2iot-postgresql/values.yaml deleted file mode 100644 index 572edc5..0000000 --- a/helm/charts/os2iot-postgresql/values.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: postgis - -# Image that needs to be used. -DOCKER_IMAGE_NAME: postgis -DOCKER_IMAGE_TAG: latest - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 - -POSTGRES_DB: os2iot -POSTGRES_USER: os2iot -POSTGRES_PASSWORD: toi2so diff --git a/helm/charts/os2iot-zookeeper/Chart.yaml b/helm/charts/os2iot-zookeeper/Chart.yaml deleted file mode 100644 index 524bd72..0000000 --- a/helm/charts/os2iot-zookeeper/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: os2iot-zookeeper -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/os2iot-zookeeper/templates/deployment.yaml b/helm/charts/os2iot-zookeeper/templates/deployment.yaml deleted file mode 100644 index 5c0a50b..0000000 --- a/helm/charts/os2iot-zookeeper/templates/deployment.yaml +++ /dev/null @@ -1,46 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.CONTAINER_REGISTRY }}/{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: admin - containerPort: 2181 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - # Custom bellow: - env: - - name: ALLOW_ANONYMOUS_LOGIN - value: "{{ $.Values.ALLOW_ANONYMOUS_LOGIN }}" - restartPolicy: Always diff --git a/helm/charts/os2iot-zookeeper/templates/service.yaml b/helm/charts/os2iot-zookeeper/templates/service.yaml deleted file mode 100644 index 044b87a..0000000 --- a/helm/charts/os2iot-zookeeper/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: admin - port: 2181 - targetPort: 2181 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/os2iot-zookeeper/values.yaml b/helm/charts/os2iot-zookeeper/values.yaml deleted file mode 100644 index d7430ef..0000000 --- a/helm/charts/os2iot-zookeeper/values.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -CONTAINER_REGISTRY: bitnami - -# Image that needs to be used. -DOCKER_IMAGE_NAME: zookeeper -DOCKER_IMAGE_TAG: latest - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 - -ALLOW_ANONYMOUS_LOGIN: yes diff --git a/helm/charts/postgres/Chart.yaml b/helm/charts/postgres/Chart.yaml deleted file mode 100644 index 6ce6311..0000000 --- a/helm/charts/postgres/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: postgres -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/postgres/templates/configmap.yaml b/helm/charts/postgres/templates/configmap.yaml deleted file mode 100644 index c7f7712..0000000 --- a/helm/charts/postgres/templates/configmap.yaml +++ /dev/null @@ -1,35 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ $.Chart.Name }}-configmap -data: # Remember this contains passwords - might be an idea to use secrets and environment variables instead. - 001-init-chirpstack_ns.sh: | - #!/bin/bash - set -e - - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL - create role chirpstack_ns with login password 'chirpstack_ns'; - create database chirpstack_ns with owner chirpstack_ns; - EOSQL - 002-init-chirpstack_as.sh: | - #!/bin/bash - set -e - - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL - create role chirpstack_as with login password 'chirpstack_as'; - create database chirpstack_as with owner chirpstack_as; - EOSQL - 003-chirpstack_as_trgm.sh: | - #!/bin/bash - set -e - - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname="chirpstack_as" <<-EOSQL - create extension pg_trgm; - EOSQL - 004-chirpstack_as_hstore.sh: | - #!/bin/bash - set -e - - psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname="chirpstack_as" <<-EOSQL - create extension hstore; - EOSQL diff --git a/helm/charts/postgres/templates/deployment.yaml b/helm/charts/postgres/templates/deployment.yaml deleted file mode 100644 index 67f111f..0000000 --- a/helm/charts/postgres/templates/deployment.yaml +++ /dev/null @@ -1,63 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: db - containerPort: 5432 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - # Custom bellow: - env: - - name: POSTGRES_PASSWORD - value: root - volumeMounts: - - name: {{ $.Chart.Name }}-configmap - mountPath: /docker-entrypoint-initdb.d/001-init-chirpstack_ns.sh - subPath: 001-init-chirpstack_ns.sh - - name: {{ $.Chart.Name }}-configmap - mountPath: /docker-entrypoint-initdb.d/002-init-chirpstack_as.sh - subPath: 002-init-chirpstack_as.sh - - name: {{ $.Chart.Name }}-configmap - mountPath: /docker-entrypoint-initdb.d/003-chirpstack_as_trgm.sh - subPath: 003-chirpstack_as_trgm.sh - - name: {{ $.Chart.Name }}-configmap - mountPath: /docker-entrypoint-initdb.d/004-chirpstack_as_hstore.sh - subPath: 004-chirpstack_as_hstore.sh - volumes: - - name: "{{ $.Chart.Name }}-configmap" - configMap: - name: "{{ $.Chart.Name }}-configmap" - restartPolicy: Always diff --git a/helm/charts/postgres/templates/service.yaml b/helm/charts/postgres/templates/service.yaml deleted file mode 100644 index 9cbc15a..0000000 --- a/helm/charts/postgres/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: db - port: 5432 - targetPort: 5432 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/postgres/values.yaml b/helm/charts/postgres/values.yaml deleted file mode 100644 index c2c1862..0000000 --- a/helm/charts/postgres/values.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -# CONTAINER_REGISTRY: postgres - -# Image that needs to be used. -DOCKER_IMAGE_NAME: postgres -DOCKER_IMAGE_TAG: 9.6-alpine - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 - -POSTGRES_DB: os2iot -POSTGRES_USER: os2iot -POSTGRES_PASSWORD: toi2so diff --git a/helm/charts/redis/Chart.yaml b/helm/charts/redis/Chart.yaml deleted file mode 100644 index bdd7e14..0000000 --- a/helm/charts/redis/Chart.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v2 -name: redis -description: A Helm chart for Kubernetes - -# 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. -version: 0.1.2 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. -appVersion: 1.16.1 diff --git a/helm/charts/redis/templates/deployment.yaml b/helm/charts/redis/templates/deployment.yaml deleted file mode 100644 index 29c9e2c..0000000 --- a/helm/charts/redis/templates/deployment.yaml +++ /dev/null @@ -1,42 +0,0 @@ -kind: Deployment -apiVersion: apps/v1 -metadata: - name: {{ $.Chart.Name }} - labels: - helm.sh/chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" - app.kubernetes.io/name: {{ $.Chart.Name }} - app.kubernetes.io/instance: {{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }} - app.kubernetes.io/managed-by: {{ .Release.Service }} -spec: - replicas: {{ .Values.REPLICAS }} - selector: - matchLabels: - app: {{ $.Chart.Name }} - strategy: - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - type: RollingUpdate - revisionHistoryLimit: {{ .Values.REVISION_HISTORY_LIMIT }} - template: - metadata: - labels: - app: {{ $.Chart.Name }} - version: "{{ $.Chart.Name }}-{{ .Values.DOCKER_IMAGE_TAG }}" - spec: - containers: - - name: {{ $.Chart.Name }} - image: "{{ .Values.DOCKER_IMAGE_NAME }}:{{ .Values.DOCKER_IMAGE_TAG }}" - imagePullPolicy: {{ .Values.DOCKER_IMAGE_PULL_POLICY }} - ports: - - name: redis - containerPort: 6379 - protocol: TCP - resources: - limits: - cpu: 150m - memory: 512Mi - requests: - cpu: 5m - memory: 128Mi - restartPolicy: Always diff --git a/helm/charts/redis/templates/service.yaml b/helm/charts/redis/templates/service.yaml deleted file mode 100644 index a694134..0000000 --- a/helm/charts/redis/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: {{ $.Chart.Name }}-svc - labels: - app: {{ $.Chart.Name }} -spec: - type: ClusterIP - ports: - - name: redis - port: 6379 - targetPort: 6379 - protocol: TCP - selector: - app: {{ $.Chart.Name }} \ No newline at end of file diff --git a/helm/charts/redis/values.yaml b/helm/charts/redis/values.yaml deleted file mode 100644 index d75b75b..0000000 --- a/helm/charts/redis/values.yaml +++ /dev/null @@ -1,18 +0,0 @@ -# Default values for aodb. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -# Registry the image comes from -# CONTAINER_REGISTRY: postgres - -# Image that needs to be used. -DOCKER_IMAGE_NAME: redis -DOCKER_IMAGE_TAG: 5-alpine - -DOCKER_IMAGE_PULL_POLICY: IfNotPresent - -# How many replicas of the pod? -REPLICAS: 1 - -# How much revision history should be stored? (can clog up etcd) -REVISION_HISTORY_LIMIT: 3 diff --git a/helm/values.yaml b/helm/values.yaml deleted file mode 100644 index e3aa070..0000000 --- a/helm/values.yaml +++ /dev/null @@ -1,2 +0,0 @@ -global: - DOMAIN_NAME: os2iot.dk diff --git a/mosquitto-broker/Dockerfile b/mosquitto-broker/Dockerfile index 0b6291a..4feee67 100644 --- a/mosquitto-broker/Dockerfile +++ b/mosquitto-broker/Dockerfile @@ -1,70 +1,73 @@ -FROM ubuntu - -RUN apt-get update && apt-get install libwebsockets-dev libc-ares2 libc-ares-dev openssl uuid uuid-dev gcc libssl-dev g++ golang-go wget git make -y - -RUN cd /home - -RUN wget http://mosquitto.org/files/source/mosquitto-2.0.15.tar.gz - -RUN tar xzvf mosquitto-2.0.15.tar.gz - -WORKDIR mosquitto-2.0.15 - -RUN sed -i 's/WITH_WEBSOCKETS:=no/WITH_WEBSOCKETS:=yes/g' config.mk - -RUN apt install libcjson1 libcjson-dev - -RUN make - -RUN make install - -RUN groupadd mosquitto - -RUN useradd -s /sbin/nologin mosquitto -g mosquitto -d /var/lib/mosquitto - -RUN mkdir -p /var/log/mosquitto/ /var/lib/mosquitto/ - -RUN chown -R mosquitto:mosquitto /var/log/mosquitto/ - -RUN chown -R mosquitto:mosquitto /var/lib/mosquitto/ - -WORKDIR /etc/systemd/system - -RUN touch mosquitto.service - -RUN echo "[Unit] \n\ -Description=Mosquitto MQTT v3.1/v5 server \n\ -Wants=network.target \n\ -Documentation=http://mosquitto.org/documentation/ \n\ -\n\ -[Service] \n\ -Type=simple \n\ -User=mosquitto \n\ -Group=mosquitto \n\ -ExecStart=/usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf \n\ -Restart=on-failure \n\ -SyslogIdentifier=Mosquitto \n\ -\n\ -[Install] \n\ -WantedBy=multi-user.target " >> /etc/systemd/system/mosquitto.service - -WORKDIR /usr/local/include - -RUN apt install mosquitto-dev libmosquitto-dev -y - -WORKDIR /home/ - -RUN git clone https://github.com/iegomez/mosquitto-go-auth.git - -WORKDIR /home/mosquitto-go-auth - -RUN make - -WORKDIR /etc/mosquitto/conf.d - -RUN touch go-auth.conf - -CMD mosquitto -c /etc/mosquitto/conf.d/go-auth.conf - - - +# Build stage +FROM ubuntu:22.04 AS builder + +ARG MOSQUITTO_VERSION=2.0.15 +ARG GO_AUTH_VERSION=2.1.0 + +# Install build dependencies in single layer +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + g++ \ + gcc \ + git \ + golang-go \ + libcjson-dev \ + libc-ares-dev \ + libssl-dev \ + libwebsockets-dev \ + make \ + mosquitto-dev \ + libmosquitto-dev \ + openssl \ + uuid-dev \ + wget \ + && rm -rf /var/lib/apt/lists/* + +# Build Mosquitto with WebSocket support +WORKDIR /build +RUN wget -q https://mosquitto.org/files/source/mosquitto-${MOSQUITTO_VERSION}.tar.gz \ + && tar xzf mosquitto-${MOSQUITTO_VERSION}.tar.gz \ + && cd mosquitto-${MOSQUITTO_VERSION} \ + && sed -i 's/WITH_WEBSOCKETS:=no/WITH_WEBSOCKETS:=yes/g' config.mk \ + && make \ + && make install DESTDIR=/build/mosquitto-install + +# Build mosquitto-go-auth plugin +WORKDIR /build +RUN git clone --depth 1 --branch ${GO_AUTH_VERSION} https://github.com/iegomez/mosquitto-go-auth.git \ + && cd mosquitto-go-auth \ + && make + +# Runtime stage +FROM ubuntu:22.04 + +# Install only runtime dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + libc-ares2 \ + libcjson1 \ + libssl3 \ + libwebsockets16 \ + && rm -rf /var/lib/apt/lists/* + +# Copy Mosquitto from builder +COPY --from=builder /build/mosquitto-install/usr/local/ /usr/local/ + +# Copy go-auth plugin to expected location +COPY --from=builder /build/mosquitto-go-auth/go-auth.so /home/mosquitto-go-auth/go-auth.so + +# Update library cache +RUN ldconfig + +# Create mosquitto user and directories +RUN groupadd -r mosquitto \ + && useradd -r -s /sbin/nologin -g mosquitto -d /var/lib/mosquitto mosquitto \ + && mkdir -p /var/log/mosquitto /var/lib/mosquitto /etc/mosquitto/conf.d \ + && chown -R mosquitto:mosquitto /var/log/mosquitto /var/lib/mosquitto + +EXPOSE 1883 8883 8884 8885 9001 + +USER mosquitto + +CMD ["mosquitto", "-c", "/etc/mosquitto/conf.d/go-auth.conf"] diff --git a/simulator/Dockerfile b/simulator/Dockerfile index 2e42dee..9565de3 100644 --- a/simulator/Dockerfile +++ b/simulator/Dockerfile @@ -1,19 +1,24 @@ -FROM ubuntu +FROM golang:1.21-bookworm -RUN apt-get update && apt-get install make +ARG LWN_SIMULATOR_VERSION=v1.0.3 -RUN apt-get update && apt-get install git -y +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + git \ + make \ + && rm -rf /var/lib/apt/lists/* -ARG DEBIAN_FRONTEND=noninteractive +WORKDIR /app -RUN apt-get update && apt-get install golang -y +RUN git clone --depth 1 --branch ${LWN_SIMULATOR_VERSION} https://github.com/UniCT-ARSLab/LWN-Simulator.git . \ + && make install-dep -RUN apt-get install ca-certificates -y +# Create non-root user with home directory for Go cache +RUN useradd -r -m -s /sbin/nologin simulator \ + && chown -R simulator:simulator /app -RUN git clone --branch v1.0.2 https://github.com/UniCT-ARSLab/LWN-Simulator.git +USER simulator -WORKDIR /LWN-Simulator +EXPOSE 8000 -RUN make install-dep - -CMD make run \ No newline at end of file +CMD ["make", "run"]