mirror of
https://github.com/openziti/ziti.git
synced 2026-10-13 15:51:21 +00:00
+51
-16
@@ -5,6 +5,7 @@ on:
|
||||
branches:
|
||||
- main
|
||||
- release-v*
|
||||
- release-next
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
@@ -28,6 +29,8 @@ env:
|
||||
jobs:
|
||||
mac-os-build:
|
||||
name: Build Mac OS binaries
|
||||
# allow fors to opt-out of time-consuming macOS builds
|
||||
if: vars.ZITI_SKIP_MACOS_BUILD != 'true'
|
||||
runs-on: macos-11
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
@@ -41,7 +44,7 @@ jobs:
|
||||
go-version: '1.20.x'
|
||||
|
||||
- name: Install Ziti CI
|
||||
uses: netfoundry/ziti-ci@v1
|
||||
uses: openziti/ziti-ci@v1
|
||||
|
||||
- name: Build and Test
|
||||
run: |
|
||||
@@ -58,6 +61,8 @@ jobs:
|
||||
|
||||
windows-build:
|
||||
name: Build Windows binaries
|
||||
# allow fors to opt-out of time-consuming Windows builds
|
||||
if: vars.ZITI_SKIP_WINDOWS_BUILD != 'true'
|
||||
runs-on: windows-2019
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
@@ -71,7 +76,7 @@ jobs:
|
||||
go-version: '1.20.x'
|
||||
|
||||
- name: Install Ziti CI
|
||||
uses: netfoundry/ziti-ci@v1
|
||||
uses: openziti/ziti-ci@v1
|
||||
|
||||
- name: Build and Test
|
||||
shell: bash
|
||||
@@ -89,6 +94,7 @@ jobs:
|
||||
|
||||
fablab-smoketest:
|
||||
name: Fablab Smoketest
|
||||
# not applicable to forks
|
||||
if: github.repository_owner == 'openziti'
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
@@ -103,7 +109,7 @@ jobs:
|
||||
go-version: '1.20.x'
|
||||
|
||||
- name: Install Ziti CI
|
||||
uses: netfoundry/ziti-ci@v1
|
||||
uses: openziti/ziti-ci@v1
|
||||
|
||||
- name: Build and Test
|
||||
env:
|
||||
@@ -111,12 +117,10 @@ jobs:
|
||||
ziti_ci_gpg_key: ${{ secrets.ZITI_CI_GPG_KEY }}
|
||||
ziti_ci_gpg_key_id: ${{ secrets.ZITI_CI_GPG_KEY_ID }}
|
||||
run: |
|
||||
mkdir -p dist/bin
|
||||
$(go env GOPATH)/bin/ziti-ci configure-git
|
||||
$(go env GOPATH)/bin/ziti-ci generate-build-info common/version/info_generated.go version
|
||||
pushd network-tests && go install ./... && popd
|
||||
pushd network-tests && go build -o ../dist/bin/ ./utils/... && popd
|
||||
go build -tags=all,tests -o dist/bin/ ./...
|
||||
go install -tags=all,tests ./...
|
||||
|
||||
- name: Create Zitilab Bindings
|
||||
run: |
|
||||
@@ -134,19 +138,22 @@ jobs:
|
||||
echo "ziti_version: $($(go env GOPATH)/bin/ziti-ci -q get-current-version)" >> ~/.fablab/bindings.yml
|
||||
cat ~/.fablab/bindings.yml
|
||||
|
||||
- name: Test Ziti Command
|
||||
env:
|
||||
ZITI_ROOT: dist/bin/
|
||||
- name: Create Test Environment
|
||||
run: |
|
||||
echo "ZITI_ROOT=$(go env GOPATH)/bin" >> "$GITHUB_ENV"
|
||||
$(go env GOPATH)/bin/simple-transfer create
|
||||
$(go env GOPATH)/bin/simple-transfer up
|
||||
|
||||
- name: Test Ziti Command
|
||||
run: |
|
||||
echo "ZITI_ROOT=$(go env GOPATH)/bin" >> "$GITHUB_ENV"
|
||||
$(go env GOPATH)/bin/simple-transfer run
|
||||
pushd network-tests && go test -v ./tests/... && popd
|
||||
|
||||
- name: Test Ziti Command Teardown
|
||||
if: always()
|
||||
env:
|
||||
ZITI_ROOT: dist/bin/
|
||||
run: |
|
||||
echo "ZITI_ROOT=$(go env GOPATH)/bin" >> "$GITHUB_ENV"
|
||||
$(go env GOPATH)/bin/simple-transfer dispose
|
||||
$(go env GOPATH)/bin/simple-transfer clean
|
||||
|
||||
@@ -154,6 +161,13 @@ jobs:
|
||||
|
||||
publish:
|
||||
name: Publish Binaries
|
||||
# - always() allows evaluating further conditional expressions even if
|
||||
# needed jobs were skipped
|
||||
if: |
|
||||
always()
|
||||
&& (needs.mac-os-build.result == 'success' || needs.mac-os-build.result == 'skipped')
|
||||
&& (needs.windows-build.result == 'success' || needs.windows-build.result == 'skipped')
|
||||
&& (needs.fablab-smoketest.result == 'success' || needs.fablab-smoketest.result == 'skipped')
|
||||
runs-on: ubuntu-20.04
|
||||
needs: [ mac-os-build, windows-build, fablab-smoketest ]
|
||||
outputs:
|
||||
@@ -175,7 +189,7 @@ jobs:
|
||||
python-version: '3.7'
|
||||
|
||||
- name: Install Ziti CI
|
||||
uses: netfoundry/ziti-ci@v1
|
||||
uses: openziti/ziti-ci@v1
|
||||
|
||||
- name: Build and Test
|
||||
env:
|
||||
@@ -201,19 +215,21 @@ jobs:
|
||||
retention-days: 5
|
||||
|
||||
- name: Download darwin release artifact
|
||||
if: needs.mac-os-build.result == 'success'
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: darwin-release-${{ github.run_id }}
|
||||
path: release/
|
||||
|
||||
- name: Download windows release artifact
|
||||
if: needs.windows-build.result == 'success'
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: windows-release-${{ github.run_id }}
|
||||
path: release/
|
||||
|
||||
- name: Install Jfrog CLI
|
||||
uses: jfrog/setup-jfrog-cli@v2
|
||||
uses: jfrog/setup-jfrog-cli@v3
|
||||
with:
|
||||
version: 1.51.1
|
||||
|
||||
@@ -276,9 +292,28 @@ jobs:
|
||||
with:
|
||||
ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }}
|
||||
|
||||
call-publish-docker-images:
|
||||
if: github.ref == 'refs/heads/main'
|
||||
name: Publish Docker Images
|
||||
call-publish-prerelease-docker-images:
|
||||
# always() re-enables evaluating conditionals in forks even if Windows or
|
||||
# macOS builds were skipped
|
||||
if: |
|
||||
always()
|
||||
&& needs.publish.result == 'success'
|
||||
&& github.ref == 'refs/heads/release-next'
|
||||
name: Publish Pre-Release Docker Images
|
||||
needs: publish
|
||||
uses: ./.github/workflows/publish-docker-images.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
ziti-version: release-next
|
||||
|
||||
call-publish-release-docker-images:
|
||||
# always() re-enables evaluating conditionals in forks even if Windows or
|
||||
# macOS builds were skipped
|
||||
if: |
|
||||
always()
|
||||
&& needs.publish.result == 'success'
|
||||
&& github.ref == 'refs/heads/main'
|
||||
name: Publish Release Docker Images
|
||||
needs: publish
|
||||
uses: ./.github/workflows/publish-docker-images.yml
|
||||
secrets: inherit
|
||||
|
||||
@@ -4,7 +4,7 @@ on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
ziti-version:
|
||||
description: 'Ziti Release Version'
|
||||
description: 'Tag or Branch Ref to Publish'
|
||||
type: string
|
||||
required: true
|
||||
|
||||
@@ -13,6 +13,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
ZITI_VERSION: ${{ inputs.ziti-version || github.event.inputs.ziti-version }}
|
||||
ZITI_CLI_IMAGE: ${{ vars.ZITI_CLI_IMAGE || 'docker.io/openziti/ziti-cli' }}
|
||||
ZITI_CONTROLLER_IMAGE: ${{ vars.ZITI_CONTROLLER_IMAGE || 'docker.io/openziti/ziti-controller' }}
|
||||
ZITI_ROUTER_IMAGE: ${{ vars.ZITI_ROUTER_IMAGE || 'docker.io/openziti/ziti-router' }}
|
||||
ZITI_TUNNEL_IMAGE: ${{ vars.ZITI_TUNNEL_IMAGE || 'docker.io/openziti/ziti-tunnel' }}
|
||||
steps:
|
||||
- name: Checkout Workspace
|
||||
uses: actions/checkout@v3
|
||||
@@ -35,16 +39,21 @@ jobs:
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_HUB_API_USER }}
|
||||
# it is preferable to obtain the username from a var so that
|
||||
# recurrences of the same string are not masked in CI output
|
||||
username: ${{ vars.DOCKER_HUB_API_USER || secrets.DOCKER_HUB_API_USER }}
|
||||
password: ${{ secrets.DOCKER_HUB_API_TOKEN }}
|
||||
|
||||
- name: Set Up Container Image Tags for Base CLI Container
|
||||
env:
|
||||
RELEASE_REPO: openziti/ziti-cli
|
||||
IMAGE_REPO: ${{ env.ZITI_CLI_IMAGE }}
|
||||
id: tagprep_cli
|
||||
run: |
|
||||
DOCKER_TAGS=""
|
||||
DOCKER_TAGS="${RELEASE_REPO}:${ZITI_VERSION},${RELEASE_REPO}:latest"
|
||||
DOCKER_TAGS="${IMAGE_REPO}:${ZITI_VERSION}"
|
||||
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
|
||||
DOCKER_TAGS+=",${IMAGE_REPO}:latest"
|
||||
fi
|
||||
echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}"
|
||||
echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT
|
||||
|
||||
@@ -65,11 +74,14 @@ jobs:
|
||||
|
||||
- name: Set Up Container Image Tags for Controller Container
|
||||
env:
|
||||
RELEASE_REPO: openziti/ziti-controller
|
||||
IMAGE_REPO: ${{ env. ZITI_CONTROLLER_IMAGE }}
|
||||
id: tagprep_ctrl
|
||||
run: |
|
||||
DOCKER_TAGS=""
|
||||
DOCKER_TAGS="${RELEASE_REPO}:${ZITI_VERSION},${RELEASE_REPO}:latest"
|
||||
DOCKER_TAGS="${IMAGE_REPO}:${ZITI_VERSION}"
|
||||
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
|
||||
DOCKER_TAGS+=",${IMAGE_REPO}:latest"
|
||||
fi
|
||||
echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}"
|
||||
echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT
|
||||
|
||||
@@ -85,15 +97,19 @@ jobs:
|
||||
tags: ${{ steps.tagprep_ctrl.outputs.DOCKER_TAGS }}
|
||||
build-args: |
|
||||
ZITI_VERSION=${{ env.ZITI_VERSION }}
|
||||
ZITI_CLI_IMAGE=${{ env.ZITI_CLI_IMAGE }}
|
||||
push: true
|
||||
|
||||
- name: Set Up Container Image Tags for Router Container
|
||||
env:
|
||||
RELEASE_REPO: openziti/ziti-router
|
||||
IMAGE_REPO: ${{ env.ZITI_ROUTER_IMAGE }}
|
||||
id: tagprep_router
|
||||
run: |
|
||||
DOCKER_TAGS=""
|
||||
DOCKER_TAGS="${RELEASE_REPO}:${ZITI_VERSION},${RELEASE_REPO}:latest"
|
||||
DOCKER_TAGS="${IMAGE_REPO}:${ZITI_VERSION}"
|
||||
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
|
||||
DOCKER_TAGS+=",${IMAGE_REPO}:latest"
|
||||
fi
|
||||
echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}"
|
||||
echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT
|
||||
|
||||
@@ -106,17 +122,21 @@ jobs:
|
||||
tags: ${{ steps.tagprep_router.outputs.DOCKER_TAGS }}
|
||||
build-args: |
|
||||
ZITI_VERSION=${{ env.ZITI_VERSION }}
|
||||
ZITI_CLI_IMAGE=${{ env.ZITI_CLI_IMAGE }}
|
||||
push: true
|
||||
|
||||
- name: Set Up Container Image Tags for Go Tunneler Container
|
||||
env:
|
||||
SNAPSHOT_REPO: netfoundry/ziti-tunnel
|
||||
RELEASE_REPO: openziti/ziti-tunnel
|
||||
IMAGE_REPO: ${{ env.ZITI_TUNNEL_IMAGE }}
|
||||
LEGACY_REPO: netfoundry/ziti-tunnel
|
||||
id: tagprep_tun
|
||||
run: |
|
||||
DOCKER_TAGS=""
|
||||
for REPO in ${SNAPSHOT_REPO} ${RELEASE_REPO}; do
|
||||
DOCKER_TAGS+=",${REPO}:${ZITI_VERSION},${REPO}:latest"
|
||||
for REPO in ${LEGACY_REPO} ${IMAGE_REPO}; do
|
||||
DOCKER_TAGS="${IMAGE_REPO}:${ZITI_VERSION}"
|
||||
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
|
||||
DOCKER_TAGS+=",${IMAGE_REPO}:latest"
|
||||
fi
|
||||
done
|
||||
DOCKER_TAGS=${DOCKER_TAGS#,} # drop leading comma char
|
||||
echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}"
|
||||
@@ -131,4 +151,5 @@ jobs:
|
||||
tags: ${{ steps.tagprep_tun.outputs.DOCKER_TAGS }}
|
||||
build-args: |
|
||||
ZITI_VERSION=${{ env.ZITI_VERSION }}
|
||||
ZITI_CLI_IMAGE=${{ env.ZITI_CLI_IMAGE }}
|
||||
push: true
|
||||
|
||||
@@ -8,9 +8,9 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v1
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_HUB_API_USER }}
|
||||
username: ${{ vars.DOCKER_HUB_API_USER || secrets.DOCKER_HUB_API_USER }}
|
||||
password: ${{ secrets.DOCKER_HUB_API_TOKEN }}
|
||||
- name: Push to Docker
|
||||
run: ./quickstart/docker/pushLatestDocker.sh
|
||||
|
||||
+9
-6
@@ -18,9 +18,12 @@ If you're interested in getting your project added to the list either:
|
||||
|
||||
Here's the list of projects using and adopting OpenZiti
|
||||
|
||||
| Project Name | Project Link | Logo | Description |
|
||||
|---------------------------|-----------------------------------------------|----------|-----------------|
|
||||
| NetFoundry | https://nfconsole.io/signup | <img src="https://netfoundry.io/logos/Logo-Dark-Backgrounds.jpg" width="100px"> | NetFoundry SaaS provides management, orchestrations, support, and SLAs for OpenZiti networks. |
|
||||
| HackBunker | https://www.hackbunker.com/ | <img src="https://irp.cdn-website.com/b429ad92/dms3rep/multi/hackbunker+logo+new.svg" width="100px"> | To open up a Zero Trust conversation in the C-Suite and Boardrooms of Blue-chip companies with a suite of products. |
|
||||
| DeltaSecure GmbH | https://deltasecure.de/ | <img src="https://deltasecure.de/wp-content/uploads/2022/10/DeltaSecure-Logo-gross-hell.png.png" width="100px"> | To provide Managed Security Operations Center services for small and medium-sized enterprises. Ziti overlay forms the basis for secure data transmission of customer data and within the SOC infrastructure. |
|
||||
| Resulticks | https://www.resulticks.com/ | <img src="https://www.resulticks.com/assets/platform/logos/resulticks-logo-blue.svg" width="100px"> | Resulticks Zero Trust API delivery network which forms the core of Resulticks' omnichannel marketing automation platform is built on OpenZiti to form a private dark mesh network. |
|
||||
| Project Name | Project Link | Logo | Description |
|
||||
|----------------------------------|-----------------------------------------------|----------|-----------------|
|
||||
| NetFoundry | https://nfconsole.io/signup | <img src="https://netfoundry.io/logos/Logo-Dark-Backgrounds.jpg" width="100px"> | NetFoundry SaaS provides management, orchestrations, support, and SLAs for OpenZiti networks. |
|
||||
| HackBunker | https://www.hackbunker.com/ | <img src="https://irp.cdn-website.com/b429ad92/dms3rep/multi/hackbunker+logo+new.svg" width="100px"> | To open up a Zero Trust conversation in the C-Suite and Boardrooms of Blue-chip companies with a suite of products. |
|
||||
| DeltaSecure GmbH | https://deltasecure.de/ | <img src="https://deltasecure.de/wp-content/uploads/2022/10/DeltaSecure-Logo-gross-hell.png.png" width="100px"> | To provide Managed Security Operations Center services for small and medium-sized enterprises. Ziti overlay forms the basis for secure data transmission of customer data and within the SOC infrastructure. |
|
||||
| Resulticks | https://www.resulticks.com/ | <img src="https://www.resulticks.com/assets/platform/logos/resulticks-logo-blue.svg" width="100px"> | Resulticks Zero Trust API delivery network which forms the core of Resulticks' omnichannel marketing automation platform is built on OpenZiti to form a private dark mesh network. |
|
||||
| KubeZT - Zero Trust Kubernetes | https://KubeZT.com/ | <img src="https://kubezt-public.s3-us-gov-east-1.amazonaws.com/github-org-logo.png" width="100px"> | KubeZT is an on-demand Kubernetes environment that enables developers to build and deploy highly secure applications for high-compliance organizations. |
|
||||
| Analytics HQ | https://AnalyticsHQ.com/ | <img src="https://ahq-public.s3-us-gov-west-1.amazonaws.com/ahq-logo.png" width="100px"> | Analytics HQ is a next-generation unified platform built for modern data management and advanced analytics. |
|
||||
| PITS Global Data Recovery Services | https://www.pitsdatarecovery.net/ | <img src="https://www.pitsdatarecovery.net/wp-content/uploads/2020/09/pits-logo.svg" width="100px"> | PITS Global Data Recovery Services is a data recovery company in the United States that offers services for recovering data from hard drives, SSDs, flash drives, RAID arrays and more. |
|
||||
|
||||
+240
-302
@@ -1,308 +1,246 @@
|
||||
# Release 0.27.9
|
||||
# Release 0.28.0
|
||||
|
||||
## What's New
|
||||
|
||||
* Refactored the websocket transport to fix a concurrency issue
|
||||
* v0.27.6 changed delete behaviors to error if the entity was not found. This release reverts that behavior.
|
||||
* Event changes
|
||||
* Added AMQP event writter for events
|
||||
* Add entity change events for auditing or external integration
|
||||
* Add usage event filtering
|
||||
* Add annotations to circuit events
|
||||
* CLI additions for `ziti` to login with certificates or external-jwt-signers
|
||||
* NOTE: ziti edge login flag changes:
|
||||
* `-c` flag has been changed to map to `--client-cert`
|
||||
* `--cert` is now `--ca` and has no short flag representation
|
||||
* `-e/--ext-jwt` allows a user to supply a file containing a jwt used with ext-jwt-signers to login
|
||||
* `-c/--client-cert` allows a certificate to be supplied to login (used with `-k/--client-key`)
|
||||
* `-k/--client-key` allows a key to be supplied to login (used with `-c/--client-cert`)
|
||||
* Config type changes
|
||||
* address fields in `intercept.v1`, `host.v1`, and `host.v2` config types now permit hostnames with underscores.
|
||||
* Edge Router/Tunneler now supports setting default UDP idle timeout/check interval
|
||||
|
||||
## Event Changes
|
||||
|
||||
### AMPQ Event Writer
|
||||
Previously events could only be emitted to a file. They can now also be emitted to an AMQP endpoint.
|
||||
|
||||
Example configuration:
|
||||
```
|
||||
events:
|
||||
jsonLogger:
|
||||
subscriptions:
|
||||
- type: fabric.circuits
|
||||
handler:
|
||||
type: amqp
|
||||
format: json
|
||||
url: "amqp://localhost:5672"
|
||||
queue: ziti
|
||||
durable: true //default:true
|
||||
autoDelete: false //default:false
|
||||
exclusive: false //default:false
|
||||
noWait: false //default:false
|
||||
```
|
||||
|
||||
### Entity Change Events
|
||||
OpenZiti can now be configured to emit entity change events. These events describe the changes when entities stored in the
|
||||
bbolt database are created, updated or deleted.
|
||||
|
||||
Note that events are emitted during the transaction. They are emitted at the end, so it's unlikely, but possible that an event will be emitted for a change which is rolled back. For this reason a following event will emitted when the change is committed. If a system crashes after commit, but before the committed event can be emitted, it will be emitted on the next startup.
|
||||
|
||||
Example configuration:
|
||||
|
||||
```
|
||||
events:
|
||||
jsonLogger:
|
||||
subscriptions:
|
||||
- type: entityChange
|
||||
include:
|
||||
- services
|
||||
- identities
|
||||
handler:
|
||||
type: file
|
||||
format: json
|
||||
path: /tmp/ziti-events.log
|
||||
```
|
||||
|
||||
See the related issue for discussion: https://github.com/openziti/fabric/issues/562
|
||||
|
||||
Example output:
|
||||
|
||||
```
|
||||
{
|
||||
"namespace": "entityChange",
|
||||
"eventId": "326faf6c-8123-42ae-9ed8-6fd9560eb567",
|
||||
"eventType": "created",
|
||||
"timestamp": "2023-05-11T21:41:47.128588927-04:00",
|
||||
"metadata": {
|
||||
"author": {
|
||||
"type": "identity",
|
||||
"id": "ji2Rt8KJ4",
|
||||
"name": "Default Admin"
|
||||
},
|
||||
"source": {
|
||||
"type": "rest",
|
||||
"auth": "edge",
|
||||
"localAddr": "localhost:1280",
|
||||
"remoteAddr": "127.0.0.1:37578",
|
||||
"method": "POST"
|
||||
},
|
||||
"version": "v0.0.0"
|
||||
},
|
||||
"entityType": "services",
|
||||
"isParentEvent": false,
|
||||
"initialState": null,
|
||||
"finalState": {
|
||||
"id": "6S0bCGWb6yrAutXwSQaLiv",
|
||||
"createdAt": "2023-05-12T01:41:47.128138887Z",
|
||||
"updatedAt": "2023-05-12T01:41:47.128138887Z",
|
||||
"tags": {},
|
||||
"isSystem": false,
|
||||
"name": "test",
|
||||
"terminatorStrategy": "smartrouting",
|
||||
"roleAttributes": [
|
||||
"goodbye",
|
||||
"hello"
|
||||
],
|
||||
"configs": null,
|
||||
"encryptionRequired": true
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
"namespace": "entityChange",
|
||||
"eventId": "326faf6c-8123-42ae-9ed8-6fd9560eb567",
|
||||
"eventType": "committed",
|
||||
"timestamp": "2023-05-11T21:41:47.129235443-04:00"
|
||||
}
|
||||
```
|
||||
|
||||
### Usage Event Filtering
|
||||
Usage events, version 3, can now be filtered based on type.
|
||||
|
||||
The valid types include:
|
||||
|
||||
* ingress.rx
|
||||
* ingress.tx
|
||||
* egress.rx
|
||||
* egress.tx
|
||||
* fabric.rx
|
||||
* fabric.tx
|
||||
|
||||
Example configuration:
|
||||
|
||||
```
|
||||
events:
|
||||
jsonLogger:
|
||||
subscriptions:
|
||||
- type: fabric.usage
|
||||
version: 3
|
||||
include:
|
||||
- ingress.rx
|
||||
- egress.rx
|
||||
```
|
||||
|
||||
### Circuit Event Annotations
|
||||
Circuit events initiated from the edge are now annotated with clientId, hostId and serviceId, to match usage events. The client and host ids are identity ids.
|
||||
|
||||
Example output:
|
||||
|
||||
```
|
||||
{
|
||||
"namespace": "fabric.circuits",
|
||||
"version": 2,
|
||||
"event_type": "created",
|
||||
"circuit_id": "0CEjWYiw6",
|
||||
"timestamp": "2023-05-05T11:44:03.242399585-04:00",
|
||||
"client_id": "clhaq7u7600o4ucgdpxy9i4t1",
|
||||
"service_id": "QARLLTKjqfLZytmSsIqba",
|
||||
"terminator_id": "7ddcd421-2b00-4b49-9ac0-8c78fe388c30",
|
||||
"instance_id": "",
|
||||
"creation_timespan": 1014280,
|
||||
"path": {
|
||||
"nodes": [
|
||||
"U7OwPtfjg",
|
||||
"a4rC9DrZ3"
|
||||
],
|
||||
"links": [
|
||||
"7Ru3hoxsssZzUNOyvd8Jcb"
|
||||
],
|
||||
"ingress_id": "K9lD",
|
||||
"egress_id": "rQLK",
|
||||
"initiator_local_addr": "100.64.0.1:1234",
|
||||
"initiator_remote_addr": "100.64.0.1:37640",
|
||||
"terminator_local_addr": "127.0.0.1:45566",
|
||||
"terminator_remote_addr": "127.0.0.1:1234"
|
||||
},
|
||||
"link_count": 1,
|
||||
"path_cost": 392151,
|
||||
"tags": {
|
||||
"clientId": "U7OwPtfjg",
|
||||
"hostId": "a4rC9DrZ3",
|
||||
"serviceId": "QARLLTKjqfLZytmSsIqba"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ER/T UDP Settings
|
||||
|
||||
The edge router tunneler now allows configuring a timeout and check interval for tproxy UDP intercepts. By default intercepted UDP
|
||||
connections will be closed after five minutes of no traffic, checking every thirty seconds. The configuration is done in the router
|
||||
config file, in the options for the tunnel module. Note that these configuration options only apply to tproxy intercepts, not to
|
||||
proxy or host side UDP connections.
|
||||
|
||||
Example configuration:
|
||||
|
||||
```yaml
|
||||
listeners:
|
||||
- binding: tunnel
|
||||
options:
|
||||
mode: tproxy
|
||||
udpIdleTimeout: 10s
|
||||
udpCheckInterval: 5s
|
||||
```
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
* github.com/openziti/agent: [v1.0.10 -> v1.0.13](https://github.com/openziti/agent/compare/v1.0.10...v1.0.13)
|
||||
* github.com/openziti/channel/v2: [v2.0.58 -> v2.0.78](https://github.com/openziti/channel/compare/v2.0.58...v2.0.78)
|
||||
* [Issue #98](https://github.com/openziti/channel/issues/98) - Set default connect timeout to 5 seconds
|
||||
|
||||
* github.com/openziti/edge: [v0.24.239 -> v0.24.309](https://github.com/openziti/edge/compare/v0.24.239...v0.24.309)
|
||||
* [Issue #1503](https://github.com/openziti/edge/issues/1503) - Support configurable UDP idle timeout and check interval for tproxy in edge router tunneler
|
||||
* [Issue #1471](https://github.com/openziti/edge/issues/1471) - UDP intercept connections report incorrect local/remote addresses, making confusing events
|
||||
* [Issue #629](https://github.com/openziti/edge/issues/629) - emit entity change events
|
||||
* [Issue #1295](https://github.com/openziti/edge/issues/1295) - Ensure DB migrations work properly in a clustered setup (edge)
|
||||
* [Issue #1418](https://github.com/openziti/edge/issues/1418) - Checks for session edge router availablility are inefficient
|
||||
|
||||
* github.com/openziti/edge-api: [v0.25.11 -> v0.25.24](https://github.com/openziti/edge-api/compare/v0.25.11...v0.25.24)
|
||||
* github.com/openziti/fabric: [v0.22.87 -> v0.23.29](https://github.com/openziti/fabric/compare/v0.22.87...v0.23.29)
|
||||
* [Issue #724](https://github.com/openziti/fabric/issues/724) - Controller should be notified of forwarding faults on links
|
||||
* [Issue #725](https://github.com/openziti/fabric/issues/725) - If reroute fails, circuit should be torn down
|
||||
* [Issue #706](https://github.com/openziti/fabric/issues/706) - Fix panic in link close
|
||||
* [Issue #700](https://github.com/openziti/fabric/issues/700) - Additional Health Checks exposed on Edge Router
|
||||
* [Issue #595](https://github.com/openziti/fabric/issues/595) - Add include filtering for V3 usage metrics
|
||||
* [Issue #684](https://github.com/openziti/fabric/issues/684) - Add tag annotations to circuit events, similar to usage events
|
||||
* [Issue #562](https://github.com/openziti/fabric/issues/562) - Add entity change events
|
||||
* [Issue #677](https://github.com/openziti/fabric/issues/677) - Rework raft startup
|
||||
* [Issue #582](https://github.com/openziti/fabric/issues/582) - Ensure DB migrations work properly in a clustered setup (fabric)
|
||||
* [Issue #668](https://github.com/openziti/fabric/issues/668) - Add network.Run watchdog, to warn if processing is delayed
|
||||
|
||||
* github.com/openziti/foundation/v2: [v2.0.21 -> v2.0.24](https://github.com/openziti/foundation/compare/v2.0.21...v2.0.24)
|
||||
* github.com/openziti/identity: [v1.0.45 -> v1.0.54](https://github.com/openziti/identity/compare/v1.0.45...v1.0.54)
|
||||
* github.com/openziti/runzmd: [v1.0.20 -> v1.0.24](https://github.com/openziti/runzmd/compare/v1.0.20...v1.0.24)
|
||||
* github.com/openziti/sdk-golang: [v0.18.76 -> v0.20.51](https://github.com/openziti/sdk-golang/compare/v0.18.76...v0.20.51)
|
||||
* [Issue #407](https://github.com/openziti/sdk-golang/issues/407) - Allowing filtering which edge router urls the sdk uses
|
||||
* [Issue #394](https://github.com/openziti/sdk-golang/issues/394) - SDK does not recover from API session expiration (during app/computer suspend)
|
||||
|
||||
* github.com/openziti/storage: [v0.1.49 -> v0.2.6](https://github.com/openziti/storage/compare/v0.1.49...v0.2.6)
|
||||
* github.com/openziti/transport/v2: [v2.0.72 -> v2.0.88](https://github.com/openziti/transport/compare/v2.0.72...v2.0.88)
|
||||
* github.com/openziti/metrics: [v1.2.19 -> v1.2.25](https://github.com/openziti/metrics/compare/v1.2.19...v1.2.25)
|
||||
* github.com/openziti/secretstream: v0.1.8 (new)
|
||||
* github.com/openziti/ziti: [v0.27.9 -> v0.28.0](https://github.com/openziti/ziti/compare/v0.27.9...v0.28.0)
|
||||
* [Issue #1112](https://github.com/openziti/ziti/issues/1112) - `ziti pki create` creates CA's and intermediates w/ the same DN
|
||||
* [Issue #1087](https://github.com/openziti/ziti/issues/1087) - re-enable CI in forks
|
||||
* [Issue #1013](https://github.com/openziti/ziti/issues/1013) - docker env password is renewed at each `docker-compose up`
|
||||
* [Issue #1077](https://github.com/openziti/ziti/issues/1077) - Show auth-policy name on identity list instead of id
|
||||
* [Issue #1119](https://github.com/openziti/ziti/issues/1119) - intercept.v1 config should permit underscores in the address
|
||||
* [Issue #1123](https://github.com/openziti/ziti/issues/1123) - cannot update config types with ziti cli
|
||||
|
||||
* github.com/openziti/channel/v2: [v2.0.53 -> v2.0.58](https://github.com/openziti/channel/compare/v2.0.53...v2.0.58)
|
||||
* github.com/openziti/edge: [v0.24.228 -> v0.24.239](https://github.com/openziti/edge/compare/v0.24.228...v0.24.239)
|
||||
* [Issue #1391](https://github.com/openziti/edge/issues/1391) - AuthPolicies for identities is missing a reference link
|
||||
|
||||
* github.com/openziti/edge-api: [v0.25.9 -> v0.25.11](https://github.com/openziti/edge-api/compare/v0.25.9...v0.25.11)
|
||||
* github.com/openziti/fabric: [v0.22.77 -> v0.22.87](https://github.com/openziti/fabric/compare/v0.22.77...v0.22.87)
|
||||
* github.com/openziti/foundation/v2: [v2.0.18 -> v2.0.21](https://github.com/openziti/foundation/compare/v2.0.18...v2.0.21)
|
||||
* github.com/openziti/identity: [v1.0.42 -> v1.0.45](https://github.com/openziti/identity/compare/v1.0.42...v1.0.45)
|
||||
* github.com/openziti/runzmd: [v1.0.18 -> v1.0.20](https://github.com/openziti/runzmd/compare/v1.0.18...v1.0.20)
|
||||
* github.com/openziti/storage: [v0.1.46 -> v0.1.49](https://github.com/openziti/storage/compare/v0.1.46...v0.1.49)
|
||||
* github.com/openziti/transport/v2: [v2.0.68 -> v2.0.72](https://github.com/openziti/transport/compare/v2.0.68...v2.0.72)
|
||||
* github.com/openziti/metrics: [v1.2.16 -> v1.2.19](https://github.com/openziti/metrics/compare/v1.2.16...v1.2.19)
|
||||
* github.com/openziti/ziti: [v0.27.8 -> v0.27.9](https://github.com/openziti/ziti/compare/v0.27.8...v0.27.9)
|
||||
|
||||
# Release 0.27.8
|
||||
|
||||
## What's New
|
||||
|
||||
* CLI additions for auth policies and external JWT signers
|
||||
* Performance improvements for listing services
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/edge: [v0.24.224 -> v0.24.228](https://github.com/openziti/edge/compare/v0.24.224...v0.24.228)
|
||||
* [Issue #1388](https://github.com/openziti/edge/issues/1388) - Make better use of identity service indexes for service list
|
||||
* [Issue #1386](https://github.com/openziti/edge/issues/1386) - PUT on identities results in an error and internal PANIC
|
||||
|
||||
* github.com/openziti/fabric: [v0.22.76 -> v0.22.77](https://github.com/openziti/fabric/compare/v0.22.76...v0.22.77)
|
||||
* github.com/openziti/storage: [v0.1.45 -> v0.1.46](https://github.com/openziti/storage/compare/v0.1.45...v0.1.46)
|
||||
* github.com/openziti/ziti: [v0.27.7 -> v0.27.8](https://github.com/openziti/ziti/compare/v0.27.7...v0.27.8)
|
||||
* [Issue #1064](https://github.com/openziti/ziti/issues/1064) - Support auth-policy assignments on identities via the CLI
|
||||
* [Issue #1058](https://github.com/openziti/ziti/issues/1058) - Allow Auth Policy Create/Update/Delete via CLI
|
||||
* [Issue #1059](https://github.com/openziti/ziti/issues/1059) - Expose Delete for Ext JWT Signers in CLI
|
||||
|
||||
# Release 0.27.7
|
||||
|
||||
## What's New
|
||||
|
||||
* This release updates the build to use Go 1.20
|
||||
|
||||
# Release 0.27.6
|
||||
|
||||
## What's New
|
||||
|
||||
* Makes inspect CLI more discoverable by adding subcommands for inspectable values
|
||||
* Adds new inspection allowing configs to be retrieved: `ziti fabric inspect config`
|
||||
* Many improvements to edge-router/tunneler hosting performance with large numbers of hosted services
|
||||
* Routers should no longer overwhelm controller while setting up or reestablishing hosting
|
||||
* Adds ability to disable router
|
||||
* Adds CLI command to compact offline bbolt database: `ziti ops db compact <src> <dst>`
|
||||
* Adds CLI command to re-enroll edge routers: `ziti edge re-enroll edge-router`
|
||||
* Routers can now be disabled. Connections to the controller from disabled routers will be rejected.
|
||||
* Disable with: `ziti fabric update router <router-id> --disabled`
|
||||
* Enable with: `ziti fabric update router <router-id> --disabled=false`
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/agent: [v1.0.8 -> v1.0.10](https://github.com/openziti/agent/compare/v1.0.8...v1.0.10)
|
||||
* github.com/openziti/channel/v2: [v2.0.27 -> v2.0.53](https://github.com/openziti/channel/compare/v2.0.27...v2.0.53)
|
||||
* [Issue #83](https://github.com/openziti/channel/issues/83) - Improve protocol mismatch error(s)
|
||||
* [Issue #93](https://github.com/openziti/channel/issues/93) - Fix atomic 64-bit alignment error on arm devices
|
||||
|
||||
* github.com/openziti/edge: [v0.24.125 -> v0.24.224](https://github.com/openziti/edge/compare/v0.24.125...v0.24.224)
|
||||
* [Issue #1373](https://github.com/openziti/edge/issues/1373) - Add support for disabled flag to edge and transit routers
|
||||
* [Issue #1374](https://github.com/openziti/edge/issues/1374) - Multiple MFA enrollments cannot be cleaned up by administrators
|
||||
* [Issue #1336](https://github.com/openziti/edge/issues/1336) - xgress_edge_tunnel shouldn't stop/start host on control channel reconnect
|
||||
* [Issue #1369](https://github.com/openziti/edge/issues/1369) - Add missing entity type id for TransitRouter
|
||||
* [Issue #1366](https://github.com/openziti/edge/issues/1366) - Error message incorrectly state 'invalid api session' when it's an invalid session
|
||||
* [Issue #1364](https://github.com/openziti/edge/issues/1364) - Cache api-sessions for tunneler router so we don't need to unnecessarily create new sessions
|
||||
* [Issue #1362](https://github.com/openziti/edge/issues/1362) - Rate limit terminator creates for router/tunneler
|
||||
* [Issue #1359](https://github.com/openziti/edge/issues/1359) - Sessions creates should be idempotent
|
||||
* [Issue #1355](https://github.com/openziti/edge/issues/1355) - Handle duplicate create terminator requests if create terminator fails
|
||||
* [Issue #1350](https://github.com/openziti/edge/issues/1350) - Router event processing can deadlock
|
||||
* [Issue #1329](https://github.com/openziti/edge/issues/1329) - UDP connections can drop data if datagrams are > 10k in size
|
||||
* [Issue #1310](https://github.com/openziti/edge/issues/1310) - Creating a cert backed ext-jwt-signer causes nil dereference
|
||||
|
||||
* github.com/openziti/edge-api: [v0.25.6 -> v0.25.9](https://github.com/openziti/edge-api/compare/v0.25.6...v0.25.9)
|
||||
* github.com/openziti/fabric: [v0.22.24 -> v0.22.76](https://github.com/openziti/fabric/compare/v0.22.24...v0.22.76)
|
||||
* [Issue #651](https://github.com/openziti/fabric/issues/651) - Add router enable/disable mechanism
|
||||
* [Issue #648](https://github.com/openziti/fabric/issues/648) - Add rate limiter pool to router for operations with potential to flood the controller
|
||||
* [Issue #610](https://github.com/openziti/fabric/issues/610) - Fix router disconnect when endpoint removed from cluster
|
||||
* [Issue #622](https://github.com/openziti/fabric/issues/622) - fatal error: concurrent map iteration and map write in logContext.WireEntry
|
||||
* [Issue #507](https://github.com/openziti/fabric/issues/507) - Add configuration for control channel heartbeat
|
||||
* [Issue #584](https://github.com/openziti/fabric/issues/584) - Add cluster events
|
||||
* [Issue #599](https://github.com/openziti/fabric/issues/599) - Add release and transfer leadership commands
|
||||
* [Issue #606](https://github.com/openziti/fabric/issues/606) - Ensure consistent use of peer address
|
||||
* [Issue #598](https://github.com/openziti/fabric/issues/598) - Add support to fabric inspect to propagate inspect to other controllers
|
||||
* [Issue #597](https://github.com/openziti/fabric/issues/597) - Make raft settings configurable
|
||||
* [Issue #604](https://github.com/openziti/fabric/issues/604) - Don't create link dropped msg metric until channel bind time
|
||||
* [Issue #638](https://github.com/openziti/fabric/issues/638) - Fix atomic 64-bit alignment error on arm devices
|
||||
|
||||
* github.com/openziti/foundation/v2: [v2.0.10 -> v2.0.18](https://github.com/openziti/foundation/compare/v2.0.10...v2.0.18)
|
||||
* github.com/openziti/identity: [v1.0.30 -> v1.0.42](https://github.com/openziti/identity/compare/v1.0.30...v1.0.42)
|
||||
* github.com/openziti/runzmd: [v1.0.9 -> v1.0.18](https://github.com/openziti/runzmd/compare/v1.0.9...v1.0.18)
|
||||
* github.com/openziti/sdk-golang: [v0.18.28 -> v0.18.76](https://github.com/openziti/sdk-golang/compare/v0.18.28...v0.18.76)
|
||||
* [Issue #356](https://github.com/openziti/sdk-golang/issues/356) - sdk connections should respect net.Conn deadline related API specifications
|
||||
|
||||
* github.com/openziti/storage: [v0.1.34 -> v0.1.45](https://github.com/openziti/storage/compare/v0.1.34...v0.1.45)
|
||||
* github.com/openziti/transport/v2: [v2.0.51 -> v2.0.68](https://github.com/openziti/transport/compare/v2.0.51...v2.0.68)
|
||||
* github.com/openziti/jwks: [v1.0.2 -> v1.0.3](https://github.com/openziti/jwks/compare/v1.0.2...v1.0.3)
|
||||
* github.com/openziti/metrics: [v1.2.3 -> v1.2.16](https://github.com/openziti/metrics/compare/v1.2.3...v1.2.16)
|
||||
* github.com/openziti/ziti: [v0.27.5 -> v0.27.6](https://github.com/openziti/ziti/compare/v0.27.5...v0.27.6)
|
||||
* [Issue #1041](https://github.com/openziti/ziti/issues/1041) - Add ziti compact command to CLI
|
||||
* [Issue #1032](https://github.com/openziti/ziti/issues/1032) - ziti edge create service fails silently if config names don't exist
|
||||
* [Issue #1031](https://github.com/openziti/ziti/issues/1031) - Fixed quickstart bug with arm and arm64 ambiguity when running quickstart on arm architecture
|
||||
|
||||
# Release 0.27.5
|
||||
|
||||
## What's New
|
||||
|
||||
* Fixes an issue with `ziti` CLI when using a globally trusted CA
|
||||
* Fixes bug where `ziti agent stack` was calling `ziti agent stats`
|
||||
* ziti controller/router no longer compare the running version with
|
||||
the latest from github by default. Set ZITI_CHECK_VERSION=true to
|
||||
enable this behavior
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/edge: [v0.24.121 -> v0.24.125](https://github.com/openziti/edge/compare/v0.24.121...v0.24.125)
|
||||
* github.com/openziti/fabric: [v0.22.20 -> v0.22.24](https://github.com/openziti/fabric/compare/v0.22.20...v0.22.24)
|
||||
* [Issue #601](https://github.com/openziti/fabric/issues/601) - Only use endpoints file in router once endpoints have changed
|
||||
* [Issue #583](https://github.com/openziti/fabric/issues/583) - Compress raft snapshots
|
||||
|
||||
* github.com/openziti/sdk-golang: [v0.18.27 -> v0.18.28](https://github.com/openziti/sdk-golang/compare/v0.18.27...v0.18.28)
|
||||
* github.com/openziti/storage: [v0.1.33 -> v0.1.34](https://github.com/openziti/storage/compare/v0.1.33...v0.1.34)
|
||||
* github.com/openziti/ziti: [v0.27.4 -> v0.27.5](https://github.com/openziti/ziti/compare/v0.27.4...v0.27.5)
|
||||
|
||||
# Release 0.27.4
|
||||
|
||||
## What's New
|
||||
|
||||
This release contains a fix for a controller deadlock
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/channel/v2: [v2.0.26 -> v2.0.27](https://github.com/openziti/channel/compare/v2.0.26...v2.0.27)
|
||||
* github.com/openziti/edge: [v0.24.115 -> v0.24.121](https://github.com/openziti/edge/compare/v0.24.115...v0.24.121)
|
||||
* [Issue #1303](https://github.com/openziti/edge/issues/1303) - Fix deadlock when flushing api session heartbeats
|
||||
|
||||
* github.com/openziti/fabric: [v0.22.19 -> v0.22.20](https://github.com/openziti/fabric/compare/v0.22.19...v0.22.20)
|
||||
* github.com/openziti/sdk-golang: [v0.18.26 -> v0.18.27](https://github.com/openziti/sdk-golang/compare/v0.18.26...v0.18.27)
|
||||
* github.com/openziti/transport/v2: [v2.0.50 -> v2.0.51](https://github.com/openziti/transport/compare/v2.0.50...v2.0.51)
|
||||
* github.com/openziti/ziti: [v0.27.3 -> v0.27.4](https://github.com/openziti/ziti/compare/v0.27.3...v0.27.4)
|
||||
|
||||
# Release 0.27.3
|
||||
|
||||
## What's New
|
||||
|
||||
* Docker images for `ziti` CLI
|
||||
|
||||
* New Raft interaction commands
|
||||
* `raft-leave` allows removal of controllers from the raft cluster
|
||||
* `raft-list` lists all connected controllers and their version/connected status
|
||||
* `fabric raft list-members` same info as the agent command, but over rest
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/agent: [v1.0.7 -> v1.0.8](https://github.com/openziti/agent/compare/v1.0.7...v1.0.8)
|
||||
* github.com/openziti/channel/v2: [v2.0.25 -> v2.0.26](https://github.com/openziti/channel/compare/v2.0.25...v2.0.26)
|
||||
* github.com/openziti/edge: [v0.24.95 -> v0.24.115](https://github.com/openziti/edge/compare/v0.24.95...v0.24.115)
|
||||
* [Issue #1292](https://github.com/openziti/edge/issues/1292) - Support alternative tproxy configuration methods
|
||||
|
||||
* github.com/openziti/edge-api: v0.25.6 (new)
|
||||
* github.com/openziti/fabric: [v0.22.7 -> v0.22.19](https://github.com/openziti/fabric/compare/v0.22.7...v0.22.19)
|
||||
* [Issue #592](https://github.com/openziti/fabric/issues/592) - Incoming "gateway" connections should be logged at a socket level
|
||||
* [Issue #588](https://github.com/openziti/fabric/issues/588) - Make service events more consistent
|
||||
* [Issue #589](https://github.com/openziti/fabric/issues/589) - Add duration to circuit updated and deleted events
|
||||
* [Issue #508](https://github.com/openziti/fabric/issues/508) - Refactor router debug ops for multiple controllers
|
||||
|
||||
* github.com/openziti/identity: [v1.0.29 -> v1.0.30](https://github.com/openziti/identity/compare/v1.0.29...v1.0.30)
|
||||
* github.com/openziti/runzmd: [v1.0.7 -> v1.0.9](https://github.com/openziti/runzmd/compare/v1.0.7...v1.0.9)
|
||||
* github.com/openziti/sdk-golang: [v0.18.21 -> v0.18.26](https://github.com/openziti/sdk-golang/compare/v0.18.21...v0.18.26)
|
||||
* github.com/openziti/storage: [v0.1.31 -> v0.1.33](https://github.com/openziti/storage/compare/v0.1.31...v0.1.33)
|
||||
* github.com/openziti/transport/v2: [v2.0.49 -> v2.0.50](https://github.com/openziti/transport/compare/v2.0.49...v2.0.50)
|
||||
* github.com/openziti/ziti: [v0.27.2 -> v0.27.3](https://github.com/openziti/ziti/compare/v0.27.2...v0.27.3)
|
||||
* [Issue #974](https://github.com/openziti/ziti/issues/974) - tunnel "host" and "proxy" modes shouldn't run the nameserver
|
||||
* [Issue #972](https://github.com/openziti/ziti/issues/972) - tunnel segfault
|
||||
|
||||
# Release 0.27.2
|
||||
|
||||
## What's New
|
||||
|
||||
* Bug fixes
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/channel/v2: [v2.0.24 -> v2.0.25](https://github.com/openziti/channel/compare/v2.0.24...v2.0.25)
|
||||
* github.com/openziti/edge: [v0.24.86 -> v0.24.95](https://github.com/openziti/edge/compare/v0.24.86...v0.24.95)
|
||||
* [Issue #1282](https://github.com/openziti/edge/issues/1282) - Ensure entity count events can be configured to only be emitted on the leader
|
||||
* [Issue #1279](https://github.com/openziti/edge/issues/1279) - Constrain config-type schema to accept only object types
|
||||
|
||||
* github.com/openziti/fabric: [v0.22.1 -> v0.22.7](https://github.com/openziti/fabric/compare/v0.22.1...v0.22.7)
|
||||
* [Issue #573](https://github.com/openziti/fabric/issues/573) - Ensure specific events aren't duplicated in raft cluster
|
||||
* [Issue #577](https://github.com/openziti/fabric/issues/577) - JSON Event formatter isn't putting events on their own line
|
||||
* [Issue #571](https://github.com/openziti/fabric/issues/571) - Move raft.advertiseAddress to ctrl for consistency
|
||||
* [Issue #569](https://github.com/openziti/fabric/issues/569) - Support automatic migration and agent based migration
|
||||
* [Issue #567](https://github.com/openziti/fabric/issues/567) - Remove link dropped_msg metrics for closed links
|
||||
* [Issue #566](https://github.com/openziti/fabric/issues/566) - Link listeners aren't properly configuring channel out queue size
|
||||
|
||||
* github.com/openziti/foundation/v2: [v2.0.9 -> v2.0.10](https://github.com/openziti/foundation/compare/v2.0.9...v2.0.10)
|
||||
* github.com/openziti/identity: [v1.0.28 -> v1.0.29](https://github.com/openziti/identity/compare/v1.0.28...v1.0.29)
|
||||
* github.com/openziti/sdk-golang: [v0.18.19 -> v0.18.21](https://github.com/openziti/sdk-golang/compare/v0.18.19...v0.18.21)
|
||||
* github.com/openziti/storage: [v0.1.30 -> v0.1.31](https://github.com/openziti/storage/compare/v0.1.30...v0.1.31)
|
||||
* github.com/openziti/transport/v2: [v2.0.48 -> v2.0.49](https://github.com/openziti/transport/compare/v2.0.48...v2.0.49)
|
||||
* github.com/openziti/metrics: [v1.2.2 -> v1.2.3](https://github.com/openziti/metrics/compare/v1.2.2...v1.2.3)
|
||||
* github.com/openziti/ziti: [v0.27.1 -> v0.27.2](https://github.com/openziti/ziti/compare/v0.27.1...v0.27.2)
|
||||
* [Issue #916](https://github.com/openziti/ziti/issues/916) - Allow defining resource tags via json in the cli
|
||||
|
||||
|
||||
# Release 0.27.1
|
||||
|
||||
## What's New
|
||||
|
||||
* Event streaming over websocket
|
||||
* `ziti fabric stream events`
|
||||
* Events use same JSON formatting as the file based streaming
|
||||
* Plain Text formatting removed
|
||||
* Individual streaming of metrics/circuits removed in favor of unified events streaming
|
||||
* Improvements to router/tunneler terminator creation
|
||||
* Create terminator requests are now idempotent, so repeated requests will not result in multiple terminators
|
||||
* Create terminator requests are now asynchronous, so responses will no longer get timed out
|
||||
* There is new timer metric from routers, timing how long terminator creates take: `xgress_edge_tunnel.terminator.create_timer`
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/edge: [v0.24.75 -> v0.24.86](https://github.com/openziti/edge/compare/v0.24.75...v0.24.86)
|
||||
* [Issue #1272](https://github.com/openziti/edge/issues/1272) - Mark xgress_edge and xgress_edge_tunnel created terminators as system entity
|
||||
* [Issue #1270](https://github.com/openziti/edge/issues/1270) - Make xgress_edge_tunnel service hosting more scalabe
|
||||
* [Issue #1268](https://github.com/openziti/edge/issues/1268) - session deletion can get stalled by restarts
|
||||
|
||||
* github.com/openziti/fabric: [v0.21.36 -> v0.22.1](https://github.com/openziti/fabric/compare/v0.21.36...v0.22.1)
|
||||
* [Issue #563](https://github.com/openziti/fabric/issues/563) - Allow streaming events over webscocket, replacing stream circuits and stream metrics
|
||||
* [Issue #552](https://github.com/openziti/fabric/issues/552) - Add minimum cost delta for smart routing
|
||||
* [Issue #558](https://github.com/openziti/fabric/issues/558) - Allow terminators to be marked as system entities
|
||||
|
||||
* github.com/openziti/ziti: [v0.27.0 -> v0.27.1](https://github.com/openziti/ziti/compare/v0.27.0...v0.27.1)
|
||||
* [Issue #928](https://github.com/openziti/ziti/issues/928) - ziti fabric update terminator should not require setting router
|
||||
* [Issue #929](https://github.com/openziti/ziti/issues/929) - zit fabric list terminators isn't showing cost or dynamic cost
|
||||
|
||||
# Release 0.27.0
|
||||
|
||||
## What's New
|
||||
|
||||
* Ziti CLI
|
||||
* The CLI has been cleaned up and unused, unusable and underused components have been removed or hidden
|
||||
* Add create/delete transit-router CLI commands
|
||||
* [Issue-706](https://github.com/openziti/ziti/issues/706) - Add port check to quickstart
|
||||
|
||||
## Ziti CLI
|
||||
|
||||
* The update command has been removed. It was non-functional, so this should not affect anyone
|
||||
* The adhoc, ping and playbook commands have been removed. These were ansible and vagrant commands that were not widely used.
|
||||
* Make the art command hidden, doesn't need to be removed, leave it as an easter egg
|
||||
* Move ziti ps command under ziti agent. Remove all ziti ps subcommands, as they already exist as ziti agent subcommands
|
||||
* Add `ziti controller` and `ziti router` commands
|
||||
* They should work exactly the same as `ziti-controller` and `ziti router`
|
||||
* The standalone binaries for `ziti-controller` and `ziti-router` are deprecated and will be removed in a future release
|
||||
* Add hidden `ziti tunnel` command
|
||||
* Should work exactly the same as `ziti-tunnel`
|
||||
* Is hidden as `ziti-edge-tunnel` is the preferred tunnelling application
|
||||
* The standalone binary `ziti-tunnel` is deprecated and will be removed in a future release
|
||||
* The db, log-format and unwrap commands have been moved under a new ops command
|
||||
* ziti executable download management has been deprecated
|
||||
* The init and uninstall commands have been removed
|
||||
* The install, upgrade, use and version commands have been hidden and will be hidden once tests using them are updated or replaced
|
||||
* The demo and tutorial commands have been moved under the new learn subcommand
|
||||
* `ziti edge enroll` now has a verbose option for additional debugging
|
||||
* The `ziti edge` CLI now support create/delete transit-router. This allows transit/fabric routers to be provisioned using an enrollment process, rather than requiring certs to be created externally. Note that this requires that the fabric router config file has a `csr` section.
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/agent: [v1.0.5 -> v1.0.7](https://github.com/openziti/agent/compare/v1.0.5...v1.0.7)
|
||||
* github.com/openziti/channel/v2: [v2.0.12 -> v2.0.24](https://github.com/openziti/channel/compare/v2.0.12...v2.0.24)
|
||||
* github.com/openziti/edge: [v0.24.36 -> v0.24.75](https://github.com/openziti/edge/compare/v0.24.36...v0.24.75)
|
||||
* [Issue #1253](https://github.com/openziti/edge/issues/1253) - Panic in controller getting hello from edge router
|
||||
* [Issue #1233](https://github.com/openziti/edge/issues/1233) - edge-routers ref link in identities endpoint is incorrectly keyed
|
||||
* [Issue #1234](https://github.com/openziti/edge/issues/1234) - identities missing service-config link ref
|
||||
* [Issue #1232](https://github.com/openziti/edge/issues/1232) - edge management api identity-types endpoint produces incorrect links
|
||||
|
||||
* github.com/openziti/fabric: [v0.21.17 -> v0.21.36](https://github.com/openziti/fabric/compare/v0.21.17...v0.21.36)
|
||||
* [Issue #525](https://github.com/openziti/fabric/issues/525) - Update metrics message propagation from router to controller for HA
|
||||
|
||||
* github.com/openziti/foundation/v2: [v2.0.7 -> v2.0.9](https://github.com/openziti/foundation/compare/v2.0.7...v2.0.9)
|
||||
* github.com/openziti/identity: [v1.0.20 -> v1.0.28](https://github.com/openziti/identity/compare/v1.0.20...v1.0.28)
|
||||
* github.com/openziti/runzmd: [v1.0.3 -> v1.0.7](https://github.com/openziti/runzmd/compare/v1.0.3...v1.0.7)
|
||||
* github.com/openziti/sdk-golang: [v0.16.146 -> v0.18.19](https://github.com/openziti/sdk-golang/compare/v0.16.146...v0.18.19)
|
||||
* github.com/openziti/storage: [v0.1.26 -> v0.1.30](https://github.com/openziti/storage/compare/v0.1.26...v0.1.30)
|
||||
* github.com/openziti/transport/v2: [v2.0.38 -> v2.0.48](https://github.com/openziti/transport/compare/v2.0.38...v2.0.48)
|
||||
* github.com/openziti/metrics: [v1.1.5 -> v1.2.2](https://github.com/openziti/metrics/compare/v1.1.5...v1.2.2)
|
||||
* github.com/openziti/ziti: [v0.26.11 -> v0.26.12](https://github.com/openziti/ziti/compare/v0.26.11...v0.26.12)
|
||||
* [Issue #892](https://github.com/openziti/ziti/issues/892) - Add timeout to ziti agent controller snapshot-db command
|
||||
* [Issue #917](https://github.com/openziti/ziti/issues/917) - ZITI_BIN_ROOT is incorrect in docker env
|
||||
* [Issue #912](https://github.com/openziti/ziti/issues/912) - Binaries not updated in docker-compose env with new image
|
||||
* [Issue #897](https://github.com/openziti/ziti/issues/897) - Add CLI options to manage /edge/v1/transit-routers
|
||||
* [Issue #706](https://github.com/openziti/ziti/issues/706) - Add port check to quickstart
|
||||
|
||||
# Older Changelogs
|
||||
|
||||
Changelogs for previous releases can be found in [changelogs](./changelogs).
|
||||
|
||||
@@ -0,0 +1,308 @@
|
||||
# Release 0.27.9
|
||||
|
||||
## What's New
|
||||
|
||||
* Refactored the websocket transport to fix a concurrency issue
|
||||
* v0.27.6 changed delete behaviors to error if the entity was not found. This release reverts that behavior.
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/channel/v2: [v2.0.53 -> v2.0.58](https://github.com/openziti/channel/compare/v2.0.53...v2.0.58)
|
||||
* github.com/openziti/edge: [v0.24.228 -> v0.24.239](https://github.com/openziti/edge/compare/v0.24.228...v0.24.239)
|
||||
* [Issue #1391](https://github.com/openziti/edge/issues/1391) - AuthPolicies for identities is missing a reference link
|
||||
|
||||
* github.com/openziti/edge-api: [v0.25.9 -> v0.25.11](https://github.com/openziti/edge-api/compare/v0.25.9...v0.25.11)
|
||||
* github.com/openziti/fabric: [v0.22.77 -> v0.22.87](https://github.com/openziti/fabric/compare/v0.22.77...v0.22.87)
|
||||
* github.com/openziti/foundation/v2: [v2.0.18 -> v2.0.21](https://github.com/openziti/foundation/compare/v2.0.18...v2.0.21)
|
||||
* github.com/openziti/identity: [v1.0.42 -> v1.0.45](https://github.com/openziti/identity/compare/v1.0.42...v1.0.45)
|
||||
* github.com/openziti/runzmd: [v1.0.18 -> v1.0.20](https://github.com/openziti/runzmd/compare/v1.0.18...v1.0.20)
|
||||
* github.com/openziti/storage: [v0.1.46 -> v0.1.49](https://github.com/openziti/storage/compare/v0.1.46...v0.1.49)
|
||||
* github.com/openziti/transport/v2: [v2.0.68 -> v2.0.72](https://github.com/openziti/transport/compare/v2.0.68...v2.0.72)
|
||||
* github.com/openziti/metrics: [v1.2.16 -> v1.2.19](https://github.com/openziti/metrics/compare/v1.2.16...v1.2.19)
|
||||
* github.com/openziti/ziti: [v0.27.8 -> v0.27.9](https://github.com/openziti/ziti/compare/v0.27.8...v0.27.9)
|
||||
|
||||
# Release 0.27.8
|
||||
|
||||
## What's New
|
||||
|
||||
* CLI additions for auth policies and external JWT signers
|
||||
* Performance improvements for listing services
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/edge: [v0.24.224 -> v0.24.228](https://github.com/openziti/edge/compare/v0.24.224...v0.24.228)
|
||||
* [Issue #1388](https://github.com/openziti/edge/issues/1388) - Make better use of identity service indexes for service list
|
||||
* [Issue #1386](https://github.com/openziti/edge/issues/1386) - PUT on identities results in an error and internal PANIC
|
||||
|
||||
* github.com/openziti/fabric: [v0.22.76 -> v0.22.77](https://github.com/openziti/fabric/compare/v0.22.76...v0.22.77)
|
||||
* github.com/openziti/storage: [v0.1.45 -> v0.1.46](https://github.com/openziti/storage/compare/v0.1.45...v0.1.46)
|
||||
* github.com/openziti/ziti: [v0.27.7 -> v0.27.8](https://github.com/openziti/ziti/compare/v0.27.7...v0.27.8)
|
||||
* [Issue #1064](https://github.com/openziti/ziti/issues/1064) - Support auth-policy assignments on identities via the CLI
|
||||
* [Issue #1058](https://github.com/openziti/ziti/issues/1058) - Allow Auth Policy Create/Update/Delete via CLI
|
||||
* [Issue #1059](https://github.com/openziti/ziti/issues/1059) - Expose Delete for Ext JWT Signers in CLI
|
||||
|
||||
# Release 0.27.7
|
||||
|
||||
## What's New
|
||||
|
||||
* This release updates the build to use Go 1.20
|
||||
|
||||
# Release 0.27.6
|
||||
|
||||
## What's New
|
||||
|
||||
* Makes inspect CLI more discoverable by adding subcommands for inspectable values
|
||||
* Adds new inspection allowing configs to be retrieved: `ziti fabric inspect config`
|
||||
* Many improvements to edge-router/tunneler hosting performance with large numbers of hosted services
|
||||
* Routers should no longer overwhelm controller while setting up or reestablishing hosting
|
||||
* Adds ability to disable router
|
||||
* Adds CLI command to compact offline bbolt database: `ziti ops db compact <src> <dst>`
|
||||
* Adds CLI command to re-enroll edge routers: `ziti edge re-enroll edge-router`
|
||||
* Routers can now be disabled. Connections to the controller from disabled routers will be rejected.
|
||||
* Disable with: `ziti fabric update router <router-id> --disabled`
|
||||
* Enable with: `ziti fabric update router <router-id> --disabled=false`
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/agent: [v1.0.8 -> v1.0.10](https://github.com/openziti/agent/compare/v1.0.8...v1.0.10)
|
||||
* github.com/openziti/channel/v2: [v2.0.27 -> v2.0.53](https://github.com/openziti/channel/compare/v2.0.27...v2.0.53)
|
||||
* [Issue #83](https://github.com/openziti/channel/issues/83) - Improve protocol mismatch error(s)
|
||||
* [Issue #93](https://github.com/openziti/channel/issues/93) - Fix atomic 64-bit alignment error on arm devices
|
||||
|
||||
* github.com/openziti/edge: [v0.24.125 -> v0.24.224](https://github.com/openziti/edge/compare/v0.24.125...v0.24.224)
|
||||
* [Issue #1373](https://github.com/openziti/edge/issues/1373) - Add support for disabled flag to edge and transit routers
|
||||
* [Issue #1374](https://github.com/openziti/edge/issues/1374) - Multiple MFA enrollments cannot be cleaned up by administrators
|
||||
* [Issue #1336](https://github.com/openziti/edge/issues/1336) - xgress_edge_tunnel shouldn't stop/start host on control channel reconnect
|
||||
* [Issue #1369](https://github.com/openziti/edge/issues/1369) - Add missing entity type id for TransitRouter
|
||||
* [Issue #1366](https://github.com/openziti/edge/issues/1366) - Error message incorrectly state 'invalid api session' when it's an invalid session
|
||||
* [Issue #1364](https://github.com/openziti/edge/issues/1364) - Cache api-sessions for tunneler router so we don't need to unnecessarily create new sessions
|
||||
* [Issue #1362](https://github.com/openziti/edge/issues/1362) - Rate limit terminator creates for router/tunneler
|
||||
* [Issue #1359](https://github.com/openziti/edge/issues/1359) - Sessions creates should be idempotent
|
||||
* [Issue #1355](https://github.com/openziti/edge/issues/1355) - Handle duplicate create terminator requests if create terminator fails
|
||||
* [Issue #1350](https://github.com/openziti/edge/issues/1350) - Router event processing can deadlock
|
||||
* [Issue #1329](https://github.com/openziti/edge/issues/1329) - UDP connections can drop data if datagrams are > 10k in size
|
||||
* [Issue #1310](https://github.com/openziti/edge/issues/1310) - Creating a cert backed ext-jwt-signer causes nil dereference
|
||||
|
||||
* github.com/openziti/edge-api: [v0.25.6 -> v0.25.9](https://github.com/openziti/edge-api/compare/v0.25.6...v0.25.9)
|
||||
* github.com/openziti/fabric: [v0.22.24 -> v0.22.76](https://github.com/openziti/fabric/compare/v0.22.24...v0.22.76)
|
||||
* [Issue #651](https://github.com/openziti/fabric/issues/651) - Add router enable/disable mechanism
|
||||
* [Issue #648](https://github.com/openziti/fabric/issues/648) - Add rate limiter pool to router for operations with potential to flood the controller
|
||||
* [Issue #610](https://github.com/openziti/fabric/issues/610) - Fix router disconnect when endpoint removed from cluster
|
||||
* [Issue #622](https://github.com/openziti/fabric/issues/622) - fatal error: concurrent map iteration and map write in logContext.WireEntry
|
||||
* [Issue #507](https://github.com/openziti/fabric/issues/507) - Add configuration for control channel heartbeat
|
||||
* [Issue #584](https://github.com/openziti/fabric/issues/584) - Add cluster events
|
||||
* [Issue #599](https://github.com/openziti/fabric/issues/599) - Add release and transfer leadership commands
|
||||
* [Issue #606](https://github.com/openziti/fabric/issues/606) - Ensure consistent use of peer address
|
||||
* [Issue #598](https://github.com/openziti/fabric/issues/598) - Add support to fabric inspect to propagate inspect to other controllers
|
||||
* [Issue #597](https://github.com/openziti/fabric/issues/597) - Make raft settings configurable
|
||||
* [Issue #604](https://github.com/openziti/fabric/issues/604) - Don't create link dropped msg metric until channel bind time
|
||||
* [Issue #638](https://github.com/openziti/fabric/issues/638) - Fix atomic 64-bit alignment error on arm devices
|
||||
|
||||
* github.com/openziti/foundation/v2: [v2.0.10 -> v2.0.18](https://github.com/openziti/foundation/compare/v2.0.10...v2.0.18)
|
||||
* github.com/openziti/identity: [v1.0.30 -> v1.0.42](https://github.com/openziti/identity/compare/v1.0.30...v1.0.42)
|
||||
* github.com/openziti/runzmd: [v1.0.9 -> v1.0.18](https://github.com/openziti/runzmd/compare/v1.0.9...v1.0.18)
|
||||
* github.com/openziti/sdk-golang: [v0.18.28 -> v0.18.76](https://github.com/openziti/sdk-golang/compare/v0.18.28...v0.18.76)
|
||||
* [Issue #356](https://github.com/openziti/sdk-golang/issues/356) - sdk connections should respect net.Conn deadline related API specifications
|
||||
|
||||
* github.com/openziti/storage: [v0.1.34 -> v0.1.45](https://github.com/openziti/storage/compare/v0.1.34...v0.1.45)
|
||||
* github.com/openziti/transport/v2: [v2.0.51 -> v2.0.68](https://github.com/openziti/transport/compare/v2.0.51...v2.0.68)
|
||||
* github.com/openziti/jwks: [v1.0.2 -> v1.0.3](https://github.com/openziti/jwks/compare/v1.0.2...v1.0.3)
|
||||
* github.com/openziti/metrics: [v1.2.3 -> v1.2.16](https://github.com/openziti/metrics/compare/v1.2.3...v1.2.16)
|
||||
* github.com/openziti/ziti: [v0.27.5 -> v0.27.6](https://github.com/openziti/ziti/compare/v0.27.5...v0.27.6)
|
||||
* [Issue #1041](https://github.com/openziti/ziti/issues/1041) - Add ziti compact command to CLI
|
||||
* [Issue #1032](https://github.com/openziti/ziti/issues/1032) - ziti edge create service fails silently if config names don't exist
|
||||
* [Issue #1031](https://github.com/openziti/ziti/issues/1031) - Fixed quickstart bug with arm and arm64 ambiguity when running quickstart on arm architecture
|
||||
|
||||
# Release 0.27.5
|
||||
|
||||
## What's New
|
||||
|
||||
* Fixes an issue with `ziti` CLI when using a globally trusted CA
|
||||
* Fixes bug where `ziti agent stack` was calling `ziti agent stats`
|
||||
* ziti controller/router no longer compare the running version with
|
||||
the latest from github by default. Set ZITI_CHECK_VERSION=true to
|
||||
enable this behavior
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/edge: [v0.24.121 -> v0.24.125](https://github.com/openziti/edge/compare/v0.24.121...v0.24.125)
|
||||
* github.com/openziti/fabric: [v0.22.20 -> v0.22.24](https://github.com/openziti/fabric/compare/v0.22.20...v0.22.24)
|
||||
* [Issue #601](https://github.com/openziti/fabric/issues/601) - Only use endpoints file in router once endpoints have changed
|
||||
* [Issue #583](https://github.com/openziti/fabric/issues/583) - Compress raft snapshots
|
||||
|
||||
* github.com/openziti/sdk-golang: [v0.18.27 -> v0.18.28](https://github.com/openziti/sdk-golang/compare/v0.18.27...v0.18.28)
|
||||
* github.com/openziti/storage: [v0.1.33 -> v0.1.34](https://github.com/openziti/storage/compare/v0.1.33...v0.1.34)
|
||||
* github.com/openziti/ziti: [v0.27.4 -> v0.27.5](https://github.com/openziti/ziti/compare/v0.27.4...v0.27.5)
|
||||
|
||||
# Release 0.27.4
|
||||
|
||||
## What's New
|
||||
|
||||
This release contains a fix for a controller deadlock
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/channel/v2: [v2.0.26 -> v2.0.27](https://github.com/openziti/channel/compare/v2.0.26...v2.0.27)
|
||||
* github.com/openziti/edge: [v0.24.115 -> v0.24.121](https://github.com/openziti/edge/compare/v0.24.115...v0.24.121)
|
||||
* [Issue #1303](https://github.com/openziti/edge/issues/1303) - Fix deadlock when flushing api session heartbeats
|
||||
|
||||
* github.com/openziti/fabric: [v0.22.19 -> v0.22.20](https://github.com/openziti/fabric/compare/v0.22.19...v0.22.20)
|
||||
* github.com/openziti/sdk-golang: [v0.18.26 -> v0.18.27](https://github.com/openziti/sdk-golang/compare/v0.18.26...v0.18.27)
|
||||
* github.com/openziti/transport/v2: [v2.0.50 -> v2.0.51](https://github.com/openziti/transport/compare/v2.0.50...v2.0.51)
|
||||
* github.com/openziti/ziti: [v0.27.3 -> v0.27.4](https://github.com/openziti/ziti/compare/v0.27.3...v0.27.4)
|
||||
|
||||
# Release 0.27.3
|
||||
|
||||
## What's New
|
||||
|
||||
* Docker images for `ziti` CLI
|
||||
|
||||
* New Raft interaction commands
|
||||
* `raft-leave` allows removal of controllers from the raft cluster
|
||||
* `raft-list` lists all connected controllers and their version/connected status
|
||||
* `fabric raft list-members` same info as the agent command, but over rest
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/agent: [v1.0.7 -> v1.0.8](https://github.com/openziti/agent/compare/v1.0.7...v1.0.8)
|
||||
* github.com/openziti/channel/v2: [v2.0.25 -> v2.0.26](https://github.com/openziti/channel/compare/v2.0.25...v2.0.26)
|
||||
* github.com/openziti/edge: [v0.24.95 -> v0.24.115](https://github.com/openziti/edge/compare/v0.24.95...v0.24.115)
|
||||
* [Issue #1292](https://github.com/openziti/edge/issues/1292) - Support alternative tproxy configuration methods
|
||||
|
||||
* github.com/openziti/edge-api: v0.25.6 (new)
|
||||
* github.com/openziti/fabric: [v0.22.7 -> v0.22.19](https://github.com/openziti/fabric/compare/v0.22.7...v0.22.19)
|
||||
* [Issue #592](https://github.com/openziti/fabric/issues/592) - Incoming "gateway" connections should be logged at a socket level
|
||||
* [Issue #588](https://github.com/openziti/fabric/issues/588) - Make service events more consistent
|
||||
* [Issue #589](https://github.com/openziti/fabric/issues/589) - Add duration to circuit updated and deleted events
|
||||
* [Issue #508](https://github.com/openziti/fabric/issues/508) - Refactor router debug ops for multiple controllers
|
||||
|
||||
* github.com/openziti/identity: [v1.0.29 -> v1.0.30](https://github.com/openziti/identity/compare/v1.0.29...v1.0.30)
|
||||
* github.com/openziti/runzmd: [v1.0.7 -> v1.0.9](https://github.com/openziti/runzmd/compare/v1.0.7...v1.0.9)
|
||||
* github.com/openziti/sdk-golang: [v0.18.21 -> v0.18.26](https://github.com/openziti/sdk-golang/compare/v0.18.21...v0.18.26)
|
||||
* github.com/openziti/storage: [v0.1.31 -> v0.1.33](https://github.com/openziti/storage/compare/v0.1.31...v0.1.33)
|
||||
* github.com/openziti/transport/v2: [v2.0.49 -> v2.0.50](https://github.com/openziti/transport/compare/v2.0.49...v2.0.50)
|
||||
* github.com/openziti/ziti: [v0.27.2 -> v0.27.3](https://github.com/openziti/ziti/compare/v0.27.2...v0.27.3)
|
||||
* [Issue #974](https://github.com/openziti/ziti/issues/974) - tunnel "host" and "proxy" modes shouldn't run the nameserver
|
||||
* [Issue #972](https://github.com/openziti/ziti/issues/972) - tunnel segfault
|
||||
|
||||
# Release 0.27.2
|
||||
|
||||
## What's New
|
||||
|
||||
* Bug fixes
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/channel/v2: [v2.0.24 -> v2.0.25](https://github.com/openziti/channel/compare/v2.0.24...v2.0.25)
|
||||
* github.com/openziti/edge: [v0.24.86 -> v0.24.95](https://github.com/openziti/edge/compare/v0.24.86...v0.24.95)
|
||||
* [Issue #1282](https://github.com/openziti/edge/issues/1282) - Ensure entity count events can be configured to only be emitted on the leader
|
||||
* [Issue #1279](https://github.com/openziti/edge/issues/1279) - Constrain config-type schema to accept only object types
|
||||
|
||||
* github.com/openziti/fabric: [v0.22.1 -> v0.22.7](https://github.com/openziti/fabric/compare/v0.22.1...v0.22.7)
|
||||
* [Issue #573](https://github.com/openziti/fabric/issues/573) - Ensure specific events aren't duplicated in raft cluster
|
||||
* [Issue #577](https://github.com/openziti/fabric/issues/577) - JSON Event formatter isn't putting events on their own line
|
||||
* [Issue #571](https://github.com/openziti/fabric/issues/571) - Move raft.advertiseAddress to ctrl for consistency
|
||||
* [Issue #569](https://github.com/openziti/fabric/issues/569) - Support automatic migration and agent based migration
|
||||
* [Issue #567](https://github.com/openziti/fabric/issues/567) - Remove link dropped_msg metrics for closed links
|
||||
* [Issue #566](https://github.com/openziti/fabric/issues/566) - Link listeners aren't properly configuring channel out queue size
|
||||
|
||||
* github.com/openziti/foundation/v2: [v2.0.9 -> v2.0.10](https://github.com/openziti/foundation/compare/v2.0.9...v2.0.10)
|
||||
* github.com/openziti/identity: [v1.0.28 -> v1.0.29](https://github.com/openziti/identity/compare/v1.0.28...v1.0.29)
|
||||
* github.com/openziti/sdk-golang: [v0.18.19 -> v0.18.21](https://github.com/openziti/sdk-golang/compare/v0.18.19...v0.18.21)
|
||||
* github.com/openziti/storage: [v0.1.30 -> v0.1.31](https://github.com/openziti/storage/compare/v0.1.30...v0.1.31)
|
||||
* github.com/openziti/transport/v2: [v2.0.48 -> v2.0.49](https://github.com/openziti/transport/compare/v2.0.48...v2.0.49)
|
||||
* github.com/openziti/metrics: [v1.2.2 -> v1.2.3](https://github.com/openziti/metrics/compare/v1.2.2...v1.2.3)
|
||||
* github.com/openziti/ziti: [v0.27.1 -> v0.27.2](https://github.com/openziti/ziti/compare/v0.27.1...v0.27.2)
|
||||
* [Issue #916](https://github.com/openziti/ziti/issues/916) - Allow defining resource tags via json in the cli
|
||||
|
||||
|
||||
# Release 0.27.1
|
||||
|
||||
## What's New
|
||||
|
||||
* Event streaming over websocket
|
||||
* `ziti fabric stream events`
|
||||
* Events use same JSON formatting as the file based streaming
|
||||
* Plain Text formatting removed
|
||||
* Individual streaming of metrics/circuits removed in favor of unified events streaming
|
||||
* Improvements to router/tunneler terminator creation
|
||||
* Create terminator requests are now idempotent, so repeated requests will not result in multiple terminators
|
||||
* Create terminator requests are now asynchronous, so responses will no longer get timed out
|
||||
* There is new timer metric from routers, timing how long terminator creates take: `xgress_edge_tunnel.terminator.create_timer`
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/edge: [v0.24.75 -> v0.24.86](https://github.com/openziti/edge/compare/v0.24.75...v0.24.86)
|
||||
* [Issue #1272](https://github.com/openziti/edge/issues/1272) - Mark xgress_edge and xgress_edge_tunnel created terminators as system entity
|
||||
* [Issue #1270](https://github.com/openziti/edge/issues/1270) - Make xgress_edge_tunnel service hosting more scalabe
|
||||
* [Issue #1268](https://github.com/openziti/edge/issues/1268) - session deletion can get stalled by restarts
|
||||
|
||||
* github.com/openziti/fabric: [v0.21.36 -> v0.22.1](https://github.com/openziti/fabric/compare/v0.21.36...v0.22.1)
|
||||
* [Issue #563](https://github.com/openziti/fabric/issues/563) - Allow streaming events over webscocket, replacing stream circuits and stream metrics
|
||||
* [Issue #552](https://github.com/openziti/fabric/issues/552) - Add minimum cost delta for smart routing
|
||||
* [Issue #558](https://github.com/openziti/fabric/issues/558) - Allow terminators to be marked as system entities
|
||||
|
||||
* github.com/openziti/ziti: [v0.27.0 -> v0.27.1](https://github.com/openziti/ziti/compare/v0.27.0...v0.27.1)
|
||||
* [Issue #928](https://github.com/openziti/ziti/issues/928) - ziti fabric update terminator should not require setting router
|
||||
* [Issue #929](https://github.com/openziti/ziti/issues/929) - zit fabric list terminators isn't showing cost or dynamic cost
|
||||
|
||||
# Release 0.27.0
|
||||
|
||||
## What's New
|
||||
|
||||
* Ziti CLI
|
||||
* The CLI has been cleaned up and unused, unusable and underused components have been removed or hidden
|
||||
* Add create/delete transit-router CLI commands
|
||||
* [Issue-706](https://github.com/openziti/ziti/issues/706) - Add port check to quickstart
|
||||
|
||||
## Ziti CLI
|
||||
|
||||
* The update command has been removed. It was non-functional, so this should not affect anyone
|
||||
* The adhoc, ping and playbook commands have been removed. These were ansible and vagrant commands that were not widely used.
|
||||
* Make the art command hidden, doesn't need to be removed, leave it as an easter egg
|
||||
* Move ziti ps command under ziti agent. Remove all ziti ps subcommands, as they already exist as ziti agent subcommands
|
||||
* Add `ziti controller` and `ziti router` commands
|
||||
* They should work exactly the same as `ziti-controller` and `ziti router`
|
||||
* The standalone binaries for `ziti-controller` and `ziti-router` are deprecated and will be removed in a future release
|
||||
* Add hidden `ziti tunnel` command
|
||||
* Should work exactly the same as `ziti-tunnel`
|
||||
* Is hidden as `ziti-edge-tunnel` is the preferred tunnelling application
|
||||
* The standalone binary `ziti-tunnel` is deprecated and will be removed in a future release
|
||||
* The db, log-format and unwrap commands have been moved under a new ops command
|
||||
* ziti executable download management has been deprecated
|
||||
* The init and uninstall commands have been removed
|
||||
* The install, upgrade, use and version commands have been hidden and will be hidden once tests using them are updated or replaced
|
||||
* The demo and tutorial commands have been moved under the new learn subcommand
|
||||
* `ziti edge enroll` now has a verbose option for additional debugging
|
||||
* The `ziti edge` CLI now support create/delete transit-router. This allows transit/fabric routers to be provisioned using an enrollment process, rather than requiring certs to be created externally. Note that this requires that the fabric router config file has a `csr` section.
|
||||
|
||||
## Component Updates and Bug Fixes
|
||||
|
||||
* github.com/openziti/agent: [v1.0.5 -> v1.0.7](https://github.com/openziti/agent/compare/v1.0.5...v1.0.7)
|
||||
* github.com/openziti/channel/v2: [v2.0.12 -> v2.0.24](https://github.com/openziti/channel/compare/v2.0.12...v2.0.24)
|
||||
* github.com/openziti/edge: [v0.24.36 -> v0.24.75](https://github.com/openziti/edge/compare/v0.24.36...v0.24.75)
|
||||
* [Issue #1253](https://github.com/openziti/edge/issues/1253) - Panic in controller getting hello from edge router
|
||||
* [Issue #1233](https://github.com/openziti/edge/issues/1233) - edge-routers ref link in identities endpoint is incorrectly keyed
|
||||
* [Issue #1234](https://github.com/openziti/edge/issues/1234) - identities missing service-config link ref
|
||||
* [Issue #1232](https://github.com/openziti/edge/issues/1232) - edge management api identity-types endpoint produces incorrect links
|
||||
|
||||
* github.com/openziti/fabric: [v0.21.17 -> v0.21.36](https://github.com/openziti/fabric/compare/v0.21.17...v0.21.36)
|
||||
* [Issue #525](https://github.com/openziti/fabric/issues/525) - Update metrics message propagation from router to controller for HA
|
||||
|
||||
* github.com/openziti/foundation/v2: [v2.0.7 -> v2.0.9](https://github.com/openziti/foundation/compare/v2.0.7...v2.0.9)
|
||||
* github.com/openziti/identity: [v1.0.20 -> v1.0.28](https://github.com/openziti/identity/compare/v1.0.20...v1.0.28)
|
||||
* github.com/openziti/runzmd: [v1.0.3 -> v1.0.7](https://github.com/openziti/runzmd/compare/v1.0.3...v1.0.7)
|
||||
* github.com/openziti/sdk-golang: [v0.16.146 -> v0.18.19](https://github.com/openziti/sdk-golang/compare/v0.16.146...v0.18.19)
|
||||
* github.com/openziti/storage: [v0.1.26 -> v0.1.30](https://github.com/openziti/storage/compare/v0.1.26...v0.1.30)
|
||||
* github.com/openziti/transport/v2: [v2.0.38 -> v2.0.48](https://github.com/openziti/transport/compare/v2.0.38...v2.0.48)
|
||||
* github.com/openziti/metrics: [v1.1.5 -> v1.2.2](https://github.com/openziti/metrics/compare/v1.1.5...v1.2.2)
|
||||
* github.com/openziti/ziti: [v0.26.11 -> v0.26.12](https://github.com/openziti/ziti/compare/v0.26.11...v0.26.12)
|
||||
* [Issue #892](https://github.com/openziti/ziti/issues/892) - Add timeout to ziti agent controller snapshot-db command
|
||||
* [Issue #917](https://github.com/openziti/ziti/issues/917) - ZITI_BIN_ROOT is incorrect in docker env
|
||||
* [Issue #912](https://github.com/openziti/ziti/issues/912) - Binaries not updated in docker-compose env with new image
|
||||
* [Issue #897](https://github.com/openziti/ziti/issues/897) - Add CLI options to manage /edge/v1/transit-routers
|
||||
* [Issue #706](https://github.com/openziti/ziti/issues/706) - Add port check to quickstart
|
||||
|
||||
# Older Changelogs
|
||||
|
||||
Changelogs for previous releases can be found in [changelogs](./changelogs).
|
||||
@@ -19,6 +19,8 @@ package enrollment
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/openziti/identity/engines"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
@@ -26,8 +28,6 @@ import (
|
||||
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/foundation/v2/term"
|
||||
"github.com/openziti/identity/certtools"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/sdk-golang/ziti/enroll"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
@@ -48,7 +48,7 @@ const outFlag = "out"
|
||||
type EnrollOptions struct {
|
||||
common.CommonOptions
|
||||
RemoveJwt bool
|
||||
KeyAlg config.KeyAlgVar
|
||||
KeyAlg ziti.KeyAlgVar
|
||||
JwtPath string
|
||||
OutputPath string
|
||||
KeyPath string
|
||||
@@ -117,9 +117,9 @@ func NewEnrollCommand(p common.OptionsProvider) *cobra.Command {
|
||||
enrollSubCmd.Flags().VarP(&action.KeyAlg, "keyAlg", "a", "Crypto algorithm to use when generating private key")
|
||||
|
||||
var keyDesc = ""
|
||||
engines := certtools.ListEngines()
|
||||
if len(engines) > 0 {
|
||||
keyDesc = fmt.Sprintf("The key to use with the certificate. Optionally specify the engine to use. supported engines: %v", engines)
|
||||
certEngines := engines.ListEngines()
|
||||
if len(certEngines) > 0 {
|
||||
keyDesc = fmt.Sprintf("The key to use with the certificate. Optionally specify the engine to use. supported engines: %v", certEngines)
|
||||
} else {
|
||||
keyDesc = "The key to use with the certificate."
|
||||
}
|
||||
|
||||
@@ -0,0 +1,213 @@
|
||||
package getziti
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/blang/semver"
|
||||
"github.com/go-resty/resty/v2"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/pkg/errors"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// GitHubReleasesData is used to parse the '/releases/latest' response from GitHub
|
||||
type GitHubReleasesData struct {
|
||||
Version string `json:"tag_name"`
|
||||
SemVer semver.Version
|
||||
Assets []struct {
|
||||
BrowserDownloadURL string `json:"browser_download_url"`
|
||||
}
|
||||
}
|
||||
|
||||
func (self *GitHubReleasesData) GetDownloadUrl(appName string, targetOS, targetArch string) (string, error) {
|
||||
arches := []string{targetArch}
|
||||
if strings.ToLower(targetArch) == "amd64" {
|
||||
arches = append(arches, "x86_64")
|
||||
}
|
||||
|
||||
for _, asset := range self.Assets {
|
||||
ok := false
|
||||
for _, arch := range arches {
|
||||
if strings.Contains(strings.ToLower(asset.BrowserDownloadURL), arch) {
|
||||
ok = true
|
||||
}
|
||||
}
|
||||
|
||||
ok = ok && strings.Contains(strings.ToLower(asset.BrowserDownloadURL), targetOS)
|
||||
if ok {
|
||||
return asset.BrowserDownloadURL, nil
|
||||
}
|
||||
}
|
||||
|
||||
return "", errors.Errorf("no download URL found for os/arch %s/%s for '%s'", targetOS, targetArch, appName)
|
||||
}
|
||||
|
||||
func NewClient() *resty.Client {
|
||||
// Use a 2-second timeout with a retry count of 5
|
||||
return resty.
|
||||
New().
|
||||
SetTimeout(2 * time.Second).
|
||||
SetRetryCount(5).
|
||||
SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
|
||||
}
|
||||
|
||||
func getRequest(verbose bool) *resty.Request {
|
||||
return NewClient().
|
||||
SetDebug(verbose).
|
||||
R()
|
||||
}
|
||||
|
||||
func GetLatestGitHubReleaseVersion(zitiApp string, verbose bool) (semver.Version, error) {
|
||||
var result semver.Version
|
||||
release, err := GetHighestVersionGitHubReleaseInfo(zitiApp, verbose)
|
||||
if release != nil {
|
||||
result = release.SemVer
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
|
||||
func GetHighestVersionGitHubReleaseInfo(appName string, verbose bool) (*GitHubReleasesData, error) {
|
||||
resp, err := getRequest(verbose).
|
||||
SetQueryParams(map[string]string{}).
|
||||
SetHeader("Accept", "application/vnd.github.v3+json").
|
||||
SetResult([]*GitHubReleasesData{}).
|
||||
Get("https://api.github.com/repos/openziti/" + appName + "/releases")
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to get latest version for '%s'", appName)
|
||||
}
|
||||
|
||||
if resp.StatusCode() == http.StatusNotFound {
|
||||
return nil, errors.Errorf("unable to get latest version for '%s'; Not Found (invalid URL)", appName)
|
||||
}
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, errors.Errorf("unable to get latest version for '%s'; return status=%s", appName, resp.Status())
|
||||
}
|
||||
|
||||
result := *resp.Result().(*[]*GitHubReleasesData)
|
||||
return GetHighestVersionRelease(appName, result)
|
||||
}
|
||||
|
||||
func GetHighestVersionRelease(appName string, releases []*GitHubReleasesData) (*GitHubReleasesData, error) {
|
||||
for _, release := range releases {
|
||||
v, err := semver.ParseTolerant(release.Version)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to parse version %v for '%v'", release.Version, appName)
|
||||
}
|
||||
release.SemVer = v
|
||||
}
|
||||
sort.Slice(releases, func(i, j int) bool {
|
||||
return releases[i].SemVer.GT(releases[j].SemVer) // sort in reverse order
|
||||
})
|
||||
if len(releases) == 0 {
|
||||
return nil, errors.Errorf("no releases found for '%v'", appName)
|
||||
}
|
||||
return releases[0], nil
|
||||
}
|
||||
|
||||
func GetLatestGitHubReleaseAsset(appName string, appGitHub string, version string, verbose bool) (*GitHubReleasesData, error) {
|
||||
if version != "latest" {
|
||||
if appName == "ziti-prox-c" {
|
||||
version = strings.TrimPrefix(version, "v")
|
||||
}
|
||||
|
||||
if appName == "ziti-edge-tunnel" {
|
||||
if !strings.HasPrefix(version, "v") {
|
||||
version = "v" + version
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if version != "latest " {
|
||||
version = "tags/" + version
|
||||
}
|
||||
|
||||
resp, err := getRequest(verbose).
|
||||
SetQueryParams(map[string]string{}).
|
||||
SetHeader("Accept", "application/vnd.github.v3+json").
|
||||
SetResult(&GitHubReleasesData{}).
|
||||
Get("https://api.github.com/repos/openziti/" + appGitHub + "/releases/" + version)
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get latest version for '%s'; %s", appName, err)
|
||||
}
|
||||
|
||||
if resp.StatusCode() == http.StatusNotFound {
|
||||
return nil, fmt.Errorf("unable to get latest version for '%s'; Not Found", appName)
|
||||
}
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, fmt.Errorf("unable to get latest version for '%s'; %s", appName, resp.Status())
|
||||
}
|
||||
|
||||
result := resp.Result().(*GitHubReleasesData)
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// DownloadGitHubReleaseAsset will download a file from the given GitHUb release area
|
||||
func DownloadGitHubReleaseAsset(fullUrl string, filepath string) (err error) {
|
||||
resp, err := getRequest(false).
|
||||
SetOutput(filepath).
|
||||
Get(fullUrl)
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to download '%s', %s", fullUrl, err)
|
||||
}
|
||||
|
||||
if resp.IsError() {
|
||||
return fmt.Errorf("unable to download file, error HTTP status code [%d] returned for url [%s]", resp.StatusCode(), fullUrl)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func FindVersionAndInstallGitHubRelease(zitiApp string, zitiAppGitHub string, targetOS, targetArch string, binDir string, version string, verbose bool) error {
|
||||
if version != "" {
|
||||
if _, err := semver.Make(strings.TrimPrefix(version, "v")); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
version = "latest"
|
||||
}
|
||||
|
||||
release, err := GetLatestGitHubReleaseAsset(zitiApp, zitiAppGitHub, version, verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return InstallGitHubRelease(zitiApp, release, binDir, targetOS, targetArch)
|
||||
}
|
||||
|
||||
func InstallGitHubRelease(zitiApp string, release *GitHubReleasesData, binDir string, targetOS, targetArch string) error {
|
||||
fileName := zitiApp
|
||||
if targetOS == "windows" {
|
||||
fileName += ".exe"
|
||||
}
|
||||
|
||||
fullPath := filepath.Join(binDir, fileName)
|
||||
ext := ".zip"
|
||||
zipFile := fullPath + ext
|
||||
|
||||
releaseUrl, err := release.GetDownloadUrl(zitiApp, targetOS, targetArch)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = DownloadGitHubReleaseAsset(releaseUrl, zipFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = Unzip(zipFile, binDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = os.Remove(zipFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pfxlog.Logger().Infof("Successfully installed '%s' version '%s'", zitiApp, release.Version)
|
||||
return os.Chmod(fullPath, 0755)
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package getziti
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/blang/semver"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func InstallZitiEdgeTunnel(targetVersion, targetOS, targetArch, binDir string, verbose bool) error {
|
||||
var newVersion semver.Version
|
||||
|
||||
if targetVersion != "" {
|
||||
newVersion = semver.MustParse(strings.TrimPrefix(targetVersion, "v"))
|
||||
} else {
|
||||
v, err := GetLatestGitHubReleaseVersion(c.ZITI_EDGE_TUNNEL_GITHUB, verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newVersion = v
|
||||
}
|
||||
|
||||
fmt.Println("Attempting to install '" + c.ZITI_EDGE_TUNNEL + "' version: " + newVersion.String())
|
||||
return FindVersionAndInstallGitHubRelease(
|
||||
c.ZITI_EDGE_TUNNEL, c.ZITI_EDGE_TUNNEL_GITHUB, targetOS, targetArch, binDir, newVersion.String(), verbose)
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package getziti
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Unzip(src, dest string) error {
|
||||
r, err := zip.OpenReader(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := r.Close(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
os.MkdirAll(dest, 0755)
|
||||
|
||||
// Closure to address file descriptors issue with all the deferred .Close() methods
|
||||
extractAndWriteFile := func(f *zip.File) error {
|
||||
rc, err := f.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := rc.Close(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
path := filepath.Join(dest, f.Name)
|
||||
|
||||
// Check for ZipSlip (Directory traversal)
|
||||
if !strings.HasPrefix(path, filepath.Clean(dest)+string(os.PathSeparator)) {
|
||||
return fmt.Errorf("illegal file path: %s", path)
|
||||
}
|
||||
|
||||
if f.FileInfo().IsDir() {
|
||||
os.MkdirAll(path, f.Mode())
|
||||
} else {
|
||||
os.MkdirAll(filepath.Dir(path), f.Mode())
|
||||
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := f.Close(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
_, err = io.Copy(f, rc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, f := range r.File {
|
||||
err := extractAndWriteFile(f)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -18,6 +18,9 @@ ARG TARGETOS
|
||||
# e.g. arm64
|
||||
ARG TARGETARCH
|
||||
|
||||
ARG ZUID=2171
|
||||
ARG ZGID=2171
|
||||
|
||||
### Required OpenShift Labels
|
||||
LABEL name="openziti/ziti-cli" \
|
||||
maintainer="developers@openziti.org" \
|
||||
@@ -28,7 +31,7 @@ LABEL name="openziti/ziti-cli" \
|
||||
USER root
|
||||
|
||||
### install packages
|
||||
RUN INSTALL_PKGS="python38 python38-pip tar" && \
|
||||
RUN INSTALL_PKGS="python38 python38-pip tar bash-completion vim-minimal less shadow-utils" && \
|
||||
microdnf -y update --setopt=install_weak_deps=0 --setopt=tsflags=nodocs && \
|
||||
microdnf -y install --setopt=install_weak_deps=0 --setopt=tsflags=nodocs ${INSTALL_PKGS}
|
||||
|
||||
@@ -40,15 +43,23 @@ RUN INSTALL_PKGS="python38 python38-pip tar" && \
|
||||
COPY --from=bitnami-kubectl /opt/bitnami/kubectl/bin/kubectl /usr/local/bin/
|
||||
|
||||
### add license in the path prescribed by OpenShift
|
||||
RUN mkdir -m0755 /licenses
|
||||
RUN mkdir -p -m0755 /licenses
|
||||
COPY ./LICENSE /licenses/apache.txt
|
||||
|
||||
RUN groupadd --gid ${ZGID} ziggy \
|
||||
&& adduser --uid ${ZUID} --gid ${ZGID} --system --home /home/ziggy --shell /bin/bash ziggy \
|
||||
&& mkdir -p /home/ziggy \
|
||||
&& chown -R ${ZUID}:${ZGID} /home/ziggy \
|
||||
&& chmod -R g+rwX /home/ziggy
|
||||
RUN mkdir -p /usr/local/bin
|
||||
COPY ${ARTIFACTS_DIR}/${TARGETARCH}/${TARGETOS}/ziti /usr/local/bin/
|
||||
RUN chmod 0755 /usr/local/bin/ziti
|
||||
|
||||
RUN /usr/local/bin/ziti completion bash > /etc/bash_completion.d/ziti_cli
|
||||
|
||||
COPY ${DOCKER_BUILD_DIR}/entrypoint.sh /
|
||||
RUN chmod +x /entrypoint.sh
|
||||
USER nobody
|
||||
USER ziggy
|
||||
COPY ${DOCKER_BUILD_DIR}/bashrc /home/ziggy/.bashrc
|
||||
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||
CMD [ "ziti" ]
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# this script addresses the problem of /etc/profile not being sourced
|
||||
# because ziggy's BASH shell is not a "login shell." /etc/profile is
|
||||
# intended to be sourced only once by the first shell, but it never runs
|
||||
# automatically upon login because the first shell isn't invoked as a login
|
||||
# shell. .bashrc runs for all interactive shells, so we can use it to
|
||||
# replace the current shell process with a login shell.
|
||||
|
||||
set -euo pipefail
|
||||
USER="${USER:-$( id -u )}"
|
||||
SHELL="${SHELL:-$( getent passwd "${USER}" | cut -d : -f 7 )}"
|
||||
if [ -z "${SHELL}" ] ; then
|
||||
echo 1>&2 "${0}: can't set SHELL; giving up"
|
||||
exit 1
|
||||
fi
|
||||
HOME="${HOME:-$( getent passwd "${USER}" | cut -d : -f 6 )}"
|
||||
if [ -z "${HOME}" ] ; then
|
||||
echo 1>&2 "${0}: can't set HOME; giving up"
|
||||
exit 1
|
||||
fi
|
||||
cd "${HOME}"
|
||||
SHELL="${SHELL}" exec -a "-${SHELL##*/}" "${SHELL}"
|
||||
@@ -1,6 +1,7 @@
|
||||
ARG ZITI_VERSION="latest"
|
||||
ARG ZITI_CLI_IMAGE="docker.io/openziti/ziti-cli"
|
||||
# this builds docker.io/openziti/ziti-controller
|
||||
FROM docker.io/openziti/ziti-cli:${ZITI_VERSION}
|
||||
FROM ${ZITI_CLI_IMAGE}:${ZITI_VERSION}
|
||||
|
||||
# This build stage grabs artifacts that are copied into the final image.
|
||||
# It uses the same base as the final image to maximize docker cache hits.
|
||||
@@ -15,6 +16,6 @@ LABEL name="openziti/ziti-controller" \
|
||||
USER root
|
||||
COPY ./entrypoint.sh /
|
||||
RUN chmod +x /entrypoint.sh
|
||||
USER nobody
|
||||
USER ziggy
|
||||
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||
CMD [ "run" ]
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
ARG ZITI_VERSION="latest"
|
||||
ARG ZITI_CLI_IMAGE="docker.io/openziti/ziti-cli"
|
||||
# this builds docker.io/openziti/ziti-router
|
||||
FROM docker.io/openziti/ziti-cli:${ZITI_VERSION}
|
||||
FROM ${ZITI_CLI_IMAGE}:${ZITI_VERSION}
|
||||
|
||||
# This build stage grabs artifacts that are copied into the final image.
|
||||
# It uses the same base as the final image to maximize docker cache hits.
|
||||
@@ -15,6 +16,6 @@ LABEL name="openziti/ziti-router" \
|
||||
USER root
|
||||
COPY ./entrypoint.sh /
|
||||
RUN chmod +x /entrypoint.sh
|
||||
USER nobody
|
||||
USER ziggy
|
||||
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||
CMD [ "run" ]
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
ARG ZITI_VERSION="latest"
|
||||
ARG ZITI_CLI_IMAGE="docker.io/openziti/ziti-cli"
|
||||
# this builds docker.io/openziti/ziti-tunnel, the legacy tunneler. The preferred tunneler is openziti/ziti-edge-tunnel documented in https://docs.openziti.io/docs/reference/tunnelers/linux/container/
|
||||
FROM docker.io/openziti/ziti-cli:${ZITI_VERSION}
|
||||
# this builds docker.io/openziti/ziti-router
|
||||
FROM ${ZITI_CLI_IMAGE}:${ZITI_VERSION}
|
||||
|
||||
# This build stage grabs artifacts that are copied into the final image.
|
||||
# It uses the same base as the final image to maximize docker cache hits.
|
||||
|
||||
@@ -50,6 +50,10 @@ ctrl:
|
||||
#events:
|
||||
# jsonLogger:
|
||||
# subscriptions:
|
||||
# - type: entityChange
|
||||
# include:
|
||||
# - services
|
||||
# - identities
|
||||
# - type: fabric.circuits
|
||||
# - type: fabric.links
|
||||
# - type: fabric.routers
|
||||
@@ -60,6 +64,10 @@ ctrl:
|
||||
# - type: edge.sessions
|
||||
# - type: edge.apiSessions
|
||||
# - type: fabric.usage
|
||||
# version: 3
|
||||
# include:
|
||||
# - ingress.rx
|
||||
# - egress.rx
|
||||
# - type: services
|
||||
# - type: edge.entityCounts
|
||||
# interval: 5s
|
||||
@@ -67,6 +75,19 @@ ctrl:
|
||||
# type: file
|
||||
# format: json
|
||||
# path: /tmp/ziti-events.log
|
||||
# usageLogger:
|
||||
# subscriptions:
|
||||
# - type: fabric.usage
|
||||
# interval: 5s
|
||||
# handler:
|
||||
# type: amqp
|
||||
# format: json
|
||||
# url: "amqp://localhost:5672"
|
||||
# queue: ziti
|
||||
# durable: true //default:true
|
||||
# autoDelete: false //default:false
|
||||
# exclusive: false //default:false
|
||||
# noWait: false //default:false
|
||||
|
||||
# xctrl_example
|
||||
#
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module github.com/openziti/ziti
|
||||
|
||||
go 1.19
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
github.com/Jeffail/gabs v1.4.0
|
||||
@@ -11,39 +11,39 @@ require (
|
||||
github.com/fatih/color v1.15.0
|
||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa
|
||||
github.com/go-acme/lego/v4 v4.2.0
|
||||
github.com/go-openapi/runtime v0.25.0
|
||||
github.com/go-openapi/runtime v0.26.0
|
||||
github.com/go-openapi/strfmt v0.21.7
|
||||
github.com/go-resty/resty/v2 v2.7.0
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
|
||||
github.com/golang/protobuf v1.5.2
|
||||
github.com/google/go-cmp v0.5.9
|
||||
github.com/gorilla/websocket v1.5.0
|
||||
github.com/jedib0t/go-pretty/v6 v6.4.0
|
||||
github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19
|
||||
github.com/michaelquigley/pfxlog v0.6.10
|
||||
github.com/openziti/agent v1.0.10
|
||||
github.com/openziti/channel/v2 v2.0.58
|
||||
github.com/openziti/edge v0.24.239
|
||||
github.com/openziti/edge-api v0.25.11
|
||||
github.com/openziti/fabric v0.22.87
|
||||
github.com/openziti/foundation/v2 v2.0.21
|
||||
github.com/openziti/identity v1.0.45
|
||||
github.com/openziti/runzmd v1.0.20
|
||||
github.com/openziti/sdk-golang v0.18.76
|
||||
github.com/openziti/storage v0.1.49
|
||||
github.com/openziti/transport/v2 v2.0.72
|
||||
github.com/openziti/agent v1.0.13
|
||||
github.com/openziti/channel/v2 v2.0.78
|
||||
github.com/openziti/edge v0.24.309
|
||||
github.com/openziti/edge-api v0.25.24
|
||||
github.com/openziti/fabric v0.23.29
|
||||
github.com/openziti/foundation/v2 v2.0.24
|
||||
github.com/openziti/identity v1.0.54
|
||||
github.com/openziti/runzmd v1.0.24
|
||||
github.com/openziti/sdk-golang v0.20.51
|
||||
github.com/openziti/storage v0.2.6
|
||||
github.com/openziti/transport/v2 v2.0.88
|
||||
github.com/openziti/xweb/v2 v2.0.2
|
||||
github.com/openziti/ziti-db-explorer v1.1.1
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475
|
||||
github.com/russross/blackfriday v1.5.2
|
||||
github.com/shirou/gopsutil/v3 v3.23.3
|
||||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/shirou/gopsutil/v3 v3.23.4
|
||||
github.com/sirupsen/logrus v1.9.2
|
||||
github.com/spf13/cobra v1.7.0
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/spf13/viper v1.10.0
|
||||
github.com/stretchr/testify v1.8.2
|
||||
github.com/stretchr/testify v1.8.3
|
||||
go.etcd.io/bbolt v1.3.7
|
||||
golang.org/x/net v0.9.0
|
||||
golang.org/x/net v0.10.0
|
||||
google.golang.org/grpc v1.42.0
|
||||
google.golang.org/protobuf v1.30.0
|
||||
gopkg.in/AlecAivazis/survey.v1 v1.8.7
|
||||
@@ -66,15 +66,15 @@ require (
|
||||
github.com/biogo/store v0.0.0-20200525035639-8c94ae1e7c9c // indirect
|
||||
github.com/boltdb/bolt v1.3.1 // indirect
|
||||
github.com/c-bata/go-prompt v0.2.6 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.2.0 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||
github.com/coreos/go-iptables v0.6.0 // indirect
|
||||
github.com/creack/pty v1.1.11 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3 // indirect
|
||||
github.com/dineshappavoo/basex v0.0.0-20170425072625-481a6f6dc663 // indirect
|
||||
github.com/disintegration/imaging v1.6.2 // indirect
|
||||
github.com/dlclark/regexp2 v1.9.0 // indirect
|
||||
github.com/docker/distribution v2.8.1+incompatible // indirect
|
||||
github.com/dlclark/regexp2 v1.10.0 // indirect
|
||||
github.com/docker/distribution v2.8.2+incompatible // indirect
|
||||
github.com/docker/go-connections v0.4.0 // indirect
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/ef-ds/deque v1.0.4 // indirect
|
||||
@@ -90,10 +90,9 @@ require (
|
||||
github.com/go-openapi/jsonpointer v0.19.6 // indirect
|
||||
github.com/go-openapi/jsonreference v0.20.2 // indirect
|
||||
github.com/go-openapi/loads v0.21.2 // indirect
|
||||
github.com/go-openapi/spec v0.20.8 // indirect
|
||||
github.com/go-openapi/spec v0.20.9 // indirect
|
||||
github.com/go-openapi/swag v0.22.3 // indirect
|
||||
github.com/go-openapi/validate v0.22.1 // indirect
|
||||
github.com/go-resty/resty/v2 v2.7.0 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
|
||||
github.com/gomarkdown/markdown v0.0.0-20230322041520-c84983bdbf2a // indirect
|
||||
@@ -106,15 +105,16 @@ require (
|
||||
github.com/hashicorp/golang-lru v0.6.0 // indirect
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.2 // indirect
|
||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||
github.com/hashicorp/raft v1.4.0 // indirect
|
||||
github.com/hashicorp/raft v1.5.0 // indirect
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/jessevdk/go-flags v1.5.0 // indirect
|
||||
github.com/jinzhu/copier v0.3.5 // indirect
|
||||
github.com/josharian/intern v1.0.0 // indirect
|
||||
github.com/josharian/native v1.0.0 // indirect
|
||||
github.com/josharian/native v1.1.0 // indirect
|
||||
github.com/kataras/go-events v0.0.3 // indirect
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
||||
github.com/klauspost/compress v1.16.5 // indirect
|
||||
github.com/kr/pty v1.1.8 // indirect
|
||||
github.com/kyokomi/emoji/v2 v2.2.12 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
@@ -123,27 +123,27 @@ require (
|
||||
github.com/magiconair/properties v1.8.5 // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.18 // indirect
|
||||
github.com/mattn/go-isatty v0.0.19 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.14 // indirect
|
||||
github.com/mattn/go-tty v0.0.3 // indirect
|
||||
github.com/mdlayher/netlink v1.7.1 // indirect
|
||||
github.com/mdlayher/socket v0.4.0 // indirect
|
||||
github.com/mdlayher/netlink v1.7.2 // indirect
|
||||
github.com/mdlayher/socket v0.4.1 // indirect
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
||||
github.com/miekg/dns v1.1.53 // indirect
|
||||
github.com/miekg/dns v1.1.54 // indirect
|
||||
github.com/miekg/pkcs11 v1.1.1 // indirect
|
||||
github.com/mitchellh/go-ps v1.0.0 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/moby/term v0.0.0-20221120202655-abb19827d345 // indirect
|
||||
github.com/morikuni/aec v1.0.0 // indirect
|
||||
github.com/natefinch/lumberjack v2.0.0+incompatible // indirect
|
||||
github.com/netfoundry/secretstream v0.1.5 // indirect
|
||||
github.com/oklog/ulid v1.3.1 // indirect
|
||||
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||
github.com/opencontainers/image-spec v1.0.2 // indirect
|
||||
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
||||
github.com/openziti/dilithium v0.3.3 // indirect
|
||||
github.com/openziti/jwks v1.0.3 // indirect
|
||||
github.com/openziti/metrics v1.2.19 // indirect
|
||||
github.com/openziti/metrics v1.2.25 // indirect
|
||||
github.com/openziti/secretstream v0.1.8 // indirect
|
||||
github.com/openziti/x509-claims v1.0.3 // indirect
|
||||
github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect
|
||||
github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 // indirect
|
||||
@@ -151,9 +151,10 @@ require (
|
||||
github.com/pkg/term v1.2.0-beta.2 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
|
||||
github.com/rabbitmq/amqp091-go v1.8.1 // indirect
|
||||
github.com/rivo/uniseg v0.4.4 // indirect
|
||||
github.com/rodaine/table v1.0.1 // indirect
|
||||
github.com/shoenig/go-m1cpu v0.1.5 // indirect
|
||||
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
|
||||
github.com/speps/go-hashids v2.0.0+incompatible // indirect
|
||||
github.com/spf13/afero v1.6.0 // indirect
|
||||
@@ -168,22 +169,24 @@ require (
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
go.mongodb.org/mongo-driver v1.11.4 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||
go.mongodb.org/mongo-driver v1.11.6 // indirect
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect
|
||||
go.opentelemetry.io/otel v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.14.0 // indirect
|
||||
golang.org/x/crypto v0.8.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
|
||||
go.opentelemetry.io/otel v1.16.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.16.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.16.0 // indirect
|
||||
golang.org/x/crypto v0.9.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect
|
||||
golang.org/x/image v0.7.0 // indirect
|
||||
golang.org/x/mod v0.8.0 // indirect
|
||||
golang.org/x/sync v0.1.0 // indirect
|
||||
golang.org/x/sys v0.7.0 // indirect
|
||||
golang.org/x/term v0.7.0 // indirect
|
||||
golang.org/x/sync v0.2.0 // indirect
|
||||
golang.org/x/sys v0.8.0 // indirect
|
||||
golang.org/x/term v0.8.0 // indirect
|
||||
golang.org/x/text v0.9.0 // indirect
|
||||
golang.org/x/tools v0.6.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect
|
||||
gopkg.in/ini.v1 v1.66.2 // indirect
|
||||
gopkg.in/square/go-jose.v2 v2.5.1 // indirect
|
||||
gotest.tools/v3 v3.4.0 // indirect
|
||||
nhooyr.io/websocket v1.8.7 // indirect
|
||||
)
|
||||
|
||||
@@ -135,8 +135,8 @@ github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7
|
||||
github.com/c-bata/go-prompt v0.2.6 h1:POP+nrHE+DfLYx370bedwNhsqmpCUynWPxuHi0C5vZI=
|
||||
github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY=
|
||||
github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg=
|
||||
github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4=
|
||||
github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
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=
|
||||
@@ -191,11 +191,11 @@ github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1
|
||||
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
|
||||
github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dlclark/regexp2 v1.9.0 h1:pTK/l/3qYIKaRXuHnEnIf7Y5NxfRPfpb7dis6/gdlVI=
|
||||
github.com/dlclark/regexp2 v1.9.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
|
||||
github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0=
|
||||
github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
|
||||
github.com/dnsimple/dnsimple-go v0.63.0/go.mod h1:O5TJ0/U6r7AfT8niYNlmohpLbCSG+c71tQlGr9SeGrg=
|
||||
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
|
||||
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
|
||||
github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE=
|
||||
github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
|
||||
@@ -243,6 +243,10 @@ github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa h1:RDBNVkRviHZtvD
|
||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
|
||||
github.com/getkin/kin-openapi v0.13.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
|
||||
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
|
||||
github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
||||
github.com/go-acme/lego/v4 v4.2.0 h1:zEvpcDLqvzOlNUGBMA0MCKPpb9UBbnBzgWwCIbTEt2g=
|
||||
github.com/go-acme/lego/v4 v4.2.0/go.mod h1:jmhqxBaangB8txXZKjRLTPXFXUwPCTU2fU8S9/eQzBI=
|
||||
@@ -282,12 +286,12 @@ github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En
|
||||
github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g=
|
||||
github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro=
|
||||
github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw=
|
||||
github.com/go-openapi/runtime v0.25.0 h1:7yQTCdRbWhX8vnIjdzU8S00tBYf7Sg71EBeorlPHvhc=
|
||||
github.com/go-openapi/runtime v0.25.0/go.mod h1:Ux6fikcHXyyob6LNWxtE96hWwjBPYF0DXgVFuMTneOs=
|
||||
github.com/go-openapi/runtime v0.26.0 h1:HYOFtG00FM1UvqrcxbEJg/SwvDRvYLQKGhw2zaQjTcc=
|
||||
github.com/go-openapi/runtime v0.26.0/go.mod h1:QgRGeZwrUcSHdeh4Ka9Glvo0ug1LC5WyE+EV88plZrQ=
|
||||
github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I=
|
||||
github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
|
||||
github.com/go-openapi/spec v0.20.8 h1:ubHmXNY3FCIOinT8RNrrPfGc9t7I1qhPtdOGoG2AxRU=
|
||||
github.com/go-openapi/spec v0.20.8/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
|
||||
github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8=
|
||||
github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
|
||||
github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg=
|
||||
github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k=
|
||||
github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg=
|
||||
@@ -300,6 +304,13 @@ github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/
|
||||
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
|
||||
github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU=
|
||||
github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg=
|
||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
|
||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
|
||||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
|
||||
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
|
||||
github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8=
|
||||
github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
|
||||
github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
|
||||
@@ -329,6 +340,12 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe
|
||||
github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
|
||||
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
|
||||
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
|
||||
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=
|
||||
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
|
||||
github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
|
||||
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
|
||||
github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
|
||||
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
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=
|
||||
@@ -432,6 +449,7 @@ github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z
|
||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
@@ -480,8 +498,8 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
|
||||
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
|
||||
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/raft v1.1.0/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM=
|
||||
github.com/hashicorp/raft v1.4.0 h1:tn28S/AWv0BtRQgwZv/1NELu8sCvI0FixqL8C8MYKeY=
|
||||
github.com/hashicorp/raft v1.4.0/go.mod h1:nz64BIjXphDLATfKGG5RzHtNUPioLeKFsXEm88yTVew=
|
||||
github.com/hashicorp/raft v1.5.0 h1:uNs9EfJ4FwiArZRxxfd/dQ5d33nV31/CdCHArH89hT8=
|
||||
github.com/hashicorp/raft v1.5.0/go.mod h1:pKHB2mf/Y25u3AHNSXVRv+yT+WAnmeTX0BwVppVQV+M=
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0 h1:CO8dBMLH6dvE1jTn/30ZZw3iuPsNfajshWoJTnVc5cc=
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0/go.mod h1:nTakvJ4XYq45UXtn0DbwR4aU9ZdjlnIenpbs6Cd+FM0=
|
||||
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||
@@ -509,13 +527,14 @@ github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqx
|
||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||
github.com/josharian/native v1.0.0 h1:Ts/E8zCSEsG17dUqv7joXJFybuMLjQfWE04tsBODTxk=
|
||||
github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
|
||||
github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA=
|
||||
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
|
||||
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
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/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
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=
|
||||
@@ -526,12 +545,13 @@ github.com/kataras/go-events v0.0.3 h1:o5YK53uURXtrlg7qE/vovxd/yKOJcLuFtPQbf1rYM
|
||||
github.com/kataras/go-events v0.0.3/go.mod h1:bFBgtzwwzrag7kQmGuU1ZaVxhK2qseYPQomXoVEMsj4=
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
||||
github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 h1:WjT3fLi9n8YWh/Ih8Q1LHAPsTqGddPcHqscN+PJ3i68=
|
||||
github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
|
||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||
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/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
|
||||
github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||
github.com/kolo/xmlrpc v0.0.0-20200310150728-e0350524596b/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ=
|
||||
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=
|
||||
@@ -556,6 +576,8 @@ github.com/labbsr0x/bindman-dns-webhook v1.0.2/go.mod h1:p6b+VCXIR8NYKpDr8/dg1HK
|
||||
github.com/labbsr0x/goh v1.0.1/go.mod h1:8K2UhVoaWXcCU7Lxoa2omWnC8gyW8px7/lmO61c027w=
|
||||
github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g=
|
||||
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
|
||||
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
|
||||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||
github.com/linode/linodego v0.21.0/go.mod h1:UTpq1JUZD0CZsJ8rt+0CRkqbzrp1MbGakVPt2DXY5Mk=
|
||||
github.com/liquidweb/liquidweb-go v1.6.1/go.mod h1:UDcVnAMDkZxpw4Y7NOHkqoeiGacVLEIG/i5J9cyixzQ=
|
||||
github.com/lucas-clemente/quic-go v0.18.0/go.mod h1:yXttHsSNxQi8AWijC/vLP+OJczXqzHSOcJrM5ITUlCg=
|
||||
@@ -603,8 +625,8 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
|
||||
github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
||||
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||
github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
@@ -617,10 +639,10 @@ github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4f
|
||||
github.com/mattn/go-tty v0.0.3 h1:5OfyWorkyO7xP52Mq7tB36ajHDG5OHrmBGIS/DtakQI=
|
||||
github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mdlayher/netlink v1.7.1 h1:FdUaT/e33HjEXagwELR8R3/KL1Fq5x3G5jgHLp/BTmg=
|
||||
github.com/mdlayher/netlink v1.7.1/go.mod h1:nKO5CSjE/DJjVhk/TNp6vCE1ktVxEA8VEh8drhZzxsQ=
|
||||
github.com/mdlayher/socket v0.4.0 h1:280wsy40IC9M9q1uPGcLBwXpcTQDtoGwVt+BNoITxIw=
|
||||
github.com/mdlayher/socket v0.4.0/go.mod h1:xxFqz5GRCUN3UEOm9CZqEJsAbe1C8OwSK46NlmWuVoc=
|
||||
github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g=
|
||||
github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw=
|
||||
github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=
|
||||
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
|
||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||
@@ -630,8 +652,8 @@ github.com/michaelquigley/pfxlog v0.6.10/go.mod h1:gEiNTfKEX6cJHSwRpOuqBpc8oYrlh
|
||||
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
|
||||
github.com/miekg/dns v1.1.53 h1:ZBkuHr5dxHtB1caEOlZTLPo7D3L3TWckgUUs/RHfDxw=
|
||||
github.com/miekg/dns v1.1.53/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
|
||||
github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI=
|
||||
github.com/miekg/dns v1.1.54/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
|
||||
github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU=
|
||||
github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||
@@ -652,9 +674,11 @@ github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
|
||||
github.com/moby/term v0.0.0-20221120202655-abb19827d345 h1:J9c53/kxIH+2nTKBEfZYFMlhghtHpIHSXpm5VRGHSnU=
|
||||
github.com/moby/term v0.0.0-20221120202655-abb19827d345/go.mod h1:15ce4BGCFxt7I5NQKT+HV0yEDxmf6fSysfEDiVo3zFM=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
||||
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||
@@ -665,8 +689,6 @@ github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6Yf
|
||||
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
|
||||
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
|
||||
github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
|
||||
github.com/netfoundry/secretstream v0.1.5 h1:iQ4brqUeZO7xNlSpwZDhekPW8d5LlRyHwvvevBOP1IM=
|
||||
github.com/netfoundry/secretstream v0.1.5/go.mod h1:N6Mvl9Lk8xs84hFS9qZfjcJWiXmpzqaXW/L9W0JYfXY=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/nrdcg/auroradns v1.0.1/go.mod h1:y4pc0i9QXYlFCWrhWrUSIETnZgrf4KuwjDIWmmXo3JI=
|
||||
github.com/nrdcg/desec v0.5.0/go.mod h1:2ejvMazkav1VdDbv2HeQO7w+Ta1CGHqzQr27ZBYTuEQ=
|
||||
@@ -697,34 +719,36 @@ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+
|
||||
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
|
||||
github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
|
||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
||||
github.com/openziti/agent v1.0.10 h1:9oTmNXghlggD+O7BJdBp3PkD5kAZ1ssSC6IHZkMakzQ=
|
||||
github.com/openziti/agent v1.0.10/go.mod h1:6APWgkPP6Uxf1/VyirdTVLAJxwam2vVyakrVw6yvs40=
|
||||
github.com/openziti/channel/v2 v2.0.58 h1:j9baDM8nEAgHNhJ9n1h+WWbFSgCQCjvNB3KCr5x5q6c=
|
||||
github.com/openziti/channel/v2 v2.0.58/go.mod h1:Wa3TS5o4pBFSGnDb9zRCGww29ZVXk0GnupwNpb/2DWE=
|
||||
github.com/openziti/agent v1.0.13 h1:RptJCEANPb904cDqlP7IYfBI+he8EyosimYhG7bp9D0=
|
||||
github.com/openziti/agent v1.0.13/go.mod h1:CRbwhhnpsoDw0BxZsCRyQUozoRnGzH7+wuQVp1h4qX8=
|
||||
github.com/openziti/channel/v2 v2.0.78 h1:zY6olGzk0i7RdwnQQYV4J3aJmtuWqpTNUpbCKrghdFA=
|
||||
github.com/openziti/channel/v2 v2.0.78/go.mod h1:yajD/OlGYESMURbogY+myEUZ49fWERPbIhU6kcDnQHE=
|
||||
github.com/openziti/dilithium v0.3.3 h1:PLgQ6PMNLSTzCFbX/h98cmudgz/cU6TmjdSv5NAPD8k=
|
||||
github.com/openziti/dilithium v0.3.3/go.mod h1:vsCjI2AU/hon9e+dLhUFbCNGesJDj2ASgkySOcpmvjo=
|
||||
github.com/openziti/edge v0.24.239 h1:S7bAy/BfpGpKwXnfWuGgWpfjUEuJ5iwZojTxu9W8DO0=
|
||||
github.com/openziti/edge v0.24.239/go.mod h1:G6PLbcyib36KH9hN6tMacr2UMin15EmZioSGPPptJ0U=
|
||||
github.com/openziti/edge-api v0.25.11 h1:HHjDgoybPZGRZ+tM2udehI+U5Xv991iGED8E6CtDb9w=
|
||||
github.com/openziti/edge-api v0.25.11/go.mod h1:PBFMYELgr7JUuaCqHobq1U+WESsutzgEDoELU/9qFOg=
|
||||
github.com/openziti/fabric v0.22.87 h1:Vc71NOFGLQapr8YZjx4p+f9+HHKm63o4kpt4LMjXTY4=
|
||||
github.com/openziti/fabric v0.22.87/go.mod h1:w/cleYmpE/coUjjCzoRbpO648QWwSee0V4H8mfyqCdg=
|
||||
github.com/openziti/foundation/v2 v2.0.21 h1:3EDDmSunsbd2DlULuY/vqj12LHRZOknH/m3lf6Ws5Nw=
|
||||
github.com/openziti/foundation/v2 v2.0.21/go.mod h1:02GW3jFSSlfLwYwuTIldP/S4w7eCKqlzL6ajFSGHNPA=
|
||||
github.com/openziti/identity v1.0.45 h1:e2kXoMCPcaUXy+k6GwasuKeGSJwavFEr+eOvUA228UY=
|
||||
github.com/openziti/identity v1.0.45/go.mod h1:fQ5bjNu4L1Yqk011xNB1QXvsmBRHnm5d498fi1bhl24=
|
||||
github.com/openziti/edge v0.24.309 h1:EGZZ7GqI6/2y8zoNc0Tb11DpHtDG3YTNMUChulFTDL4=
|
||||
github.com/openziti/edge v0.24.309/go.mod h1:UDlCvgpuzQ6FFugSK0Sim7214c1O+7ahiOX5tvhJaP4=
|
||||
github.com/openziti/edge-api v0.25.24 h1:XrF3AtF9mnJXgG7rSV2M50Dj/EKUkBUaDdb9/n2TDHI=
|
||||
github.com/openziti/edge-api v0.25.24/go.mod h1:rmEkj8jAkBTUhhgE/GFXije6bpFbd2P9TzdxTqZlXI8=
|
||||
github.com/openziti/fabric v0.23.29 h1:FbAeUhfkNGYPNCYo3BFzRByvMTKhscxJEQxYU0BJJdA=
|
||||
github.com/openziti/fabric v0.23.29/go.mod h1:/M8URo+qloi39qG0QWvXTgtpiPPneNYOjR+VvywS0cw=
|
||||
github.com/openziti/foundation/v2 v2.0.24 h1:cNJCbh4o9E+7mtSUDo7ZBuMoPjJAilDWgr7X8ntRz/Q=
|
||||
github.com/openziti/foundation/v2 v2.0.24/go.mod h1:H0w/ldKyE0ynwpIwt68k2rhMwt874IVxPQcimMuHJ3s=
|
||||
github.com/openziti/identity v1.0.54 h1:1O/i3hnm5oCuHlOXesx4+aC2bXeTGoT+Rg1l2xZF14Y=
|
||||
github.com/openziti/identity v1.0.54/go.mod h1:ZhMiSF9okmA781kFl0m4BkeyAmf3XA20h1Dh1oz480I=
|
||||
github.com/openziti/jwks v1.0.3 h1:hf8wkb+Cg4nH/HM0KROFd7u+C3DkRVcFZJ7tDV+4icc=
|
||||
github.com/openziti/jwks v1.0.3/go.mod h1:t4xxq8vlXGsPn29kiQVnZBBDDnEoOFqtJoHibkJunQQ=
|
||||
github.com/openziti/metrics v1.2.19 h1:gQO3e2lUotRHBdGUXYBPWMIErIyyF5hw0EakwQbJzuM=
|
||||
github.com/openziti/metrics v1.2.19/go.mod h1:ovvxTpDBxGLcVLHgPTFFvwT4ur8p4Z76BPUhIE5iwqc=
|
||||
github.com/openziti/runzmd v1.0.20 h1:LzRPZRVO9AepAFzGTEsRGp2LRVtJp5vr+QOBl8KbN4w=
|
||||
github.com/openziti/runzmd v1.0.20/go.mod h1:IXTk5dHAZxtqjg9WVHOiyXHqEHZdwaH5Wg80h5Ux3bQ=
|
||||
github.com/openziti/sdk-golang v0.18.76 h1:D+UW1lpGHBBgfVrObpauq9RvJV/TFPdEEshfuPkiMcI=
|
||||
github.com/openziti/sdk-golang v0.18.76/go.mod h1:kw/5rWDLwx52iwW/4a0VRQMUi7GPSI3aETx+G5TvdFQ=
|
||||
github.com/openziti/storage v0.1.49 h1:luRsssYlGhpiJxjgc+FWF/yd2JLs9IKfeKID/5Hknrg=
|
||||
github.com/openziti/storage v0.1.49/go.mod h1:Le2VFNL67YewLtaCnGNXPLH18Yrh/EMxeJ/eXxTOwak=
|
||||
github.com/openziti/transport/v2 v2.0.72 h1:yjJtxy3Ckx5I4pDicmxILTdqQB6D18LSg2Zvsde0T00=
|
||||
github.com/openziti/transport/v2 v2.0.72/go.mod h1:YuDvm+syZc9nfdhbdPZdtuL1Dfw+bELWhWVYAg73ups=
|
||||
github.com/openziti/metrics v1.2.25 h1:acD/J/DcWgfbhmKS/s3HDvpt/1WS3QBZPeeGBZHbj94=
|
||||
github.com/openziti/metrics v1.2.25/go.mod h1:s2r1FS+wUdJ3LXp1qJK6777iQ8gPWXE2HFfDsiJo1/Y=
|
||||
github.com/openziti/runzmd v1.0.24 h1:jSwfqpA6SLCtpDUzdQl92gECc08itE8eFeHYdaJu4tY=
|
||||
github.com/openziti/runzmd v1.0.24/go.mod h1:NX3EPWMDZPIPNUztDOkLrV6akqdC/P/X0UUeAL63V58=
|
||||
github.com/openziti/sdk-golang v0.20.51 h1:oVqo9kyh8OKtAAX4yrJIJa5nn6qZDvpfUqOlBPnqb14=
|
||||
github.com/openziti/sdk-golang v0.20.51/go.mod h1:Ecgf8vgPSLOP7EgQgb3juv2UwsKbu37G1NHSqioTUCs=
|
||||
github.com/openziti/secretstream v0.1.8 h1:AgPHLDuXTiM1apHQmBvwvSW1vbQqAm7wUJDHqkQ/6Nk=
|
||||
github.com/openziti/secretstream v0.1.8/go.mod h1:qcF8EmSX5SAT8k2pzsDI4bWugopv9AA+ltgWDrcAAEw=
|
||||
github.com/openziti/storage v0.2.6 h1:/pbIRzDwrczMWRVkN75PfwAXFbArplIqhpRsUrsUOBc=
|
||||
github.com/openziti/storage v0.2.6/go.mod h1:JnjCofrnPcajwn6VIB2CgI7pVVUFBL7evbezIsQ4AgA=
|
||||
github.com/openziti/transport/v2 v2.0.88 h1:K2kIrDInbjFqXvzPg+EkyYZkUiy8rEkBnYRKshELuho=
|
||||
github.com/openziti/transport/v2 v2.0.88/go.mod h1:1eh1lpeIvB3KgyEC+OykpLa8Dj2AUC5921iOd2ovkwE=
|
||||
github.com/openziti/x509-claims v1.0.3 h1:HNdQ8Nf1agB3lBs1gahcO6zfkeS4S5xoQ2/PkY4HRX0=
|
||||
github.com/openziti/x509-claims v1.0.3/go.mod h1:Z0WIpBm6c4ecrpRKrou6Gk2wrLWxJO/+tuUwKh8VewE=
|
||||
github.com/openziti/xweb/v2 v2.0.2 h1:XYlVFriTq/U1wcUrc+XPnWJGhXh9NJPhtQ7+r3aC0cU=
|
||||
@@ -793,6 +817,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
|
||||
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/rabbitmq/amqp091-go v1.8.1 h1:RejT1SBUim5doqcL6s7iN6SBmsQqyTgXb1xMlH0h1hA=
|
||||
github.com/rabbitmq/amqp091-go v1.8.1/go.mod h1:+jPrT9iY2eLjRaMSRHUhc3z14E/l85kv/f+6luSD3pc=
|
||||
github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA=
|
||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
|
||||
@@ -816,13 +842,13 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb
|
||||
github.com/sacloud/libsacloud v1.36.2/go.mod h1:P7YAOVmnIn3DKHqCZcUKYUXmSwGBm3yS7IBEjKVSrjg=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||
github.com/shirou/gopsutil/v3 v3.23.3 h1:Syt5vVZXUDXPEXpIBt5ziWsJ4LdSAAxF4l/xZeQgSEE=
|
||||
github.com/shirou/gopsutil/v3 v3.23.3/go.mod h1:lSBNN6t3+D6W5e5nXTxc8KIMMVxAcS+6IJlffjRRlMU=
|
||||
github.com/shoenig/go-m1cpu v0.1.4/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
|
||||
github.com/shoenig/go-m1cpu v0.1.5 h1:LF57Z/Fpb/WdGLjt2HZilNnmZOxg/q2bSKTQhgbrLrQ=
|
||||
github.com/shirou/gopsutil/v3 v3.23.4 h1:hZwmDxZs7Ewt75DV81r4pFMqbq+di2cbt9FsQBqLD2o=
|
||||
github.com/shirou/gopsutil/v3 v3.23.4/go.mod h1:ZcGxyfzAMRevhUR2+cfhXDH6gQdFYE/t8j1nsU4mPI8=
|
||||
github.com/shoenig/go-m1cpu v0.1.5/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
|
||||
github.com/shoenig/test v0.6.3 h1:GVXWJFk9PiOjN0KoJ7VrJGH6uLPnqxR7/fe3HUPfE0c=
|
||||
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
|
||||
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
|
||||
github.com/shoenig/test v0.6.3/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
|
||||
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
|
||||
github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY=
|
||||
github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM=
|
||||
github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0=
|
||||
@@ -852,8 +878,8 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
|
||||
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.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y=
|
||||
github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||
github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
|
||||
@@ -906,8 +932,9 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
|
||||
github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
|
||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
|
||||
@@ -923,6 +950,10 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1
|
||||
github.com/transip/gotransip/v6 v6.2.0/go.mod h1:pQZ36hWWRahCUXkFWlx9Hs711gLd8J4qdgLdRzmtY+g=
|
||||
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||
github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
|
||||
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||
github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||
@@ -952,8 +983,9 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
|
||||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
|
||||
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
|
||||
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
|
||||
@@ -963,8 +995,8 @@ go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsX
|
||||
go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg=
|
||||
go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng=
|
||||
go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8=
|
||||
go.mongodb.org/mongo-driver v1.11.4 h1:4ayjakA013OdpGyL2K3ZqylTac/rMjrJOMZ1EHizXas=
|
||||
go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
|
||||
go.mongodb.org/mongo-driver v1.11.6 h1:XM7G6PjiGAO5betLF13BIa5TlLUUE3uJ/2Ox3Lz1K+o=
|
||||
go.mongodb.org/mongo-driver v1.11.6/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY=
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 h1:CCriYyAfq1Br1aIYettdHZTy8mBTIPo7We18TuO/bak=
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
|
||||
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
|
||||
@@ -977,15 +1009,19 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||
go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM=
|
||||
go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU=
|
||||
go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs=
|
||||
go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M=
|
||||
go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8=
|
||||
go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s=
|
||||
go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4=
|
||||
go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo=
|
||||
go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4=
|
||||
go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY=
|
||||
go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs=
|
||||
go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0=
|
||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||
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/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
|
||||
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
|
||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||
go.uber.org/ratelimit v0.0.0-20180316092928-c15da0234277/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y=
|
||||
@@ -1018,8 +1054,8 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPh
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
||||
golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
|
||||
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
|
||||
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
|
||||
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
|
||||
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=
|
||||
@@ -1030,8 +1066,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
||||
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/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
|
||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc=
|
||||
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
|
||||
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/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
@@ -1121,8 +1157,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
|
||||
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
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-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
@@ -1151,8 +1187,9 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
|
||||
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@@ -1241,14 +1278,15 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
|
||||
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ=
|
||||
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
|
||||
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
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=
|
||||
@@ -1517,6 +1555,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
||||
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=
|
||||
nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
|
||||
nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/goversion v1.2.0 h1:SPn+NLTiAG7w30IRK/DKp1BjvpWabYgxlLp/+kx5J8w=
|
||||
rsc.io/goversion v1.2.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo=
|
||||
|
||||
+57
-55
@@ -3,25 +3,29 @@ module github.com/openziti/ziti/network-tests
|
||||
go 1.19
|
||||
|
||||
require (
|
||||
github.com/openziti/fablab v0.4.23
|
||||
github.com/openziti/sdk-golang v0.18.26
|
||||
github.com/openziti/zitilab v0.1.21
|
||||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/spf13/cobra v1.6.1
|
||||
github.com/michaelquigley/pfxlog v0.6.10
|
||||
github.com/openziti/edge v0.24.239
|
||||
github.com/openziti/fablab v0.4.52
|
||||
github.com/openziti/sdk-golang v0.18.76
|
||||
github.com/openziti/zitilab v0.1.60
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/sirupsen/logrus v1.9.2
|
||||
github.com/spf13/cobra v1.7.0
|
||||
github.com/stretchr/testify v1.8.3
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/AppsFlyer/go-sundheit v0.5.0 // indirect
|
||||
github.com/Jeffail/gabs v1.4.0 // indirect
|
||||
github.com/Jeffail/gabs/v2 v2.6.1 // indirect
|
||||
github.com/Jeffail/gabs/v2 v2.7.0 // indirect
|
||||
github.com/MakeNowJust/heredoc v1.0.0 // indirect
|
||||
github.com/MichaelMure/go-term-markdown v0.1.4 // indirect
|
||||
github.com/MichaelMure/go-term-text v0.3.1 // indirect
|
||||
github.com/alecthomas/chroma v0.10.0 // indirect
|
||||
github.com/andybalholm/brotli v1.0.4 // indirect
|
||||
github.com/andybalholm/brotli v1.0.5 // indirect
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211106181442-e4c1a74c66bd // indirect
|
||||
github.com/armon/go-metrics v0.3.10 // indirect
|
||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect
|
||||
github.com/armon/go-metrics v0.4.1 // indirect
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
|
||||
github.com/aws/aws-sdk-go v1.44.118 // indirect
|
||||
github.com/biogo/store v0.0.0-20200525035639-8c94ae1e7c9c // indirect
|
||||
github.com/blang/semver v3.5.1+incompatible // indirect
|
||||
@@ -33,17 +37,17 @@ require (
|
||||
github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3 // indirect
|
||||
github.com/dineshappavoo/basex v0.0.0-20170425072625-481a6f6dc663 // indirect
|
||||
github.com/disintegration/imaging v1.6.2 // indirect
|
||||
github.com/dlclark/regexp2 v1.8.0 // indirect
|
||||
github.com/dlclark/regexp2 v1.9.0 // indirect
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/ef-ds/deque v1.0.4 // indirect
|
||||
github.com/eliukblau/pixterm/pkg/ansimage v0.0.0-20191210081756-9fb6cf8c2f75 // indirect
|
||||
github.com/emirpasic/gods v1.18.1 // indirect
|
||||
github.com/fatih/color v1.14.1 // indirect
|
||||
github.com/fatih/color v1.15.0 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.1 // indirect
|
||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa // indirect
|
||||
github.com/go-acme/lego/v4 v4.2.0 // indirect
|
||||
github.com/go-logr/logr v1.2.3 // indirect
|
||||
github.com/go-logr/logr v1.2.4 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/go-openapi/analysis v0.21.4 // indirect
|
||||
@@ -53,90 +57,89 @@ require (
|
||||
github.com/go-openapi/loads v0.21.2 // indirect
|
||||
github.com/go-openapi/runtime v0.25.0 // indirect
|
||||
github.com/go-openapi/spec v0.20.8 // indirect
|
||||
github.com/go-openapi/strfmt v0.21.3 // indirect
|
||||
github.com/go-openapi/strfmt v0.21.7 // indirect
|
||||
github.com/go-openapi/swag v0.22.3 // indirect
|
||||
github.com/go-openapi/validate v0.22.1 // indirect
|
||||
github.com/go-resty/resty/v2 v2.7.0 // indirect
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/gomarkdown/markdown v0.0.0-20221013030248-663e2500819c // indirect
|
||||
github.com/gomarkdown/markdown v0.0.0-20230322041520-c84983bdbf2a // indirect
|
||||
github.com/google/go-cmp v0.5.9 // indirect
|
||||
github.com/google/uuid v1.3.0 // indirect
|
||||
github.com/gorilla/handlers v1.5.1 // indirect
|
||||
github.com/gorilla/websocket v1.5.0 // indirect
|
||||
github.com/hashicorp/go-hclog v1.4.0 // indirect
|
||||
github.com/hashicorp/go-hclog v1.5.0 // indirect
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||
github.com/hashicorp/go-msgpack v0.5.5 // indirect
|
||||
github.com/hashicorp/golang-lru v0.6.0 // indirect
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.1 // indirect
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.2 // indirect
|
||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||
github.com/hashicorp/raft v1.3.11 // indirect
|
||||
github.com/hashicorp/raft v1.4.0 // indirect
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/jedib0t/go-pretty/v6 v6.4.4 // indirect
|
||||
github.com/jedib0t/go-pretty/v6 v6.4.6 // indirect
|
||||
github.com/jessevdk/go-flags v1.5.0 // indirect
|
||||
github.com/jinzhu/copier v0.3.5 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/josharian/intern v1.0.0 // indirect
|
||||
github.com/josharian/native v1.0.0 // indirect
|
||||
github.com/kataras/go-events v0.0.3-0.20201007151548-c411dc70c0a6 // indirect
|
||||
github.com/kataras/go-events v0.0.3 // indirect
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
||||
github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 // indirect
|
||||
github.com/kr/fs v0.1.0 // indirect
|
||||
github.com/kyokomi/emoji/v2 v2.2.11 // indirect
|
||||
github.com/kyokomi/emoji/v2 v2.2.12 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
github.com/lucsky/cuid v1.2.1 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect
|
||||
github.com/magiconair/properties v1.8.5 // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.17 // indirect
|
||||
github.com/mattn/go-isatty v0.0.18 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.14 // indirect
|
||||
github.com/mattn/go-tty v0.0.3 // indirect
|
||||
github.com/mdlayher/netlink v1.7.1 // indirect
|
||||
github.com/mdlayher/socket v0.4.0 // indirect
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
||||
github.com/michaelquigley/figlet v0.0.0-20191015203154-054d06db54b4 // indirect
|
||||
github.com/michaelquigley/pfxlog v0.6.9 // indirect
|
||||
github.com/miekg/dns v1.1.50 // indirect
|
||||
github.com/miekg/dns v1.1.53 // indirect
|
||||
github.com/miekg/pkcs11 v1.1.1 // indirect
|
||||
github.com/mitchellh/go-ps v1.0.0 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/natefinch/lumberjack v2.0.0+incompatible // indirect
|
||||
github.com/natefinch/npipe v0.0.0-20160621034901-c1b8fa8bdcce // indirect
|
||||
github.com/netfoundry/secretstream v0.1.2 // indirect
|
||||
github.com/netfoundry/secretstream v0.1.5 // indirect
|
||||
github.com/oklog/ulid v1.3.1 // indirect
|
||||
github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 // indirect
|
||||
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
||||
github.com/openziti/agent v1.0.8 // indirect
|
||||
github.com/openziti/channel/v2 v2.0.26 // indirect
|
||||
github.com/openziti/edge v0.24.95 // indirect
|
||||
github.com/openziti/fabric v0.22.7 // indirect
|
||||
github.com/openziti/foundation/v2 v2.0.10 // indirect
|
||||
github.com/openziti/identity v1.0.30 // indirect
|
||||
github.com/openziti/jwks v1.0.2 // indirect
|
||||
github.com/openziti/metrics v1.2.3 // indirect
|
||||
github.com/openziti/runzmd v1.0.9 // indirect
|
||||
github.com/openziti/storage v0.1.33 // indirect
|
||||
github.com/openziti/transport/v2 v2.0.50 // indirect
|
||||
github.com/openziti/agent v1.0.10 // indirect
|
||||
github.com/openziti/channel/v2 v2.0.58 // indirect
|
||||
github.com/openziti/edge-api v0.25.11 // indirect
|
||||
github.com/openziti/fabric v0.22.87 // indirect
|
||||
github.com/openziti/foundation/v2 v2.0.24 // indirect
|
||||
github.com/openziti/identity v1.0.45 // indirect
|
||||
github.com/openziti/jwks v1.0.3 // indirect
|
||||
github.com/openziti/metrics v1.2.19 // indirect
|
||||
github.com/openziti/runzmd v1.0.20 // indirect
|
||||
github.com/openziti/storage v0.1.49 // indirect
|
||||
github.com/openziti/transport/v2 v2.0.72 // indirect
|
||||
github.com/openziti/x509-claims v1.0.3 // indirect
|
||||
github.com/openziti/xweb/v2 v2.0.2 // indirect
|
||||
github.com/openziti/ziti v0.27.2 // indirect
|
||||
github.com/openziti/ziti v0.27.9 // indirect
|
||||
github.com/openziti/ziti-db-explorer v1.1.1 // indirect
|
||||
github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect
|
||||
github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 // indirect
|
||||
github.com/pelletier/go-toml v1.9.4 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/pkg/sftp v1.13.5 // indirect
|
||||
github.com/pkg/term v1.2.0-beta.2 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
|
||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
|
||||
github.com/rivo/uniseg v0.4.3 // indirect
|
||||
github.com/rivo/uniseg v0.4.4 // indirect
|
||||
github.com/rodaine/table v1.0.1 // indirect
|
||||
github.com/russross/blackfriday v1.5.2 // indirect
|
||||
github.com/shirou/gopsutil/v3 v3.23.1 // indirect
|
||||
github.com/shirou/gopsutil/v3 v3.23.3 // indirect
|
||||
github.com/shoenig/go-m1cpu v0.1.5 // indirect
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
|
||||
github.com/speps/go-hashids v2.0.0+incompatible // indirect
|
||||
github.com/spf13/afero v1.6.0 // indirect
|
||||
@@ -144,7 +147,6 @@ require (
|
||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/spf13/viper v1.10.0 // indirect
|
||||
github.com/stretchr/testify v1.8.1 // indirect
|
||||
github.com/subosito/gotenv v1.2.0 // indirect
|
||||
github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.11 // indirect
|
||||
@@ -156,21 +158,21 @@ require (
|
||||
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
go.etcd.io/bbolt v1.3.7 // indirect
|
||||
go.mongodb.org/mongo-driver v1.11.1 // indirect
|
||||
go.mongodb.org/mongo-driver v1.11.4 // indirect
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect
|
||||
go.opentelemetry.io/otel v1.11.2 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.11.2 // indirect
|
||||
golang.org/x/crypto v0.5.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230202163644-54bba9f4231b // indirect
|
||||
golang.org/x/image v0.5.0 // indirect
|
||||
golang.org/x/mod v0.6.0 // indirect
|
||||
golang.org/x/net v0.7.0 // indirect
|
||||
golang.org/x/sync v0.1.0 // indirect
|
||||
golang.org/x/sys v0.5.0 // indirect
|
||||
golang.org/x/term v0.5.0 // indirect
|
||||
golang.org/x/text v0.7.0 // indirect
|
||||
golang.org/x/tools v0.2.0 // indirect
|
||||
google.golang.org/protobuf v1.28.1 // indirect
|
||||
go.opentelemetry.io/otel v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.14.0 // indirect
|
||||
golang.org/x/crypto v0.9.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
|
||||
golang.org/x/image v0.7.0 // indirect
|
||||
golang.org/x/mod v0.8.0 // indirect
|
||||
golang.org/x/net v0.10.0 // indirect
|
||||
golang.org/x/sync v0.2.0 // indirect
|
||||
golang.org/x/sys v0.8.0 // indirect
|
||||
golang.org/x/term v0.8.0 // indirect
|
||||
golang.org/x/text v0.9.0 // indirect
|
||||
golang.org/x/tools v0.6.0 // indirect
|
||||
google.golang.org/protobuf v1.30.0 // indirect
|
||||
gopkg.in/AlecAivazis/survey.v1 v1.8.7 // indirect
|
||||
gopkg.in/ini.v1 v1.66.2 // indirect
|
||||
gopkg.in/resty.v1 v1.12.0 // indirect
|
||||
|
||||
+123
-109
@@ -60,8 +60,8 @@ github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3
|
||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo=
|
||||
github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
|
||||
github.com/Jeffail/gabs/v2 v2.6.1 h1:wwbE6nTQTwIMsMxzi6XFQQYRZ6wDc1mSdxoAN+9U4Gk=
|
||||
github.com/Jeffail/gabs/v2 v2.6.1/go.mod h1:xCn81vdHKxFUuWWAaD5jCTQDNPBMh5pPs9IJ+NcziBI=
|
||||
github.com/Jeffail/gabs/v2 v2.7.0 h1:Y2edYaTcE8ZpRsR2AtmPu5xQdFDIthFG0jYhu5PY8kg=
|
||||
github.com/Jeffail/gabs/v2 v2.7.0/go.mod h1:dp5ocw1FvBBQYssgHsG7I1WYsiLRtkUaB1FEtSwvNUw=
|
||||
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
|
||||
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
|
||||
github.com/MichaelMure/go-term-markdown v0.1.4 h1:Ir3kBXDUtOX7dEv0EaQV8CNPpH+T7AfTh0eniMOtNcs=
|
||||
@@ -88,8 +88,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
|
||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/aliyun/alibaba-cloud-sdk-go v1.61.458/go.mod h1:pUKYbK5JQ+1Dfxk80P0qxGqe5dkxDoabbZS7zOcouyA=
|
||||
github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
|
||||
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
||||
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211106181442-e4c1a74c66bd h1:fjJY1LimH0wVCvOHLX35SCX/MbWomAglET1H2kvz7xc=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20211106181442-e4c1a74c66bd/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
|
||||
@@ -98,12 +98,12 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
|
||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg=
|
||||
github.com/armon/go-metrics v0.3.8/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo=
|
||||
github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
|
||||
github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
|
||||
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
||||
github.com/aws/aws-sdk-go v1.30.20/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
||||
github.com/aws/aws-sdk-go v1.44.118 h1:FJOqIRTukf7+Ulp047/k7JB6eqMXNnj7eb+coORThHQ=
|
||||
github.com/aws/aws-sdk-go v1.44.118/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
|
||||
@@ -161,8 +161,8 @@ github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1
|
||||
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
|
||||
github.com/dlclark/regexp2 v1.1.6/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dlclark/regexp2 v1.8.0 h1:rJD5HeGIT/2b5CDk63FVCwZA3qgYElfg+oQK7uH5pfE=
|
||||
github.com/dlclark/regexp2 v1.8.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
|
||||
github.com/dlclark/regexp2 v1.9.0 h1:pTK/l/3qYIKaRXuHnEnIf7Y5NxfRPfpb7dis6/gdlVI=
|
||||
github.com/dlclark/regexp2 v1.9.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
|
||||
github.com/dnsimple/dnsimple-go v0.63.0/go.mod h1:O5TJ0/U6r7AfT8niYNlmohpLbCSG+c71tQlGr9SeGrg=
|
||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
@@ -186,8 +186,8 @@ github.com/exoscale/egoscale v0.23.0/go.mod h1:hRo78jkjkCDKpivQdRBEpNYF5+cVpCJCP
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||
github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w=
|
||||
github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
|
||||
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
|
||||
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
|
||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||
github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ=
|
||||
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
@@ -212,8 +212,8 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
||||
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-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
|
||||
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||
@@ -245,8 +245,9 @@ github.com/go-openapi/spec v0.20.8 h1:ubHmXNY3FCIOinT8RNrrPfGc9t7I1qhPtdOGoG2AxR
|
||||
github.com/go-openapi/spec v0.20.8/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA=
|
||||
github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg=
|
||||
github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k=
|
||||
github.com/go-openapi/strfmt v0.21.3 h1:xwhj5X6CjXEZZHMWy1zKJxvW9AfHC9pkyUjLvHtKG7o=
|
||||
github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg=
|
||||
github.com/go-openapi/strfmt v0.21.7 h1:rspiXgNWgeUzhjo1YU01do6qsahtJNByjLVbPLNHb8k=
|
||||
github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KAzYjclFs3ew=
|
||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
|
||||
github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
|
||||
@@ -325,8 +326,8 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu
|
||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/gomarkdown/markdown v0.0.0-20191123064959-2c17d62f5098/go.mod h1:aii0r/K0ZnHv7G0KF7xy1v0A7s2Ljrb5byB7MO5p6TU=
|
||||
github.com/gomarkdown/markdown v0.0.0-20221013030248-663e2500819c h1:iyaGYbCmcYK0Ja9a3OUa2Fo+EaN0cbLu0eKpBwPFzc8=
|
||||
github.com/gomarkdown/markdown v0.0.0-20221013030248-663e2500819c/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=
|
||||
github.com/gomarkdown/markdown v0.0.0-20230322041520-c84983bdbf2a h1:AWZzzFrqyjYlRloN6edwTLTUbKxf5flLXNuTBDm3Ews=
|
||||
github.com/gomarkdown/markdown v0.0.0-20230322041520-c84983bdbf2a/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=
|
||||
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/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
@@ -387,8 +388,8 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng
|
||||
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||
github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
||||
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
||||
github.com/hashicorp/go-hclog v1.4.0 h1:ctuWFGrhFha8BnnzxqeRGidlEcQkDyL5u8J8t5eA11I=
|
||||
github.com/hashicorp/go-hclog v1.4.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
||||
github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c=
|
||||
github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
@@ -409,16 +410,16 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4=
|
||||
github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.1 h1:5pv5N1lT1fjLg2VQ5KWc7kmucp2x/kvFOnxuVTqZ6x4=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.1/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.2 h1:Dwmkdr5Nc/oBiXgJS3CDHNhJtIHkuZ3DZF5twqnfBdU=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.2/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
|
||||
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
|
||||
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/raft v1.1.0/go.mod h1:4Ak7FSPnuvmb0GV6vgIAJ4vYT4bek9bb6Q+7HVbyzqM=
|
||||
github.com/hashicorp/raft v1.3.11 h1:p3v6gf6l3S797NnK5av3HcczOC1T5CLoaRvg0g9ys4A=
|
||||
github.com/hashicorp/raft v1.3.11/go.mod h1:J8naEwc6XaaCfts7+28whSeRvCqTd6e20BlCU3LtEO4=
|
||||
github.com/hashicorp/raft v1.4.0 h1:tn28S/AWv0BtRQgwZv/1NELu8sCvI0FixqL8C8MYKeY=
|
||||
github.com/hashicorp/raft v1.4.0/go.mod h1:nz64BIjXphDLATfKGG5RzHtNUPioLeKFsXEm88yTVew=
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0 h1:CO8dBMLH6dvE1jTn/30ZZw3iuPsNfajshWoJTnVc5cc=
|
||||
github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0/go.mod h1:nTakvJ4XYq45UXtn0DbwR4aU9ZdjlnIenpbs6Cd+FM0=
|
||||
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||
@@ -429,11 +430,10 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/jedib0t/go-pretty/v6 v6.4.4 h1:N+gz6UngBPF4M288kiMURPHELDMIhF/Em35aYuKrsSc=
|
||||
github.com/jedib0t/go-pretty/v6 v6.4.4/go.mod h1:MgmISkTWDSFu0xOqiZ0mKNntMQ2mDgOcwOkwBEkMDJI=
|
||||
github.com/jedib0t/go-pretty/v6 v6.4.6 h1:v6aG9h6Uby3IusSSEjHaZNXpHFhzqMmjXcPq1Rjl9Jw=
|
||||
github.com/jedib0t/go-pretty/v6 v6.4.6/go.mod h1:Ndk3ase2CkQbXLLNf5QDHoYb6J9WtVfmHZu9n8rk2xs=
|
||||
github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc=
|
||||
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
|
||||
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
|
||||
@@ -460,8 +460,8 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
|
||||
github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
|
||||
github.com/kataras/go-events v0.0.3-0.20201007151548-c411dc70c0a6 h1:XXnySN8wVet8S4UlcXHjh8Oa7618Eu7z92HxU5cIfhA=
|
||||
github.com/kataras/go-events v0.0.3-0.20201007151548-c411dc70c0a6/go.mod h1:6IxMW59VJdEIqj3bjFGJvGLRdb0WHtrlxPZy9qXctcg=
|
||||
github.com/kataras/go-events v0.0.3 h1:o5YK53uURXtrlg7qE/vovxd/yKOJcLuFtPQbf1rYMC4=
|
||||
github.com/kataras/go-events v0.0.3/go.mod h1:bFBgtzwwzrag7kQmGuU1ZaVxhK2qseYPQomXoVEMsj4=
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
||||
github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 h1:WjT3fLi9n8YWh/Ih8Q1LHAPsTqGddPcHqscN+PJ3i68=
|
||||
@@ -485,8 +485,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kyokomi/emoji/v2 v2.2.8/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE=
|
||||
github.com/kyokomi/emoji/v2 v2.2.11 h1:Pf/ZWVTbnAVkHOLJLWjPxM/FmgyPe+d85cv/OLP5Yus=
|
||||
github.com/kyokomi/emoji/v2 v2.2.11/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE=
|
||||
github.com/kyokomi/emoji/v2 v2.2.12 h1:sSVA5nH9ebR3Zji1o31wu3yOwD1zKXQA2z0zUyeit60=
|
||||
github.com/kyokomi/emoji/v2 v2.2.12/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE=
|
||||
github.com/labbsr0x/bindman-dns-webhook v1.0.2/go.mod h1:p6b+VCXIR8NYKpDr8/dg1HKfQoRHCdcsROXKvmoehKA=
|
||||
github.com/labbsr0x/goh v1.0.1/go.mod h1:8K2UhVoaWXcCU7Lxoa2omWnC8gyW8px7/lmO61c027w=
|
||||
github.com/linode/linodego v0.21.0/go.mod h1:UTpq1JUZD0CZsJ8rt+0CRkqbzrp1MbGakVPt2DXY5Mk=
|
||||
@@ -497,8 +497,8 @@ github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i
|
||||
github.com/lucsky/cuid v1.2.1 h1:MtJrL2OFhvYufUIn48d35QGXyeTC8tn0upumW9WwTHg=
|
||||
github.com/lucsky/cuid v1.2.1/go.mod h1:QaaJqckboimOmhRSJXSx/+IT+VTfxfPGSo/6mfgUfmE=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
|
||||
github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de h1:V53FWzU6KAZVi1tPp5UIsMoUWJ2/PNwYIDXnu7QuBCE=
|
||||
github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
|
||||
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a h1:N9zuLhTvBSRt0gWSiJswwQ2HqDmtX/ZCDJURnKUt1Ik=
|
||||
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
|
||||
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
|
||||
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
@@ -526,8 +526,8 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
|
||||
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
|
||||
github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||
github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
|
||||
@@ -549,12 +549,12 @@ github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQ
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||
github.com/michaelquigley/figlet v0.0.0-20191015203154-054d06db54b4 h1:O0aAES+Hu4tySETys37Xd1wMcUohr5X7yM3qaRSHKRw=
|
||||
github.com/michaelquigley/figlet v0.0.0-20191015203154-054d06db54b4/go.mod h1:ZgenLagNkpruEGzNeXiQH9RtZedSLKw1WlDTJWPZzpk=
|
||||
github.com/michaelquigley/pfxlog v0.6.9 h1:K/weH6ARu58aEDQi0ccinItvV958CeO6Ri4jqeFwd/w=
|
||||
github.com/michaelquigley/pfxlog v0.6.9/go.mod h1:D2vg1tPyPdSXWWkSnGk6Fomwh5b3clwVJDUh71tq8Sk=
|
||||
github.com/michaelquigley/pfxlog v0.6.10 h1:IbC/H3MmSDcPlQHF1UZPQU13Dkrs0+ycWRyQd2ihnjw=
|
||||
github.com/michaelquigley/pfxlog v0.6.10/go.mod h1:gEiNTfKEX6cJHSwRpOuqBpc8oYrlhMiDK/xMk/gV7D0=
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
|
||||
github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA=
|
||||
github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
|
||||
github.com/miekg/dns v1.1.53 h1:ZBkuHr5dxHtB1caEOlZTLPo7D3L3TWckgUUs/RHfDxw=
|
||||
github.com/miekg/dns v1.1.53/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
|
||||
github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU=
|
||||
github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||
@@ -584,8 +584,8 @@ github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6Yf
|
||||
github.com/natefinch/npipe v0.0.0-20160621034901-c1b8fa8bdcce h1:TqjP/BTDrwN7zP9xyXVuLsMBXYMt6LLYi55PlrIcq8U=
|
||||
github.com/natefinch/npipe v0.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:ifHPsLndGGzvgzcaXUvzmt6LxKT4pJ+uzEhtnMt+f7A=
|
||||
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
|
||||
github.com/netfoundry/secretstream v0.1.2 h1:NgqrYytDnjKbOfWI29TT0SJM+RwB3yf9MIkJVJaU+J0=
|
||||
github.com/netfoundry/secretstream v0.1.2/go.mod h1:uasYkYSp0MmNSlKOWJ2sVzxPms8e58TS4ENq4yro86k=
|
||||
github.com/netfoundry/secretstream v0.1.5 h1:iQ4brqUeZO7xNlSpwZDhekPW8d5LlRyHwvvevBOP1IM=
|
||||
github.com/netfoundry/secretstream v0.1.5/go.mod h1:N6Mvl9Lk8xs84hFS9qZfjcJWiXmpzqaXW/L9W0JYfXY=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/nrdcg/auroradns v1.0.1/go.mod h1:y4pc0i9QXYlFCWrhWrUSIETnZgrf4KuwjDIWmmXo3JI=
|
||||
github.com/nrdcg/desec v0.5.0/go.mod h1:2ejvMazkav1VdDbv2HeQO7w+Ta1CGHqzQr27ZBYTuEQ=
|
||||
@@ -612,42 +612,44 @@ github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak=
|
||||
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
|
||||
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
|
||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
||||
github.com/openziti/agent v1.0.8 h1:qB4zQO9dz3PL8qbeyzCWbwTrtHZPEZlYtjkJJ78SJPo=
|
||||
github.com/openziti/agent v1.0.8/go.mod h1:6APWgkPP6Uxf1/VyirdTVLAJxwam2vVyakrVw6yvs40=
|
||||
github.com/openziti/channel/v2 v2.0.26 h1:IIEnno26FuywcyCwCie1U7OHoB8HzuG95EzEnvtKmio=
|
||||
github.com/openziti/channel/v2 v2.0.26/go.mod h1:zZO0bgVYY9FCDs2EMRakDl6wIfyOWuzgPzPL8EvQ5Ks=
|
||||
github.com/openziti/edge v0.24.95 h1:Lj7ycWVOXbqt3TK6NSGPWXj5bp3/5rX7rA+bR5wA8Nc=
|
||||
github.com/openziti/edge v0.24.95/go.mod h1:nVamtrBekK372q8bbKK/D6t0W7LBqQ+Miu0YE1u3od4=
|
||||
github.com/openziti/fablab v0.4.23 h1:GKbSceX8hphBfY0RtYkrq7LTilnV61w4JCb4hh70Zio=
|
||||
github.com/openziti/fablab v0.4.23/go.mod h1:ff6XCI4YryKcyhblK3zNVkiEH0JXDhO6ZkHQN4N0wDE=
|
||||
github.com/openziti/fabric v0.22.7 h1:o0k/QnCpVZPiC77fh/NoUVCoeQNhfBm4oOICcJsdkWc=
|
||||
github.com/openziti/fabric v0.22.7/go.mod h1:NITYnGTCeu0ENixTd7qXFzGyIDm5GkyJhxKYTnmFzjk=
|
||||
github.com/openziti/foundation/v2 v2.0.10 h1:IeOkcPbgBpBTw4JrWz8s9Z76vO/m+i2uIE0cMZ0C2DM=
|
||||
github.com/openziti/foundation/v2 v2.0.10/go.mod h1:Z0gnQsGJb/H/B+pixLtmCIpw1dBllD4QoT6LeD35WzA=
|
||||
github.com/openziti/identity v1.0.30 h1:N2WDdK7MpeXuHCRjMo6N/QMtUXUkenUEqfKWXFNu2oE=
|
||||
github.com/openziti/identity v1.0.30/go.mod h1:SPZAaqvDToS2jtae4D2fvO9IsR6G6FKNZ8WTqAwKKJE=
|
||||
github.com/openziti/jwks v1.0.2 h1:32BGXIAnefS+v7uXKPb1x8/cQ7srek6Ai06dsrMTY4E=
|
||||
github.com/openziti/jwks v1.0.2/go.mod h1:KwO0x9FBG0aoJS5f6nH5xeHoplyR1H143SMI9kF0mC8=
|
||||
github.com/openziti/metrics v1.2.3 h1:h9+mSU673QLSMOb3YibD1vNgE0yIDZ5leiUqDwN5szE=
|
||||
github.com/openziti/metrics v1.2.3/go.mod h1:jK8BfZ9nXMhO+LPcUPpN/sebrLfIeF4uaHlm5JIF7BY=
|
||||
github.com/openziti/runzmd v1.0.9 h1:gQnZT5cACuVpcBBBHWIaN9Vmwv8KUNa7LBLG8Xi13/U=
|
||||
github.com/openziti/runzmd v1.0.9/go.mod h1:s6amx7gbzewUqlnq8dcvJ50eb0ryjQtknPYubOHuIug=
|
||||
github.com/openziti/sdk-golang v0.18.26 h1:Wk2s88R9b5SeP3D3uEpqE31ffY20Y1v2ZSyYfgud/BA=
|
||||
github.com/openziti/sdk-golang v0.18.26/go.mod h1:QCoDwqjGm8qxcIDboY+jglfjZVdz8gREquRMpX7jz8I=
|
||||
github.com/openziti/storage v0.1.33 h1:c3jdiJPIthYC51Ye2VOBGuz3g1DGVzmjGIlgPs1BcOg=
|
||||
github.com/openziti/storage v0.1.33/go.mod h1:G4swa9DU8oG+B+tv4X7X5QjtI8nxbXhEUKlDbwNowBY=
|
||||
github.com/openziti/transport/v2 v2.0.50 h1:bMk0CeQhg61vaCpAUANlu+hZTqyZSa7IFX3ZYFi1tns=
|
||||
github.com/openziti/transport/v2 v2.0.50/go.mod h1:I3qtYJhHzEzydqqdIq8IZStwPV7ybynK0mJP17MB/q0=
|
||||
github.com/openziti/agent v1.0.10 h1:9oTmNXghlggD+O7BJdBp3PkD5kAZ1ssSC6IHZkMakzQ=
|
||||
github.com/openziti/agent v1.0.10/go.mod h1:6APWgkPP6Uxf1/VyirdTVLAJxwam2vVyakrVw6yvs40=
|
||||
github.com/openziti/channel/v2 v2.0.58 h1:j9baDM8nEAgHNhJ9n1h+WWbFSgCQCjvNB3KCr5x5q6c=
|
||||
github.com/openziti/channel/v2 v2.0.58/go.mod h1:Wa3TS5o4pBFSGnDb9zRCGww29ZVXk0GnupwNpb/2DWE=
|
||||
github.com/openziti/edge v0.24.239 h1:S7bAy/BfpGpKwXnfWuGgWpfjUEuJ5iwZojTxu9W8DO0=
|
||||
github.com/openziti/edge v0.24.239/go.mod h1:G6PLbcyib36KH9hN6tMacr2UMin15EmZioSGPPptJ0U=
|
||||
github.com/openziti/edge-api v0.25.11 h1:HHjDgoybPZGRZ+tM2udehI+U5Xv991iGED8E6CtDb9w=
|
||||
github.com/openziti/edge-api v0.25.11/go.mod h1:PBFMYELgr7JUuaCqHobq1U+WESsutzgEDoELU/9qFOg=
|
||||
github.com/openziti/fablab v0.4.52 h1:X5+NaRnfPxbzhxUh9b4IQmVNVgYWFf8/Ck2sKNz77ho=
|
||||
github.com/openziti/fablab v0.4.52/go.mod h1:aF8Fu3C8hnnaOJyAZz3AXGY4cMxQyBLhoIlSRJ/VVpc=
|
||||
github.com/openziti/fabric v0.22.87 h1:Vc71NOFGLQapr8YZjx4p+f9+HHKm63o4kpt4LMjXTY4=
|
||||
github.com/openziti/fabric v0.22.87/go.mod h1:w/cleYmpE/coUjjCzoRbpO648QWwSee0V4H8mfyqCdg=
|
||||
github.com/openziti/foundation/v2 v2.0.24 h1:cNJCbh4o9E+7mtSUDo7ZBuMoPjJAilDWgr7X8ntRz/Q=
|
||||
github.com/openziti/foundation/v2 v2.0.24/go.mod h1:H0w/ldKyE0ynwpIwt68k2rhMwt874IVxPQcimMuHJ3s=
|
||||
github.com/openziti/identity v1.0.45 h1:e2kXoMCPcaUXy+k6GwasuKeGSJwavFEr+eOvUA228UY=
|
||||
github.com/openziti/identity v1.0.45/go.mod h1:fQ5bjNu4L1Yqk011xNB1QXvsmBRHnm5d498fi1bhl24=
|
||||
github.com/openziti/jwks v1.0.3 h1:hf8wkb+Cg4nH/HM0KROFd7u+C3DkRVcFZJ7tDV+4icc=
|
||||
github.com/openziti/jwks v1.0.3/go.mod h1:t4xxq8vlXGsPn29kiQVnZBBDDnEoOFqtJoHibkJunQQ=
|
||||
github.com/openziti/metrics v1.2.19 h1:gQO3e2lUotRHBdGUXYBPWMIErIyyF5hw0EakwQbJzuM=
|
||||
github.com/openziti/metrics v1.2.19/go.mod h1:ovvxTpDBxGLcVLHgPTFFvwT4ur8p4Z76BPUhIE5iwqc=
|
||||
github.com/openziti/runzmd v1.0.20 h1:LzRPZRVO9AepAFzGTEsRGp2LRVtJp5vr+QOBl8KbN4w=
|
||||
github.com/openziti/runzmd v1.0.20/go.mod h1:IXTk5dHAZxtqjg9WVHOiyXHqEHZdwaH5Wg80h5Ux3bQ=
|
||||
github.com/openziti/sdk-golang v0.18.76 h1:D+UW1lpGHBBgfVrObpauq9RvJV/TFPdEEshfuPkiMcI=
|
||||
github.com/openziti/sdk-golang v0.18.76/go.mod h1:kw/5rWDLwx52iwW/4a0VRQMUi7GPSI3aETx+G5TvdFQ=
|
||||
github.com/openziti/storage v0.1.49 h1:luRsssYlGhpiJxjgc+FWF/yd2JLs9IKfeKID/5Hknrg=
|
||||
github.com/openziti/storage v0.1.49/go.mod h1:Le2VFNL67YewLtaCnGNXPLH18Yrh/EMxeJ/eXxTOwak=
|
||||
github.com/openziti/transport/v2 v2.0.72 h1:yjJtxy3Ckx5I4pDicmxILTdqQB6D18LSg2Zvsde0T00=
|
||||
github.com/openziti/transport/v2 v2.0.72/go.mod h1:YuDvm+syZc9nfdhbdPZdtuL1Dfw+bELWhWVYAg73ups=
|
||||
github.com/openziti/x509-claims v1.0.3 h1:HNdQ8Nf1agB3lBs1gahcO6zfkeS4S5xoQ2/PkY4HRX0=
|
||||
github.com/openziti/x509-claims v1.0.3/go.mod h1:Z0WIpBm6c4ecrpRKrou6Gk2wrLWxJO/+tuUwKh8VewE=
|
||||
github.com/openziti/xweb/v2 v2.0.2 h1:XYlVFriTq/U1wcUrc+XPnWJGhXh9NJPhtQ7+r3aC0cU=
|
||||
github.com/openziti/xweb/v2 v2.0.2/go.mod h1:KQOOlnJk08EZT3TWkvDj/pbIUEVbgG0IrrNzl8gsi40=
|
||||
github.com/openziti/ziti v0.27.2 h1:OPNwVOy2OzucFrThOckWxr7GaD5CTBXsY2dZA23W5a4=
|
||||
github.com/openziti/ziti v0.27.2/go.mod h1:ZnXzNonbbJPd+mmkeEY6moICdfNrdOs1DD8zdWDNMcc=
|
||||
github.com/openziti/ziti v0.27.9 h1:GsPqGFpHLLrvx4G+nXs7gKDyeSwl46D4GOLNFBmNI9c=
|
||||
github.com/openziti/ziti v0.27.9/go.mod h1:tSF7cciowQXna3O++xyUSq2S7hPZwYnH+WUwSr2NNsA=
|
||||
github.com/openziti/ziti-db-explorer v1.1.1 h1:G0eoTby+aIjjt5TxEfR+FMI2CWd4RvZFjzaIMX2lEBw=
|
||||
github.com/openziti/ziti-db-explorer v1.1.1/go.mod h1:h76h7Tsb+khb0v+CqYKL6ifUfJbUMjGBFU2IvupfBE4=
|
||||
github.com/openziti/zitilab v0.1.21 h1:ZZEq86qMvOAtzcgL1b2CqmZDnGqBH8cZ1nXcHdd3I+E=
|
||||
github.com/openziti/zitilab v0.1.21/go.mod h1:CwMY50NZENpbVuSZMq+n8OngRVtoVe7qnZB/dEbmvcE=
|
||||
github.com/openziti/zitilab v0.1.60 h1:uyg/1KXA5+dhg3ibgPqqvxrTRP5YvplTaSHj2w4/3oQ=
|
||||
github.com/openziti/zitilab v0.1.60/go.mod h1:lNk7ss0dpBnowHdd0LX7S688a+DKFQigX0FVhbcm5LY=
|
||||
github.com/oracle/oci-go-sdk v24.2.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888=
|
||||
github.com/orcaman/concurrent-map/v2 v2.0.1 h1:jOJ5Pg2w1oeB6PeDurIYf6k9PQ+aTITr/6lP/L/zp6c=
|
||||
github.com/orcaman/concurrent-map/v2 v2.0.1/go.mod h1:9Eq3TG2oBe5FirmYWQfYO5iH1q0Jv47PLaNK++uCdOM=
|
||||
@@ -658,7 +660,6 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI
|
||||
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
||||
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
||||
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
|
||||
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
|
||||
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
||||
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
|
||||
@@ -709,8 +710,8 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5X
|
||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw=
|
||||
github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
|
||||
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/rodaine/table v1.0.1 h1:U/VwCnUxlVYxw8+NJiLIuCxA/xa6jL38MY3FYysVWWQ=
|
||||
github.com/rodaine/table v1.0.1/go.mod h1:UVEtfBsflpeEcD56nF4F5AocNFta0ZuolpSVdPtlmP4=
|
||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||
@@ -726,16 +727,21 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb
|
||||
github.com/sacloud/libsacloud v1.36.2/go.mod h1:P7YAOVmnIn3DKHqCZcUKYUXmSwGBm3yS7IBEjKVSrjg=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||
github.com/shirou/gopsutil/v3 v3.23.1 h1:a9KKO+kGLKEvcPIs4W62v0nu3sciVDOOOPUD0Hz7z/4=
|
||||
github.com/shirou/gopsutil/v3 v3.23.1/go.mod h1:NN6mnm5/0k8jw4cBfCnJtr5L7ErOTg18tMNpgFkn0hA=
|
||||
github.com/shirou/gopsutil/v3 v3.23.3 h1:Syt5vVZXUDXPEXpIBt5ziWsJ4LdSAAxF4l/xZeQgSEE=
|
||||
github.com/shirou/gopsutil/v3 v3.23.3/go.mod h1:lSBNN6t3+D6W5e5nXTxc8KIMMVxAcS+6IJlffjRRlMU=
|
||||
github.com/shoenig/go-m1cpu v0.1.4/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
|
||||
github.com/shoenig/go-m1cpu v0.1.5 h1:LF57Z/Fpb/WdGLjt2HZilNnmZOxg/q2bSKTQhgbrLrQ=
|
||||
github.com/shoenig/go-m1cpu v0.1.5/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
|
||||
github.com/shoenig/test v0.6.3 h1:GVXWJFk9PiOjN0KoJ7VrJGH6uLPnqxR7/fe3HUPfE0c=
|
||||
github.com/shoenig/test v0.6.3/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.4.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.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y=
|
||||
github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||
github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
|
||||
@@ -751,8 +757,8 @@ github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
|
||||
github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
|
||||
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
|
||||
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
|
||||
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
||||
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
|
||||
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
@@ -778,8 +784,10 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
||||
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||
github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 h1:3SNcvBmEPE1YlB1JpVZouslJpI3GBNoiqW7+wb0Rz7w=
|
||||
@@ -827,8 +835,8 @@ go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsX
|
||||
go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg=
|
||||
go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng=
|
||||
go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8=
|
||||
go.mongodb.org/mongo-driver v1.11.1 h1:QP0znIRTuL0jf1oBQoAoM0C6ZJfBK4kx0Uumtv1A7w8=
|
||||
go.mongodb.org/mongo-driver v1.11.1/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8=
|
||||
go.mongodb.org/mongo-driver v1.11.4 h1:4ayjakA013OdpGyL2K3ZqylTac/rMjrJOMZ1EHizXas=
|
||||
go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 h1:CCriYyAfq1Br1aIYettdHZTy8mBTIPo7We18TuO/bak=
|
||||
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
|
||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||
@@ -840,11 +848,11 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||
go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0=
|
||||
go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI=
|
||||
go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM=
|
||||
go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU=
|
||||
go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs=
|
||||
go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0=
|
||||
go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA=
|
||||
go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M=
|
||||
go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8=
|
||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||
@@ -863,15 +871,14 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
|
||||
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-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
|
||||
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
|
||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
||||
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
|
||||
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
|
||||
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=
|
||||
@@ -882,14 +889,14 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
||||
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/exp v0.0.0-20230202163644-54bba9f4231b h1:EqBVA+nNsObCwQoBEHy4wLU0pi7i8a4AL3pbItPdPkE=
|
||||
golang.org/x/exp v0.0.0-20230202163644-54bba9f4231b/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
|
||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||
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/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/image v0.0.0-20191206065243-da761ea9ff43/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/image v0.5.0 h1:5JMiNunQeQw++mMOz48/ISeNu3Iweh/JaZU8ZLqHRrI=
|
||||
golang.org/x/image v0.5.0/go.mod h1:FVC7BI/5Ym8R25iw5OLsgshdUBbT1h5jZTpA+mvAdZ4=
|
||||
golang.org/x/image v0.7.0 h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw=
|
||||
golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg=
|
||||
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=
|
||||
@@ -914,8 +921,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I=
|
||||
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
|
||||
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
|
||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
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=
|
||||
@@ -963,13 +970,14 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
||||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
|
||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
|
||||
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/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=
|
||||
@@ -995,8 +1003,9 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
|
||||
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@@ -1076,14 +1085,18 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
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=
|
||||
@@ -1093,8 +1106,10 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
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=
|
||||
@@ -1158,10 +1173,9 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE=
|
||||
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
|
||||
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
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=
|
||||
@@ -1271,8 +1285,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
||||
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
|
||||
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
gopkg.in/AlecAivazis/survey.v1 v1.8.7 h1:oBJqtgsyBLg9K5FK9twNUbcPnbCPoh+R9a+7nag3qJM=
|
||||
gopkg.in/AlecAivazis/survey.v1 v1.8.7/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
|
||||
+8
-6
@@ -23,13 +23,17 @@ func NewBootstrapAction() model.ActionBinder {
|
||||
func (a *bootstrapAction) bind(m *model.Model) model.Action {
|
||||
workflow := actions.Workflow()
|
||||
|
||||
workflow.AddAction(component.Stop(".ctrl"))
|
||||
workflow.AddAction(host.GroupExec("*", 25, "rm -f logs/*"))
|
||||
workflow.AddAction(component.Stop("#ctrl"))
|
||||
workflow.AddAction(edge.InitController("#ctrl"))
|
||||
workflow.AddAction(component.Start("#ctrl"))
|
||||
workflow.AddAction(host.GroupExec(".ctrl", 5, "rf -rf ./fablab/ctrldata"))
|
||||
workflow.AddAction(component.Start(".ctrl"))
|
||||
workflow.AddAction(semaphore.Sleep(2 * time.Second))
|
||||
workflow.AddAction(edge.RaftJoin(".ctrl"))
|
||||
workflow.AddAction(semaphore.Sleep(2 * time.Second))
|
||||
workflow.AddAction(edge.InitRaftController("#ctrl1"))
|
||||
workflow.AddAction(semaphore.Sleep(time.Second))
|
||||
|
||||
workflow.AddAction(edge.Login("#ctrl"))
|
||||
workflow.AddAction(edge.Login("#ctrl1"))
|
||||
|
||||
workflow.AddAction(component.StopInParallel(models.EdgeRouterTag, 25))
|
||||
workflow.AddAction(edge.InitEdgeRouters(models.EdgeRouterTag, 2))
|
||||
@@ -45,7 +49,5 @@ func (a *bootstrapAction) bind(m *model.Model) model.Action {
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service-edge-router-policy", "echo", "--semantic", "AnyOf", "--service-roles", "@echo", "--edge-router-roles", "#all"))
|
||||
|
||||
workflow.AddAction(component.Stop(models.ControllerTag))
|
||||
|
||||
return workflow
|
||||
}
|
||||
@@ -0,0 +1,196 @@
|
||||
v: 3
|
||||
|
||||
raft:
|
||||
minClusterSize: 3
|
||||
dataDir: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/ctrldata
|
||||
|
||||
identity:
|
||||
cert: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/{{ .Component.PublicIdentity }}/certs/{{ .Component.PublicIdentity }}-server.cert
|
||||
key: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/{{ .Component.PublicIdentity }}/keys/{{ .Component.PublicIdentity }}-server.key
|
||||
ca: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/{{ .Component.PublicIdentity }}/certs/{{ .Component.PublicIdentity }}-server.chain.pem
|
||||
|
||||
# the endpoint that routers will connect to the controller over.
|
||||
ctrl:
|
||||
listener: tls:0.0.0.0:6262
|
||||
options:
|
||||
advertiseAddress: tls:{{.Host.PublicIp}}:6262
|
||||
# (optional) settings
|
||||
# set the maximum number of connect requests that are buffered and waiting to be acknowledged (1 to 5000, default 1000)
|
||||
#maxQueuedConnects: 50
|
||||
|
||||
# the maximum number of connects that have begun hello synchronization (1 to 1000, default 16)
|
||||
#maxOutstandingConnects: 100
|
||||
|
||||
# the number of milliseconds to wait before a hello synchronization fails and closes the connection (30ms to 60000ms, default: 1000ms)
|
||||
#connectTimeoutMs: 3000
|
||||
|
||||
# Sets the control channel write timeout. A write timeout will close the control channel, so the router will reconnect
|
||||
#writeTimeout: 15s
|
||||
|
||||
# A listener address which will be sent to connecting routers in order to change their configured controller
|
||||
# address. If defined, routers will update address configuration to immediately use the new address for future
|
||||
# connections. The value of newListener must be resolvable both via DNS and validate via certificates
|
||||
#newListener: tls:localhost:6262
|
||||
|
||||
#events:
|
||||
# jsonLogger:
|
||||
# subscriptions:
|
||||
# - type: fabric.routers
|
||||
# - type: fabric.terminators
|
||||
# - type: metrics
|
||||
# sourceFilter: .*
|
||||
# metricFilter: .*egress.*m1_rate*
|
||||
# - type: fabric.circuits
|
||||
# include:
|
||||
# - created
|
||||
# - type: edge.sessions
|
||||
# include:
|
||||
# - created
|
||||
# - type: edge.apiSessions
|
||||
# - type: fabric.usage
|
||||
# - type: services
|
||||
# - type: fabric.usage
|
||||
# - type: edge.entityCounts
|
||||
# interval: 5s
|
||||
# handler:
|
||||
# type: file
|
||||
# format: json
|
||||
# path: /tmp/ziti-events.log
|
||||
|
||||
healthChecks:
|
||||
boltCheck:
|
||||
# How often to try entering a bolt read tx. Defaults to 30 seconds
|
||||
interval: 30s
|
||||
# When to timeout the check. Defaults to 15 seconds
|
||||
timeout: 15s
|
||||
# How long to wait before starting the check. Defaults to 15 seconds
|
||||
initialDelay: 15s
|
||||
|
||||
# By having an 'edge' section defined, the ziti-controller will attempt to parse the edge configuration. Removing this
|
||||
# section, commenting out, or altering the name of the section will cause the edge to not run.
|
||||
edge:
|
||||
# This section represents the configuration of the Edge API that is served over HTTPS
|
||||
api:
|
||||
#(optional, default 90s) Alters how frequently heartbeat and last activity values are persisted
|
||||
# activityUpdateInterval: 90s
|
||||
#(optional, default 250) The number of API Sessions updated for last activity per transaction
|
||||
# activityUpdateBatchSize: 250
|
||||
# sessionTimeout - optional, default 10m
|
||||
# The number of minutes before an Edge API session will timeout. Timeouts are reset by
|
||||
# API requests and connections that are maintained to Edge Routers
|
||||
sessionTimeout: 30m
|
||||
# address - required
|
||||
# The default address (host:port) to use for enrollment for the Client API. This value must match one of the addresses
|
||||
# defined in a bind point's address field for the `edge-client` API in the web section.
|
||||
address: {{.Host.PublicIp}}:1280
|
||||
# enrollment - required
|
||||
# A section containing settings pertaining to enrollment.
|
||||
enrollment:
|
||||
# signingCert - required
|
||||
# A Ziti Identity configuration section that specifically makes use of the cert and key fields to define
|
||||
# a signing certificate from the PKI that the Ziti environment is using to sign certificates. The signingCert.cert
|
||||
# will be added to the /.well-known CA store that is used to bootstrap trust with the Ziti Controller.
|
||||
signingCert:
|
||||
cert: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/{{ .Component.PublicIdentity }}/certs/{{ .Component.PublicIdentity }}.cert
|
||||
key: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/{{ .Component.PublicIdentity }}/keys/{{ .Component.PublicIdentity }}.key
|
||||
|
||||
# edgeIdentity - optional
|
||||
# A section for identity enrollment specific settings
|
||||
edgeIdentity:
|
||||
# duration - optional, default 5m
|
||||
# The length of time that a Ziti Edge Identity enrollment should remain valid. After
|
||||
# this duration, the enrollment will expire and not longer be usable.
|
||||
duration: 5m
|
||||
# edgeRouter - Optional
|
||||
# A section for edge router enrollment specific settings.
|
||||
edgeRouter:
|
||||
# duration - optional, default 5m
|
||||
# The length of time that a Ziti Edge Router enrollment should remain valid. After
|
||||
# this duration, the enrollment will expire and not longer be usable.
|
||||
duration: 5m
|
||||
|
||||
|
||||
# web - optional
|
||||
# Defines webListeners that will be hosted by the controller. Each webListener can host many APIs and be bound to many
|
||||
# bind points.
|
||||
web:
|
||||
# name - required
|
||||
# Provides a name for this listener, used for logging output. Not required to be unique, but is highly suggested.
|
||||
- name: all-apis-localhost
|
||||
# bindPoints - required
|
||||
# One or more bind points are required. A bind point specifies an interface (interface:port string) that defines
|
||||
# where on the host machine the webListener will listen and the address (host:port) that should be used to
|
||||
# publicly address the webListener(i.e. mydomain.com, localhost, 127.0.0.1). This public address may be used for
|
||||
# incoming address resolution as well as used in responses in the API.
|
||||
bindPoints:
|
||||
#interface - required
|
||||
# A host:port string on which network interface to listen on. 0.0.0.0 will listen on all interfaces
|
||||
- interface: 0.0.0.0:1280
|
||||
|
||||
# address - required
|
||||
# The public address that external incoming requests will be able to resolve. Used in request processing and
|
||||
# response content that requires full host:port/path addresses.
|
||||
address: {{.Host.PublicIp}}:1280
|
||||
|
||||
# newAddress - optional
|
||||
# A host:port string which will be sent out as an HTTP header "ziti-new-address" if specified. If the header
|
||||
# is present, clients should update location configuration to immediately use the new address for future
|
||||
# connections. The value of newAddress must be resolvable both via DNS and validate via certificates
|
||||
#newAddress: localhost:1280
|
||||
# identity - optional
|
||||
# Allows the webListener to have a specific identity instead of defaulting to the root `identity` section.
|
||||
# identity:
|
||||
# cert: ${ZITI_SOURCE}/ziti/etc/ca/intermediate/certs/ctrl-client.cert.pem
|
||||
# server_cert: ${ZITI_SOURCE}/ziti/etc/ca/intermediate/certs/ctrl-server.cert.pem
|
||||
# key: ${ZITI_SOURCE}/ziti/etc/ca/intermediate/private/ctrl.key.pem
|
||||
# ca: ${ZITI_SOURCE}/ziti/etc/ca/intermediate/certs/ca-chain.cert.pem
|
||||
# options - optional
|
||||
# Allows the specification of webListener level options - mainly dealing with HTTP/TLS settings. These options are
|
||||
# used for all http servers started by the current webListener.
|
||||
options:
|
||||
# idleTimeout - optional, default 5000ms
|
||||
# The maximum amount of idle time in milliseconds allowed for pipelined HTTP requests. Setting this too high
|
||||
# can cause resources on the host to be consumed as clients remain connected and idle. Lowering this value
|
||||
# will cause clients to reconnect on subsequent HTTPs requests.
|
||||
idleTimeout: 5000ms #http timeouts, new
|
||||
|
||||
# readTimeout - optional, default 5000ms
|
||||
# The maximum amount of time in milliseconds http servers will wait to read the first incoming requests. A higher
|
||||
# value risks consuming resources on the host with clients that are acting bad faith or suffering from high latency
|
||||
# or packet loss. A lower value can risk losing connections to high latency/packet loss clients.
|
||||
|
||||
readTimeout: 5000ms
|
||||
# writeTimeout - optional, default 10000ms
|
||||
# The total maximum time in milliseconds that the http server will wait for a single requests to be received and
|
||||
# responded too. A higher value can allow long running requests to consume resources on the host. A lower value
|
||||
# can risk ending requests before the server has a chance to respond.
|
||||
|
||||
writeTimeout: 100000ms
|
||||
# minTLSVersion - optional, default TSL1.2
|
||||
# The minimum version of TSL to support
|
||||
|
||||
minTLSVersion: TLS1.2
|
||||
# maxTLSVersion - optional, default TSL1.3
|
||||
# The maximum version of TSL to support
|
||||
|
||||
maxTLSVersion: TLS1.3
|
||||
# apis - required
|
||||
# Allows one or more APIs to be bound to this webListener
|
||||
apis:
|
||||
# binding - required
|
||||
# Specifies an API to bind to this webListener. Built-in APIs are
|
||||
# - health-checks
|
||||
# - edge-management
|
||||
# - edge-client
|
||||
# - fabric-management
|
||||
- binding: health-checks
|
||||
options: {}
|
||||
- binding: fabric
|
||||
- binding: edge-management
|
||||
# options - variable optional/required
|
||||
# This section is used to define values that are specified by the API they are associated with.
|
||||
# These settings are per API. The example below is for the `edge-api` and contains both optional values and
|
||||
# required values.
|
||||
options: {}
|
||||
- binding: edge-client
|
||||
options: {}
|
||||
@@ -0,0 +1,70 @@
|
||||
{{$ssh_username := .Model.MustVariable "credentials.ssh.username"}}
|
||||
{{$identity := .Component.PublicIdentity}}
|
||||
{{$router_ip := .Host.PublicIp}}
|
||||
|
||||
v: 3
|
||||
|
||||
enableDebugOps: true
|
||||
|
||||
identity:
|
||||
cert: /home/{{$ssh_username}}/fablab/cfg/{{$identity}}-client.cert
|
||||
server_cert: /home/{{$ssh_username}}/fablab/cfg/{{$identity}}-server.cert
|
||||
key: /home/{{$ssh_username}}/fablab/cfg/{{$identity}}.key
|
||||
ca: /home/{{$ssh_username}}/fablab/cfg/{{$identity}}-server.chain.pem
|
||||
|
||||
ctrl:
|
||||
endpoints: {{ range $host := .Model.MustSelectHosts "component.ctrl" 1 }}
|
||||
- tls:{{ $host.PublicIp }}:6262{{end}}
|
||||
|
||||
healthChecks:
|
||||
ctrlPingCheck:
|
||||
# How often to ping the controller over the control channel. Defaults to 30 seconds
|
||||
interval: 30s
|
||||
# When to timeout the ping. Defaults to 15 seconds
|
||||
timeout: 15s
|
||||
# How long to wait before pinging the controller. Defaults to 15 seconds
|
||||
initialDelay: 15s
|
||||
|
||||
metrics:
|
||||
reportInterval: 15s
|
||||
messageQueueSize: 10
|
||||
|
||||
link:
|
||||
listeners:
|
||||
- binding: transport
|
||||
bind: tls:0.0.0.0:6000
|
||||
advertise: tls:{{$router_ip}}:6000
|
||||
dialers:
|
||||
- binding: transport
|
||||
|
||||
listeners:
|
||||
{{if .Component.HasTag "tunneler"}}
|
||||
- binding: tunnel
|
||||
options:
|
||||
mode: tproxy
|
||||
{{end}}
|
||||
- binding: edge
|
||||
address: tls:0.0.0.0:6262
|
||||
options:
|
||||
# (required) The public hostname and port combination that Ziti SDKs should connect on. Previously this was in the chanIngress section.
|
||||
advertise: {{ .Host.PublicIp }}:6262
|
||||
|
||||
# By having an 'edge' section defined, the ziti-router will attempt to parse the edge configuration. Removing this
|
||||
# section, commenting out, or altering the name of the section will cause the router to no longer operate as an Edge
|
||||
# Router.
|
||||
edge:
|
||||
# (required) Information used to generate the initial registration CSR. For documentation on these fields please
|
||||
# refer to the openssl documentation. These values MUST be supplied and have no defaults.
|
||||
csr:
|
||||
country: US
|
||||
province: NC
|
||||
locality: Charlotte
|
||||
organization: NetFoundry
|
||||
organizationalUnit: Ziti
|
||||
|
||||
# (required) SANs that this Gateways certs should contain. At least one IP or DNS SAN should be defined that matches
|
||||
# the edge listeners "advertise" value from the "listeners" section.
|
||||
sans:
|
||||
ip:
|
||||
- {{ .Host.PublicIp }}
|
||||
|
||||
@@ -0,0 +1,298 @@
|
||||
/*
|
||||
(c) Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"github.com/openziti/fablab"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/component"
|
||||
"github.com/openziti/fablab/kernel/lib/binding"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/aws_ssh_key"
|
||||
semaphore0 "github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/semaphore"
|
||||
terraform_0 "github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/terraform"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/1_configuration/config"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/2_kitting/devkit"
|
||||
distribution "github.com/openziti/fablab/kernel/lib/runlevel/3_distribution"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/3_distribution/rsync"
|
||||
aws_ssh_key2 "github.com/openziti/fablab/kernel/lib/runlevel/6_disposal/aws_ssh_key"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/6_disposal/terraform"
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
"github.com/openziti/fablab/resources"
|
||||
"github.com/openziti/ziti/network-tests/ha/actions"
|
||||
"github.com/openziti/ziti/network-tests/test_resources"
|
||||
"github.com/openziti/zitilab"
|
||||
"github.com/openziti/zitilab/actions/edge"
|
||||
zitilib_runlevel_1_configuration "github.com/openziti/zitilab/runlevel/1_configuration"
|
||||
"github.com/sirupsen/logrus"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
//go:embed configs
|
||||
var configResource embed.FS
|
||||
|
||||
func getConfigData(filePath string) []byte {
|
||||
data, err := configResource.ReadFile(fmt.Sprintf("configs/%s", filePath))
|
||||
if err != nil {
|
||||
logrus.Errorf("Unable to read config data from %s: [%s]", filePath, err)
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
var m = &model.Model{
|
||||
Id: "ha",
|
||||
Scope: model.Scope{
|
||||
Defaults: model.Variables{
|
||||
"environment": "ha-smoketest",
|
||||
"credentials": model.Variables{
|
||||
"ssh": model.Variables{
|
||||
"username": "ubuntu",
|
||||
},
|
||||
"edge": model.Variables{
|
||||
"username": "admin",
|
||||
"password": "admin",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Resources: model.Resources{
|
||||
resources.Configs: resources.SubFolder(configResource, "configs"),
|
||||
resources.Terraform: test_resources.TerraformResources(),
|
||||
},
|
||||
|
||||
Regions: model.Regions{
|
||||
"us-east-1": {
|
||||
Region: "us-east-1",
|
||||
Site: "us-east-1a",
|
||||
Hosts: model.Hosts{
|
||||
"ctrl1": {
|
||||
InstanceType: "t3.micro",
|
||||
Components: model.Components{
|
||||
"ctrl1": {
|
||||
Scope: model.Scope{Tags: model.Tags{"ctrl", "spiffe:controller"}},
|
||||
BinaryName: "ziti controller",
|
||||
ConfigSrc: "ctrl.yml.tmpl",
|
||||
ConfigName: "ctrl1.yml",
|
||||
PublicIdentity: "ctrl1",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
"ctrl2": {
|
||||
InstanceType: "t3.micro",
|
||||
Components: model.Components{
|
||||
"ctrl2": {
|
||||
Scope: model.Scope{Tags: model.Tags{"ctrl", "spiffe:controller"}},
|
||||
BinaryName: "ziti controller",
|
||||
ConfigSrc: "ctrl.yml.tmpl",
|
||||
ConfigName: "ctrl2.yml",
|
||||
PublicIdentity: "ctrl2",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
"router-east": {
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"router-east": {
|
||||
Scope: model.Scope{Tags: model.Tags{"edge-router", "terminator"}},
|
||||
BinaryName: "ziti router",
|
||||
ConfigSrc: "router.yml.tmpl",
|
||||
ConfigName: "router-east.yml",
|
||||
PublicIdentity: "router-east",
|
||||
},
|
||||
"echo-server": {
|
||||
Scope: model.Scope{Tags: model.Tags{"sdk-app", "service"}},
|
||||
BinaryName: "echo-server",
|
||||
PublicIdentity: "echo-server",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"us-west-2": {
|
||||
Region: "us-west-2",
|
||||
Site: "us-west-2b",
|
||||
Hosts: model.Hosts{
|
||||
"ctrl3": {
|
||||
InstanceType: "t3.micro",
|
||||
Components: model.Components{
|
||||
"ctrl3": {
|
||||
Scope: model.Scope{Tags: model.Tags{"ctrl", "spiffe:controller"}},
|
||||
BinaryName: "ziti controller",
|
||||
ConfigSrc: "ctrl.yml.tmpl",
|
||||
ConfigName: "ctrl3.yml",
|
||||
PublicIdentity: "ctrl3",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
"router-west": {
|
||||
Scope: model.Scope{Tags: model.Tags{}},
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"router-west": {
|
||||
Scope: model.Scope{Tags: model.Tags{"edge-router", "terminator"}},
|
||||
BinaryName: "ziti router",
|
||||
ConfigSrc: "router.yml.tmpl",
|
||||
ConfigName: "router-west.yml",
|
||||
PublicIdentity: "router-west",
|
||||
},
|
||||
"echo-client": {
|
||||
Scope: model.Scope{Tags: model.Tags{"sdk-app", "client"}},
|
||||
BinaryName: "echo-client",
|
||||
PublicIdentity: "echo-client",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Actions: model.ActionBinders{
|
||||
"bootstrap": actions.NewBootstrapAction(),
|
||||
"start": actions.NewStartAction(actions.MetricbeatConfig{
|
||||
ConfigPath: "metricbeat",
|
||||
DataPath: "metricbeat/data",
|
||||
LogPath: "metricbeat/logs",
|
||||
},
|
||||
actions.ConsulConfig{
|
||||
ServerAddr: os.Getenv("CONSUL_ENDPOINT"),
|
||||
ConfigDir: "consul",
|
||||
DataPath: "consul/data",
|
||||
LogPath: "consul/log.out",
|
||||
}),
|
||||
"stop": model.Bind(component.StopInParallel("*", 15)),
|
||||
"login": model.Bind(edge.Login("#ctrl1")),
|
||||
},
|
||||
|
||||
Infrastructure: model.InfrastructureStages{
|
||||
aws_ssh_key.Express(),
|
||||
terraform_0.Express(),
|
||||
semaphore0.Ready(time.Minute),
|
||||
},
|
||||
|
||||
Configuration: model.ConfigurationStages{
|
||||
zitilib_runlevel_1_configuration.IfPkiNeedsRefresh(
|
||||
zitilib_runlevel_1_configuration.Fabric("simple-transfer.test", ".ctrl"),
|
||||
),
|
||||
config.Component(),
|
||||
devkit.DevKitF(zitilab.ZitiRoot, []string{"ziti", "ziti-echo"}),
|
||||
},
|
||||
|
||||
Distribution: model.DistributionStages{
|
||||
distribution.DistributeSshKey("*"),
|
||||
distribution.Locations("*", "logs"),
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"*",
|
||||
string(getConfigData("metricbeat.yml")),
|
||||
"metricbeat/metricbeat.yml",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${host}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_ENDPOINT")
|
||||
},
|
||||
"${user}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_USERNAME")
|
||||
},
|
||||
"${password}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_PASSWORD")
|
||||
},
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
},
|
||||
),
|
||||
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"*",
|
||||
string(getConfigData("consul.hcl")),
|
||||
"consul/consul.hcl",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${public_ip}": func(h *model.Host) string {
|
||||
return h.PublicIp
|
||||
},
|
||||
"${encryption_key}": func(h *model.Host) string {
|
||||
return os.Getenv("CONSUL_ENCRYPTION_KEY")
|
||||
},
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
},
|
||||
),
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"#ctrl",
|
||||
string(getConfigData("ziti.hcl")),
|
||||
"consul/ziti.hcl",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
}),
|
||||
distribution.DistributeData(
|
||||
"*",
|
||||
[]byte(os.Getenv("CONSUL_AGENT_CERT")),
|
||||
"consul/consul-agent-ca.pem"),
|
||||
rsync.RsyncStaged(),
|
||||
},
|
||||
|
||||
Disposal: model.DisposalStages{
|
||||
terraform.Dispose(),
|
||||
aws_ssh_key2.Dispose(),
|
||||
},
|
||||
}
|
||||
|
||||
func main() {
|
||||
m.AddActivationActions("stop", "bootstrap", "start")
|
||||
|
||||
model.AddBootstrapExtension(
|
||||
zitilab.BootstrapWithFallbacks(
|
||||
&zitilab.BootstrapFromEnv{},
|
||||
))
|
||||
model.AddBootstrapExtension(binding.AwsCredentialsLoader)
|
||||
model.AddBootstrapExtension(aws_ssh_key.KeyManager)
|
||||
|
||||
fablab.InitModel(m)
|
||||
fablab.Run()
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
v: 3
|
||||
|
||||
db: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/ctrl.db
|
||||
|
||||
identity:
|
||||
cert: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/ctrl/certs/{{ .Component.PublicIdentity }}-server.cert
|
||||
key: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/ctrl/keys/{{ .Component.PublicIdentity }}-server.key
|
||||
ca: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/ctrl/certs/{{ .Component.PublicIdentity }}-server.chain.pem
|
||||
|
||||
# the endpoint that routers will connect to the controller over.
|
||||
ctrl:
|
||||
listener: tls:0.0.0.0:6262
|
||||
options:
|
||||
advertiseAddress: tls:{{.Host.PublicIp}}:6262
|
||||
# (optional) settings
|
||||
# set the maximum number of connect requests that are buffered and waiting to be acknowledged (1 to 5000, default 1000)
|
||||
#maxQueuedConnects: 50
|
||||
|
||||
# the maximum number of connects that have begun hello synchronization (1 to 1000, default 16)
|
||||
#maxOutstandingConnects: 100
|
||||
|
||||
# the number of milliseconds to wait before a hello synchronization fails and closes the connection (30ms to 60000ms, default: 1000ms)
|
||||
#connectTimeoutMs: 3000
|
||||
|
||||
# Sets the control channel write timeout. A write timeout will close the control channel, so the router will reconnect
|
||||
#writeTimeout: 15s
|
||||
|
||||
# A listener address which will be sent to connecting routers in order to change their configured controller
|
||||
# address. If defined, routers will update address configuration to immediately use the new address for future
|
||||
# connections. The value of newListener must be resolvable both via DNS and validate via certificates
|
||||
#newListener: tls:localhost:6262
|
||||
|
||||
#events:
|
||||
# jsonLogger:
|
||||
# subscriptions:
|
||||
# - type: fabric.routers
|
||||
# - type: fabric.terminators
|
||||
# - type: metrics
|
||||
# sourceFilter: .*
|
||||
# metricFilter: .*egress.*m1_rate*
|
||||
# - type: fabric.circuits
|
||||
# include:
|
||||
# - created
|
||||
# - type: edge.sessions
|
||||
# include:
|
||||
# - created
|
||||
# - type: edge.apiSessions
|
||||
# - type: fabric.usage
|
||||
# - type: services
|
||||
# - type: fabric.usage
|
||||
# - type: edge.entityCounts
|
||||
# interval: 5s
|
||||
# handler:
|
||||
# type: file
|
||||
# format: json
|
||||
# path: /tmp/ziti-events.log
|
||||
|
||||
healthChecks:
|
||||
boltCheck:
|
||||
# How often to try entering a bolt read tx. Defaults to 30 seconds
|
||||
interval: 30s
|
||||
# When to timeout the check. Defaults to 15 seconds
|
||||
timeout: 15s
|
||||
# How long to wait before starting the check. Defaults to 15 seconds
|
||||
initialDelay: 15s
|
||||
|
||||
# By having an 'edge' section defined, the ziti-controller will attempt to parse the edge configuration. Removing this
|
||||
# section, commenting out, or altering the name of the section will cause the edge to not run.
|
||||
edge:
|
||||
# This section represents the configuration of the Edge API that is served over HTTPS
|
||||
api:
|
||||
#(optional, default 90s) Alters how frequently heartbeat and last activity values are persisted
|
||||
# activityUpdateInterval: 90s
|
||||
#(optional, default 250) The number of API Sessions updated for last activity per transaction
|
||||
# activityUpdateBatchSize: 250
|
||||
# sessionTimeout - optional, default 10m
|
||||
# The number of minutes before an Edge API session will timeout. Timeouts are reset by
|
||||
# API requests and connections that are maintained to Edge Routers
|
||||
sessionTimeout: 30m
|
||||
# address - required
|
||||
# The default address (host:port) to use for enrollment for the Client API. This value must match one of the addresses
|
||||
# defined in a bind point's address field for the `edge-client` API in the web section.
|
||||
address: {{.Host.PublicIp}}:1280
|
||||
# enrollment - required
|
||||
# A section containing settings pertaining to enrollment.
|
||||
enrollment:
|
||||
# signingCert - required
|
||||
# A Ziti Identity configuration section that specifically makes use of the cert and key fields to define
|
||||
# a signing certificate from the PKI that the Ziti environment is using to sign certificates. The signingCert.cert
|
||||
# will be added to the /.well-known CA store that is used to bootstrap trust with the Ziti Controller.
|
||||
signingCert:
|
||||
cert: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/ctrl/certs/ctrl.cert
|
||||
key: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/ctrl/keys/ctrl.key
|
||||
|
||||
# edgeIdentity - optional
|
||||
# A section for identity enrollment specific settings
|
||||
edgeIdentity:
|
||||
# duration - optional, default 5m
|
||||
# The length of time that a Ziti Edge Identity enrollment should remain valid. After
|
||||
# this duration, the enrollment will expire and not longer be usable.
|
||||
duration: 5m
|
||||
# edgeRouter - Optional
|
||||
# A section for edge router enrollment specific settings.
|
||||
edgeRouter:
|
||||
# duration - optional, default 5m
|
||||
# The length of time that a Ziti Edge Router enrollment should remain valid. After
|
||||
# this duration, the enrollment will expire and not longer be usable.
|
||||
duration: 5m
|
||||
|
||||
|
||||
# web - optional
|
||||
# Defines webListeners that will be hosted by the controller. Each webListener can host many APIs and be bound to many
|
||||
# bind points.
|
||||
web:
|
||||
# name - required
|
||||
# Provides a name for this listener, used for logging output. Not required to be unique, but is highly suggested.
|
||||
- name: all-apis-localhost
|
||||
# bindPoints - required
|
||||
# One or more bind points are required. A bind point specifies an interface (interface:port string) that defines
|
||||
# where on the host machine the webListener will listen and the address (host:port) that should be used to
|
||||
# publicly address the webListener(i.e. mydomain.com, localhost, 127.0.0.1). This public address may be used for
|
||||
# incoming address resolution as well as used in responses in the API.
|
||||
bindPoints:
|
||||
#interface - required
|
||||
# A host:port string on which network interface to listen on. 0.0.0.0 will listen on all interfaces
|
||||
- interface: 0.0.0.0:1280
|
||||
|
||||
# address - required
|
||||
# The public address that external incoming requests will be able to resolve. Used in request processing and
|
||||
# response content that requires full host:port/path addresses.
|
||||
address: {{.Host.PublicIp}}:1280
|
||||
|
||||
# newAddress - optional
|
||||
# A host:port string which will be sent out as an HTTP header "ziti-new-address" if specified. If the header
|
||||
# is present, clients should update location configuration to immediately use the new address for future
|
||||
# connections. The value of newAddress must be resolvable both via DNS and validate via certificates
|
||||
#newAddress: localhost:1280
|
||||
# identity - optional
|
||||
# Allows the webListener to have a specific identity instead of defaulting to the root `identity` section.
|
||||
# identity:
|
||||
# cert: ${ZITI_SOURCE}/ziti/etc/ca/intermediate/certs/ctrl-client.cert.pem
|
||||
# server_cert: ${ZITI_SOURCE}/ziti/etc/ca/intermediate/certs/ctrl-server.cert.pem
|
||||
# key: ${ZITI_SOURCE}/ziti/etc/ca/intermediate/private/ctrl.key.pem
|
||||
# ca: ${ZITI_SOURCE}/ziti/etc/ca/intermediate/certs/ca-chain.cert.pem
|
||||
# options - optional
|
||||
# Allows the specification of webListener level options - mainly dealing with HTTP/TLS settings. These options are
|
||||
# used for all http servers started by the current webListener.
|
||||
options:
|
||||
# idleTimeout - optional, default 5000ms
|
||||
# The maximum amount of idle time in milliseconds allowed for pipelined HTTP requests. Setting this too high
|
||||
# can cause resources on the host to be consumed as clients remain connected and idle. Lowering this value
|
||||
# will cause clients to reconnect on subsequent HTTPs requests.
|
||||
idleTimeout: 5000ms #http timeouts, new
|
||||
|
||||
# readTimeout - optional, default 5000ms
|
||||
# The maximum amount of time in milliseconds http servers will wait to read the first incoming requests. A higher
|
||||
# value risks consuming resources on the host with clients that are acting bad faith or suffering from high latency
|
||||
# or packet loss. A lower value can risk losing connections to high latency/packet loss clients.
|
||||
|
||||
readTimeout: 5000ms
|
||||
# writeTimeout - optional, default 10000ms
|
||||
# The total maximum time in milliseconds that the http server will wait for a single requests to be received and
|
||||
# responded too. A higher value can allow long running requests to consume resources on the host. A lower value
|
||||
# can risk ending requests before the server has a chance to respond.
|
||||
|
||||
writeTimeout: 100000ms
|
||||
# minTLSVersion - optional, default TSL1.2
|
||||
# The minimum version of TSL to support
|
||||
|
||||
minTLSVersion: TLS1.2
|
||||
# maxTLSVersion - optional, default TSL1.3
|
||||
# The maximum version of TSL to support
|
||||
|
||||
maxTLSVersion: TLS1.3
|
||||
# apis - required
|
||||
# Allows one or more APIs to be bound to this webListener
|
||||
apis:
|
||||
# binding - required
|
||||
# Specifies an API to bind to this webListener. Built-in APIs are
|
||||
# - health-checks
|
||||
# - edge-management
|
||||
# - edge-client
|
||||
# - fabric-management
|
||||
- binding: health-checks
|
||||
options: {}
|
||||
- binding: fabric
|
||||
- binding: edge-management
|
||||
# options - variable optional/required
|
||||
# This section is used to define values that are specified by the API they are associated with.
|
||||
# These settings are per API. The example below is for the `edge-api` and contains both optional values and
|
||||
# required values.
|
||||
options: {}
|
||||
- binding: edge-client
|
||||
options: {}
|
||||
@@ -0,0 +1,70 @@
|
||||
{{$ssh_username := .Model.MustVariable "credentials.ssh.username"}}
|
||||
{{$identity := .Component.PublicIdentity}}
|
||||
{{$ctrl_ip := publicIp "component#ctrl"}}
|
||||
{{$router_ip := .Host.PublicIp}}
|
||||
|
||||
v: 3
|
||||
|
||||
enableDebugOps: true
|
||||
|
||||
identity:
|
||||
cert: /home/{{$ssh_username}}/fablab/cfg/{{$identity}}-client.cert
|
||||
server_cert: /home/{{$ssh_username}}/fablab/cfg/{{$identity}}-server.cert
|
||||
key: /home/{{$ssh_username}}/fablab/cfg/{{$identity}}.key
|
||||
ca: /home/{{$ssh_username}}/fablab/cfg/{{$identity}}-server.chain.pem
|
||||
|
||||
ctrl:
|
||||
endpoint: tls:{{$ctrl_ip}}:6262
|
||||
|
||||
healthChecks:
|
||||
ctrlPingCheck:
|
||||
# How often to ping the controller over the control channel. Defaults to 30 seconds
|
||||
interval: 30s
|
||||
# When to timeout the ping. Defaults to 15 seconds
|
||||
timeout: 15s
|
||||
# How long to wait before pinging the controller. Defaults to 15 seconds
|
||||
initialDelay: 15s
|
||||
|
||||
metrics:
|
||||
reportInterval: 15s
|
||||
messageQueueSize: 10
|
||||
|
||||
link:
|
||||
listeners:
|
||||
- binding: transport
|
||||
bind: tls:0.0.0.0:6000
|
||||
advertise: tls:{{$router_ip}}:6000
|
||||
dialers:
|
||||
- binding: transport
|
||||
|
||||
listeners:
|
||||
{{if .Component.HasTag "tunneler"}}
|
||||
- binding: tunnel
|
||||
options:
|
||||
mode: tproxy
|
||||
{{end}}
|
||||
- binding: edge
|
||||
address: tls:0.0.0.0:6262
|
||||
options:
|
||||
# (required) The public hostname and port combination that Ziti SDKs should connect on. Previously this was in the chanIngress section.
|
||||
advertise: {{.Host.PublicIp}}:6262
|
||||
|
||||
# By having an 'edge' section defined, the ziti-router will attempt to parse the edge configuration. Removing this
|
||||
# section, commenting out, or altering the name of the section will cause the router to no longer operate as an Edge
|
||||
# Router.
|
||||
edge:
|
||||
# (required) Information used to generate the initial registration CSR. For documentation on these fields please
|
||||
# refer to the openssl documentation. These values MUST be supplied and have no defaults.
|
||||
csr:
|
||||
country: US
|
||||
province: NC
|
||||
locality: Charlotte
|
||||
organization: NetFoundry
|
||||
organizationalUnit: Ziti
|
||||
|
||||
# (required) SANs that this Gateways certs should contain. At least one IP or DNS SAN should be defined that matches
|
||||
# the edge listeners "advertise" value from the "listeners" section.
|
||||
sans:
|
||||
ip:
|
||||
- {{.Host.PublicIp}}
|
||||
|
||||
@@ -0,0 +1,197 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
_ "embed"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/edge/controller/persistence"
|
||||
"github.com/openziti/fablab"
|
||||
"github.com/openziti/fablab/kernel/lib/actions"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/component"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/host"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/semaphore"
|
||||
"github.com/openziti/fablab/kernel/lib/binding"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/aws_ssh_key"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/semaphore"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/terraform"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/1_configuration/config"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/2_kitting/devkit"
|
||||
distribution "github.com/openziti/fablab/kernel/lib/runlevel/3_distribution"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/3_distribution/rsync"
|
||||
aws_ssh_key2 "github.com/openziti/fablab/kernel/lib/runlevel/6_disposal/aws_ssh_key"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/6_disposal/terraform"
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
"github.com/openziti/fablab/resources"
|
||||
"github.com/openziti/ziti/network-tests/test_resources"
|
||||
"github.com/openziti/zitilab"
|
||||
"github.com/openziti/zitilab/actions/edge"
|
||||
"github.com/openziti/zitilab/models"
|
||||
zitilib_runlevel_1_configuration "github.com/openziti/zitilab/runlevel/1_configuration"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func getDbFile() string {
|
||||
dbFile := os.Getenv("ZITI_DB")
|
||||
if dbFile == "" {
|
||||
pfxlog.Logger().Fatal("required env var ZITI_DB not set")
|
||||
}
|
||||
return dbFile
|
||||
}
|
||||
|
||||
//go:embed configs
|
||||
var configResource embed.FS
|
||||
|
||||
type scaleStrategy struct{}
|
||||
|
||||
func (self scaleStrategy) IsScaled(entity model.Entity) bool {
|
||||
return entity.GetType() == model.EntityTypeHost && entity.GetScope().HasTag("scaled")
|
||||
}
|
||||
|
||||
func (self scaleStrategy) GetEntityCount(entity model.Entity) uint32 {
|
||||
if entity.GetType() == model.EntityTypeHost && entity.GetScope().HasTag("scaled") {
|
||||
return 4
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
type dbStrategy struct{}
|
||||
|
||||
func (d dbStrategy) GetDbFile() string {
|
||||
return getDbFile()
|
||||
}
|
||||
|
||||
func (d dbStrategy) GetSite(router *persistence.EdgeRouter) (string, bool) {
|
||||
for _, attr := range router.RoleAttributes {
|
||||
if strings.Contains(attr, "Hosted") {
|
||||
return "us-west-2b", true
|
||||
}
|
||||
}
|
||||
return "us-west-1c", true
|
||||
}
|
||||
|
||||
func (d dbStrategy) PostProcess(router *persistence.EdgeRouter, c *model.Component) {
|
||||
c.PublicIdentity = router.Id
|
||||
if router.IsTunnelerEnabled {
|
||||
c.Scope.Tags = append(c.Scope.Tags, "tunneler")
|
||||
c.RunWithSudo = true
|
||||
}
|
||||
c.Scope.Tags = append(c.Scope.Tags, "edge-router")
|
||||
c.Scope.Tags = append(c.Scope.Tags, "pre-created")
|
||||
c.Host.InstanceType = "c5.large"
|
||||
}
|
||||
|
||||
var m = &model.Model{
|
||||
Id: "router-test",
|
||||
Scope: model.Scope{
|
||||
Defaults: model.Variables{
|
||||
"environment": "router-test",
|
||||
"credentials": model.Variables{
|
||||
"ssh": model.Variables{
|
||||
"username": "ubuntu",
|
||||
},
|
||||
"edge": model.Variables{
|
||||
"username": "admin",
|
||||
"password": "admin",
|
||||
},
|
||||
},
|
||||
"metrics": model.Variables{
|
||||
"influxdb": model.Variables{
|
||||
"url": "http://localhost:8086",
|
||||
"db": "ziti",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
StructureFactories: []model.Factory{
|
||||
model.NewScaleFactoryWithDefaultEntityFactory(scaleStrategy{}),
|
||||
&models.ZitiDbBuilder{Strategy: dbStrategy{}},
|
||||
},
|
||||
Resources: model.Resources{
|
||||
resources.Configs: resources.SubFolder(configResource, "configs"),
|
||||
resources.Binaries: os.DirFS(path.Join(os.Getenv("GOPATH"), "bin")),
|
||||
resources.Terraform: test_resources.TerraformResources(),
|
||||
},
|
||||
Regions: model.Regions{
|
||||
"us-east-1": {
|
||||
Region: "us-east-1",
|
||||
Site: "us-east-1a",
|
||||
Hosts: model.Hosts{
|
||||
"ctrl": {
|
||||
InstanceType: "c5.large",
|
||||
Components: model.Components{
|
||||
"ctrl": {
|
||||
Scope: model.Scope{Tags: model.Tags{"ctrl"}},
|
||||
BinaryName: "ziti controller",
|
||||
ConfigSrc: "ctrl.yml",
|
||||
ConfigName: "ctrl.yml",
|
||||
PublicIdentity: "ctrl",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Actions: model.ActionBinders{
|
||||
"bootstrap": model.ActionBinder(func(m *model.Model) model.Action {
|
||||
workflow := actions.Workflow()
|
||||
|
||||
workflow.AddAction(component.Stop("*"))
|
||||
workflow.AddAction(host.GroupExec("*", 25, "rm -f logs/*"))
|
||||
|
||||
workflow.AddAction(component.Start("#ctrl"))
|
||||
workflow.AddAction(semaphore.Sleep(2 * time.Second))
|
||||
|
||||
workflow.AddAction(edge.Login("#ctrl"))
|
||||
|
||||
workflow.AddAction(edge.ReEnrollEdgeRouters(".pre-created", 2))
|
||||
return workflow
|
||||
}),
|
||||
"stop": model.Bind(component.StopInParallel("*", 15)),
|
||||
"clean": model.Bind(actions.Workflow(
|
||||
component.StopInParallel("*", 15),
|
||||
host.GroupExec("*", 25, "rm -f logs/*"),
|
||||
)),
|
||||
"login": model.Bind(edge.Login("#ctrl")),
|
||||
},
|
||||
|
||||
Infrastructure: model.InfrastructureStages{
|
||||
aws_ssh_key.Express(),
|
||||
terraform_0.Express(),
|
||||
semaphore_0.Ready(90 * time.Second),
|
||||
},
|
||||
|
||||
Configuration: model.ConfigurationStages{
|
||||
zitilib_runlevel_1_configuration.IfPkiNeedsRefresh(
|
||||
zitilib_runlevel_1_configuration.Fabric("router.test", ".ctrl"),
|
||||
),
|
||||
config.Component(),
|
||||
devkit.DevKitF(zitilab.ZitiRoot, []string{"ziti"}),
|
||||
},
|
||||
|
||||
Distribution: model.DistributionStages{
|
||||
distribution.DistributeSshKey("*"),
|
||||
distribution.Locations("*", "logs"),
|
||||
rsync.RsyncStaged(),
|
||||
rsync.NewRsyncHost("#ctrl", getDbFile(), "/home/ubuntu/fablab/ctrl.db"),
|
||||
},
|
||||
|
||||
Disposal: model.DisposalStages{
|
||||
terraform.Dispose(),
|
||||
aws_ssh_key2.Dispose(),
|
||||
},
|
||||
}
|
||||
|
||||
func main() {
|
||||
m.AddActivationActions("stop", "bootstrap")
|
||||
|
||||
model.AddBootstrapExtension(&zitilab.BootstrapFromEnv{})
|
||||
model.AddBootstrapExtension(binding.AwsCredentialsLoader)
|
||||
model.AddBootstrapExtension(aws_ssh_key.KeyManager)
|
||||
|
||||
fablab.InitModel(m)
|
||||
fablab.Run()
|
||||
}
|
||||
@@ -1,271 +1,28 @@
|
||||
/*
|
||||
(c) Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"github.com/openziti/fablab"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/component"
|
||||
"github.com/openziti/fablab/kernel/lib/binding"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/aws_ssh_key"
|
||||
semaphore0 "github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/semaphore"
|
||||
terraform_0 "github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/terraform"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/1_configuration/config"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/2_kitting/devkit"
|
||||
distribution "github.com/openziti/fablab/kernel/lib/runlevel/3_distribution"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/3_distribution/rsync"
|
||||
aws_ssh_key2 "github.com/openziti/fablab/kernel/lib/runlevel/6_disposal/aws_ssh_key"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/6_disposal/terraform"
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
"github.com/openziti/fablab/resources"
|
||||
"github.com/openziti/ziti/network-tests/simple-transfer/actions"
|
||||
"github.com/openziti/ziti/network-tests/test_resources"
|
||||
"github.com/openziti/zitilab"
|
||||
"github.com/openziti/zitilab/actions/edge"
|
||||
zitilib_runlevel_1_configuration "github.com/openziti/zitilab/runlevel/1_configuration"
|
||||
"github.com/sirupsen/logrus"
|
||||
"os"
|
||||
"time"
|
||||
"github.com/openziti/ziti/network-tests/simple"
|
||||
)
|
||||
|
||||
//go:embed configs
|
||||
var configResource embed.FS
|
||||
|
||||
type scaleStrategy struct{}
|
||||
|
||||
func (s scaleStrategy) IsScaled(entity model.Entity) bool {
|
||||
return entity.GetType() == model.EntityTypeHost && entity.GetScope().HasTag("scaled")
|
||||
}
|
||||
|
||||
func (s scaleStrategy) GetEntityCount(entity model.Entity) uint32 {
|
||||
if entity.GetType() == model.EntityTypeHost && entity.GetScope().HasTag("scaled") {
|
||||
return 4
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
func getConfigData(filePath string) []byte {
|
||||
data, err := configResource.ReadFile(fmt.Sprintf("configs/%s", filePath))
|
||||
if err != nil {
|
||||
logrus.Errorf("Unable to read config data from %s: [%s]", filePath, err)
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
var m = &model.Model{
|
||||
Id: "simple-transfer",
|
||||
Scope: model.Scope{
|
||||
Defaults: model.Variables{
|
||||
"environment": "simple-transfer-smoketest",
|
||||
"credentials": model.Variables{
|
||||
"ssh": model.Variables{
|
||||
"username": "ubuntu",
|
||||
},
|
||||
"edge": model.Variables{
|
||||
"username": "admin",
|
||||
"password": "admin",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
StructureFactories: []model.Factory{
|
||||
model.NewScaleFactoryWithDefaultEntityFactory(scaleStrategy{}),
|
||||
},
|
||||
|
||||
Factories: []model.Factory{
|
||||
newStageFactory(),
|
||||
},
|
||||
|
||||
Resources: model.Resources{
|
||||
resources.Configs: resources.SubFolder(configResource, "configs"),
|
||||
resources.Terraform: test_resources.TerraformResources(),
|
||||
},
|
||||
|
||||
Regions: model.Regions{
|
||||
"us-east-1": {
|
||||
Region: "us-east-1",
|
||||
Site: "us-east-1a",
|
||||
Hosts: model.Hosts{
|
||||
"ctrl": {
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"ctrl": {
|
||||
Scope: model.Scope{Tags: model.Tags{"ctrl"}},
|
||||
BinaryName: "ziti controller",
|
||||
ConfigSrc: "ctrl.yml",
|
||||
ConfigName: "ctrl.yml",
|
||||
PublicIdentity: "ctrl",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
"router-east": {
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"router-east": {
|
||||
Scope: model.Scope{Tags: model.Tags{"edge-router", "terminator"}},
|
||||
BinaryName: "ziti router",
|
||||
ConfigSrc: "router.yml",
|
||||
ConfigName: "router-east.yml",
|
||||
PublicIdentity: "router-east",
|
||||
},
|
||||
"echo-server": {
|
||||
Scope: model.Scope{Tags: model.Tags{"sdk-app", "service"}},
|
||||
BinaryName: "echo-server",
|
||||
PublicIdentity: "echo-server",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"us-west-2": {
|
||||
Region: "us-west-2",
|
||||
Site: "us-west-2b",
|
||||
Hosts: model.Hosts{
|
||||
"router-west": {
|
||||
Scope: model.Scope{Tags: model.Tags{}},
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"router-west": {
|
||||
Scope: model.Scope{Tags: model.Tags{"edge-router", "terminator"}},
|
||||
BinaryName: "ziti router",
|
||||
ConfigSrc: "router.yml",
|
||||
ConfigName: "router-west.yml",
|
||||
PublicIdentity: "router-west",
|
||||
},
|
||||
"echo-client": {
|
||||
Scope: model.Scope{Tags: model.Tags{"sdk-app", "client"}},
|
||||
BinaryName: "echo-client",
|
||||
PublicIdentity: "echo-client",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Actions: model.ActionBinders{
|
||||
"bootstrap": actions.NewBootstrapAction(),
|
||||
"start": actions.NewStartAction(actions.MetricbeatConfig{
|
||||
ConfigPath: "metricbeat",
|
||||
DataPath: "metricbeat/data",
|
||||
LogPath: "metricbeat/logs",
|
||||
},
|
||||
actions.ConsulConfig{
|
||||
ServerAddr: os.Getenv("CONSUL_ENDPOINT"),
|
||||
ConfigDir: "consul",
|
||||
DataPath: "consul/data",
|
||||
LogPath: "consul/log.out",
|
||||
}),
|
||||
"stop": model.Bind(component.StopInParallel("*", 15)),
|
||||
"login": model.Bind(edge.Login("#ctrl")),
|
||||
},
|
||||
|
||||
Infrastructure: model.InfrastructureStages{
|
||||
aws_ssh_key.Express(),
|
||||
terraform_0.Express(),
|
||||
semaphore0.Ready(time.Minute),
|
||||
},
|
||||
|
||||
Configuration: model.ConfigurationStages{
|
||||
zitilib_runlevel_1_configuration.IfPkiNeedsRefresh(
|
||||
zitilib_runlevel_1_configuration.Fabric("simple-transfer.test", "#ctrl"),
|
||||
),
|
||||
config.Component(),
|
||||
devkit.DevKitF(zitilab.ZitiRoot, []string{"ziti", "ziti-echo"}),
|
||||
},
|
||||
|
||||
Distribution: model.DistributionStages{
|
||||
distribution.DistributeSshKey("*"),
|
||||
distribution.Locations("*", "logs"),
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"*",
|
||||
string(getConfigData("metricbeat.yml")),
|
||||
"metricbeat/metricbeat.yml",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${host}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_ENDPOINT")
|
||||
},
|
||||
"${user}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_USERNAME")
|
||||
},
|
||||
"${password}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_PASSWORD")
|
||||
},
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
},
|
||||
),
|
||||
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"*",
|
||||
string(getConfigData("consul.hcl")),
|
||||
"consul/consul.hcl",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${public_ip}": func(h *model.Host) string {
|
||||
return h.PublicIp
|
||||
},
|
||||
"${encryption_key}": func(h *model.Host) string {
|
||||
return os.Getenv("CONSUL_ENCRYPTION_KEY")
|
||||
},
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
},
|
||||
),
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"#ctrl",
|
||||
string(getConfigData("ziti.hcl")),
|
||||
"consul/ziti.hcl",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
}),
|
||||
distribution.DistributeData(
|
||||
"*",
|
||||
[]byte(os.Getenv("CONSUL_AGENT_CERT")),
|
||||
"consul/consul-agent-ca.pem"),
|
||||
rsync.RsyncStaged(),
|
||||
},
|
||||
|
||||
Disposal: model.DisposalStages{
|
||||
terraform.Dispose(),
|
||||
aws_ssh_key2.Dispose(),
|
||||
},
|
||||
}
|
||||
|
||||
func main() {
|
||||
m.AddActivationActions("stop", "bootstrap", "start")
|
||||
|
||||
model.AddBootstrapExtension(
|
||||
zitilab.BootstrapWithFallbacks(
|
||||
&zitilab.BootstrapFromEnv{},
|
||||
))
|
||||
model.AddBootstrapExtension(binding.AwsCredentialsLoader)
|
||||
model.AddBootstrapExtension(aws_ssh_key.KeyManager)
|
||||
|
||||
fablab.InitModel(m)
|
||||
simple.InitBootstrapExtensions()
|
||||
fablab.InitModel(simple.Model)
|
||||
fablab.Run()
|
||||
}
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"net/url"
|
||||
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
runlevel_5_operation "github.com/openziti/ziti/network-tests/simple-transfer/stages/5_operation"
|
||||
)
|
||||
|
||||
type stageFactory struct{}
|
||||
|
||||
func newStageFactory() model.Factory {
|
||||
return &stageFactory{}
|
||||
}
|
||||
|
||||
func (sf *stageFactory) Build(m *model.Model) error {
|
||||
//generate 10k random bytes
|
||||
data := make([]byte, 10000)
|
||||
rand.Read(data)
|
||||
|
||||
m.AddOperatingStage(runlevel_5_operation.AssertEcho("#echo-client", url.QueryEscape(string(data))))
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
(c) Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package actions
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/openziti/fablab/kernel/lib/actions"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/component"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/host"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/semaphore"
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
zitilib_actions "github.com/openziti/zitilab/actions"
|
||||
"github.com/openziti/zitilab/actions/edge"
|
||||
"github.com/openziti/zitilab/models"
|
||||
)
|
||||
|
||||
type bootstrapAction struct{}
|
||||
|
||||
func NewBootstrapAction() model.ActionBinder {
|
||||
action := &bootstrapAction{}
|
||||
return action.bind
|
||||
}
|
||||
|
||||
func (a *bootstrapAction) bind(m *model.Model) model.Action {
|
||||
workflow := actions.Workflow()
|
||||
|
||||
workflow.AddAction(host.GroupExec("*", 25, "rm -f logs/*"))
|
||||
workflow.AddAction(component.Stop("#ctrl"))
|
||||
workflow.AddAction(edge.InitController("#ctrl"))
|
||||
workflow.AddAction(component.Start("#ctrl"))
|
||||
workflow.AddAction(semaphore.Sleep(2 * time.Second))
|
||||
|
||||
workflow.AddAction(edge.Login("#ctrl"))
|
||||
|
||||
workflow.AddAction(component.StopInParallel(models.EdgeRouterTag, 25))
|
||||
workflow.AddAction(edge.InitEdgeRouters(models.EdgeRouterTag, 2))
|
||||
workflow.AddAction(edge.InitIdentities(models.SdkAppTag, 2))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service", "echo"))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service-policy", "echo-servers", "Bind", "--service-roles", "@echo", "--identity-roles", "#service"))
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service-policy", "echo-client", "Dial", "--service-roles", "@echo", "--identity-roles", "#client"))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "edge-router-policy", "echo-servers", "--edge-router-roles", "#host", "--identity-roles", "#service"))
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "edge-router-policy", "echo-clients", "--edge-router-roles", "#client", "--identity-roles", "#client"))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service-edge-router-policy", "serp-all", "--service-roles", "#all", "--edge-router-roles", "#all"))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "config", "files-host", "host.v2", `
|
||||
{
|
||||
"terminators" : [
|
||||
{ "address" : "ziti-smoketest-files.s3-us-west-1.amazonaws.com", "port" : 443, "protocol" : "tcp" }
|
||||
]
|
||||
}`))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "config", "files-intercept-ert-unencrypted", "intercept.v1", `
|
||||
{
|
||||
"addresses": ["ziti-files-ert-unencrypted.s3-us-west-1.amazonaws.ziti"],
|
||||
"portRanges" : [ { "low": 443, "high": 443 } ],
|
||||
"protocols": ["tcp"]
|
||||
}`))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "config", "files-intercept-ert", "intercept.v1", `
|
||||
{
|
||||
"addresses": ["ziti-files-ert.s3-us-west-1.amazonaws.ziti"],
|
||||
"portRanges" : [ { "low": 443, "high": 443 } ],
|
||||
"protocols": ["tcp"]
|
||||
}`))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "config", "files-intercept-zet-unencrypted", "intercept.v1", `
|
||||
{
|
||||
"addresses": ["ziti-files-zet-unencrypted.s3-us-west-1.amazonaws.ziti"],
|
||||
"portRanges" : [ { "low": 443, "high": 443 } ],
|
||||
"protocols": ["tcp"]
|
||||
}`))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "config", "files-intercept-zet", "intercept.v1", `
|
||||
{
|
||||
"addresses": ["ziti-files-zet.s3-us-west-1.amazonaws.ziti"],
|
||||
"portRanges" : [ { "low": 443, "high": 443 } ],
|
||||
"protocols": ["tcp"]
|
||||
}`))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service", "ert-files-unencrypted", "-c", "files-host,files-intercept-ert-unencrypted", "-e", "OFF", "-a", "ert"))
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service", "ert-files", "-c", "files-host,files-intercept-ert", "-a", "ert"))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service", "zet-files-unencrypted", "-c", "files-host,files-intercept-zet-unencrypted", "-e", "OFF", "-a", "zet"))
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service", "zet-files", "-c", "files-host,files-intercept-zet", "-a", "zet"))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service-policy", "ert-hosts", "Bind", "--service-roles", "#ert", "--identity-roles", "#ert-host"))
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service-policy", "zet-hosts", "Bind", "--service-roles", "#zet", "--identity-roles", "#zet-host"))
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "service-policy", "client-tunnelers", "Dial", "--service-roles", "#all", "--identity-roles", "#client"))
|
||||
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "edge-router-policy", "client-routers", "--edge-router-roles", "#client", "--identity-roles", "#client"))
|
||||
workflow.AddAction(zitilib_actions.Edge("create", "edge-router-policy", "host-routers", "--edge-router-roles", "#host", "--identity-roles", "#host"))
|
||||
|
||||
workflow.AddAction(component.Stop(models.ControllerTag))
|
||||
|
||||
return workflow
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
(c) Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package actions
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/openziti/fablab/kernel/lib"
|
||||
"time"
|
||||
|
||||
"github.com/openziti/fablab/kernel/lib/actions"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/component"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/semaphore"
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
util_actions "github.com/openziti/ziti/network-tests/utils/actions"
|
||||
zitilib_actions "github.com/openziti/zitilab/actions"
|
||||
"github.com/openziti/zitilab/models"
|
||||
)
|
||||
|
||||
func NewStartAction(metricbeat MetricbeatConfig, consul ConsulConfig) model.ActionBinder {
|
||||
action := &startAction{
|
||||
Metricbeat: metricbeat,
|
||||
Consul: consul,
|
||||
}
|
||||
return action.bind
|
||||
}
|
||||
|
||||
func (a *startAction) bind(m *model.Model) model.Action {
|
||||
workflow := actions.Workflow()
|
||||
workflow.AddAction(component.Start("#ctrl"))
|
||||
workflow.AddAction(semaphore.Sleep(2 * time.Second))
|
||||
workflow.AddAction(component.StartInParallel(models.EdgeRouterTag, 25))
|
||||
|
||||
workflow.AddAction(semaphore.Sleep(2 * time.Second))
|
||||
workflow.AddAction(zitilib_actions.StartMetricbeat("*", a.Metricbeat.ConfigPath, a.Metricbeat.DataPath, a.Metricbeat.LogPath))
|
||||
workflow.AddAction(zitilib_actions.StartConsul("*", a.Consul.ServerAddr, a.Consul.ConfigDir, a.Consul.DataPath, a.Consul.LogPath))
|
||||
workflow.AddAction(semaphore.Sleep(2 * time.Second))
|
||||
workflow.AddAction(util_actions.StartEchoServers("#echo-server"))
|
||||
workflow.AddAction(semaphore.Sleep(2 * time.Second))
|
||||
|
||||
workflow.AddAction(model.ActionFunc(func(m *model.Model) error {
|
||||
return m.ForEachComponent(".sdk-app", 5, func(c *model.Component) error {
|
||||
factory := lib.NewSshConfigFactory(c.GetHost())
|
||||
|
||||
serviceCmd := fmt.Sprintf("nohup sudo /home/%s/fablab/bin/%s run -i /home/%s/fablab/cfg/%s > logs/%s.log 2>&1 &",
|
||||
factory.User(), c.BinaryName, factory.User(), c.PublicIdentity+".json", c.PublicIdentity)
|
||||
|
||||
_, err := lib.RemoteExec(factory, serviceCmd)
|
||||
return err
|
||||
})
|
||||
}))
|
||||
|
||||
return workflow
|
||||
}
|
||||
|
||||
type startAction struct {
|
||||
Metricbeat MetricbeatConfig
|
||||
Consul ConsulConfig
|
||||
}
|
||||
|
||||
type MetricbeatConfig struct {
|
||||
ConfigPath string
|
||||
DataPath string
|
||||
LogPath string
|
||||
}
|
||||
|
||||
type ConsulConfig struct {
|
||||
ConfigDir string
|
||||
ServerAddr string
|
||||
DataPath string
|
||||
LogPath string
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
datacenter = "ziti-build-metrics"
|
||||
data_dir = "/opt/consul"
|
||||
encrypt = "${encryption_key}"
|
||||
advertise_addr="${public_ip}"
|
||||
|
||||
|
||||
tls {
|
||||
defaults {
|
||||
verify_incoming = false
|
||||
verify_outgoing = true
|
||||
|
||||
ca_file="consul/consul-agent-ca.pem"
|
||||
}
|
||||
}
|
||||
|
||||
auto_encrypt {
|
||||
tls = true
|
||||
}
|
||||
|
||||
acl {
|
||||
enabled = true
|
||||
default_policy = "allow"
|
||||
enable_token_persistence = true
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
fields_under_root: true
|
||||
fields:
|
||||
build_number: ${build_number}
|
||||
ziti_version: ${ziti_version}
|
||||
|
||||
processors:
|
||||
- add_cloud_metadata: ~
|
||||
|
||||
metricbeat.modules:
|
||||
- module: system
|
||||
metricsets:
|
||||
- cpu # CPU usage
|
||||
- load # CPU load averages
|
||||
- memory # Memory usage
|
||||
- network # Network IO
|
||||
enabled: true
|
||||
period: 30s
|
||||
cpu.metrics: ["percentages"] # The other available options are normalized_percentages and ticks.
|
||||
core.metrics: ["percentages"] # The other available option is ticks.
|
||||
#- module: docker
|
||||
# metricsets:
|
||||
# - "container"
|
||||
# - "cpu"
|
||||
# - "diskio"
|
||||
# - "healthcheck"
|
||||
# - "info"
|
||||
# - "image"
|
||||
# - "memory"
|
||||
# - "network"
|
||||
# hosts: ["unix:///var/run/docker.sock"]
|
||||
# period: 30s
|
||||
# enabled: true
|
||||
# # If set to true, replace dots in labels with `_`.
|
||||
# labels.dedot: true
|
||||
|
||||
|
||||
output.elasticsearch:
|
||||
# Array of hosts to connect to.
|
||||
hosts: ["${host}"]
|
||||
|
||||
# Optional protocol and basic auth credentials.
|
||||
protocol: "https"
|
||||
username: "${user}"
|
||||
password: "${password}"
|
||||
index: 'zt-%{[agent.version]}-%{+yyyy.MM.dd}'
|
||||
|
||||
setup.template.enabled: true
|
||||
setup.template.name: 'zt-%{[agent.version]}'
|
||||
setup.template.pattern: 'zt-%{[agent.version]}-*'
|
||||
setup.template.fields: "/etc/metricbeat/fields.yml"
|
||||
setup.template.settings:
|
||||
index.number_of_shards: 1
|
||||
index.codec: best_compression
|
||||
@@ -0,0 +1,9 @@
|
||||
service {
|
||||
name = "ziti"
|
||||
id = "ziti"
|
||||
port = 6262
|
||||
meta {
|
||||
build_number= "${build_number}"
|
||||
ziti_version= "${ziti_version}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,318 @@
|
||||
/*
|
||||
(c) Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package simple
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"github.com/openziti/fablab/kernel/lib/actions/component"
|
||||
"github.com/openziti/fablab/kernel/lib/binding"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/aws_ssh_key"
|
||||
semaphore0 "github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/semaphore"
|
||||
terraform_0 "github.com/openziti/fablab/kernel/lib/runlevel/0_infrastructure/terraform"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/1_configuration/config"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/2_kitting/devkit"
|
||||
distribution "github.com/openziti/fablab/kernel/lib/runlevel/3_distribution"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/3_distribution/rsync"
|
||||
aws_ssh_key2 "github.com/openziti/fablab/kernel/lib/runlevel/6_disposal/aws_ssh_key"
|
||||
"github.com/openziti/fablab/kernel/lib/runlevel/6_disposal/terraform"
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
"github.com/openziti/fablab/resources"
|
||||
actions2 "github.com/openziti/ziti/network-tests/simple/actions"
|
||||
"github.com/openziti/ziti/network-tests/simple/stages/5_operation"
|
||||
"github.com/openziti/ziti/network-tests/test_resources"
|
||||
"github.com/openziti/zitilab"
|
||||
"github.com/openziti/zitilab/actions/edge"
|
||||
zitilib_runlevel_1_configuration "github.com/openziti/zitilab/runlevel/1_configuration"
|
||||
"github.com/sirupsen/logrus"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
//go:embed configs
|
||||
var configResource embed.FS
|
||||
|
||||
func getConfigData(filePath string) []byte {
|
||||
data, err := configResource.ReadFile(fmt.Sprintf("configs/%s", filePath))
|
||||
if err != nil {
|
||||
logrus.Errorf("Unable to read config data from %s: [%s]", filePath, err)
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
var Model = &model.Model{
|
||||
Id: "simple-transfer",
|
||||
Scope: model.Scope{
|
||||
Defaults: model.Variables{
|
||||
"environment": "simple-transfer-smoketest",
|
||||
"credentials": model.Variables{
|
||||
"ssh": model.Variables{
|
||||
"username": "ubuntu",
|
||||
},
|
||||
"edge": model.Variables{
|
||||
"username": "admin",
|
||||
"password": "admin",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Factories: []model.Factory{
|
||||
model.FactoryFunc(func(m *model.Model) error {
|
||||
m.AddActivationActions("stop", "bootstrap", "start")
|
||||
m.AddOperatingStage(runlevel_5_operation.AssertEcho("#echo-client"))
|
||||
|
||||
return nil
|
||||
}),
|
||||
},
|
||||
|
||||
Resources: model.Resources{
|
||||
resources.Configs: resources.SubFolder(configResource, "configs"),
|
||||
resources.Terraform: test_resources.TerraformResources(),
|
||||
},
|
||||
|
||||
Regions: model.Regions{
|
||||
"us-east-1": {
|
||||
Region: "us-east-1",
|
||||
Site: "us-east-1a",
|
||||
Hosts: model.Hosts{
|
||||
"ctrl": {
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"ctrl": {
|
||||
Scope: model.Scope{Tags: model.Tags{"ctrl"}},
|
||||
BinaryName: "ziti controller",
|
||||
ConfigSrc: "ctrl.yml",
|
||||
ConfigName: "ctrl.yml",
|
||||
PublicIdentity: "ctrl",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
"router-east-1": {
|
||||
Scope: model.Scope{Tags: model.Tags{"ert-client"}},
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"router-east-1": {
|
||||
Scope: model.Scope{Tags: model.Tags{"edge-router", "terminator", "tunneler", "client"}},
|
||||
BinaryName: "ziti router",
|
||||
ConfigSrc: "router.yml",
|
||||
ConfigName: "router-east-1.yml",
|
||||
PublicIdentity: "router-east-1",
|
||||
RunWithSudo: true,
|
||||
},
|
||||
"echo-client": {
|
||||
Scope: model.Scope{Tags: model.Tags{"sdk-app", "client"}},
|
||||
BinaryName: "echo-client",
|
||||
PublicIdentity: "echo-client",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
"router-east-2": {
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"router-east-2": {
|
||||
Scope: model.Scope{Tags: model.Tags{"edge-router", "initiator"}},
|
||||
BinaryName: "ziti router",
|
||||
ConfigSrc: "router.yml",
|
||||
ConfigName: "router-east-2.yml",
|
||||
PublicIdentity: "router-east-2",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
"ziti-edge-tunnel-client": {
|
||||
Scope: model.Scope{Tags: model.Tags{"zet-client"}},
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"ziti-edge-tunnel-client": {
|
||||
Scope: model.Scope{Tags: model.Tags{"sdk-app", "client"}},
|
||||
BinaryName: "ziti-edge-tunnel",
|
||||
PublicIdentity: "ziti-edge-tunnel-client",
|
||||
RunWithSudo: true,
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"us-west-2": {
|
||||
Region: "us-west-2",
|
||||
Site: "us-west-2b",
|
||||
Hosts: model.Hosts{
|
||||
"router-west": {
|
||||
Scope: model.Scope{Tags: model.Tags{}},
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"router-west": {
|
||||
Scope: model.Scope{Tags: model.Tags{"edge-router", "tunneler", "host", "ert-host"}},
|
||||
BinaryName: "ziti router",
|
||||
ConfigSrc: "router.yml",
|
||||
ConfigName: "router-west.yml",
|
||||
PublicIdentity: "router-west",
|
||||
RunWithSudo: true,
|
||||
},
|
||||
"echo-server": {
|
||||
Scope: model.Scope{Tags: model.Tags{"sdk-app", "service"}},
|
||||
BinaryName: "echo-server",
|
||||
PublicIdentity: "echo-server",
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
"ziti-edge-tunnel-host": {
|
||||
InstanceType: "t2.micro",
|
||||
Components: model.Components{
|
||||
"ziti-edge-tunnel-host": {
|
||||
Scope: model.Scope{Tags: model.Tags{"sdk-app", "host", "zet-host"}},
|
||||
BinaryName: "ziti-edge-tunnel",
|
||||
PublicIdentity: "ziti-edge-tunnel-host",
|
||||
RunWithSudo: true,
|
||||
},
|
||||
"consul": {
|
||||
BinaryName: "consul",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Actions: model.ActionBinders{
|
||||
"bootstrap": actions2.NewBootstrapAction(),
|
||||
"start": actions2.NewStartAction(actions2.MetricbeatConfig{
|
||||
ConfigPath: "metricbeat",
|
||||
DataPath: "metricbeat/data",
|
||||
LogPath: "metricbeat/logs",
|
||||
},
|
||||
actions2.ConsulConfig{
|
||||
ServerAddr: os.Getenv("CONSUL_ENDPOINT"),
|
||||
ConfigDir: "consul",
|
||||
DataPath: "consul/data",
|
||||
LogPath: "consul/log.out",
|
||||
}),
|
||||
"stop": model.Bind(component.StopInParallel("*", 15)),
|
||||
"login": model.Bind(edge.Login("#ctrl")),
|
||||
},
|
||||
|
||||
Infrastructure: model.InfrastructureStages{
|
||||
aws_ssh_key.Express(),
|
||||
terraform_0.Express(),
|
||||
semaphore0.Ready(time.Minute),
|
||||
},
|
||||
|
||||
Configuration: model.ConfigurationStages{
|
||||
zitilib_runlevel_1_configuration.IfPkiNeedsRefresh(
|
||||
zitilib_runlevel_1_configuration.Fabric("simple-transfer.test", "#ctrl"),
|
||||
),
|
||||
config.Component(),
|
||||
devkit.DevKitF(zitilab.ZitiRoot, []string{"ziti", "ziti-echo"}),
|
||||
//stageziti.FetchZitiEdgeTunnel("v0.21.4"),
|
||||
},
|
||||
|
||||
Distribution: model.DistributionStages{
|
||||
distribution.DistributeSshKey("*"),
|
||||
distribution.Locations("*", "logs"),
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"*",
|
||||
string(getConfigData("metricbeat.yml")),
|
||||
"metricbeat/metricbeat.yml",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${host}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_ENDPOINT")
|
||||
},
|
||||
"${user}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_USERNAME")
|
||||
},
|
||||
"${password}": func(h *model.Host) string {
|
||||
return os.Getenv("ELASTIC_PASSWORD")
|
||||
},
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
},
|
||||
),
|
||||
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"*",
|
||||
string(getConfigData("consul.hcl")),
|
||||
"consul/consul.hcl",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${public_ip}": func(h *model.Host) string {
|
||||
return h.PublicIp
|
||||
},
|
||||
"${encryption_key}": func(h *model.Host) string {
|
||||
return os.Getenv("CONSUL_ENCRYPTION_KEY")
|
||||
},
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
},
|
||||
),
|
||||
distribution.DistributeDataWithReplaceCallbacks(
|
||||
"#ctrl",
|
||||
string(getConfigData("ziti.hcl")),
|
||||
"consul/ziti.hcl",
|
||||
os.FileMode(0644),
|
||||
map[string]func(*model.Host) string{
|
||||
"${build_number}": func(h *model.Host) string {
|
||||
return os.Getenv("BUILD_NUMBER")
|
||||
},
|
||||
"${ziti_version}": func(h *model.Host) string {
|
||||
return h.MustStringVariable("ziti_version")
|
||||
},
|
||||
}),
|
||||
distribution.DistributeData(
|
||||
"*",
|
||||
[]byte(os.Getenv("CONSUL_AGENT_CERT")),
|
||||
"consul/consul-agent-ca.pem"),
|
||||
rsync.RsyncStaged(),
|
||||
},
|
||||
|
||||
Disposal: model.DisposalStages{
|
||||
terraform.Dispose(),
|
||||
aws_ssh_key2.Dispose(),
|
||||
},
|
||||
}
|
||||
|
||||
func InitBootstrapExtensions() {
|
||||
model.AddBootstrapExtension(
|
||||
zitilab.BootstrapWithFallbacks(
|
||||
&zitilab.BootstrapFromEnv{},
|
||||
))
|
||||
model.AddBootstrapExtension(binding.AwsCredentialsLoader)
|
||||
model.AddBootstrapExtension(aws_ssh_key.KeyManager)
|
||||
}
|
||||
+8
-3
@@ -1,7 +1,9 @@
|
||||
package runlevel_5_operation
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/openziti/fablab/kernel/lib"
|
||||
@@ -14,10 +16,13 @@ type echoClient struct {
|
||||
message string
|
||||
}
|
||||
|
||||
func AssertEcho(componentSpec, message string) model.OperatingStage {
|
||||
func AssertEcho(componentSpec string) model.OperatingStage {
|
||||
data := make([]byte, 10000)
|
||||
_, _ = rand.Read(data)
|
||||
|
||||
return &echoClient{
|
||||
componentSpec: componentSpec,
|
||||
message: message,
|
||||
message: url.QueryEscape(string(data)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +41,7 @@ func (ec *echoClient) Operate(run model.Run) error {
|
||||
//trim the newline ssh added
|
||||
output = strings.TrimRight(output, "\n")
|
||||
if output != ec.message {
|
||||
return fmt.Errorf("Got message [%s] expected [%s]", output, ec.message)
|
||||
return fmt.Errorf("got message [%s] expected [%s]", output, ec.message)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
(c) Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package tests
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/openziti/fablab/kernel/lib"
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
var hashes = map[string]string{
|
||||
"1KB": "0f343b0931126a20f133d67c2b018a3b",
|
||||
"100KB": "4c6426ac7ef186464ecbb0d81cbfcb1e",
|
||||
"20MB": "8f4e33f3dc3e414ff94e5fb6905cba8c",
|
||||
}
|
||||
|
||||
type httpClient string
|
||||
|
||||
const (
|
||||
ClientCurl httpClient = "curl"
|
||||
ClientWget httpClient = "wget"
|
||||
)
|
||||
|
||||
func TestCurlFiles(t *testing.T) {
|
||||
for _, clientType := range []string{"ert"} { // add zet back
|
||||
for _, hostType := range []string{"ert"} { // add zet back
|
||||
for _, client := range []httpClient{ClientCurl, ClientWget} {
|
||||
for _, encrypted := range []bool{true, false} {
|
||||
for _, size := range []string{"1KB", "100KB", "20MB"} {
|
||||
testFileDownload(t, clientType, client, hostType, encrypted, size, 20*time.Second)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testFileDownload(t *testing.T, hostSelector string, client httpClient, hostType string, encrypted bool, fileSize string, timeout time.Duration) {
|
||||
encDesk := "encrypted"
|
||||
if !encrypted {
|
||||
encDesk = "unencrypted"
|
||||
}
|
||||
|
||||
t.Run(fmt.Sprintf("%v-(%s->%s)-%s-%v", client, hostSelector, hostType, fileSize, encDesk), func(t *testing.T) {
|
||||
host, err := model.GetModel().SelectHost("." + hostSelector + "-client")
|
||||
req := require.New(t)
|
||||
req.NoError(err)
|
||||
|
||||
urlExtra := ""
|
||||
if !encrypted {
|
||||
urlExtra = "-unencrypted"
|
||||
}
|
||||
|
||||
url := fmt.Sprintf("https://ziti-files-%s%s.s3-us-west-1.amazonaws.ziti/%s.zip", hostType, urlExtra, fileSize)
|
||||
sshConfigFactory := lib.NewSshConfigFactory(host)
|
||||
|
||||
var cmd string
|
||||
if client == ClientCurl {
|
||||
cmd = fmt.Sprintf(`set -o pipefail; curl -k --header "Host: ziti-smoketest-files.s3-us-west-1.amazonaws.com" -fSL -o - %s | md5sum`, url)
|
||||
} else if client == ClientWget {
|
||||
cmd = fmt.Sprintf(`set -o pipefail; wget --no-check-certificate --header "Host: ziti-smoketest-files.s3-us-west-1.amazonaws.com" -O - -t 5 -T 5 %s | md5sum`, url)
|
||||
}
|
||||
|
||||
o, err := lib.RemoteExecAllWithTimeout(sshConfigFactory, timeout, cmd)
|
||||
req.NoError(err)
|
||||
req.Equal(hashes[fileSize], o[0:32])
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# Test Matrix
|
||||
|
||||
## Services
|
||||
|
||||
* File transfer
|
||||
* IPerf
|
||||
* Fortio
|
||||
* ziti-fabric-test loop
|
||||
|
||||
## Clients
|
||||
|
||||
* File Transfer
|
||||
* curl ER/T
|
||||
* curl ziti-edge-tunnel
|
||||
* sdk
|
||||
* IPerf
|
||||
* ER/T
|
||||
* ziti-edge-tunnnel
|
||||
* Fortio
|
||||
* ER/T
|
||||
* ziti-edge-tunnel
|
||||
* sdk?
|
||||
* ziti-fabric-test loop
|
||||
* ziti-fabric-test loop
|
||||
|
||||
## Hosting Options
|
||||
|
||||
* Edge Router/Tunneler - encrypted and non-encrypted
|
||||
* ziti-edge-tunnel - encrypted and non-encyrpted
|
||||
* router
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
(c) Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package tests
|
||||
|
||||
import (
|
||||
"github.com/openziti/fablab"
|
||||
"github.com/openziti/fablab/kernel/model"
|
||||
"github.com/openziti/ziti/network-tests/simple"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var run model.Run
|
||||
|
||||
func init() {
|
||||
cfg := model.GetConfig()
|
||||
instance, found := cfg.Instances[cfg.GetSelectedInstanceId()]
|
||||
if !found {
|
||||
panic(errors.Errorf("no instance found for current instance id %v", cfg.GetSelectedInstanceId()))
|
||||
}
|
||||
|
||||
if instance.Model == simple.Model.Id {
|
||||
simple.InitBootstrapExtensions()
|
||||
fablab.InitModel(simple.Model)
|
||||
} else {
|
||||
panic(errors.Errorf("unsupported model for network tests [%v]", instance.Model))
|
||||
}
|
||||
|
||||
if err := model.Bootstrap(); err != nil {
|
||||
logrus.Fatalf("unable to bootstrap (%s)", err)
|
||||
}
|
||||
|
||||
run = model.NewRun()
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package cmd
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
@@ -11,7 +12,6 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
@@ -34,6 +34,12 @@ func echoClient(cmd *cobra.Command, args []string) {
|
||||
}
|
||||
|
||||
zitiContext := ziti.NewContextWithConfig(cfg)
|
||||
/*
|
||||
zitiContext, err := ziti.NewContextFromFile(identityFile)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
*/
|
||||
|
||||
dial := func(_ context.Context, _, addr string) (net.Conn, error) {
|
||||
service := strings.Split(addr, ":")[0]
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
@@ -10,7 +11,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
@@ -70,6 +70,12 @@ func (s *zitiEchoServer) run() (err error) {
|
||||
}
|
||||
|
||||
zitiContext := ziti.NewContextWithConfig(config)
|
||||
/*
|
||||
zitiContext, err := ziti.NewContextFromFile(s.identityJson)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*/
|
||||
if s.listener, err = zitiContext.Listen("echo"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -12,6 +12,9 @@ ZITI_CONTROLLER_RAWNAME=ziti-controller
|
||||
#ZITI_CONTROLLER_HOSTNAME=advertised.address
|
||||
#ZITI_CTRL_PORT=8440
|
||||
|
||||
# Leave password blank to have a unique value generated or set the password explicitly
|
||||
ZITI_PWD=
|
||||
|
||||
ZITI_EDGE_CONTROLLER_RAWNAME=ziti-edge-controller
|
||||
#ZITI_EDGE_CONTROLLER_HOSTNAME=advertised.address
|
||||
#ZITI_EDGE_CONTROLLER_PORT=8441
|
||||
|
||||
@@ -10,6 +10,7 @@ services:
|
||||
environment:
|
||||
- ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION=${ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION}
|
||||
- ZITI_EDGE_ROUTER_ENROLLMENT_DURATION=${ZITI_EDGE_ROUTER_ENROLLMENT_DURATION}
|
||||
- ZITI_PWD=${ZITI_PWD}
|
||||
networks:
|
||||
zitiblue:
|
||||
aliases:
|
||||
|
||||
@@ -7,8 +7,11 @@ export ZITI_EDGE_CONTROLLER_RAWNAME=ziti-edge-controller
|
||||
|
||||
. "${ZITI_SCRIPTS}/ziti-cli-functions.sh"
|
||||
|
||||
generateEnvFile
|
||||
. ${ZITI_HOME}/ziti.env
|
||||
# access-control.init is created by ziti-controller-init-container after initial controller startup
|
||||
if [ ! -f "${ZITI_HOME}/access-control.init" ]; then
|
||||
generateEnvFile
|
||||
fi
|
||||
. "${ZITI_HOME}/ziti.env"
|
||||
|
||||
# create pki
|
||||
createPki
|
||||
|
||||
@@ -2,14 +2,6 @@
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
# the default ZITI_NETWORK (network name) is the short hostname
|
||||
: "${DEFAULT_ZITI_NETWORK:="$(hostname -s)"}"
|
||||
|
||||
# shellcheck disable=SC2155
|
||||
export DEFAULT_ZITI_HOME_LOCATION="${HOME}/.ziti/quickstart/${DEFAULT_ZITI_NETWORK}"
|
||||
|
||||
export ZITI_QUICKSTART_ENVROOT="${HOME}/.ziti/quickstart"
|
||||
|
||||
ASCI_WHITE='\033[01;37m'
|
||||
ASCI_RESTORE='\033[0m'
|
||||
ASCI_RED='\033[00;31m'
|
||||
@@ -44,8 +36,40 @@ function BLUE {
|
||||
echo "${ASCI_BLUE}${1-}${ASCI_RESTORE}"
|
||||
}
|
||||
|
||||
function checkPrereqs {
|
||||
commands_to_test=(curl jq tar hostname)
|
||||
missing_requirements=""
|
||||
# verify all the commands required in the automation exist before trying to run the full suite
|
||||
for cmd in "${commands_to_test[@]}"
|
||||
do
|
||||
# checking all commands are on the path before continuing...
|
||||
if ! [[ -x "$(command -v "${cmd}")" ]]; then
|
||||
missing_requirements="${missing_requirements} * ${cmd}
|
||||
"
|
||||
fi
|
||||
done
|
||||
# are requirements ? if yes, stop here and help 'em out
|
||||
if ! [[ "" = "${missing_requirements}" ]]; then
|
||||
echo " "
|
||||
echo "You're missing one or more commands that are used in this script."
|
||||
echo "Please ensure the commands listed are on the path and then try again."
|
||||
echo "${missing_requirements}"
|
||||
echo " "
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
checkPrereqs
|
||||
|
||||
# the default ZITI_NETWORK (network name) is the short hostname
|
||||
: "${DEFAULT_ZITI_NETWORK:="$(hostname -s)"}"
|
||||
|
||||
# shellcheck disable=SC2155
|
||||
export DEFAULT_ZITI_HOME_LOCATION="${HOME}/.ziti/quickstart/${DEFAULT_ZITI_NETWORK}"
|
||||
export ZITI_QUICKSTART_ENVROOT="${HOME}/.ziti/quickstart"
|
||||
|
||||
function zitiLogin {
|
||||
"${ZITI_BIN_DIR-}/ziti" edge login "${ZITI_EDGE_CTRL_ADVERTISED}" -u "${ZITI_USER-}" -p "${ZITI_PWD}" -c "${ZITI_PKI_OS_SPECIFIC}/${ZITI_EDGE_CONTROLLER_ROOTCA_NAME}/certs/${ZITI_EDGE_CONTROLLER_INTERMEDIATE_NAME}.cert"
|
||||
"${ZITI_BIN_DIR-}/ziti" edge login "${ZITI_EDGE_CTRL_ADVERTISED}" -u "${ZITI_USER-}" -p "${ZITI_PWD}" -y
|
||||
}
|
||||
function cleanZitiController {
|
||||
checkEnvVariable ZITI_HOME
|
||||
@@ -275,31 +299,6 @@ function getZiti {
|
||||
fi
|
||||
}
|
||||
|
||||
function checkPrereqs {
|
||||
commands_to_test=(curl jq)
|
||||
missing_requirements=""
|
||||
# verify all the commands required in the automation exist before trying to run the full suite
|
||||
for cmd in "${commands_to_test[@]}"
|
||||
do
|
||||
# checking all commands are on the path before continuing...
|
||||
if ! [[ -x "$(command -v "${cmd}")" ]]; then
|
||||
missing_requirements="${missing_requirements} * ${cmd}"
|
||||
fi
|
||||
done
|
||||
# are requirements ? if yes, stop here and help 'em out
|
||||
if ! [[ "" = "${missing_requirements}" ]]; then
|
||||
echo " "
|
||||
echo "You're missing one or more commands that are used in this script."
|
||||
echo "Please ensure the commands listed are on the path and then try again."
|
||||
echo "${missing_requirements}"
|
||||
echo " "
|
||||
echo " "
|
||||
return 1
|
||||
else
|
||||
echo -e "$(GREEN "Prerequisites confirmed")"
|
||||
fi
|
||||
}
|
||||
|
||||
function _portCheck {
|
||||
if [[ "${1-}" == "" ]] || [[ "${2-}" == "" ]]; then
|
||||
echo -e "_portCheck Usage: _portCheck <port> <portName>"
|
||||
@@ -1146,8 +1145,7 @@ function ziti_createEnvFile {
|
||||
echo "export PFXLOG_NO_JSON=true" >> "${ENV_FILE}"
|
||||
|
||||
echo "alias zec='ziti edge'" >> "${ENV_FILE}"
|
||||
echo "alias zlogin='ziti edge login \"\${ZITI_EDGE_CTRL_ADVERTISED}\" -u \"\${ZITI_USER-}\" -p \"\${ZITI_PWD}\" -c \"\${ZITI_PKI}/\${ZITI_EDGE_CONTROLLER_INTERMEDIATE_NAME}/certs/\${ZITI_EDGE_CONTROLLER_INTERMEDIATE_NAME}.cert\"'" >> "${ENV_FILE}"
|
||||
echo "alias zitiLogin='ziti edge login \"\${ZITI_EDGE_CTRL_ADVERTISED}\" -u \"\${ZITI_USER-}\" -p \"\${ZITI_PWD}\" -c \"\${ZITI_PKI}/\${ZITI_EDGE_CONTROLLER_INTERMEDIATE_NAME}/certs/\${ZITI_EDGE_CONTROLLER_INTERMEDIATE_NAME}.cert\"'" >> "${ENV_FILE}"
|
||||
echo "alias zitiLogin='ziti edge login \"\${ZITI_EDGE_CTRL_ADVERTISED}\" -u \"\${ZITI_USER-}\" -p \"\${ZITI_PWD}\" -y'" >> "${ENV_FILE}"
|
||||
echo "alias psz='ps -ef | grep ziti'" >> "${ENV_FILE}"
|
||||
|
||||
#when sourcing the emitted file add the bin folder to the path
|
||||
|
||||
@@ -10,6 +10,7 @@ services:
|
||||
environment:
|
||||
- ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION=${ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION}
|
||||
- ZITI_EDGE_ROUTER_ENROLLMENT_DURATION=${ZITI_EDGE_ROUTER_ENROLLMENT_DURATION}
|
||||
- ZITI_PWD=${ZITI_PWD}
|
||||
networks:
|
||||
zitiblue:
|
||||
aliases:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
ziti edge login "${ZITI_EDGE_CONTROLLER_API}" -u "${ZITI_USER}" -p "${ZITI_PWD}" -c "${ZITI_PKI}/${ZITI_EDGE_CONTROLLER_ROOTCA_NAME}/certs/${ZITI_EDGE_CONTROLLER_INTERMEDIATE_NAME}.cert"
|
||||
ziti edge login "${ZITI_EDGE_CONTROLLER_API}" -u "${ZITI_USER}" -p "${ZITI_PWD}" -y
|
||||
|
||||
ziti edge delete service zcatsvc
|
||||
ziti edge delete config zcatconfig
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
suffix=$(date +"%b-%d-%H%M")
|
||||
idname="User${suffix}"
|
||||
|
||||
ziti edge login "${ZITI_EDGE_CONTROLLER_API}" -u "${ZITI_USER}" -p "${ZITI_PWD}" -c "${ZITI_PKI}/${ZITI_EDGE_CONTROLLER_ROOTCA_NAME}/certs/${ZITI_EDGE_CONTROLLER_INTERMEDIATE_NAME}.cert"
|
||||
ziti edge login "${ZITI_EDGE_CONTROLLER_API}" -u "${ZITI_USER}" -p "${ZITI_PWD}" -y
|
||||
|
||||
ziti edge delete identity "${idname}"
|
||||
ziti edge create identity device "${idname}" -o "${ZITI_HOME}/test_identity".jwt
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
ziti edge controller login "${ZITI_EDGE_CONTROLLER_API}" -u "${ZITI_USER}" -p "${ZITI_PWD}" -c "${ZITI_PKI}/${ZITI_EDGE_CONTROLLER_ROOTCA_NAME}/certs/${ZITI_EDGE_CONTROLLER_INTERMEDIATE_NAME}.cert"
|
||||
ziti edge controller login "${ZITI_EDGE_CONTROLLER_API}" -u "${ZITI_USER}" -p "${ZITI_PWD}" -y
|
||||
|
||||
ziti edge delete service netcatsvc
|
||||
ziti edge delete service zcatsvc
|
||||
|
||||
@@ -24,7 +24,6 @@ import (
|
||||
"github.com/openziti/edge-api/rest_model"
|
||||
"github.com/openziti/edge-api/rest_util"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
sdk_config "github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/sdk-golang/ziti/enroll"
|
||||
"github.com/pkg/errors"
|
||||
log "github.com/sirupsen/logrus"
|
||||
@@ -407,7 +406,7 @@ func TestSimpleWebService(t *testing.T) {
|
||||
assert.Equal(t, 200, resp.StatusCode, fmt.Sprintf("Expected successful HTTP status code 200, received %d instead", resp.StatusCode))
|
||||
}
|
||||
|
||||
func enrollIdentity(client *rest_management_api_client.ZitiEdgeManagement, identityID string) *sdk_config.Config {
|
||||
func enrollIdentity(client *rest_management_api_client.ZitiEdgeManagement, identityID string) *ziti.Config {
|
||||
// Get the identity object
|
||||
params := &identity.DetailIdentityParams{
|
||||
Context: context.Background(),
|
||||
@@ -447,11 +446,14 @@ func Dial(_ context.Context, _ string, addr string) (net.Conn, error) {
|
||||
}
|
||||
|
||||
func createZitifiedHttpClient(idFile string) http.Client {
|
||||
cfg, err := sdk_config.NewFromFile(idFile)
|
||||
cfg, err := ziti.NewConfigFromFile(idFile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
zitiContext, err = ziti.NewContext(cfg)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
zitiContext = ziti.NewContextWithConfig(cfg)
|
||||
zitiTransport := http.DefaultTransport.(*http.Transport).Clone() // copy default transport
|
||||
zitiTransport.DialContext = Dial //zitiDialContext.Dial
|
||||
return http.Client{Transport: zitiTransport}
|
||||
|
||||
@@ -20,10 +20,9 @@ import (
|
||||
"fmt"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/fabric/router/xgress_transport"
|
||||
"github.com/openziti/identity/dotziti"
|
||||
"github.com/openziti/identity"
|
||||
"github.com/openziti/identity/dotziti"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/transport/v2"
|
||||
"github.com/openziti/ziti/ziti-fabric-test/subcmd/loop2/pb"
|
||||
"github.com/spf13/cobra"
|
||||
@@ -162,13 +161,17 @@ func (cmd *dialerCmd) connect() net.Conn {
|
||||
|
||||
var context ziti.Context
|
||||
if cmd.edgeConfigFile != "" {
|
||||
zitiCfg, err := config.NewFromFile(cmd.edgeConfigFile)
|
||||
zitiCfg, err := ziti.NewConfigFromFile(cmd.edgeConfigFile)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti configuration from %s: %v", cmd.edgeConfigFile, err)
|
||||
}
|
||||
context = ziti.NewContextWithConfig(zitiCfg)
|
||||
|
||||
context, err = ziti.NewContext(zitiCfg)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti context fromt configuration: %v", err)
|
||||
}
|
||||
} else {
|
||||
context = ziti.NewContext()
|
||||
log.Fatal("no configuration file provided")
|
||||
}
|
||||
|
||||
service := strings.TrimPrefix(cmd.endpoint, "edge:")
|
||||
|
||||
@@ -18,10 +18,9 @@ package loop2
|
||||
|
||||
import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/identity/dotziti"
|
||||
"github.com/openziti/identity"
|
||||
"github.com/openziti/identity/dotziti"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/transport/v2"
|
||||
"github.com/openziti/ziti/ziti-fabric-test/subcmd/loop2/pb"
|
||||
"github.com/spf13/cobra"
|
||||
@@ -85,13 +84,17 @@ func (cmd *listenerCmd) listenEdge() {
|
||||
|
||||
var context ziti.Context
|
||||
if cmd.edgeConfigFile != "" {
|
||||
zitiCfg, err := config.NewFromFile(cmd.edgeConfigFile)
|
||||
zitiCfg, err := ziti.NewConfigFromFile(cmd.edgeConfigFile)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti configuration from %s: %v", cmd.edgeConfigFile, err)
|
||||
}
|
||||
context = ziti.NewContextWithConfig(zitiCfg)
|
||||
|
||||
context, err = ziti.NewContext(zitiCfg)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti context from cofnig: %v", err)
|
||||
}
|
||||
} else {
|
||||
context = ziti.NewContext()
|
||||
log.Fatal("no configuration file provided")
|
||||
}
|
||||
|
||||
service := strings.TrimPrefix(cmd.bindAddress, "edge:")
|
||||
|
||||
@@ -19,12 +19,11 @@ package loop3
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/fabric/router/xgress_transport"
|
||||
"github.com/openziti/agent"
|
||||
"github.com/openziti/identity/dotziti"
|
||||
"github.com/openziti/fabric/router/xgress_transport"
|
||||
"github.com/openziti/identity"
|
||||
"github.com/openziti/identity/dotziti"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/transport/v2"
|
||||
"github.com/spf13/cobra"
|
||||
"net"
|
||||
@@ -158,13 +157,17 @@ func (cmd *dialerCmd) connect() net.Conn {
|
||||
if strings.HasPrefix(cmd.endpoint, "edge:") {
|
||||
var context ziti.Context
|
||||
if cmd.edgeConfigFile != "" {
|
||||
zitiCfg, err := config.NewFromFile(cmd.edgeConfigFile)
|
||||
zitiCfg, err := ziti.NewConfigFromFile(cmd.edgeConfigFile)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti configuration from %s: %v", cmd.edgeConfigFile, err)
|
||||
}
|
||||
context = ziti.NewContextWithConfig(zitiCfg)
|
||||
context, err = ziti.NewContext(zitiCfg)
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti context from config: %v", err)
|
||||
}
|
||||
} else {
|
||||
context = ziti.NewContext()
|
||||
log.Fatal("no configuration provided")
|
||||
}
|
||||
|
||||
service := strings.TrimPrefix(cmd.endpoint, "edge:")
|
||||
|
||||
@@ -20,10 +20,9 @@ import (
|
||||
"errors"
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/agent"
|
||||
"github.com/openziti/identity/dotziti"
|
||||
"github.com/openziti/identity"
|
||||
"github.com/openziti/identity/dotziti"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/transport/v2"
|
||||
loop3_pb "github.com/openziti/ziti/ziti-fabric-test/subcmd/loop3/pb"
|
||||
"github.com/sirupsen/logrus"
|
||||
@@ -138,13 +137,17 @@ func (cmd *listenerCmd) listenEdge() {
|
||||
|
||||
var context ziti.Context
|
||||
if cmd.edgeConfigFile != "" {
|
||||
zitiCfg, err := config.NewFromFile(cmd.edgeConfigFile)
|
||||
zitiCfg, err := ziti.NewConfigFromFile(cmd.edgeConfigFile)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti configuration from %s: %v", cmd.edgeConfigFile, err)
|
||||
}
|
||||
context = ziti.NewContextWithConfig(zitiCfg)
|
||||
context, err = ziti.NewContext(zitiCfg)
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti context from config: %v", err)
|
||||
}
|
||||
} else {
|
||||
context = ziti.NewContext()
|
||||
log.Fatal("no configuration provided")
|
||||
}
|
||||
|
||||
service := strings.TrimPrefix(cmd.bindAddress, "edge:")
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/fabric/pb/mgmt_pb"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/rcrowley/go-metrics"
|
||||
"google.golang.org/protobuf/proto"
|
||||
@@ -69,13 +68,17 @@ func (r *zitiMetricsReporter) run(reportInterval time.Duration) {
|
||||
|
||||
var client ziti.Context
|
||||
if r.configFile != "" {
|
||||
sdkConfig, err := config.NewFromFile(r.configFile)
|
||||
sdkConfig, err := ziti.NewConfigFromFile(r.configFile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
client, err = ziti.NewContext(sdkConfig)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
client = ziti.NewContextWithConfig(sdkConfig)
|
||||
} else {
|
||||
client = ziti.NewContext()
|
||||
panic("no configuration file provided")
|
||||
}
|
||||
conn, err := client.Dial(r.service)
|
||||
|
||||
|
||||
@@ -91,6 +91,7 @@ func NewAgentCmd(p common.OptionsProvider) *cobra.Command {
|
||||
agentCmd.AddCommand(routerCmd)
|
||||
|
||||
routerCmd.AddCommand(NewRouteCmd(p))
|
||||
routerCmd.AddCommand(NewUnrouteCmd(p))
|
||||
routerCmd.AddCommand(NewSimpleAgentCustomCmd("dump-api-sessions", AgentAppRouter, debugops.DumpApiSessions, p))
|
||||
routerCmd.AddCommand(NewSimpleChAgentCustomCmd("dump-routes", AgentAppRouter, int32(mgmt_pb.ContentType_RouterDebugDumpForwarderTablesRequestType), p))
|
||||
routerCmd.AddCommand(NewSimpleChAgentCustomCmd("dump-links", AgentAppRouter, int32(mgmt_pb.ContentType_RouterDebugDumpLinksRequestType), p))
|
||||
@@ -202,15 +203,7 @@ func (self *AgentOptions) RunCopyOut(op byte, params []byte, out io.Writer) erro
|
||||
})
|
||||
}
|
||||
|
||||
if len(self.Args) == 0 {
|
||||
return self.MakeRequest(op, params, self.CopyToWriter(out))
|
||||
}
|
||||
|
||||
addr, err := agent.ParseGopsAddress(self.Args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return agent.MakeRequest(addr, op, params, os.Stdout)
|
||||
return self.MakeRequest(op, params, self.CopyToWriter(out))
|
||||
}
|
||||
|
||||
func NewAgentChannel(conn net.Conn) (channel.Channel, error) {
|
||||
|
||||
@@ -19,20 +19,21 @@ package agentcli
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"github.com/keybase/go-ps"
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
"os"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
goversion "rsc.io/goversion/version"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/shirou/gopsutil/v3/process"
|
||||
"github.com/spf13/cobra"
|
||||
goversion "rsc.io/goversion/version"
|
||||
)
|
||||
|
||||
type AgentPsAction struct {
|
||||
@@ -149,7 +150,7 @@ type P struct {
|
||||
|
||||
// FindAll returns all the Ziti processes currently running on this host.
|
||||
func FindAll() []P {
|
||||
pss, err := ps.Processes()
|
||||
pss, err := process.Processes()
|
||||
// fmt.Println("FindAll, err is: %s", err)
|
||||
|
||||
if err != nil {
|
||||
@@ -172,11 +173,19 @@ func FindAll() []P {
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
ppid, err := pr.Ppid()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
name, err := pr.Name()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if isZiti(pr) {
|
||||
found <- P{
|
||||
PID: pr.Pid(),
|
||||
PPID: pr.PPid(),
|
||||
Exec: pr.Executable(),
|
||||
PID: int(pr.Pid),
|
||||
PPID: int(ppid),
|
||||
Exec: name,
|
||||
Path: path,
|
||||
BuildVersion: version,
|
||||
Agent: agent,
|
||||
@@ -199,12 +208,12 @@ func FindAll() []P {
|
||||
// in the process' binary and determines if the process
|
||||
// if a Go process or not. If the process is a Go process,
|
||||
// it reports PID, binary name and full path of the binary.
|
||||
func isGo(pr ps.Process) (path, version string, agent, ok bool, err error) {
|
||||
if pr.Pid() == 0 {
|
||||
func isGo(pr *process.Process) (path, version string, agent, ok bool, err error) {
|
||||
if pr.Pid == 0 {
|
||||
// ignore system process
|
||||
return
|
||||
}
|
||||
path, err = pr.Path()
|
||||
path, err = pr.Exe()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -215,7 +224,7 @@ func isGo(pr ps.Process) (path, version string, agent, ok bool, err error) {
|
||||
}
|
||||
ok = true
|
||||
version = versionInfo.Release
|
||||
pidfile, err := PIDFile(pr.Pid())
|
||||
pidfile, err := PIDFile(int(pr.Pid))
|
||||
if err == nil {
|
||||
_, err := os.Stat(pidfile)
|
||||
agent = err == nil
|
||||
@@ -256,6 +265,10 @@ func PIDFile(pid int) (string, error) {
|
||||
return fmt.Sprintf("%s/%d", gopsdir, pid), nil
|
||||
}
|
||||
|
||||
func isZiti(pr ps.Process) (ok bool) {
|
||||
return strings.HasPrefix(pr.Executable(), "ziti")
|
||||
func isZiti(pr *process.Process) (ok bool) {
|
||||
name, err := pr.Name()
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return strings.HasPrefix(name, "ziti")
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ func NewRouteCmd(p common.OptionsProvider) *cobra.Command {
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Args: cobra.RangeArgs(3, 4),
|
||||
Args: cobra.ExactArgs(4),
|
||||
Use: "route <controller id> <circuit id> <source-address> <destination-address>",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
action.Cmd = cmd
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
Copyright NetFoundry Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package agentcli
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/fabric/pb/ctrl_pb"
|
||||
"github.com/openziti/fabric/pb/mgmt_pb"
|
||||
"github.com/openziti/fabric/router"
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"github.com/spf13/cobra"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
type AgentUnrouteAction struct {
|
||||
AgentOptions
|
||||
}
|
||||
|
||||
func NewUnrouteCmd(p common.OptionsProvider) *cobra.Command {
|
||||
action := &AgentUnrouteAction{
|
||||
AgentOptions: AgentOptions{
|
||||
CommonOptions: p(),
|
||||
},
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Args: cobra.ExactArgs(1),
|
||||
Use: "unroute <circuit id>",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
action.Cmd = cmd
|
||||
action.Args = args
|
||||
return action.MakeChannelRequest(router.AgentAppId, action.makeRequest)
|
||||
},
|
||||
}
|
||||
|
||||
action.AddAgentOptions(cmd)
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
func (self *AgentUnrouteAction) makeRequest(ch channel.Channel) error {
|
||||
route := &ctrl_pb.Unroute{
|
||||
CircuitId: self.Args[0],
|
||||
Now: true,
|
||||
}
|
||||
|
||||
buf, err := proto.Marshal(route)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
msg := channel.NewMessage(int32(mgmt_pb.ContentType_RouterDebugUnrouteRequestType), buf)
|
||||
reply, err := msg.WithTimeout(self.timeout).SendForReply(ch)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if reply.ContentType == channel.ContentTypeResultType {
|
||||
result := channel.UnmarshalResult(reply)
|
||||
if result.Success {
|
||||
if len(result.Message) > 0 {
|
||||
fmt.Printf("success: %v\n", result.Message)
|
||||
} else {
|
||||
fmt.Println("success")
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("error: %v\n", result.Message)
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("unexpected response type %v\n", reply.ContentType)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -43,9 +43,9 @@ func NewSetChannelLogLevelCmd(p common.OptionsProvider) *cobra.Command {
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "set-channel-log-level target channel log-level (panic, fatal, error, warn, info, debug, trace)",
|
||||
Use: "set-channel-log-level channel log-level (panic, fatal, error, warn, info, debug, trace)",
|
||||
Short: "Sets a channel-specific log level in the target application",
|
||||
Args: cobra.MinimumNArgs(2),
|
||||
Args: cobra.ExactArgs(2),
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
action.Cmd = cmd
|
||||
action.Args = args
|
||||
@@ -68,15 +68,8 @@ func (self *AgentSetChannelLogLevelAction) Run() error {
|
||||
})
|
||||
}
|
||||
|
||||
var channelArg string
|
||||
var levelArg string
|
||||
if len(self.Args) == 2 {
|
||||
channelArg = self.Args[0]
|
||||
levelArg = self.Args[1]
|
||||
} else {
|
||||
channelArg = self.Args[1]
|
||||
levelArg = self.Args[2]
|
||||
}
|
||||
channelArg := self.Args[0]
|
||||
levelArg := self.Args[1]
|
||||
|
||||
var level logrus.Level
|
||||
var found bool
|
||||
@@ -98,13 +91,5 @@ func (self *AgentSetChannelLogLevelAction) Run() error {
|
||||
buf.Write([]byte(channelArg))
|
||||
buf.WriteByte(byte(level))
|
||||
|
||||
if len(self.Args) == 2 {
|
||||
return self.MakeRequest(agent.SetChannelLogLevel, buf.Bytes(), self.CopyToWriter(os.Stdout))
|
||||
}
|
||||
|
||||
addr, err := agent.ParseGopsAddress(self.Args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return agent.MakeRequest(addr, agent.SetChannelLogLevel, buf.Bytes(), os.Stdout)
|
||||
return self.MakeRequest(agent.SetChannelLogLevel, buf.Bytes(), self.CopyToWriter(os.Stdout))
|
||||
}
|
||||
|
||||
@@ -41,9 +41,9 @@ func NewSetLogLevelCmd(p common.OptionsProvider) *cobra.Command {
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "set-log-level target log-level (panic, fatal, error, warn, info, debug, trace)",
|
||||
Use: "set-log-level log-level (panic, fatal, error, warn, info, debug, trace)",
|
||||
Short: "Sets the global logrus logging level in the target application",
|
||||
Args: cobra.MinimumNArgs(1),
|
||||
Args: cobra.ExactArgs(1),
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
action.Cmd = cmd
|
||||
action.Args = args
|
||||
@@ -66,12 +66,7 @@ func (self *AgentSetLogLevelAction) Run() error {
|
||||
})
|
||||
}
|
||||
|
||||
var levelArg string
|
||||
if len(self.Args) == 1 {
|
||||
levelArg = self.Args[0]
|
||||
} else {
|
||||
levelArg = self.Args[1]
|
||||
}
|
||||
levelArg := self.Args[0]
|
||||
|
||||
var level logrus.Level
|
||||
var found bool
|
||||
@@ -87,14 +82,5 @@ func (self *AgentSetLogLevelAction) Run() error {
|
||||
}
|
||||
|
||||
buf := []byte{byte(level)}
|
||||
|
||||
if len(self.Args) == 1 {
|
||||
return self.MakeRequest(agent.SetLogLevel, buf, self.CopyToWriter(os.Stdout))
|
||||
}
|
||||
|
||||
addr, err := agent.ParseGopsAddress(self.Args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return agent.MakeRequest(addr, agent.SetLogLevel, buf, os.Stdout)
|
||||
return self.MakeRequest(agent.SetLogLevel, buf, self.CopyToWriter(os.Stdout))
|
||||
}
|
||||
|
||||
@@ -40,9 +40,9 @@ func NewSetGcCmd(p common.OptionsProvider) *cobra.Command {
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "setgc target gc-percentage",
|
||||
Use: "setgc gc-percentage",
|
||||
Short: "Sets the GC percentage in the target application",
|
||||
Args: cobra.MinimumNArgs(1),
|
||||
Args: cobra.ExactArgs(1),
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
action.Cmd = cmd
|
||||
action.Args = args
|
||||
@@ -65,12 +65,7 @@ func (self *AgentSetGcAction) Run() error {
|
||||
})
|
||||
}
|
||||
|
||||
var pctArg string
|
||||
if len(self.Args) == 1 {
|
||||
pctArg = self.Args[0]
|
||||
} else {
|
||||
pctArg = self.Args[1]
|
||||
}
|
||||
pctArg := self.Args[0]
|
||||
|
||||
perc, err := strconv.ParseInt(pctArg, 10, strconv.IntSize)
|
||||
if err != nil {
|
||||
@@ -79,14 +74,5 @@ func (self *AgentSetGcAction) Run() error {
|
||||
buf := make([]byte, binary.MaxVarintLen64)
|
||||
binary.PutVarint(buf, perc)
|
||||
|
||||
if len(self.Args) == 1 {
|
||||
return self.MakeRequest(agent.SetGCPercent, buf, self.CopyToWriter(os.Stdout))
|
||||
}
|
||||
|
||||
addr, err := agent.ParseGopsAddress(self.Args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return agent.MakeRequest(addr, agent.SetGCPercent, buf, os.Stdout)
|
||||
return self.MakeRequest(agent.SetGCPercent, buf, self.CopyToWriter(os.Stdout))
|
||||
}
|
||||
|
||||
@@ -36,8 +36,8 @@ func NewSimpleAgentCmd(name string, op byte, p common.OptionsProvider, desc stri
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
Use: name + " <optional-target> ",
|
||||
Args: cobra.ExactArgs(0),
|
||||
Use: name,
|
||||
Short: desc,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
action.Cmd = cmd
|
||||
@@ -59,8 +59,8 @@ func NewSimpleAgentCustomCmd(name string, appId AgentAppId, op byte, p common.Op
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
Use: name + " <optional-target> ",
|
||||
Args: cobra.ExactArgs(0),
|
||||
Use: name,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
action.Cmd = cmd
|
||||
action.Args = args
|
||||
|
||||
@@ -39,8 +39,8 @@ func NewStackCmd(p common.OptionsProvider) *cobra.Command {
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
Use: "stack [<optional-target>]",
|
||||
Args: cobra.ExactArgs(0),
|
||||
Use: "stack",
|
||||
Short: "Emits a go-routine stack dump from the target application",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
action.Cmd = cmd
|
||||
|
||||
@@ -24,7 +24,6 @@ import (
|
||||
"github.com/openziti/channel/v2"
|
||||
"github.com/openziti/identity"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/sdk-golang/ziti/edge"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
@@ -131,7 +130,7 @@ func (self *echoServer) run(*cobra.Command, []string) {
|
||||
}
|
||||
|
||||
if self.configFile != "" {
|
||||
zitiConfig, err := config.NewFromFile(self.configFile)
|
||||
zitiConfig, err := ziti.NewConfigFromFile(self.configFile)
|
||||
if err != nil {
|
||||
log.WithError(err).Fatalf("ziti: unable to load ziti identity from [%v]", self.configFile)
|
||||
}
|
||||
@@ -140,7 +139,11 @@ func (self *echoServer) run(*cobra.Command, []string) {
|
||||
log.WithError(err).Fatalf("ziti: unable to create ziti identity from [%v]", self.configFile)
|
||||
}
|
||||
|
||||
zitiContext := ziti.NewContextWithConfig(zitiConfig)
|
||||
zitiContext, err := ziti.NewContext(zitiConfig)
|
||||
|
||||
if err != nil {
|
||||
log.WithError(err).Fatal("unable to get create ziti context from config")
|
||||
}
|
||||
|
||||
zitiIdentity, err := zitiContext.GetCurrentIdentity()
|
||||
if err != nil {
|
||||
@@ -149,20 +152,20 @@ func (self *echoServer) run(*cobra.Command, []string) {
|
||||
|
||||
listenOptions := ziti.DefaultListenOptions()
|
||||
listenOptions.BindUsingEdgeIdentity = self.bindWithIdentity
|
||||
listenOptions.Cost = zitiIdentity.DefaultHostingCost
|
||||
listenOptions.Precedence = ziti.GetPrecedenceForLabel(zitiIdentity.DefaultHostingPrecedence)
|
||||
listenOptions.Cost = uint16(*zitiIdentity.DefaultHostingCost)
|
||||
listenOptions.Precedence = ziti.GetPrecedenceForLabel(string(zitiIdentity.DefaultHostingPrecedence))
|
||||
|
||||
svc, found := zitiContext.GetService(self.service)
|
||||
if !found {
|
||||
log.WithError(err).Fatalf("ziti: unable to lookup service [%v]", self.service)
|
||||
}
|
||||
|
||||
if cost, found := zitiIdentity.ServiceHostingCosts[svc.Id]; found {
|
||||
listenOptions.Cost = uint16(cost.(float64))
|
||||
if cost, found := zitiIdentity.ServiceHostingCosts[*svc.ID]; found {
|
||||
listenOptions.Cost = uint16(*cost)
|
||||
}
|
||||
|
||||
if precedence, found := zitiIdentity.ServiceHostingPrecedences[svc.Id]; found {
|
||||
listenOptions.Precedence = ziti.GetPrecedenceForLabel(precedence.(string))
|
||||
if precedence, found := zitiIdentity.ServiceHostingPrecedences[*svc.ID]; found {
|
||||
listenOptions.Precedence = ziti.GetPrecedenceForLabel(string(precedence))
|
||||
}
|
||||
|
||||
log.Infof("ziti: hosting %v with addressable=%v, cost=%v, precedence=%v",
|
||||
|
||||
@@ -20,7 +20,6 @@ import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/foundation/v2/info"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
"io"
|
||||
@@ -97,7 +96,7 @@ func (self *zcatAction) run(_ *cobra.Command, args []string) {
|
||||
if network == "tcp" || network == "udp" {
|
||||
conn, err = net.Dial(network, addr)
|
||||
} else if network == "ziti" {
|
||||
zitiConfig, cfgErr := config.NewFromFile(self.configFile)
|
||||
zitiConfig, cfgErr := ziti.NewConfigFromFile(self.configFile)
|
||||
if cfgErr != nil {
|
||||
log.WithError(cfgErr).Fatalf("unable to load ziti identity from [%v]", self.configFile)
|
||||
}
|
||||
@@ -108,7 +107,11 @@ func (self *zcatAction) run(_ *cobra.Command, args []string) {
|
||||
addr = addr[atIdx+1:]
|
||||
}
|
||||
|
||||
zitiContext := ziti.NewContextWithConfig(zitiConfig)
|
||||
zitiContext, ctxErr := ziti.NewContext(zitiConfig)
|
||||
if ctxErr != nil {
|
||||
pfxlog.Logger().WithError(err).Fatal("could not create sdk context from config")
|
||||
}
|
||||
|
||||
dialOptions := &ziti.DialOptions{
|
||||
ConnectTimeout: 5 * time.Second,
|
||||
Identity: dialIdentifier,
|
||||
|
||||
@@ -983,12 +983,18 @@ func outputIdentities(o *api.Options, children []*gabs.Container, pagingInfo *ap
|
||||
|
||||
for _, entity := range children {
|
||||
wrapper := api.Wrap(entity)
|
||||
authPolicy := wrapper.String("authPolicy.name")
|
||||
|
||||
if authPolicy == "" {
|
||||
authPolicy = wrapper.String("authPolicyId")
|
||||
}
|
||||
|
||||
t.AppendRow(table.Row{
|
||||
wrapper.String("id"),
|
||||
wrapper.String("name"),
|
||||
wrapper.String("type.name"),
|
||||
strings.Join(wrapper.StringSlice("roleAttributes"), ","),
|
||||
wrapper.String("authPolicyId")})
|
||||
authPolicy})
|
||||
}
|
||||
api.RenderTable(o, t, pagingInfo)
|
||||
|
||||
|
||||
+97
-25
@@ -17,6 +17,7 @@
|
||||
package edge
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"github.com/Jeffail/gabs"
|
||||
"github.com/openziti/foundation/v2/term"
|
||||
@@ -27,14 +28,16 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// loginOptions are the flags for login commands
|
||||
type loginOptions struct {
|
||||
// LoginOptions are the flags for login commands
|
||||
type LoginOptions struct {
|
||||
api.Options
|
||||
Username string
|
||||
Password string
|
||||
@@ -43,11 +46,14 @@ type loginOptions struct {
|
||||
ReadOnly bool
|
||||
Yes bool
|
||||
IgnoreConfig bool
|
||||
ClientCert string
|
||||
ClientKey string
|
||||
ExtJwt string
|
||||
}
|
||||
|
||||
// newLoginCmd creates the command
|
||||
func newLoginCmd(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
options := &loginOptions{
|
||||
options := &LoginOptions{
|
||||
Options: api.Options{
|
||||
CommonOptions: common.CommonOptions{Out: out, Err: errOut},
|
||||
},
|
||||
@@ -73,17 +79,21 @@ func newLoginCmd(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
cmd.Flags().StringVarP(&options.Username, "username", "u", "", "username to use for authenticating to the Ziti Edge Controller ")
|
||||
cmd.Flags().StringVarP(&options.Password, "password", "p", "", "password to use for authenticating to the Ziti Edge Controller, if -u is supplied and -p is not, a value will be prompted for")
|
||||
cmd.Flags().StringVarP(&options.Token, "token", "t", "", "if an api token has already been acquired, it can be set in the config with this option. This will set the session to read only by default")
|
||||
cmd.Flags().StringVarP(&options.CaCert, "cert", "c", "", "additional root certificates used by the Ziti Edge Controller")
|
||||
cmd.Flags().StringVarP(&options.CaCert, "ca", "", "", "additional root certificates used by the Ziti Edge Controller")
|
||||
cmd.Flags().BoolVar(&options.ReadOnly, "read-only", false, "marks this login as read-only. Note: this is not a guarantee that nothing can be changed on the server. Care should still be taken!")
|
||||
cmd.Flags().BoolVarP(&options.Yes, "yes", "y", false, "If set, responds to prompts with yes. This will result in untrusted certs being accepted or updated.")
|
||||
cmd.Flags().BoolVar(&options.IgnoreConfig, "ignore-config", false, "If set, does not use value from the config file for hostname or username. Values must be entered or will be prompted for.")
|
||||
cmd.Flags().StringVarP(&options.ClientCert, "client-cert", "c", "", "A certificate used to authenticate")
|
||||
cmd.Flags().StringVarP(&options.ClientKey, "client-key", "k", "", "The key to use with certificate authentication")
|
||||
cmd.Flags().StringVarP(&options.ExtJwt, "ext-jwt", "e", "", "A JWT from an external provider used to authenticate")
|
||||
|
||||
options.AddCommonFlags(cmd)
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Run implements this command
|
||||
func (o *loginOptions) Run() error {
|
||||
func (o *LoginOptions) Run() error {
|
||||
config, configFile, err := util.LoadRestClientConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -140,7 +150,8 @@ func (o *loginOptions) Run() error {
|
||||
o.Println("NOTE: When using --token the saved identity will be marked as read-only unless --read-only=false is provided")
|
||||
}
|
||||
|
||||
if o.Token == "" {
|
||||
body := "{}"
|
||||
if o.Token == "" && o.ClientCert == "" && o.ExtJwt == "" {
|
||||
for o.Username == "" {
|
||||
if defaultId := config.EdgeIdentities[id]; defaultId != nil && defaultId.Username != "" && !o.IgnoreConfig {
|
||||
o.Username = defaultId.Username
|
||||
@@ -160,28 +171,28 @@ func (o *loginOptions) Run() error {
|
||||
_, _ = container.SetP(o.Username, "username")
|
||||
_, _ = container.SetP(o.Password, "password")
|
||||
|
||||
body := container.String()
|
||||
body = container.String()
|
||||
}
|
||||
|
||||
jsonParsed, err := util.EdgeControllerLogin(host, o.CaCert, body, o.Out, o.OutputJSONResponse, o.Options.Timeout, o.Options.Verbose)
|
||||
jsonParsed, err := login(o, host, body)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !jsonParsed.ExistsP("data.token") {
|
||||
return fmt.Errorf("no session token returned from login request to %v. Received: %v", host, jsonParsed.String())
|
||||
}
|
||||
if !jsonParsed.ExistsP("data.token") {
|
||||
return fmt.Errorf("no session token returned from login request to %v. Received: %v", host, jsonParsed.String())
|
||||
}
|
||||
|
||||
var ok bool
|
||||
o.Token, ok = jsonParsed.Path("data.token").Data().(string)
|
||||
var ok bool
|
||||
o.Token, ok = jsonParsed.Path("data.token").Data().(string)
|
||||
|
||||
if !ok {
|
||||
return fmt.Errorf("session token returned from login request to %v is not in the expected format. Received: %v", host, jsonParsed.String())
|
||||
}
|
||||
if !ok {
|
||||
return fmt.Errorf("session token returned from login request to %v is not in the expected format. Received: %v", host, jsonParsed.String())
|
||||
}
|
||||
|
||||
if !o.OutputJSONResponse {
|
||||
o.Printf("Token: %v\n", o.Token)
|
||||
}
|
||||
if !o.OutputJSONResponse {
|
||||
o.Printf("Token: %v\n", o.Token)
|
||||
}
|
||||
|
||||
loginIdentity := &util.RestClientEdgeIdentity{
|
||||
@@ -201,7 +212,7 @@ func (o *loginOptions) Run() error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (o *loginOptions) ConfigureCerts(host string, ctrlUrl *url.URL) error {
|
||||
func (o *LoginOptions) ConfigureCerts(host string, ctrlUrl *url.URL) error {
|
||||
isServerTrusted, err := util.IsServerTrusted(host)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -275,7 +286,7 @@ func (o *loginOptions) ConfigureCerts(host string, ctrlUrl *url.URL) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (o *loginOptions) askYesNo(prompt string) (bool, error) {
|
||||
func (o *LoginOptions) askYesNo(prompt string) (bool, error) {
|
||||
filter := &yesNoFilter{}
|
||||
if _, err := o.ask(prompt, filter.Accept); err != nil {
|
||||
return false, err
|
||||
@@ -283,7 +294,7 @@ func (o *loginOptions) askYesNo(prompt string) (bool, error) {
|
||||
return filter.result, nil
|
||||
}
|
||||
|
||||
func (o *loginOptions) ask(prompt string, f func(string) bool) (string, error) {
|
||||
func (o *LoginOptions) ask(prompt string, f func(string) bool) (string, error) {
|
||||
for {
|
||||
val, err := term.Prompt(prompt)
|
||||
if err != nil {
|
||||
@@ -314,3 +325,64 @@ func (self *yesNoFilter) Accept(s string) bool {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// EdgeControllerLogin will authenticate to the given Edge Controller
|
||||
func login(o *LoginOptions, url string, authentication string) (*gabs.Container, error) {
|
||||
client := util.NewClient()
|
||||
cert := o.CaCert
|
||||
out := o.Out
|
||||
logJSON := o.OutputJSONResponse
|
||||
timeout := o.Timeout
|
||||
verbose := o.Verbose
|
||||
method := "password"
|
||||
if cert != "" {
|
||||
client.SetRootCertificate(cert)
|
||||
}
|
||||
authHeader := ""
|
||||
if o.ExtJwt != "" {
|
||||
auth, err := os.ReadFile(o.ExtJwt)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("couldn't load jwt file at %s: %v", o.ExtJwt, err)
|
||||
}
|
||||
method = "ext-jwt"
|
||||
authHeader = "Bearer " + string(auth)
|
||||
client.SetHeader("Authorization", authHeader)
|
||||
} else {
|
||||
if o.ClientCert != "" {
|
||||
clientCert, err := tls.LoadX509KeyPair(o.ClientCert, o.ClientKey)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("can't load client certificate: %s with key %s: %v", o.ClientCert, o.ClientKey, err)
|
||||
}
|
||||
client.SetCertificates(clientCert)
|
||||
method = "cert"
|
||||
}
|
||||
}
|
||||
|
||||
resp, err := client.
|
||||
SetTimeout(time.Duration(time.Duration(timeout)*time.Second)).
|
||||
SetDebug(verbose).
|
||||
R().
|
||||
SetQueryParam("method", method).
|
||||
SetHeader("Content-Type", "application/json").
|
||||
SetBody(authentication).
|
||||
Post(url + "/authenticate")
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to authenticate to %v. Error: %v", url, err)
|
||||
}
|
||||
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, fmt.Errorf("unable to authenticate to %v. Status code: %v, Server returned: %v", url, resp.Status(), util.PrettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logJSON {
|
||||
util.OutputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
jsonParsed, err := gabs.ParseJSON(resp.Body())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to parse response from %v. Server returned: %v", url, resp.String())
|
||||
}
|
||||
|
||||
return jsonParsed, nil
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@ package edge
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/ziti/ziti/cmd/api"
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
"io"
|
||||
@@ -60,13 +60,16 @@ func newTraceRouteCmd(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
func (o *traceRouteOptions) Run() error {
|
||||
var ctx ziti.Context
|
||||
if o.configFile != "" {
|
||||
cfg, err := config.NewFromFile(o.configFile)
|
||||
cfg, err := ziti.NewConfigFromFile(o.configFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ctx, err = ziti.NewContext(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ctx = ziti.NewContextWithConfig(cfg)
|
||||
} else {
|
||||
ctx = ziti.NewContext()
|
||||
return errors.New("invalid configuration file")
|
||||
}
|
||||
|
||||
conn, err := ctx.Dial(o.Args[0])
|
||||
|
||||
@@ -68,7 +68,7 @@ func newUpdateConfigTypeCmd(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
|
||||
// runUpdateConfigType update a new config on the Ziti Edge Controller
|
||||
func (self *updateConfigTypeAction) run() error {
|
||||
id, err := mapNameToID("configs", self.Args[0], self.Options)
|
||||
id, err := mapNameToID("config-types", self.Args[0], self.Options)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -108,7 +108,7 @@ func (self *updateConfigTypeAction) run() error {
|
||||
fmt.Printf("Failing parsing JSON: %+v\n", err)
|
||||
return errors.Errorf("unable to parse data as json: %v", err)
|
||||
}
|
||||
api.SetJSONValue(entityData, dataMap, "data")
|
||||
api.SetJSONValue(entityData, dataMap, "schema")
|
||||
change = true
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ func (self *updateConfigTypeAction) run() error {
|
||||
return errors.New("no change specified. must specify at least one attribute to change")
|
||||
}
|
||||
|
||||
_, err = patchEntityOfType(fmt.Sprintf("configs/%v", id), entityData.String(), &self.Options)
|
||||
_, err = patchEntityOfType(fmt.Sprintf("config-types/%v", id), entityData.String(), &self.Options)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package install
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/blang/semver"
|
||||
"github.com/openziti/ziti/common/getziti"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/openziti/ziti/ziti/internal/log"
|
||||
"github.com/openziti/ziti/ziti/util"
|
||||
@@ -197,17 +198,13 @@ func (o *InstallOptions) getLatestTerraformProviderVersion(branch string, provid
|
||||
|
||||
func (o *InstallOptions) getLatestGitHubReleaseVersion(zitiApp string) (semver.Version, error) {
|
||||
var result semver.Version
|
||||
release, err := util.GetHighestVersionGitHubReleaseInfo(o.Verbose, zitiApp)
|
||||
release, err := getziti.GetHighestVersionGitHubReleaseInfo(zitiApp, o.Verbose)
|
||||
if release != nil {
|
||||
result = release.SemVer
|
||||
}
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (o *InstallOptions) getHighestVersionGitHubReleaseInfo(zitiApp string) (*util.GitHubReleasesData, error) {
|
||||
return util.GetHighestVersionGitHubReleaseInfo(o.Verbose, zitiApp)
|
||||
}
|
||||
|
||||
func (o *InstallOptions) getCurrentZitiSnapshotList() ([]string, error) {
|
||||
children, err := util.GetCurrentSnapshotListFromArtifactory(o.Verbose)
|
||||
|
||||
@@ -330,70 +327,15 @@ func (o *InstallOptions) installTerraformProvider(branch string, provider string
|
||||
return os.Chmod(fileToChmod, 0755)
|
||||
}
|
||||
|
||||
func (o *InstallOptions) findVersionAndInstallGitHubRelease(zitiApp string, zitiAppGitHub string, upgrade bool, version string) error {
|
||||
var latestVersion semver.Version
|
||||
var err error
|
||||
if version != "" {
|
||||
if strings.Contains(version, "*") {
|
||||
latestRelease, err := util.GetHighestVersionGitHubReleaseInfo(o.Verbose, zitiAppGitHub)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
latestVersion = latestRelease.SemVer
|
||||
version = latestVersion.String()
|
||||
} else {
|
||||
latestVersion, err = semver.Make(version)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
release, err := util.GetLatestGitHubReleaseAsset(o.Staging, zitiAppGitHub)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return o.installGitHubRelease(zitiApp, upgrade, release)
|
||||
}
|
||||
|
||||
func (o *InstallOptions) installGitHubRelease(zitiApp string, upgrade bool, release *util.GitHubReleasesData) error {
|
||||
func (o *InstallOptions) FindVersionAndInstallGitHubRelease(upgrade bool, zitiApp string, zitiAppGitHub string, version string) error {
|
||||
binDir, err := util.BinaryLocation()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
binary := zitiApp
|
||||
fileName := binary
|
||||
|
||||
if !upgrade {
|
||||
f, flag, err := o.shouldInstallBinary(binDir, binary)
|
||||
if err != nil || !flag {
|
||||
if _, download, err := o.shouldInstallBinary(binDir, zitiApp); err != nil || !download {
|
||||
return err
|
||||
}
|
||||
fileName = f
|
||||
}
|
||||
|
||||
fullPath := filepath.Join(binDir, fileName)
|
||||
ext := ".zip"
|
||||
zipFile := fullPath + ext
|
||||
|
||||
releaseUrl, err := release.GetDownloadUrl(zitiApp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = util.DownloadGitHubReleaseAsset(releaseUrl, zipFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = util.Unzip(zipFile, binDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = os.Remove(zipFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Infof("Successfully installed '%s' version '%s'\n", zitiApp, release.SemVer)
|
||||
return os.Chmod(fullPath, 0755)
|
||||
return getziti.FindVersionAndInstallGitHubRelease(zitiApp, zitiAppGitHub, runtime.GOOS, runtime.GOARCH, binDir, version, o.Verbose)
|
||||
}
|
||||
|
||||
@@ -17,15 +17,16 @@
|
||||
package install
|
||||
|
||||
import (
|
||||
"github.com/blang/semver"
|
||||
"github.com/openziti/ziti/common/getziti"
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/cmd/templates"
|
||||
"io"
|
||||
|
||||
"github.com/blang/semver"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/openziti/ziti/ziti/internal/log"
|
||||
"github.com/spf13/cobra"
|
||||
"io"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -77,19 +78,20 @@ func NewCmdInstallZitiEdgeTunnel(out io.Writer, errOut io.Writer) *cobra.Command
|
||||
|
||||
// Run implements the command
|
||||
func (o *InstallOptions) installZitiEdgeTunnel(targetVersion string) error {
|
||||
newVersion, err := o.getLatestGitHubReleaseVersion(c.ZITI_EDGE_TUNNEL_GITHUB)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var newVersion semver.Version
|
||||
|
||||
if targetVersion != "" {
|
||||
newVersion, err = semver.Make(targetVersion)
|
||||
newVersion = semver.MustParse(strings.TrimPrefix(targetVersion, "v"))
|
||||
} else {
|
||||
v, err := getziti.GetLatestGitHubReleaseVersion(c.ZITI_EDGE_TUNNEL_GITHUB, o.Verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newVersion = v
|
||||
}
|
||||
|
||||
log.Infoln("Attempting to install '" + c.ZITI_EDGE_TUNNEL + "' version: " + newVersion.String())
|
||||
|
||||
return o.findVersionAndInstallGitHubRelease(c.ZITI_EDGE_TUNNEL, c.ZITI_EDGE_TUNNEL_GITHUB, false, newVersion.String())
|
||||
|
||||
return o.FindVersionAndInstallGitHubRelease(false, c.ZITI_EDGE_TUNNEL, c.ZITI_EDGE_TUNNEL_GITHUB, newVersion.String())
|
||||
}
|
||||
|
||||
// Run implements the command
|
||||
|
||||
@@ -17,15 +17,16 @@
|
||||
package install
|
||||
|
||||
import (
|
||||
"github.com/blang/semver"
|
||||
"github.com/openziti/ziti/common/getziti"
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/cmd/templates"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/openziti/ziti/ziti/internal/log"
|
||||
"io"
|
||||
|
||||
"github.com/blang/semver"
|
||||
"github.com/spf13/cobra"
|
||||
"io"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -76,20 +77,20 @@ func NewCmdInstallZitiProxC(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
}
|
||||
|
||||
func (o *InstallOptions) installZitiProxC(targetVersion string) error {
|
||||
var newVersion semver.Version
|
||||
|
||||
if targetVersion != "" {
|
||||
version, err := semver.Make(targetVersion)
|
||||
newVersion = semver.MustParse(strings.TrimPrefix(targetVersion, "v"))
|
||||
} else {
|
||||
v, err := getziti.GetLatestGitHubReleaseVersion(c.ZITI_SDK_C_GITHUB, o.Verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return o.findVersionAndInstallGitHubRelease(c.ZITI_PROX_C, c.ZITI_SDK_C_GITHUB, false, version.String())
|
||||
newVersion = v
|
||||
}
|
||||
|
||||
release, err := o.getHighestVersionGitHubReleaseInfo(c.ZITI_SDK_C_GITHUB)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Infoln("Attempting to install '" + c.ZITI_PROX_C + "' version: " + release.SemVer.String())
|
||||
return o.installGitHubRelease(c.ZITI_PROX_C, false, release)
|
||||
log.Infoln("Attempting to install '" + c.ZITI_PROX_C + "' version: " + newVersion.String())
|
||||
return o.FindVersionAndInstallGitHubRelease(false, c.ZITI_PROX_C, c.ZITI_SDK_C_GITHUB, newVersion.String())
|
||||
}
|
||||
|
||||
// Run implements the command
|
||||
|
||||
@@ -17,25 +17,8 @@
|
||||
package install
|
||||
|
||||
import (
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"io"
|
||||
|
||||
"github.com/openziti/ziti/common/version"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/cmd/templates"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
upgradeZitiControllerLong = templates.LongDesc(`
|
||||
Upgrades the Ziti Controller app if there is a newer release
|
||||
`)
|
||||
|
||||
upgradeZitiControllerExample = templates.Examples(`
|
||||
# Upgrades the Ziti Controller app
|
||||
ziti upgrade ziti-controller
|
||||
`)
|
||||
)
|
||||
|
||||
// UpgradeZitiControllerOptions the options for the upgrade ziti-controller command
|
||||
@@ -45,35 +28,6 @@ type UpgradeZitiControllerOptions struct {
|
||||
Version string
|
||||
}
|
||||
|
||||
// NewCmdUpgradeZitiController defines the command
|
||||
func NewCmdUpgradeZitiController(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
options := &UpgradeZitiControllerOptions{
|
||||
InstallOptions: InstallOptions{
|
||||
CommonOptions: common.CommonOptions{
|
||||
Out: out,
|
||||
Err: errOut,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "ziti-controller",
|
||||
Short: "Upgrades the Ziti Controller app - if there is a new version available",
|
||||
Aliases: []string{"controller", "ctrl", "zc"},
|
||||
Long: upgradeZitiControllerLong,
|
||||
Example: upgradeZitiControllerExample,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
options.Cmd = cmd
|
||||
options.Args = args
|
||||
err := options.Run()
|
||||
cmdhelper.CheckErr(err)
|
||||
},
|
||||
}
|
||||
cmd.Flags().StringVarP(&options.Version, "version", "v", "", "The specific version to upgrade to")
|
||||
options.AddCommonFlags(cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Run implements the command
|
||||
func (o *UpgradeZitiControllerOptions) Run() error {
|
||||
newVersion, err := o.getLatestZitiAppVersion(version.GetBranch(), c.ZITI_CONTROLLER)
|
||||
|
||||
@@ -17,24 +17,7 @@
|
||||
package install
|
||||
|
||||
import (
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"io"
|
||||
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/cmd/templates"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
upgradeZitiEdgeTunnelLong = templates.LongDesc(`
|
||||
Upgrades the Ziti Edge Tunnel app if there is a newer release
|
||||
`)
|
||||
|
||||
upgradeZitiEdgeTunnelExample = templates.Examples(`
|
||||
# Upgrades the Ziti Edge Tunnel app
|
||||
ziti upgrade ziti-edge-tunnel
|
||||
`)
|
||||
)
|
||||
|
||||
// UpgradeZitiEdgeTunnelOptions the options for the upgrade ziti-edge-tunnel command
|
||||
@@ -44,35 +27,6 @@ type UpgradeZitiEdgeTunnelOptions struct {
|
||||
Version string
|
||||
}
|
||||
|
||||
// NewCmdUpgradeZitiEdgeTunnel defines the command
|
||||
func NewCmdUpgradeZitiEdgeTunnel(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
options := &UpgradeZitiEdgeTunnelOptions{
|
||||
InstallOptions: InstallOptions{
|
||||
CommonOptions: common.CommonOptions{
|
||||
Out: out,
|
||||
Err: errOut,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "ziti-edge-tunnel",
|
||||
Short: "Upgrades the Ziti Edge Tunnel app - if there is a new version available",
|
||||
Aliases: []string{"edge-tunnel", "et"},
|
||||
Long: upgradeZitiEdgeTunnelLong,
|
||||
Example: upgradeZitiEdgeTunnelExample,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
options.Cmd = cmd
|
||||
options.Args = args
|
||||
err := options.Run()
|
||||
cmdhelper.CheckErr(err)
|
||||
},
|
||||
}
|
||||
cmd.Flags().StringVarP(&options.Version, "version", "v", "", "The specific version to upgrade to")
|
||||
options.AddCommonFlags(cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Run implements the command
|
||||
func (o *UpgradeZitiEdgeTunnelOptions) Run() error {
|
||||
newVersion, err := o.getLatestGitHubReleaseVersion(c.ZITI_EDGE_TUNNEL_GITHUB)
|
||||
@@ -88,5 +42,5 @@ func (o *UpgradeZitiEdgeTunnelOptions) Run() error {
|
||||
|
||||
o.deleteInstalledBinary(c.ZITI_EDGE_TUNNEL)
|
||||
|
||||
return o.findVersionAndInstallGitHubRelease(c.ZITI_EDGE_TUNNEL, c.ZITI_EDGE_TUNNEL_GITHUB, true, newVersionStr)
|
||||
return o.FindVersionAndInstallGitHubRelease(true, c.ZITI_EDGE_TUNNEL, c.ZITI_EDGE_TUNNEL_GITHUB, newVersionStr)
|
||||
}
|
||||
|
||||
@@ -17,24 +17,7 @@
|
||||
package install
|
||||
|
||||
import (
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"io"
|
||||
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/cmd/templates"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
upgradeZitiProxCLong = templates.LongDesc(`
|
||||
Upgrades the Ziti ProxC app if there is a newer release
|
||||
`)
|
||||
|
||||
upgradeZitiProxCExample = templates.Examples(`
|
||||
# Upgrades the Ziti ProxC app
|
||||
ziti upgrade ziti-prox-c
|
||||
`)
|
||||
)
|
||||
|
||||
// UpgradeZitiProxCOptions the options for the upgrade ziti-prox-c command
|
||||
@@ -44,35 +27,6 @@ type UpgradeZitiProxCOptions struct {
|
||||
Version string
|
||||
}
|
||||
|
||||
// NewCmdUpgradeZitiProxC defines the command
|
||||
func NewCmdUpgradeZitiProxC(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
options := &UpgradeZitiProxCOptions{
|
||||
InstallOptions: InstallOptions{
|
||||
CommonOptions: common.CommonOptions{
|
||||
Out: out,
|
||||
Err: errOut,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "ziti-prox-c",
|
||||
Short: "Upgrades the Ziti ProxC app - if there is a new version available",
|
||||
Aliases: []string{"proxc"},
|
||||
Long: upgradeZitiProxCLong,
|
||||
Example: upgradeZitiProxCExample,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
options.Cmd = cmd
|
||||
options.Args = args
|
||||
err := options.Run()
|
||||
cmdhelper.CheckErr(err)
|
||||
},
|
||||
}
|
||||
cmd.Flags().StringVarP(&options.Version, "version", "v", "", "The specific version to upgrade to")
|
||||
options.AddCommonFlags(cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Run implements the command
|
||||
func (o *UpgradeZitiProxCOptions) Run() error {
|
||||
newVersion, err := o.getLatestGitHubReleaseVersion(c.ZITI_SDK_C_GITHUB)
|
||||
@@ -88,5 +42,5 @@ func (o *UpgradeZitiProxCOptions) Run() error {
|
||||
|
||||
o.deleteInstalledBinary(c.ZITI_PROX_C)
|
||||
|
||||
return o.findVersionAndInstallGitHubRelease(c.ZITI_PROX_C, c.ZITI_SDK_C_GITHUB, true, newVersionStr)
|
||||
return o.FindVersionAndInstallGitHubRelease(true, c.ZITI_PROX_C, c.ZITI_SDK_C_GITHUB, newVersionStr)
|
||||
}
|
||||
|
||||
@@ -17,25 +17,8 @@
|
||||
package install
|
||||
|
||||
import (
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"io"
|
||||
|
||||
"github.com/openziti/ziti/common/version"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/cmd/templates"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
upgradeZitiRouterLong = templates.LongDesc(`
|
||||
Upgrades the Ziti Router app if there is a newer release
|
||||
`)
|
||||
|
||||
upgradeZitiRouterExample = templates.Examples(`
|
||||
# Upgrades the Ziti Router app
|
||||
ziti upgrade ziti-router
|
||||
`)
|
||||
)
|
||||
|
||||
// UpgradeZitiRouterOptions the options for the upgrade ziti-router command
|
||||
@@ -45,35 +28,6 @@ type UpgradeZitiRouterOptions struct {
|
||||
Version string
|
||||
}
|
||||
|
||||
// NewCmdUpgradeZitiRouter defines the command
|
||||
func NewCmdUpgradeZitiRouter(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
options := &UpgradeZitiRouterOptions{
|
||||
InstallOptions: InstallOptions{
|
||||
CommonOptions: common.CommonOptions{
|
||||
Out: out,
|
||||
Err: errOut,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "ziti-router",
|
||||
Short: "Upgrades the Ziti Router app - if there is a new version available",
|
||||
Aliases: []string{"router", "rtr", "r"},
|
||||
Long: upgradeZitiRouterLong,
|
||||
Example: upgradeZitiRouterExample,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
options.Cmd = cmd
|
||||
options.Args = args
|
||||
err := options.Run()
|
||||
cmdhelper.CheckErr(err)
|
||||
},
|
||||
}
|
||||
cmd.Flags().StringVarP(&options.Version, "version", "v", "", "The specific version to upgrade to")
|
||||
options.AddCommonFlags(cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Run implements the command
|
||||
func (o *UpgradeZitiRouterOptions) Run() error {
|
||||
newVersion, err := o.getLatestZitiAppVersion(version.GetBranch(), c.ZITI_ROUTER)
|
||||
|
||||
@@ -17,25 +17,8 @@
|
||||
package install
|
||||
|
||||
import (
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"io"
|
||||
|
||||
"github.com/openziti/ziti/common/version"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/cmd/templates"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
upgradeZitiTunnelLong = templates.LongDesc(`
|
||||
Upgrades the Ziti Tunnel app if there is a newer release
|
||||
`)
|
||||
|
||||
upgradeZitiTunnelExample = templates.Examples(`
|
||||
# Upgrades the Ziti Tunnel app
|
||||
ziti upgrade ziti-tunnel
|
||||
`)
|
||||
)
|
||||
|
||||
// UpgradeZitiTunnelOptions the options for the upgrade ziti-tunnel command
|
||||
@@ -45,35 +28,6 @@ type UpgradeZitiTunnelOptions struct {
|
||||
Version string
|
||||
}
|
||||
|
||||
// NewCmdUpgradeZitiTunnel defines the command
|
||||
func NewCmdUpgradeZitiTunnel(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
options := &UpgradeZitiTunnelOptions{
|
||||
InstallOptions: InstallOptions{
|
||||
CommonOptions: common.CommonOptions{
|
||||
Out: out,
|
||||
Err: errOut,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "ziti-tunnel",
|
||||
Short: "Upgrades the Ziti Tunnel app - if there is a new version available",
|
||||
Aliases: []string{"tunnel", "rtr", "r"},
|
||||
Long: upgradeZitiTunnelLong,
|
||||
Example: upgradeZitiTunnelExample,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
options.Cmd = cmd
|
||||
options.Args = args
|
||||
err := options.Run()
|
||||
cmdhelper.CheckErr(err)
|
||||
},
|
||||
}
|
||||
cmd.Flags().StringVarP(&options.Version, "version", "v", "", "The specific version to upgrade to")
|
||||
options.AddCommonFlags(cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Run implements the command
|
||||
func (o *UpgradeZitiTunnelOptions) Run() error {
|
||||
newVersion, err := o.getLatestZitiAppVersion(version.GetBranch(), c.ZITI_TUNNEL)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/openziti/fabric/controller/idgen"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/internal/log"
|
||||
"github.com/openziti/ziti/ziti/pki/certificate"
|
||||
@@ -62,10 +63,12 @@ func NewCmdPKICreateCA(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
return cmd
|
||||
}
|
||||
|
||||
const FlagCaName = "ca-name"
|
||||
|
||||
func (o *PKICreateCAOptions) addPKICreateCAFlags(cmd *cobra.Command) {
|
||||
cmd.Flags().StringVarP(&o.Flags.PKIRoot, "pki-root", "", "", "Directory in which PKI resides")
|
||||
cmd.Flags().StringVarP(&o.Flags.CAFile, "ca-file", "", "", "Dir/File name (within PKI_ROOT) in which to store new CA")
|
||||
cmd.Flags().StringVarP(&o.Flags.CAName, "ca-name", "", "NetFoundry Inc. Certificate Authority", "Name of CA")
|
||||
cmd.Flags().StringVarP(&o.Flags.CAName, FlagCaName, "", "NetFoundry Inc. Certificate Authority", "Name of CA")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAExpire, "expire-limit", "", 3650, "Expiration limit in days")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAMaxpath, "max-path-len", "", -1, "Intermediate maximum path length")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAPrivateKeySize, "private-key-size", "", 4096, "Size of the private key")
|
||||
@@ -88,6 +91,11 @@ func (o *PKICreateCAOptions) Run() error {
|
||||
return err
|
||||
}
|
||||
|
||||
if !o.Cmd.Flags().Changed(FlagCaName) {
|
||||
//default name, ensure uniqueness by adding a random id
|
||||
o.Flags.CAName = o.Flags.CAName + " " + idgen.New()
|
||||
}
|
||||
|
||||
commonName := o.Flags.CAName
|
||||
|
||||
filename := o.ObtainFileName(cafile, commonName)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/openziti/fabric/controller/idgen"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/internal/log"
|
||||
"github.com/openziti/ziti/ziti/pki/certificate"
|
||||
@@ -62,12 +63,14 @@ func NewCmdPKICreateClient(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
return cmd
|
||||
}
|
||||
|
||||
const FlagCaClientName = "client-name"
|
||||
|
||||
func (o *PKICreateClientOptions) addPKICreateClientFlags(cmd *cobra.Command) {
|
||||
cmd.Flags().StringVarP(&o.Flags.PKIRoot, "pki-root", "", "", "Directory in which PKI resides")
|
||||
cmd.Flags().StringVarP(&o.Flags.CAName, "ca-name", "", "intermediate", "Name of Intermediate CA (within PKI_ROOT) to use to sign the new Client certificate")
|
||||
cmd.Flags().StringVarP(&o.Flags.ClientFile, "client-file", "", "client", "Name of file (under chosen CA) in which to store new Client certificate and private key")
|
||||
cmd.Flags().StringVarP(&o.Flags.KeyFile, "key-file", "", "", "Name of file (under chosen CA) containing private key to use when generating Client certificate")
|
||||
cmd.Flags().StringVarP(&o.Flags.ClientName, "client-name", "", "NetFoundry Inc. Client", "Common Name (CN) to use for new Client certificate")
|
||||
cmd.Flags().StringVarP(&o.Flags.ClientName, FlagCaClientName, "", "NetFoundry Inc. Client", "Common Name (CN) to use for new Client certificate")
|
||||
cmd.Flags().StringSliceVar(&o.Flags.Email, "email", []string{}, "Email addr(s) to add to Subject Alternate Name (SAN) for new Client certificate")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAExpire, "expire-limit", "", 365, "Expiration limit in days")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAMaxpath, "max-path-len", "", -1, "Intermediate maximum path length")
|
||||
@@ -86,6 +89,10 @@ func (o *PKICreateClientOptions) Run() error {
|
||||
local := o.Flags.PKI.Store.(*store.Local)
|
||||
local.Root = pkiroot
|
||||
|
||||
if !o.Cmd.Flags().Changed(FlagCaClientName) {
|
||||
o.Flags.ClientName = o.Flags.ClientName + " " + idgen.New()
|
||||
}
|
||||
|
||||
commonName := o.Flags.ClientName
|
||||
|
||||
clientCertFile, err := o.ObtainClientCertFile()
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/openziti/fabric/controller/idgen"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/internal/log"
|
||||
"github.com/openziti/ziti/ziti/pki/certificate"
|
||||
@@ -61,11 +62,13 @@ func NewCmdPKICreateIntermediate(out io.Writer, errOut io.Writer) *cobra.Command
|
||||
return cmd
|
||||
}
|
||||
|
||||
const FlagCaIntermediateName = "intermediate-name"
|
||||
|
||||
func (o *PKICreateIntermediateOptions) addPKICreateIntermediateFlags(cmd *cobra.Command) {
|
||||
cmd.Flags().StringVarP(&o.Flags.PKIRoot, "pki-root", "", "", "Directory in which PKI resides")
|
||||
cmd.Flags().StringVarP(&o.Flags.CAName, "ca-name", "", "ca", "Name of CA (within PKI_ROOT) to use to sign the new Intermediate CA")
|
||||
cmd.Flags().StringVarP(&o.Flags.IntermediateFile, "intermediate-file", "", "intermediate", "Dir/File name (within PKI_ROOT) in which to store new Intermediate CA")
|
||||
cmd.Flags().StringVarP(&o.Flags.IntermediateName, "intermediate-name", "", "NetFoundry Inc. Intermediate CA", "Common Name (CN) to use for new Intermediate CA")
|
||||
cmd.Flags().StringVarP(&o.Flags.IntermediateName, FlagCaIntermediateName, "", "NetFoundry Inc. Intermediate CA", "Common Name (CN) to use for new Intermediate CA")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAExpire, "expire-limit", "", 3650, "Expiration limit in days")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAMaxpath, "max-path-len", "", 0, "Intermediate maximum path length")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAPrivateKeySize, "private-key-size", "", 4096, "Size of the private key")
|
||||
@@ -87,6 +90,10 @@ func (o *PKICreateIntermediateOptions) Run() error {
|
||||
return err
|
||||
}
|
||||
|
||||
if !o.Cmd.Flags().Changed(FlagCaIntermediateName) {
|
||||
o.Flags.IntermediateName = o.Flags.IntermediateName + " " + idgen.New()
|
||||
}
|
||||
|
||||
commonName := o.Flags.IntermediateName
|
||||
|
||||
filename := o.ObtainFileName(intermediatefile, commonName)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/openziti/fabric/controller/idgen"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
"github.com/openziti/ziti/ziti/internal/log"
|
||||
"github.com/openziti/ziti/ziti/pki/certificate"
|
||||
@@ -62,12 +63,14 @@ func NewCmdPKICreateServer(out io.Writer, errOut io.Writer) *cobra.Command {
|
||||
return cmd
|
||||
}
|
||||
|
||||
const FlagCaServerName = "server-name"
|
||||
|
||||
func (o *PKICreateServerOptions) addPKICreateServerFlags(cmd *cobra.Command) {
|
||||
cmd.Flags().StringVarP(&o.Flags.PKIRoot, "pki-root", "", "", "Directory in which PKI resides")
|
||||
cmd.Flags().StringVarP(&o.Flags.CAName, "ca-name", "", "intermediate", "Name of Intermediate CA (within PKI_ROOT) to use to sign the new Server certificate")
|
||||
cmd.Flags().StringVarP(&o.Flags.ServerFile, "server-file", "", "server", "Name of file (under chosen CA) in which to store new Server certificate and private key")
|
||||
cmd.Flags().StringVarP(&o.Flags.KeyFile, "key-file", "", "", "Name of file (under chosen CA) containing private key to use when generating Server certificate")
|
||||
cmd.Flags().StringVarP(&o.Flags.ServerName, "server-name", "", "NetFoundry Inc. Server", "Common Name (CN) to use for new Server certificate")
|
||||
cmd.Flags().StringVarP(&o.Flags.ServerName, FlagCaServerName, "", "NetFoundry Inc. Server", "Common Name (CN) to use for new Server certificate")
|
||||
cmd.Flags().StringSliceVar(&o.Flags.DNSName, "dns", []string{}, "DNS name(s) to add to Subject Alternate Name (SAN) for new Server certificate")
|
||||
cmd.Flags().StringSliceVar(&o.Flags.IP, "ip", []string{}, "IP addr(s) to add to Subject Alternate Name (SAN) for new Server certificate")
|
||||
cmd.Flags().IntVarP(&o.Flags.CAExpire, "expire-limit", "", 365, "Expiration limit in days")
|
||||
@@ -92,6 +95,10 @@ func (o *PKICreateServerOptions) Run() error {
|
||||
local := o.Flags.PKI.Store.(*store.Local)
|
||||
local.Root = pkiroot
|
||||
|
||||
if !o.Cmd.Flags().Changed(FlagCaServerName) {
|
||||
o.Flags.ServerName = o.Flags.ServerName + " " + idgen.New()
|
||||
}
|
||||
|
||||
commonName := o.Flags.ServerName
|
||||
|
||||
serverCertFile, err := o.ObtainServerCertFile()
|
||||
|
||||
@@ -21,7 +21,6 @@ import (
|
||||
"fmt"
|
||||
"github.com/fatih/color"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
@@ -31,12 +30,16 @@ import (
|
||||
)
|
||||
|
||||
func NewZitiEchoClient(identityJson string) (*zitiEchoClient, error) {
|
||||
config, err := config.NewFromFile(identityJson)
|
||||
config, err := ziti.NewConfigFromFile(identityJson)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
zitiContext := ziti.NewContextWithConfig(config)
|
||||
zitiContext, err := ziti.NewContext(config)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dial := func(_ context.Context, _ string, addr string) (net.Conn, error) {
|
||||
service := strings.Split(addr, ":")[0] // assume host is service
|
||||
|
||||
@@ -23,7 +23,6 @@ import (
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
)
|
||||
|
||||
type zitiEchoServer struct {
|
||||
@@ -43,12 +42,17 @@ func (s *zitiEchoServer) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (s *zitiEchoServer) run() (err error) {
|
||||
config, err := config.NewFromFile(s.identityJson)
|
||||
config, err := ziti.NewConfigFromFile(s.identityJson)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
zitiContext := ziti.NewContextWithConfig(config)
|
||||
zitiContext, err := ziti.NewContext(config)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if s.listener, err = zitiContext.Listen("echo"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -181,10 +181,8 @@ func deleteSessions(db boltz.Db) {
|
||||
pfxlog.Logger().Errorf("could not read databse stats: %v", err)
|
||||
}
|
||||
|
||||
err = db.Update(func(tx *bbolt.Tx) error {
|
||||
|
||||
root := tx.Bucket([]byte("ziti"))
|
||||
|
||||
err = db.Update(nil, func(ctx boltz.MutateContext) error {
|
||||
root := ctx.Tx().Bucket([]byte("ziti"))
|
||||
if root == nil {
|
||||
return errors.New("root 'ziti' bucket not found")
|
||||
}
|
||||
|
||||
@@ -20,14 +20,14 @@ import (
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
"github.com/openziti/edge/router/enroll"
|
||||
"github.com/openziti/fabric/router"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/spf13/cobra"
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
var jwtPath *string
|
||||
var engine *string
|
||||
var keyAlg config.KeyAlgVar
|
||||
var keyAlg ziti.KeyAlgVar
|
||||
|
||||
func NewEnrollGwCmd() *cobra.Command {
|
||||
var enrollEdgeRouterCmd = &cobra.Command{
|
||||
|
||||
+12
-4
@@ -17,11 +17,13 @@
|
||||
package tunnel
|
||||
|
||||
import (
|
||||
"github.com/openziti/sdk-golang/ziti/sdkinfo"
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/openziti/ziti/ziti/util"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/michaelquigley/pfxlog"
|
||||
@@ -31,7 +33,6 @@ import (
|
||||
"github.com/openziti/edge/tunnel/entities"
|
||||
"github.com/openziti/edge/tunnel/intercept"
|
||||
"github.com/openziti/sdk-golang/ziti"
|
||||
"github.com/openziti/sdk-golang/ziti/config"
|
||||
"github.com/openziti/ziti/common/enrollment"
|
||||
"github.com/openziti/ziti/common/version"
|
||||
"github.com/sirupsen/logrus"
|
||||
@@ -124,7 +125,7 @@ func rootPostRun(cmd *cobra.Command, _ []string) {
|
||||
}
|
||||
}
|
||||
|
||||
ziti.SetApplication("ziti-tunnel", version.GetVersion())
|
||||
sdkinfo.SetApplication("ziti-tunnel", version.GetVersion())
|
||||
|
||||
resolverConfig := cmd.Flag(resolverCfgFlag).Value.String()
|
||||
resolver := dns.NewResolver(resolverConfig)
|
||||
@@ -167,7 +168,7 @@ func startIdentity(cmd *cobra.Command, serviceListenerGroup *intercept.ServiceLi
|
||||
log := pfxlog.Logger()
|
||||
|
||||
log.Infof("loading identity: %v", identityJson)
|
||||
zitiCfg, err := config.NewFromFile(identityJson)
|
||||
zitiCfg, err := ziti.NewConfigFromFile(identityJson)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load ziti configuration from %s: %v", identityJson, err)
|
||||
}
|
||||
@@ -188,9 +189,16 @@ func startIdentity(cmd *cobra.Command, serviceListenerGroup *intercept.ServiceLi
|
||||
serviceListener.HandleProviderReady(tunnel.NewContextProvider(ctx))
|
||||
},
|
||||
OnServiceUpdate: serviceListener.HandleServicesChange,
|
||||
EdgeRouterUrlFilter: func(url string) bool {
|
||||
return strings.HasPrefix(url, "tls:")
|
||||
},
|
||||
}
|
||||
|
||||
rootPrivateContext := ziti.NewContextWithOpts(zitiCfg, options)
|
||||
rootPrivateContext, err := ziti.NewContextWithOpts(zitiCfg, options)
|
||||
|
||||
if err != nil {
|
||||
pfxlog.Logger().WithError(err).Fatal("could not create ziti sdk context")
|
||||
}
|
||||
|
||||
for {
|
||||
if err = rootPrivateContext.Authenticate(); err != nil {
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ func run(cmd *cobra.Command, args []string) {
|
||||
_ = cmd.Flag("identity").Value.Set(args[0])
|
||||
}
|
||||
|
||||
tProxyInterceptor, err = tproxy.New("")
|
||||
tProxyInterceptor, err = tproxy.New(tproxy.Config{})
|
||||
if err != nil {
|
||||
log.Infof("tproxy initialization failed: %v", err)
|
||||
} else {
|
||||
|
||||
@@ -48,7 +48,7 @@ func runTProxy(cmd *cobra.Command, _ []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
interceptor, err = tproxy.New(lanIf)
|
||||
interceptor, err = tproxy.New(tproxy.Config{LanIf: lanIf})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to initialize tproxy interceptor: %v", err)
|
||||
}
|
||||
|
||||
@@ -7,9 +7,9 @@ import (
|
||||
"fmt"
|
||||
httptransport "github.com/go-openapi/runtime/client"
|
||||
"github.com/openziti/edge-api/rest_management_api_client"
|
||||
"github.com/openziti/edge/controller/env"
|
||||
fabric_rest_client "github.com/openziti/fabric/rest_client"
|
||||
"github.com/openziti/identity"
|
||||
"github.com/openziti/sdk-golang/ziti/constants"
|
||||
"github.com/openziti/ziti/ziti/cmd/common"
|
||||
"github.com/pkg/errors"
|
||||
"gopkg.in/resty.v1"
|
||||
@@ -102,7 +102,7 @@ func (self *RestClientEdgeIdentity) NewTlsClientConfig() (*tls.Config, error) {
|
||||
}
|
||||
|
||||
func (self *RestClientEdgeIdentity) NewClient(timeout time.Duration, verbose bool) (*resty.Client, error) {
|
||||
client := newClient()
|
||||
client := NewClient()
|
||||
if self.CaCert != "" {
|
||||
client.SetRootCertificate(self.CaCert)
|
||||
}
|
||||
@@ -113,7 +113,7 @@ func (self *RestClientEdgeIdentity) NewClient(timeout time.Duration, verbose boo
|
||||
|
||||
func (self *RestClientEdgeIdentity) NewRequest(client *resty.Client) *resty.Request {
|
||||
r := client.R()
|
||||
r.SetHeader(constants.ZitiSession, self.Token)
|
||||
r.SetHeader(env.ZitiSession, self.Token)
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -173,7 +173,7 @@ func (self *RestClientEdgeIdentity) NewFabricManagementClient(clientOpts ClientO
|
||||
|
||||
func (self *RestClientEdgeIdentity) NewWsHeader() http.Header {
|
||||
result := http.Header{}
|
||||
result.Set(constants.ZitiSession, self.Token)
|
||||
result.Set(env.ZitiSession, self.Token)
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ func (self *RestClientFabricIdentity) NewClient(timeout time.Duration, verbose b
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "unable to load identity")
|
||||
}
|
||||
client := newClient()
|
||||
client := NewClient()
|
||||
client.SetTLSClientConfig(id.ClientTLSConfig())
|
||||
client.SetTimeout(timeout)
|
||||
client.SetDebug(verbose)
|
||||
|
||||
+22
-236
@@ -18,7 +18,6 @@ package util
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"encoding/json"
|
||||
@@ -33,7 +32,6 @@ import (
|
||||
"github.com/openziti/ziti/common/version"
|
||||
cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"
|
||||
c "github.com/openziti/ziti/ziti/constants"
|
||||
"github.com/pkg/errors"
|
||||
"gopkg.in/resty.v1"
|
||||
"io"
|
||||
"net/http"
|
||||
@@ -42,7 +40,6 @@ import (
|
||||
"path"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"text/template"
|
||||
@@ -81,7 +78,7 @@ func DownloadFile(filepath string, url string) (err error) {
|
||||
}
|
||||
|
||||
// Use a 2-second timeout with a retry count of 5
|
||||
func newClient() *resty.Client {
|
||||
func NewClient() *resty.Client {
|
||||
return resty.
|
||||
New().
|
||||
SetTimeout(2 * time.Second).
|
||||
@@ -90,7 +87,7 @@ func newClient() *resty.Client {
|
||||
}
|
||||
|
||||
func getRequest(verbose bool) *resty.Request {
|
||||
return newClient().
|
||||
return NewClient().
|
||||
SetDebug(verbose).
|
||||
R()
|
||||
}
|
||||
@@ -154,116 +151,6 @@ func GetLatestVersionFromArtifactory(verbose bool, staging bool, branch string,
|
||||
return semver.Make(strings.TrimPrefix(result.Version, "v"))
|
||||
}
|
||||
|
||||
// Used to parse the '/releases/latest' response from GitHub
|
||||
type GitHubReleasesData struct {
|
||||
Version string `json:"tag_name"`
|
||||
SemVer semver.Version
|
||||
Assets []struct {
|
||||
BrowserDownloadURL string `json:"browser_download_url"`
|
||||
}
|
||||
}
|
||||
|
||||
func (self *GitHubReleasesData) GetDownloadUrl(appName string) (string, error) {
|
||||
arches := []string{runtime.GOARCH}
|
||||
if strings.ToLower(runtime.GOARCH) == "amd64" {
|
||||
arches = append(arches, "x86_64")
|
||||
}
|
||||
|
||||
for _, asset := range self.Assets {
|
||||
ok := false
|
||||
for _, arch := range arches {
|
||||
if strings.Contains(strings.ToLower(asset.BrowserDownloadURL), arch) {
|
||||
ok = true
|
||||
}
|
||||
}
|
||||
|
||||
ok = ok && strings.Contains(strings.ToLower(asset.BrowserDownloadURL), runtime.GOOS)
|
||||
if ok {
|
||||
return asset.BrowserDownloadURL, nil
|
||||
}
|
||||
}
|
||||
|
||||
return "", errors.Errorf("no download URL found for os/arch %v/%v for '%v'", runtime.GOOS, runtime.GOARCH, appName)
|
||||
}
|
||||
|
||||
func GetHighestVersionGitHubReleaseInfo(verbose bool, appName string) (*GitHubReleasesData, error) {
|
||||
resp, err := getRequest(verbose).
|
||||
SetQueryParams(map[string]string{}).
|
||||
SetHeader("Accept", "application/vnd.github.v3+json").
|
||||
SetResult([]*GitHubReleasesData{}).
|
||||
Get("https://api.github.com/repos/openziti/" + appName + "/releases")
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to get latest version for '%s'", appName)
|
||||
}
|
||||
|
||||
if resp.StatusCode() == http.StatusNotFound {
|
||||
return nil, errors.Errorf("unable to get latest version for '%s'; Not Found (invalid URL)", appName)
|
||||
}
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, errors.Errorf("unable to get latest version for '%s'; return status=%s", appName, resp.Status())
|
||||
}
|
||||
|
||||
result := *resp.Result().(*[]*GitHubReleasesData)
|
||||
return getHighestVersionRelease(appName, result)
|
||||
}
|
||||
|
||||
func getHighestVersionRelease(appName string, releases []*GitHubReleasesData) (*GitHubReleasesData, error) {
|
||||
for _, release := range releases {
|
||||
v, err := semver.ParseTolerant(release.Version)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to parse version %v for '%v'", release.Version, appName)
|
||||
}
|
||||
release.SemVer = v
|
||||
}
|
||||
sort.Slice(releases, func(i, j int) bool {
|
||||
return releases[i].SemVer.GT(releases[j].SemVer) // sort in reverse order
|
||||
})
|
||||
if len(releases) == 0 {
|
||||
return nil, errors.Errorf("no releases found for '%v'", appName)
|
||||
}
|
||||
return releases[0], nil
|
||||
}
|
||||
|
||||
func GetLatestGitHubReleaseAsset(verbose bool, appName string) (*GitHubReleasesData, error) {
|
||||
resp, err := getRequest(verbose).
|
||||
SetQueryParams(map[string]string{}).
|
||||
SetHeader("Accept", "application/vnd.github.v3+json").
|
||||
SetResult(&GitHubReleasesData{}).
|
||||
Get("https://api.github.com/repos/openziti/" + appName + "/releases/latest")
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get latest version for '%s'; %s", appName, err)
|
||||
}
|
||||
|
||||
if resp.StatusCode() == http.StatusNotFound {
|
||||
return nil, fmt.Errorf("unable to get latest version for '%s'; Not Found", appName)
|
||||
}
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, fmt.Errorf("unable to get latest version for '%s'; %s", appName, resp.Status())
|
||||
}
|
||||
|
||||
result := resp.Result().(*GitHubReleasesData)
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// DownloadGitHubReleaseAsset will download a file from the given GitHUb release area
|
||||
func DownloadGitHubReleaseAsset(fullUrl string, filepath string) (err error) {
|
||||
resp, err := getRequest(false).
|
||||
SetOutput(filepath).
|
||||
Get(fullUrl)
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to download '%s', %s", fullUrl, err)
|
||||
}
|
||||
|
||||
if resp.IsError() {
|
||||
return fmt.Errorf("unable to download file, error HTTP status code [%d] returned for url [%s]", resp.StatusCode(), fullUrl)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Used to parse the '/api/search/aql' response from Artifactory
|
||||
type AQLResult struct {
|
||||
Repo string
|
||||
@@ -505,108 +392,7 @@ func UnTargz(tarball, target string, onlyFiles []string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func Unzip(src, dest string) error {
|
||||
r, err := zip.OpenReader(src)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := r.Close(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
os.MkdirAll(dest, 0755)
|
||||
|
||||
// Closure to address file descriptors issue with all the deferred .Close() methods
|
||||
extractAndWriteFile := func(f *zip.File) error {
|
||||
rc, err := f.Open()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := rc.Close(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
path := filepath.Join(dest, f.Name)
|
||||
|
||||
// Check for ZipSlip (Directory traversal)
|
||||
if !strings.HasPrefix(path, filepath.Clean(dest)+string(os.PathSeparator)) {
|
||||
return fmt.Errorf("illegal file path: %s", path)
|
||||
}
|
||||
|
||||
if f.FileInfo().IsDir() {
|
||||
os.MkdirAll(path, f.Mode())
|
||||
} else {
|
||||
os.MkdirAll(filepath.Dir(path), f.Mode())
|
||||
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := f.Close(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
_, err = io.Copy(f, rc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, f := range r.File {
|
||||
err := extractAndWriteFile(f)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// EdgeControllerLogin will authenticate to the given Edge Controller
|
||||
func EdgeControllerLogin(url string, cert string, authentication string, out io.Writer, logJSON bool, timeout int, verbose bool) (*gabs.Container, error) {
|
||||
client := newClient()
|
||||
|
||||
if cert != "" {
|
||||
client.SetRootCertificate(cert)
|
||||
}
|
||||
|
||||
resp, err := client.
|
||||
SetTimeout(time.Duration(time.Duration(timeout)*time.Second)).
|
||||
SetDebug(verbose).
|
||||
R().
|
||||
SetQueryParam("method", "password").
|
||||
SetHeader("Content-Type", "application/json").
|
||||
SetBody(authentication).
|
||||
Post(url + "/authenticate")
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to authenticate to %v. Error: %v", url, err)
|
||||
}
|
||||
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, fmt.Errorf("unable to authenticate to %v. Status code: %v, Server returned: %v", url, resp.Status(), prettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logJSON {
|
||||
outputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
jsonParsed, err := gabs.ParseJSON(resp.Body())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to parse response from %v. Server returned: %v", url, resp.String())
|
||||
}
|
||||
|
||||
return jsonParsed, nil
|
||||
}
|
||||
|
||||
func prettyPrintResponse(resp *resty.Response) string {
|
||||
func PrettyPrintResponse(resp *resty.Response) string {
|
||||
out := resp.String()
|
||||
var prettyJSON bytes.Buffer
|
||||
if err := json.Indent(&prettyJSON, []byte(out), "", " "); err == nil {
|
||||
@@ -615,7 +401,7 @@ func prettyPrintResponse(resp *resty.Response) string {
|
||||
return out
|
||||
}
|
||||
|
||||
func outputJson(out io.Writer, data []byte) {
|
||||
func OutputJson(out io.Writer, data []byte) {
|
||||
var prettyJSON bytes.Buffer
|
||||
if err := json.Indent(&prettyJSON, data, "", " "); err == nil {
|
||||
if _, err := fmt.Fprint(out, prettyJSON.String()); err != nil {
|
||||
@@ -654,11 +440,11 @@ func ControllerDetailEntity(api API, entityType, entityId string, logJSON bool,
|
||||
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, fmt.Errorf("error listing %v in Ziti Edge Controller. Status code: %v, Server returned: %v",
|
||||
queryUrl, resp.Status(), prettyPrintResponse(resp))
|
||||
queryUrl, resp.Status(), PrettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logJSON {
|
||||
outputJson(out, resp.Body())
|
||||
OutputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
jsonParsed, err := gabs.ParseJSON(resp.Body())
|
||||
@@ -715,11 +501,11 @@ func ControllerList(api API, path string, params url.Values, logJSON bool, out i
|
||||
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, fmt.Errorf("error listing %v in Ziti Edge Controller. Status code: %v, Server returned: %v",
|
||||
queryUrl, resp.Status(), prettyPrintResponse(resp))
|
||||
queryUrl, resp.Status(), PrettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logJSON {
|
||||
outputJson(out, resp.Body())
|
||||
OutputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
jsonParsed, err := gabs.ParseJSON(resp.Body())
|
||||
@@ -850,7 +636,7 @@ func ControllerCreate(api API, entityType string, body string, out io.Writer, lo
|
||||
url := baseUrl + "/" + entityType
|
||||
if logRequestJson {
|
||||
fmt.Printf("%v to %v\n", "POST", url)
|
||||
outputJson(out, []byte(body))
|
||||
OutputJson(out, []byte(body))
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
@@ -862,11 +648,11 @@ func ControllerCreate(api API, entityType string, body string, out io.Writer, lo
|
||||
|
||||
if resp.StatusCode() != http.StatusCreated {
|
||||
return nil, fmt.Errorf("error creating %v instance in Ziti Edge Controller at %v. Status code: %v, Server returned: %v",
|
||||
entityType, baseUrl, resp.Status(), prettyPrintResponse(resp))
|
||||
entityType, baseUrl, resp.Status(), PrettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logResponseJson {
|
||||
outputJson(out, resp.Body())
|
||||
OutputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
jsonParsed, err := gabs.ParseJSON(resp.Body())
|
||||
@@ -900,7 +686,7 @@ func ControllerDelete(api API, entityType string, id string, body string, out io
|
||||
|
||||
if logRequestJson {
|
||||
fmt.Printf("%v to %v\n", "POST", fullUrl)
|
||||
outputJson(out, []byte(body))
|
||||
OutputJson(out, []byte(body))
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
@@ -916,11 +702,11 @@ func ControllerDelete(api API, entityType string, id string, body string, out io
|
||||
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return fmt.Errorf("error deleting %v instance in Ziti Edge Controller at %v. Status code: %v, Server returned: %v",
|
||||
entityPath, baseUrl, resp.Status(), prettyPrintResponse(resp))
|
||||
entityPath, baseUrl, resp.Status(), PrettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logResponseJson {
|
||||
outputJson(out, resp.Body())
|
||||
OutputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -947,7 +733,7 @@ func ControllerUpdate(api API, entityType string, body string, out io.Writer, me
|
||||
|
||||
if logRequestJson {
|
||||
fmt.Printf("%v to %v\n", method, url)
|
||||
outputJson(out, []byte(body))
|
||||
OutputJson(out, []byte(body))
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
@@ -959,11 +745,11 @@ func ControllerUpdate(api API, entityType string, body string, out io.Writer, me
|
||||
|
||||
if resp.StatusCode() != http.StatusOK && resp.StatusCode() != http.StatusAccepted {
|
||||
return nil, fmt.Errorf("error updating %v instance in Ziti Edge Controller at %v. Status code: %v, Server returned: %v",
|
||||
entityType, baseUrl, resp.Status(), prettyPrintResponse(resp))
|
||||
entityType, baseUrl, resp.Status(), PrettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logResponseJSON {
|
||||
outputJson(out, resp.Body())
|
||||
OutputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
if len(resp.Body()) == 0 {
|
||||
@@ -1009,11 +795,11 @@ func EdgeControllerVerify(entityType, id, body string, out io.Writer, logJSON bo
|
||||
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return fmt.Errorf("error verifying %v instance (%v) in Ziti Edge Controller at %v. Status code: %v, Server returned: %v",
|
||||
entityType, id, baseUrl, resp.Status(), prettyPrintResponse(resp))
|
||||
entityType, id, baseUrl, resp.Status(), PrettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logJSON {
|
||||
outputJson(out, resp.Body())
|
||||
OutputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -1043,11 +829,11 @@ func EdgeControllerRequest(entityType string, out io.Writer, logJSON bool, timeo
|
||||
|
||||
if resp.StatusCode() != http.StatusOK {
|
||||
return nil, fmt.Errorf("error performing request [%s] %v instance in Ziti Edge Controller at %v. Status code: %v, Server returned: %v",
|
||||
request.Method, entityType, baseUrl, resp.Status(), prettyPrintResponse(resp))
|
||||
request.Method, entityType, baseUrl, resp.Status(), PrettyPrintResponse(resp))
|
||||
}
|
||||
|
||||
if logJSON {
|
||||
outputJson(out, resp.Body())
|
||||
OutputJson(out, resp.Body())
|
||||
}
|
||||
|
||||
if resp.Body() == nil {
|
||||
@@ -1068,7 +854,7 @@ func EdgeControllerRequest(entityType string, out io.Writer, logJSON bool, timeo
|
||||
// on the version of the Edge Controller the API may be monolith on `/edge/<version>` and `/` or split into
|
||||
// `/edge/management/<version>` and `/edge/client/<version>`.
|
||||
func EdgeControllerGetManagementApiBasePath(host string, cert string) string {
|
||||
client := newClient()
|
||||
client := NewClient()
|
||||
|
||||
client.SetHostURL(host)
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user