From 2206110c52dbd131456ac560d22fde304c316573 Mon Sep 17 00:00:00 2001 From: Ken Bingham Date: Wed, 11 Jan 2023 10:04:49 -0500 Subject: [PATCH 01/41] fix Markdown links to SDKs --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d37dd257b..8ac9b4759 100644 --- a/README.md +++ b/README.md @@ -129,12 +129,12 @@ The Ziti project welcomes contributions including, but not limited to, code, doc * [fabric](https://github.com/openziti/fabric): fabric project which includes core controller and router * [foundation](https://github.com/openziti/foundation): project which contains library code used across multiple projects * SDKs - * [ziti-sdk-c] (https://github.com/openziti/ziti-sdk-c): C SDK - * [sdk-golang] (https://github.com/openziti/sdk-golang): Go SDK - * [ziti-sdk-jvm] (https://github.com/openziti/ziti-sdk-jvm): SDK for JVM based languages - * [ziti-sdk-swift] (https://github.com/openziti/ziti-sdk-swift): Swift SDK - * [ziti-sdk-nodejs] (https://github.com/openziti/ziti-sdk-nodejs): NodeJS SDK - * [ziti-sdk-csharp] (https://github.com/openziti/ziti-sdk-csharp): C# SDK + * [ziti-sdk-c](https://github.com/openziti/ziti-sdk-c): C SDK + * [sdk-golang](https://github.com/openziti/sdk-golang): Go SDK + * [ziti-sdk-jvm](https://github.com/openziti/ziti-sdk-jvm): SDK for JVM based languages + * [ziti-sdk-swift](https://github.com/openziti/ziti-sdk-swift): Swift SDK + * [ziti-sdk-nodejs](https://github.com/openziti/ziti-sdk-nodejs): NodeJS SDK + * [ziti-sdk-csharp](https://github.com/openziti/ziti-sdk-csharp): C# SDK * [ziti-doc](https://github.com/openziti/ziti-doc): Powers the static documentation site Ziti was developed and open sourced by [Netfoundry, Inc](https://netfoundry.io). NetFoundry continues to fund and From cac05d0b1028a8f3171c7b41b6afedd4cafee6ad Mon Sep 17 00:00:00 2001 From: Shawn Carey Date: Thu, 12 Jan 2023 09:17:58 -0500 Subject: [PATCH 02/41] update deps and changelog for custom tproxy diverter change (edge 0.24.101) (#942) --- CHANGELOG.md | 10 ++++++++++ go.mod | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 423857c21..f4204d388 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# Release 0.27.3 + +# What's New + +## Component Updates and Bug Fixes + +* github.com/openziti/edge: [v0.24.95 -> v0.24.101](https://github.com/openziti/edge/compare/v0.24.95...v0.24.101) + * [Issue #1292](https://github.com/openziti/edge/issues/1292) - Support alternative tproxy configuration methods + + # Release 0.27.2 # What's New diff --git a/go.mod b/go.mod index e646c3fad..e2cfb004f 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/michaelquigley/pfxlog v0.6.9 github.com/openziti/agent v1.0.7 github.com/openziti/channel/v2 v2.0.25 - github.com/openziti/edge v0.24.95 + github.com/openziti/edge v0.24.101 github.com/openziti/fabric v0.22.7 github.com/openziti/foundation/v2 v2.0.10 github.com/openziti/identity v1.0.29 From 8476b4bd7c34ff7dac0229a4fa85a608d4163612 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Thu, 12 Jan 2023 11:21:19 -0500 Subject: [PATCH 03/41] make simplified the same as the docker-compose example --- quickstart/docker/simplified-docker-compose.yml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/quickstart/docker/simplified-docker-compose.yml b/quickstart/docker/simplified-docker-compose.yml index 94e0287e8..458e06b18 100644 --- a/quickstart/docker/simplified-docker-compose.yml +++ b/quickstart/docker/simplified-docker-compose.yml @@ -5,7 +5,11 @@ services: env_file: - ./.env ports: - - "1280:1280" + - "${ZITI_EDGE_CONTROLLER_PORT}:${ZITI_EDGE_CONTROLLER_PORT}" + - "${ZITI_CTRL_PORT}:${ZITI_CTRL_PORT}" + environment: + - ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION=${ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION} + - ZITI_EDGE_ROUTER_ENROLLMENT_DURATION=${ZITI_EDGE_ROUTER_ENROLLMENT_DURATION} networks: zitiblue: aliases: @@ -40,14 +44,16 @@ services: - "/var/openziti/scripts/run-with-ziti-cli.sh" command: - "/var/openziti/scripts/access-control.sh" - + ziti-edge-router: image: "${ZITI_IMAGE}:${ZITI_VERSION}" - environment: - - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router - - ZITI_EDGE_ROUTER_ROLES=public depends_on: - ziti-controller + environment: + - ZITI_CONTROLLER_RAWNAME="${ZITI_CONTROLLER_RAWNAME}" + - ZITI_EDGE_CONTROLLER_RAWNAME="${ZITI_EDGE_CONTROLLER_RAWNAME}" + - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router + - ZITI_EDGE_ROUTER_ROLES=public ports: - "3022:3022" networks: From 58920e6b9d1b3dac4ee1893b84fcdc371cdfb8c8 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Wed, 4 Jan 2023 10:32:58 -0500 Subject: [PATCH 04/41] Update agent commands --- go.mod | 16 +- go.sum | 32 ++-- ziti/cmd/agentcli/agent.go | 138 ++++++++++++++++-- ziti/cmd/agentcli/agent_ch_simple.go | 51 +++---- .../agentcli/agent_clear_channel_log_level.go | 42 ++++-- ziti/cmd/agentcli/agent_controller_init.go | 60 ++------ .../agentcli/agent_controller_init_from_db.go | 58 ++------ .../agentcli/agent_controller_raft_join.go | 63 ++------ .../agentcli/agent_controller_raft_list.go | 49 ++----- ziti/cmd/agentcli/agent_gc.go | 60 -------- ...ent_go_version_action.go => agent_list.go} | 35 +++-- ziti/cmd/agentcli/agent_memstats.go | 61 -------- ziti/cmd/agentcli/agent_pprof_cpu.go | 26 ++++ ziti/cmd/agentcli/agent_pprof_heap.go | 26 ++++ ziti/cmd/agentcli/agent_router_add_route.go | 75 +++++----- ziti/cmd/agentcli/agent_router_forget_link.go | 44 ++---- .../agent_router_toggle_ctrl_channel.go | 90 ++++++++++++ .../agentcli/agent_set_channel_log_level.go | 27 +++- ziti/cmd/agentcli/agent_set_log_level.go | 34 +++-- ziti/cmd/agentcli/agent_setgc.go | 36 +++-- ziti/cmd/agentcli/agent_simple.go | 33 ++++- ziti/cmd/agentcli/agent_stack.go | 11 +- ziti/cmd/agentcli/agent_stats.go | 60 -------- ziti/cmd/agentcli/agent_trace.go | 17 +-- .../cmd/demo/echo_server_update_terminator.go | 2 +- ziti/controller/root.go | 2 + ziti/controller/run.go | 9 +- ziti/router/root.go | 2 + ziti/router/run.go | 9 +- 29 files changed, 587 insertions(+), 581 deletions(-) delete mode 100644 ziti/cmd/agentcli/agent_gc.go rename ziti/cmd/agentcli/{agent_go_version_action.go => agent_list.go} (56%) delete mode 100644 ziti/cmd/agentcli/agent_memstats.go create mode 100644 ziti/cmd/agentcli/agent_router_toggle_ctrl_channel.go delete mode 100644 ziti/cmd/agentcli/agent_stats.go diff --git a/go.mod b/go.mod index e2cfb004f..40d5c6250 100644 --- a/go.mod +++ b/go.mod @@ -20,14 +20,14 @@ require ( 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.9 - github.com/openziti/agent v1.0.7 + github.com/openziti/agent v1.0.8 github.com/openziti/channel/v2 v2.0.25 - github.com/openziti/edge v0.24.101 - github.com/openziti/fabric v0.22.7 + github.com/openziti/edge v0.24.100 + github.com/openziti/fabric v0.22.9 github.com/openziti/foundation/v2 v2.0.10 github.com/openziti/identity v1.0.29 - github.com/openziti/runzmd v1.0.7 - github.com/openziti/sdk-golang v0.18.21 + github.com/openziti/runzmd v1.0.8 + github.com/openziti/sdk-golang v0.18.24 github.com/openziti/storage v0.1.31 github.com/openziti/transport/v2 v2.0.49 github.com/openziti/xweb/v2 v2.0.2 @@ -119,7 +119,7 @@ require ( github.com/kyokomi/emoji/v2 v2.2.11 // 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-20220913051719-115f729f3c8c // indirect + github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de // 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 @@ -172,8 +172,8 @@ require ( go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect go.opentelemetry.io/otel v1.11.1 // indirect go.opentelemetry.io/otel/trace v1.11.1 // indirect - golang.org/x/crypto v0.4.0 // indirect - golang.org/x/exp v0.0.0-20221230185412-738e83a70c30 // indirect + golang.org/x/crypto v0.5.0 // indirect + golang.org/x/exp v0.0.0-20230111222715-75897c7a292a // indirect golang.org/x/image v0.3.0 // indirect golang.org/x/mod v0.6.0 // indirect golang.org/x/sync v0.1.0 // indirect diff --git a/go.sum b/go.sum index da20b6352..192743f80 100644 --- a/go.sum +++ b/go.sum @@ -561,8 +561,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-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY= -github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= +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/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= @@ -693,16 +693,16 @@ 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.7 h1:tEZlYQ5/y7oeuYUAdqN6AAayQAloL8Ms6prSddaUDVY= -github.com/openziti/agent v1.0.7/go.mod h1:6APWgkPP6Uxf1/VyirdTVLAJxwam2vVyakrVw6yvs40= +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.25 h1:ihw9DDTfMHDL33gZFLqDyADFGKBec4beaThV/VJLWhI= github.com/openziti/channel/v2 v2.0.25/go.mod h1:eHPS7dmvDV+Q/SmbB2gwvdvdz/NcnetFshHsdNzAnZs= 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.95 h1:Lj7ycWVOXbqt3TK6NSGPWXj5bp3/5rX7rA+bR5wA8Nc= -github.com/openziti/edge v0.24.95/go.mod h1:nVamtrBekK372q8bbKK/D6t0W7LBqQ+Miu0YE1u3od4= -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/edge v0.24.100 h1:sBoG0GtyFCyodukuG1IDCoXm2PjLyjt8jxKhVQjc0ww= +github.com/openziti/edge v0.24.100/go.mod h1:Yn3eOldLoe6BZyJvOQbgY02LDOpo9oW48v1ZKhTwqZs= +github.com/openziti/fabric v0.22.9 h1:8bI+yeWMBwBYwpteg8A2fxI4rYB65B6UBkIkLSsdh8s= +github.com/openziti/fabric v0.22.9/go.mod h1:8i3qG7UJbqWHH3V6nZlhzaaGyqiecn4cCsj9qGf4Rec= 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.29 h1:FkY/Hzpfh2/U2cUzYR2X3380/IKGIQYpJaKWqXpOIAg= @@ -711,10 +711,10 @@ 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.7 h1:2EC3bVjjAuFsECaZbwTOJdDbSk3I8JpfaI2ruGdEGiA= -github.com/openziti/runzmd v1.0.7/go.mod h1:0AlunP33eJ/S21az+ACP9/INVeUSR80pELXYXs2hK0I= -github.com/openziti/sdk-golang v0.18.21 h1:oWJXrvMbXvTGkQ0MF3oFKmAw6dBBKhNt2WxNjj/Z1zA= -github.com/openziti/sdk-golang v0.18.21/go.mod h1:LT+IOT2GqsmYLwjjO3YOlcejgBROyMI1a01xo8Xh+A8= +github.com/openziti/runzmd v1.0.8 h1:snjZebyVVeXL4UfSYhJxHTzo/jeSKFkvjMwWWZ7uRMg= +github.com/openziti/runzmd v1.0.8/go.mod h1:og+vSXZFDZiAturQQJVyfo2j41XFTmv+oZptzKZnPqI= +github.com/openziti/sdk-golang v0.18.24 h1:pKNupqa3ZnaLxNRL1tKn7JUT22xAeKcTIWFUSQaHtRk= +github.com/openziti/sdk-golang v0.18.24/go.mod h1:MEHIen3YTNwPaDGMgDgcTf04RqG5fCti4CnNRJhk70g= github.com/openziti/storage v0.1.31 h1:YO1c1mzn+DfmBOtzhBlMe6q5cgjSOUv+sY8iUOwXals= github.com/openziti/storage v0.1.31/go.mod h1:DFRIpfCkI7lLuhGUl4CgZR6sGbsMJ/+nGnjkVIqCgrw= github.com/openziti/transport/v2 v2.0.49 h1:P3gUazaC8Z7iy4eXk510wjTKot6GucWMtqexU3mn83U= @@ -1008,8 +1008,8 @@ golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPh 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-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +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/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= @@ -1020,8 +1020,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-20221230185412-738e83a70c30 h1:m9O6OTJ627iFnN2JIWfdqlZCzneRO6EEBsHXI25P8ws= -golang.org/x/exp v0.0.0-20221230185412-738e83a70c30/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230111222715-75897c7a292a h1:/YWeLOBWYV5WAQORVPkZF3Pq9IppkcT72GKnWjNf5W8= +golang.org/x/exp v0.0.0-20230111222715-75897c7a292a/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= diff --git a/ziti/cmd/agentcli/agent.go b/ziti/cmd/agentcli/agent.go index d05f4663e..dd9d8ad6f 100644 --- a/ziti/cmd/agentcli/agent.go +++ b/ziti/cmd/agentcli/agent.go @@ -1,6 +1,7 @@ package agentcli import ( + "fmt" "github.com/openziti/agent" "github.com/openziti/channel/v2" "github.com/openziti/edge/router/debugops" @@ -10,8 +11,12 @@ import ( "github.com/openziti/identity" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" + "github.com/pkg/errors" "github.com/spf13/cobra" + "io" "net" + "os" + "strings" "time" ) @@ -32,12 +37,13 @@ func NewAgentCmd(p common.OptionsProvider) *cobra.Command { } agentCmd.AddCommand(NewPsCmd(p)) - agentCmd.AddCommand(NewGoVersionCmd(p)) - agentCmd.AddCommand(NewGcCmd(p)) + agentCmd.AddCommand(NewListCmd(p)) + agentCmd.AddCommand(NewSimpleAgentCmd("goversion", agent.Version, p, "Returns the golang version of the target application")) + agentCmd.AddCommand(NewSimpleAgentCmd("gc", agent.GC, p, "Run garbage collection in the target application")) agentCmd.AddCommand(NewSetGcCmd(p)) agentCmd.AddCommand(NewStackCmd(p)) - agentCmd.AddCommand(NewMemstatsCmd(p)) - agentCmd.AddCommand(NewStatsCmd(p)) + agentCmd.AddCommand(NewSimpleAgentCmd("memstats", agent.MemStats, p, "Returns memory use summary of the target application")) + agentCmd.AddCommand(NewSimpleAgentCmd("stats", agent.Stats, p, "Emits some runtime information (# go-routines, threads, cpus, etc) from the target application")) agentCmd.AddCommand(NewPprofHeapCmd(p)) agentCmd.AddCommand(NewPprofCpuCmd(p)) agentCmd.AddCommand(NewTraceCmd(p)) @@ -73,12 +79,12 @@ func NewAgentCmd(p common.OptionsProvider) *cobra.Command { agentCmd.AddCommand(routerCmd) routerCmd.AddCommand(NewRouteCmd(p)) - routerCmd.AddCommand(NewSimpleAgentCustomCmd("dump-routes", AgentAppRouter, router.DumpForwarderTables, p)) - routerCmd.AddCommand(NewSimpleAgentCustomCmd("disconnect", AgentAppRouter, router.CloseControlChannel, p)) - routerCmd.AddCommand(NewSimpleAgentCustomCmd("reconnect", AgentAppRouter, router.OpenControlChannel, p)) routerCmd.AddCommand(NewSimpleAgentCustomCmd("dump-api-sessions", AgentAppRouter, debugops.DumpApiSessions, p)) - routerCmd.AddCommand(NewSimpleAgentCustomCmd("dump-links", AgentAppRouter, router.DumpLinks, 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)) routerCmd.AddCommand(NewForgetLinkAgentCmd(p)) + routerCmd.AddCommand(NewToggleCtrlChannelAgentCmd(p, "disconnect", false)) + routerCmd.AddCommand(NewToggleCtrlChannelAgentCmd(p, "reconnect", true)) return agentCmd } @@ -86,6 +92,112 @@ func NewAgentCmd(p common.OptionsProvider) *cobra.Command { // AgentOptions contains the command line options type AgentOptions struct { common.CommonOptions + pid uint16 + processName string + appId string + appType string + appAlias string + tcpAddr string + timeout time.Duration +} + +func (self *AgentOptions) AddAgentOptions(cmd *cobra.Command) { + cmd.Flags().Uint16VarP(&self.pid, "pid", "p", 0, "Process ID of host application to talk to") + cmd.Flags().StringVarP(&self.processName, "process-name", "n", "", "Process name of host application to talk to") + cmd.Flags().StringVarP(&self.appId, "app-id", "i", "", "Id of host application to talk to (like controller or router id)") + cmd.Flags().StringVarP(&self.appType, "app-type", "t", "", "Type of host application to talk to (like controller or router)") + cmd.Flags().StringVarP(&self.appType, "app-alias", "a", "", "Alias of host application to talk to (specified in host application)") + cmd.Flags().StringVar(&self.tcpAddr, "tcp-addr", "", "Type of host application to talk to (like controller or router)") +} + +func (self *AgentOptions) GetProcess() (*agent.Process, error) { + procList, err := agent.GetGopsProcesses() + if err != nil { + return nil, err + } + var result []*agent.Process + for _, p := range procList { + if !p.Contactable { + continue + } + if self.Cmd.Flags().Changed("pid") && p.Pid != int(self.pid) { + continue + } + if self.Cmd.Flags().Changed("process-name") && p.Executable != self.processName { + continue + } + if self.Cmd.Flags().Changed("app-id") && p.AppId != self.appId { + continue + } + if self.Cmd.Flags().Changed("app-type") && p.AppType != self.appType { + continue + } + if self.Cmd.Flags().Changed("app-alias") && p.AppAlias != self.appAlias { + continue + } + + result = append(result, p) + } + + if len(result) == 0 { + return nil, errors.New("no processes found matching filter, use 'ziti agent ps' to list candidates") + } + + if len(result) > 1 { + var pids []string + for _, r := range result { + pids = append(pids, fmt.Sprintf("%v", r.Pid)) + } + return nil, errors.Errorf("too many processes found matching filter: [%v] use 'ziti agent list' for more information", strings.Join(pids, " ")) + } + + return result[0], nil +} + +func (self *AgentOptions) MakeChannelRequest(appId byte, f func(ch channel.Channel) error) error { + return self.MakeRequest(agent.CustomOpAsync, []byte{appId}, connToChannelMapper(f)) +} + +func (self *AgentOptions) MakeRequest(signal byte, params []byte, f func(c net.Conn) error) error { + if self.Cmd.Flags().Changed("tcp-addr") { + conn, err := net.Dial("tcp", self.tcpAddr) + if err != nil { + return err + } + return agent.MakeRequestToConn(conn, signal, params, f) + } + + p, err := self.GetProcess() + if err != nil { + return err + } + return agent.MakeProcessRequest(p, signal, params, f) +} + +func (self *AgentOptions) CopyToWriter(out io.Writer) func(conn net.Conn) error { + return func(conn net.Conn) error { + _, err := io.Copy(out, conn) + return err + } +} + +func (self *AgentOptions) RunCopyOut(op byte, params []byte, out io.Writer) error { + if self.Cmd.Flags().Changed("timeout") { + time.AfterFunc(self.timeout, func() { + fmt.Println("operation timed out") + os.Exit(-1) + }) + } + + 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) } func NewAgentChannel(conn net.Conn) (channel.Channel, error) { @@ -95,12 +207,16 @@ func NewAgentChannel(conn net.Conn) (channel.Channel, error) { return channel.NewChannel("agent", dialer, nil, options) } -func MakeAgentChannelRequest(addr string, signal byte, params []byte, f func(ch channel.Channel) error) error { - return agent.MakeRequestF(addr, signal, params, func(conn net.Conn) error { +func MakeAgentChannelRequest(addr string, appId byte, f func(ch channel.Channel) error) error { + return agent.MakeRequestF(addr, agent.CustomOpAsync, []byte{appId}, connToChannelMapper(f)) +} + +func connToChannelMapper(f func(ch channel.Channel) error) func(conn net.Conn) error { + return func(conn net.Conn) error { ch, err := NewAgentChannel(conn) if err != nil { return err } return f(ch) - }) + } } diff --git a/ziti/cmd/agentcli/agent_ch_simple.go b/ziti/cmd/agentcli/agent_ch_simple.go index 1931974a9..c5c914c95 100644 --- a/ziti/cmd/agentcli/agent_ch_simple.go +++ b/ziti/cmd/agentcli/agent_ch_simple.go @@ -20,22 +20,17 @@ import ( "fmt" "github.com/openziti/agent" "github.com/openziti/channel/v2" - "github.com/openziti/identity" "github.com/openziti/ziti/ziti/cmd/common" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" - "net" - "time" ) -type SimpleChAgentCmdOptions struct { +type SimpleChAgentCmdAction struct { AgentOptions requestType int32 - timeout time.Duration } func NewSimpleChAgentCustomCmd(name string, appId AgentAppId, op int32, p common.OptionsProvider) *cobra.Command { - options := &SimpleChAgentCmdOptions{ + action := &SimpleChAgentCmdAction{ AgentOptions: AgentOptions{ CommonOptions: p(), }, @@ -45,47 +40,45 @@ func NewSimpleChAgentCustomCmd(name string, appId AgentAppId, op int32, p common cmd := &cobra.Command{ Args: cobra.MaximumNArgs(1), Use: name + " ", - Run: func(cmd *cobra.Command, args []string) { - options.Cmd = cmd - options.Args = args - err := options.Run(appId) - cmdhelper.CheckErr(err) + RunE: func(cmd *cobra.Command, args []string) error { + action.Cmd = cmd + action.Args = args + return action.Run(appId) }, } - cmd.Flags().DurationVarP(&options.timeout, "timeout", "t", 5*time.Second, "How long to wait for operation to complete") + action.AddAgentOptions(cmd) return cmd } // Run implements the command -func (o *SimpleChAgentCmdOptions) Run(appId AgentAppId) error { - addr, err := agent.ParseGopsAddress(o.Args) +func (self *SimpleChAgentCmdAction) Run(appId AgentAppId) error { + if len(self.Args) == 0 { + return self.MakeChannelRequest(byte(appId), self.makeRequest) + } + + addr, err := agent.ParseGopsAddress(self.Args) if err != nil { return err } - - return agent.MakeRequestF(addr, agent.CustomOpAsync, []byte{byte(appId)}, o.makeRequest) + return MakeAgentChannelRequest(addr, byte(appId), self.makeRequest) } -func (o *SimpleChAgentCmdOptions) makeRequest(conn net.Conn) error { - options := channel.DefaultOptions() - options.ConnectTimeout = time.Second - dialer := channel.NewExistingConnDialer(&identity.TokenId{Token: "agent"}, conn, nil) - ch, err := channel.NewChannel("agent", dialer, nil, options) - if err != nil { - return err - } - - msg := channel.NewMessage(o.requestType, nil) - reply, err := msg.WithTimeout(o.timeout).SendForReply(ch) +func (self *SimpleChAgentCmdAction) makeRequest(ch channel.Channel) error { + msg := channel.NewMessage(self.requestType, nil) + 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 { - fmt.Println("success") + if len(result.Message) != 0 { + fmt.Print(result.Message) + } else { + fmt.Println("success") + } } else { fmt.Printf("error: %v\n", result.Message) } diff --git a/ziti/cmd/agentcli/agent_clear_channel_log_level.go b/ziti/cmd/agentcli/agent_clear_channel_log_level.go index c307b00e7..e29d5db5a 100644 --- a/ziti/cmd/agentcli/agent_clear_channel_log_level.go +++ b/ziti/cmd/agentcli/agent_clear_channel_log_level.go @@ -19,11 +19,13 @@ package agentcli import ( "bytes" "encoding/binary" + "fmt" "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" "os" + "time" ) type AgentClearChannelLogLevelAction struct { @@ -31,7 +33,7 @@ type AgentClearChannelLogLevelAction struct { } func NewClearChannelLogLevelCmd(p common.OptionsProvider) *cobra.Command { - options := &AgentClearChannelLogLevelAction{ + action := &AgentClearChannelLogLevelAction{ AgentOptions: AgentOptions{ CommonOptions: p(), }, @@ -42,31 +44,33 @@ func NewClearChannelLogLevelCmd(p common.OptionsProvider) *cobra.Command { Short: "Clears a channel-specific log level in the target application", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - options.Cmd = cmd - options.Args = args - err := options.Run() + action.Cmd = cmd + action.Args = args + err := action.Run() cmdhelper.CheckErr(err) }, } + action.AddAgentOptions(cmd) + return cmd } // Run implements the command func (self *AgentClearChannelLogLevelAction) Run() error { - var addr string - var err error - var channelArg string - if len(self.Args) == 1 { - addr, err = agent.ParseGopsAddress(nil) - channelArg = self.Args[0] - } else { - addr, err = agent.ParseGopsAddress(self.Args) - channelArg = self.Args[1] + if self.Cmd.Flags().Changed("timeout") { + time.AfterFunc(self.timeout, func() { + fmt.Println("operation timed out") + os.Exit(-1) + }) } - if err != nil { - return err + var channelArg string + + if len(self.Args) == 1 { + channelArg = self.Args[0] + } else { + channelArg = self.Args[1] } lenBuf := make([]byte, 8) @@ -75,5 +79,13 @@ func (self *AgentClearChannelLogLevelAction) Run() error { buf.Write(lenBuf[:lenLen]) buf.Write([]byte(channelArg)) + if len(self.Args) == 1 { + return self.MakeRequest(agent.ClearChannelLogLevel, buf.Bytes(), self.CopyToWriter(os.Stdout)) + } + + addr, err := agent.ParseGopsAddress(self.Args) + if err != nil { + return err + } return agent.MakeRequest(addr, agent.ClearChannelLogLevel, buf.Bytes(), os.Stdout) } diff --git a/ziti/cmd/agentcli/agent_controller_init.go b/ziti/cmd/agentcli/agent_controller_init.go index ffe9b960c..ecdcf865f 100644 --- a/ziti/cmd/agentcli/agent_controller_init.go +++ b/ziti/cmd/agentcli/agent_controller_init.go @@ -18,16 +18,11 @@ package agentcli import ( "fmt" - "github.com/openziti/agent" "github.com/openziti/channel/v2" "github.com/openziti/channel/v2/protobufs" "github.com/openziti/edge/pb/edge_mgmt_pb" - "github.com/openziti/identity" "github.com/openziti/ziti/ziti/cmd/common" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" - "net" - "time" ) type AgentCtrlInitOptions struct { @@ -35,62 +30,35 @@ type AgentCtrlInitOptions struct { } func NewAgentCtrlInit(p common.OptionsProvider) *cobra.Command { - options := &AgentCtrlInitOptions{ + action := &AgentCtrlInitOptions{ AgentOptions: AgentOptions{ CommonOptions: p(), }, } cmd := &cobra.Command{ - Args: cobra.RangeArgs(3, 4), - Use: "init ", - Run: func(cmd *cobra.Command, args []string) { - options.Cmd = cmd - options.Args = args - err := options.Run() - cmdhelper.CheckErr(err) + Args: cobra.ExactArgs(3), + Use: "init ", + RunE: func(cmd *cobra.Command, args []string) error { + action.Cmd = cmd + action.Args = args + return action.MakeChannelRequest(byte(AgentAppController), action.makeRequest) }, } + action.AddAgentOptions(cmd) + return cmd } -// Run implements the command -func (o *AgentCtrlInitOptions) Run() error { - var addr string - var err error - - if len(o.Args) == 4 { - addr, err = agent.ParseGopsAddress(o.Args) - if err != nil { - return err - } - } - - return agent.MakeRequestF(addr, agent.CustomOpAsync, []byte{byte(AgentAppController)}, o.makeRequest) -} - -func (o *AgentCtrlInitOptions) makeRequest(conn net.Conn) error { - options := channel.DefaultOptions() - options.ConnectTimeout = time.Second - dialer := channel.NewExistingConnDialer(&identity.TokenId{Token: "agent"}, conn, nil) - ch, err := channel.NewChannel("agent", dialer, nil, options) - if err != nil { - return err - } - - offset := 0 - if len(o.Args) == 4 { - offset = 1 - } - +func (self *AgentCtrlInitOptions) makeRequest(ch channel.Channel) error { initEdgeRequest := &edge_mgmt_pb.InitEdgeRequest{ - Username: o.Args[offset], - Password: o.Args[offset+1], - Name: o.Args[offset+2], + Username: self.Args[0], + Password: self.Args[1], + Name: self.Args[2], } - reply, err := protobufs.MarshalTyped(initEdgeRequest).WithTimeout(5 * time.Second).SendForReply(ch) + reply, err := protobufs.MarshalTyped(initEdgeRequest).WithTimeout(self.timeout).SendForReply(ch) if err != nil { return err } diff --git a/ziti/cmd/agentcli/agent_controller_init_from_db.go b/ziti/cmd/agentcli/agent_controller_init_from_db.go index 44243a532..2ecc68dfc 100644 --- a/ziti/cmd/agentcli/agent_controller_init_from_db.go +++ b/ziti/cmd/agentcli/agent_controller_init_from_db.go @@ -18,76 +18,44 @@ package agentcli import ( "fmt" - "github.com/openziti/agent" "github.com/openziti/channel/v2" "github.com/openziti/fabric/pb/mgmt_pb" - "github.com/openziti/identity" "github.com/openziti/ziti/ziti/cmd/common" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" - "net" - "time" ) -type AgentCtrlInitFromDbOptions struct { +type AgentCtrlInitFromDbAction struct { AgentOptions Voter bool MemberId string } func NewAgentCtrlInitFromDb(p common.OptionsProvider) *cobra.Command { - options := &AgentCtrlInitFromDbOptions{ + action := &AgentCtrlInitFromDbAction{ AgentOptions: AgentOptions{ CommonOptions: p(), }, } cmd := &cobra.Command{ - Args: cobra.RangeArgs(1, 2), - Use: "init-from-db path/to/source.db", - Run: func(cmd *cobra.Command, args []string) { - options.Cmd = cmd - options.Args = args - err := options.Run() - cmdhelper.CheckErr(err) + Args: cobra.ExactArgs(1), + Use: "init-from-db path/to/source.db", + RunE: func(cmd *cobra.Command, args []string) error { + action.Cmd = cmd + action.Args = args + return action.MakeChannelRequest(byte(AgentAppController), action.makeRequest) }, } + action.AddAgentOptions(cmd) + return cmd } -// Run implements the command -func (o *AgentCtrlInitFromDbOptions) Run() error { - var addr string - var err error +func (self *AgentCtrlInitFromDbAction) makeRequest(ch channel.Channel) error { + msg := channel.NewMessage(int32(mgmt_pb.ContentType_RaftInitFromDb), []byte(self.Args[0])) - if len(o.Args) == 2 { - addr, err = agent.ParseGopsAddress(o.Args) - if err != nil { - return err - } - } - - return agent.MakeRequestF(addr, agent.CustomOpAsync, []byte{byte(AgentAppController)}, o.makeRequest) -} - -func (o *AgentCtrlInitFromDbOptions) makeRequest(conn net.Conn) error { - options := channel.DefaultOptions() - options.ConnectTimeout = time.Second - dialer := channel.NewExistingConnDialer(&identity.TokenId{Token: "agent"}, conn, nil) - ch, err := channel.NewChannel("agent", dialer, nil, options) - if err != nil { - return err - } - - offset := 0 - if len(o.Args) == 2 { - offset = 1 - } - - msg := channel.NewMessage(int32(mgmt_pb.ContentType_RaftInitFromDb), []byte(o.Args[offset])) - - reply, err := msg.WithTimeout(5 * time.Second).SendForReply(ch) + reply, err := msg.WithTimeout(self.timeout).SendForReply(ch) if err != nil { return err } diff --git a/ziti/cmd/agentcli/agent_controller_raft_join.go b/ziti/cmd/agentcli/agent_controller_raft_join.go index bda3a55a5..58083a6f3 100644 --- a/ziti/cmd/agentcli/agent_controller_raft_join.go +++ b/ziti/cmd/agentcli/agent_controller_raft_join.go @@ -18,86 +18,55 @@ package agentcli import ( "fmt" - "github.com/openziti/agent" "github.com/openziti/channel/v2" "github.com/openziti/fabric/controller" "github.com/openziti/fabric/pb/mgmt_pb" - "github.com/openziti/identity" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" - "net" - "time" ) -type AgentCtrlRaftJoinOptions struct { +type AgentCtrlRaftJoinAction struct { AgentOptions Voter bool MemberId string } func NewAgentCtrlRaftJoin(p common.OptionsProvider) *cobra.Command { - options := &AgentCtrlRaftJoinOptions{ + action := &AgentCtrlRaftJoinAction{ AgentOptions: AgentOptions{ CommonOptions: p(), }, } cmd := &cobra.Command{ - Args: cobra.RangeArgs(1, 2), - Use: "raft-join ", + Args: cobra.ExactArgs(1), + Use: "raft-join ", Run: func(cmd *cobra.Command, args []string) { - options.Cmd = cmd - options.Args = args - err := options.Run() + action.Cmd = cmd + action.Args = args + err := action.MakeChannelRequest(byte(AgentAppController), action.makeRequest) cmdhelper.CheckErr(err) }, } - cmd.Flags().BoolVar(&options.Voter, "voter", true, "Is this member a voting member") - cmd.Flags().StringVar(&options.MemberId, "id", "", "The member id. If not provided, it will be looked up") + action.AddAgentOptions(cmd) + cmd.Flags().BoolVar(&action.Voter, "voter", true, "Is this member a voting member") + cmd.Flags().StringVar(&action.MemberId, "id", "", "The member id. If not provided, it will be looked up") return cmd } -// Run implements the command -func (o *AgentCtrlRaftJoinOptions) Run() error { - var addr string - var err error - - if len(o.Args) == 2 { - addr, err = agent.ParseGopsAddress(o.Args) - if err != nil { - return err - } - } - - return agent.MakeRequestF(addr, agent.CustomOpAsync, []byte{byte(AgentAppController)}, o.makeRequest) -} - -func (o *AgentCtrlRaftJoinOptions) makeRequest(conn net.Conn) error { - options := channel.DefaultOptions() - options.ConnectTimeout = time.Second - dialer := channel.NewExistingConnDialer(&identity.TokenId{Token: "agent"}, conn, nil) - ch, err := channel.NewChannel("agent", dialer, nil, options) - if err != nil { - return err - } - - offset := 0 - if len(o.Args) == 2 { - offset = 1 - } - +func (self *AgentCtrlRaftJoinAction) makeRequest(ch channel.Channel) error { msg := channel.NewMessage(int32(mgmt_pb.ContentType_RaftJoinRequestType), nil) - msg.PutStringHeader(controller.AgentAddrHeader, o.Args[offset]) - msg.PutBoolHeader(controller.AgentIsVoterHeader, o.Voter) + msg.PutStringHeader(controller.AgentAddrHeader, self.Args[0]) + msg.PutBoolHeader(controller.AgentIsVoterHeader, self.Voter) - if o.MemberId != "" { - msg.PutStringHeader(controller.AgentIdHeader, o.MemberId) + if self.MemberId != "" { + msg.PutStringHeader(controller.AgentIdHeader, self.MemberId) } - reply, err := msg.WithTimeout(5 * time.Second).SendForReply(ch) + reply, err := msg.WithTimeout(self.timeout).SendForReply(ch) if err != nil { return err } diff --git a/ziti/cmd/agentcli/agent_controller_raft_list.go b/ziti/cmd/agentcli/agent_controller_raft_list.go index 4bf2176fb..6429a3623 100644 --- a/ziti/cmd/agentcli/agent_controller_raft_list.go +++ b/ziti/cmd/agentcli/agent_controller_raft_list.go @@ -19,23 +19,18 @@ package agentcli import ( "fmt" "github.com/golang/protobuf/proto" - "github.com/openziti/agent" "github.com/openziti/channel/v2" "github.com/openziti/fabric/pb/mgmt_pb" - "github.com/openziti/identity" "github.com/openziti/ziti/ziti/cmd/common" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" - "net" - "time" ) -type AgentCtrlRaftListOptions struct { +type AgentCtrlRaftListAction struct { AgentOptions } func NewAgentCtrlRaftList(p common.OptionsProvider) *cobra.Command { - options := &AgentCtrlRaftListOptions{ + action := &AgentCtrlRaftListAction{ AgentOptions: AgentOptions{ CommonOptions: p(), }, @@ -43,44 +38,22 @@ func NewAgentCtrlRaftList(p common.OptionsProvider) *cobra.Command { cmd := &cobra.Command{ Args: cobra.RangeArgs(0, 1), - Use: "raft-list ", - Run: func(cmd *cobra.Command, args []string) { - options.Cmd = cmd - options.Args = args - err := options.Run() - cmdhelper.CheckErr(err) + Use: "raft-list", + RunE: func(cmd *cobra.Command, args []string) error { + action.Cmd = cmd + action.Args = args + return action.MakeChannelRequest(byte(AgentAppController), action.makeRequest) }, } + action.AddAgentOptions(cmd) + return cmd } -// Run implements the command -func (o *AgentCtrlRaftListOptions) Run() error { - var addr string - var err error - - if len(o.Args) == 1 { - addr, err = agent.ParseGopsAddress(o.Args) - if err != nil { - return err - } - } - - return agent.MakeRequestF(addr, agent.CustomOpAsync, []byte{byte(AgentAppController)}, o.makeRequest) -} - -func (o *AgentCtrlRaftListOptions) makeRequest(conn net.Conn) error { - options := channel.DefaultOptions() - options.ConnectTimeout = time.Second - dialer := channel.NewExistingConnDialer(&identity.TokenId{Token: "agent"}, conn, nil) - ch, err := channel.NewChannel("agent", dialer, nil, options) - if err != nil { - return err - } - +func (self *AgentCtrlRaftListAction) makeRequest(ch channel.Channel) error { msg := channel.NewMessage(int32(mgmt_pb.ContentType_RaftListMembersRequestType), nil) - reply, err := msg.WithTimeout(5 * time.Second).SendForReply(ch) + reply, err := msg.WithTimeout(self.timeout).SendForReply(ch) if err != nil { return err } diff --git a/ziti/cmd/agentcli/agent_gc.go b/ziti/cmd/agentcli/agent_gc.go deleted file mode 100644 index ad56c6db9..000000000 --- a/ziti/cmd/agentcli/agent_gc.go +++ /dev/null @@ -1,60 +0,0 @@ -/* - 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 ( - "github.com/openziti/agent" - "github.com/openziti/ziti/ziti/cmd/common" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" - "github.com/spf13/cobra" - "os" -) - -type AgentGcAction struct { - AgentOptions -} - -func NewGcCmd(p common.OptionsProvider) *cobra.Command { - action := &AgentGcAction{ - AgentOptions: AgentOptions{ - CommonOptions: p(), - }, - } - - cmd := &cobra.Command{ - Use: "gc ", - Short: "Run garbage collection in the target application", - Args: cobra.MaximumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - action.Cmd = cmd - action.Args = args - err := action.Run() - cmdhelper.CheckErr(err) - }, - } - - return cmd -} - -// Run implements the command -func (self *AgentGcAction) Run() error { - addr, err := agent.ParseGopsAddress(self.Args) - if err != nil { - return err - } - return agent.MakeRequest(addr, agent.GC, nil, os.Stdout) -} diff --git a/ziti/cmd/agentcli/agent_go_version_action.go b/ziti/cmd/agentcli/agent_list.go similarity index 56% rename from ziti/cmd/agentcli/agent_go_version_action.go rename to ziti/cmd/agentcli/agent_list.go index 94e0a9099..9dc1fd029 100644 --- a/ziti/cmd/agentcli/agent_go_version_action.go +++ b/ziti/cmd/agentcli/agent_list.go @@ -17,6 +17,8 @@ package agentcli import ( + "fmt" + "github.com/jedib0t/go-pretty/v6/table" "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" @@ -24,22 +26,22 @@ import ( "os" ) -type AgentGoVersionAction struct { +type AgentListAction struct { AgentOptions - CtrlListener string } -func NewGoVersionCmd(p common.OptionsProvider) *cobra.Command { - action := &AgentGoVersionAction{ +// NewListCmd Pss a command object for the "list" command +func NewListCmd(p common.OptionsProvider) *cobra.Command { + action := &AgentListAction{ AgentOptions: AgentOptions{ CommonOptions: p(), }, } cmd := &cobra.Command{ - Use: "goversion ", - Short: "Returns the golang version of the target application", - Args: cobra.MaximumNArgs(1), + Use: "list", + Short: "List ziti processes", + Long: "Show information about currently running Ziti processes", Run: func(cmd *cobra.Command, args []string) { action.Cmd = cmd action.Args = args @@ -51,11 +53,22 @@ func NewGoVersionCmd(p common.OptionsProvider) *cobra.Command { return cmd } -// Run implements the command -func (self *AgentGoVersionAction) Run() error { - addr, err := agent.ParseGopsAddress(self.Args) +func (self *AgentListAction) Run() error { + processes, err := agent.GetGopsProcesses() if err != nil { return err } - return agent.MakeRequest(addr, agent.Version, nil, os.Stdout) + + t := table.NewWriter() + t.SetStyle(table.StyleRounded) + t.AppendHeader(table.Row{"PID", "Executable", "App ID", "Unix Socket", "App Type", "App Version", "App Alias"}) + + for _, p := range processes { + t.AppendRow(table.Row{p.Pid, p.Executable, p.AppId, p.UnixSocket, p.AppType, p.AppVersion, p.AppAlias}) + } + + if _, err = fmt.Fprintln(os.Stdout, t.Render()); err != nil { + panic(err) + } + return nil } diff --git a/ziti/cmd/agentcli/agent_memstats.go b/ziti/cmd/agentcli/agent_memstats.go deleted file mode 100644 index 8004b8eda..000000000 --- a/ziti/cmd/agentcli/agent_memstats.go +++ /dev/null @@ -1,61 +0,0 @@ -/* - 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 ( - "github.com/openziti/agent" - "github.com/openziti/ziti/ziti/cmd/common" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" - "github.com/spf13/cobra" - "os" -) - -type AgentMemstatsAction struct { - AgentOptions - CtrlListener string -} - -func NewMemstatsCmd(p common.OptionsProvider) *cobra.Command { - action := &AgentMemstatsAction{ - AgentOptions: AgentOptions{ - CommonOptions: p(), - }, - } - - cmd := &cobra.Command{ - Use: "memstats ", - Short: "Returns memory use summary of the target application", - Args: cobra.MaximumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - action.Cmd = cmd - action.Args = args - err := action.Run() - cmdhelper.CheckErr(err) - }, - } - - return cmd -} - -// Run implements the command -func (o *AgentMemstatsAction) Run() error { - addr, err := agent.ParseGopsAddress(o.Args) - if err != nil { - return err - } - return agent.MakeRequest(addr, agent.MemStats, nil, os.Stdout) -} diff --git a/ziti/cmd/agentcli/agent_pprof_cpu.go b/ziti/cmd/agentcli/agent_pprof_cpu.go index ad590e17e..7cf61f47b 100644 --- a/ziti/cmd/agentcli/agent_pprof_cpu.go +++ b/ziti/cmd/agentcli/agent_pprof_cpu.go @@ -17,16 +17,19 @@ package agentcli import ( + "fmt" "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" "io" "os" + "time" ) type AgentPprofCpuAction struct { AgentOptions + outputFile string } func NewPprofCpuCmd(p common.OptionsProvider) *cobra.Command { @@ -48,11 +51,34 @@ func NewPprofCpuCmd(p common.OptionsProvider) *cobra.Command { }, } + action.AddAgentOptions(cmd) + cmd.Flags().StringVarP(&action.outputFile, "output-file", "o", "", "Output file for pprof") + return cmd } // Run implements the command func (self *AgentPprofCpuAction) Run() error { + if self.Cmd.Flags().Changed("timeout") { + time.AfterFunc(self.timeout, func() { + fmt.Println("operation timed out") + os.Exit(-1) + }) + } + + if len(self.Args) == 0 { + var out io.WriteCloser = os.Stdout + var err error + if self.outputFile != "" { + out, err = os.Create(self.outputFile) + if err != nil { + return err + } + defer out.Close() + } + return self.RunCopyOut(agent.CPUProfile, nil, out) + } + addr, err := agent.ParseGopsAddress(self.Args) if err != nil { return err diff --git a/ziti/cmd/agentcli/agent_pprof_heap.go b/ziti/cmd/agentcli/agent_pprof_heap.go index 04776721c..c46f91598 100644 --- a/ziti/cmd/agentcli/agent_pprof_heap.go +++ b/ziti/cmd/agentcli/agent_pprof_heap.go @@ -17,16 +17,19 @@ package agentcli import ( + "fmt" "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" "io" "os" + "time" ) type AgentPprofHeapAction struct { AgentOptions + outputFile string } func NewPprofHeapCmd(p common.OptionsProvider) *cobra.Command { @@ -47,11 +50,34 @@ func NewPprofHeapCmd(p common.OptionsProvider) *cobra.Command { }, } + action.AddAgentOptions(cmd) + cmd.Flags().StringVarP(&action.outputFile, "output-file", "o", "", "Output file for pprof") + return cmd } // Run implements the command func (self *AgentPprofHeapAction) Run() error { + if self.Cmd.Flags().Changed("timeout") { + time.AfterFunc(self.timeout, func() { + fmt.Println("operation timed out") + os.Exit(-1) + }) + } + + if len(self.Args) == 0 { + var out io.WriteCloser = os.Stdout + var err error + if self.outputFile != "" { + out, err = os.Create(self.outputFile) + if err != nil { + return err + } + defer out.Close() + } + return self.RunCopyOut(agent.HeapProfile, nil, out) + } + addr, err := agent.ParseGopsAddress(self.Args) if err != nil { return err diff --git a/ziti/cmd/agentcli/agent_router_add_route.go b/ziti/cmd/agentcli/agent_router_add_route.go index 0cd14bd8e..71e338ed5 100644 --- a/ziti/cmd/agentcli/agent_router_add_route.go +++ b/ziti/cmd/agentcli/agent_router_add_route.go @@ -17,24 +17,22 @@ package agentcli import ( - "encoding/binary" - "github.com/openziti/agent" + "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" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" "google.golang.org/protobuf/proto" - "os" ) type AgentRouteAction struct { AgentOptions - CtrlListener string } func NewRouteCmd(p common.OptionsProvider) *cobra.Command { - options := &AgentRouteAction{ + action := &AgentRouteAction{ AgentOptions: AgentOptions{ CommonOptions: p(), }, @@ -42,38 +40,26 @@ func NewRouteCmd(p common.OptionsProvider) *cobra.Command { cmd := &cobra.Command{ Args: cobra.RangeArgs(3, 4), - Use: "route ", - Run: func(cmd *cobra.Command, args []string) { - options.Cmd = cmd - options.Args = args - err := options.Run() - cmdhelper.CheckErr(err) + Use: "route ", + 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 } -// Run implements the command -func (self *AgentRouteAction) Run() error { - var addr string - var err error - - offset := 0 - if len(self.Args) == 4 { - addr, err = agent.ParseGopsAddress(self.Args) - if err != nil { - return err - } - offset = 1 - } - +func (self *AgentRouteAction) makeRequest(ch channel.Channel) error { route := &ctrl_pb.Route{ - CircuitId: self.Args[offset], + CircuitId: self.Args[1], Forwards: []*ctrl_pb.Route_Forward{ { - SrcAddress: self.Args[offset+1], - DstAddress: self.Args[offset+2], + SrcAddress: self.Args[2], + DstAddress: self.Args[3], }, }, } @@ -83,15 +69,26 @@ func (self *AgentRouteAction) Run() error { return err } - fullBuf := make([]byte, len(buf)+6) - fullBuf[0] = byte(AgentAppRouter) - fullBuf[1] = router.UpdateRoute + msg := channel.NewMessage(int32(mgmt_pb.ContentType_RouterDebugUpdateRouteRequestType), buf) + msg.PutStringHeader(int32(mgmt_pb.Header_ControllerId), self.Args[0]) + reply, err := msg.WithTimeout(self.timeout).SendForReply(ch) + if err != nil { + return err + } - sizeBuf := make([]byte, 4) - binary.LittleEndian.PutUint32(sizeBuf, uint32(len(buf))) - - copy(fullBuf[2:], sizeBuf) - copy(fullBuf[6:], buf) - - return agent.MakeRequest(addr, agent.CustomOp, fullBuf, os.Stdout) + 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 } diff --git a/ziti/cmd/agentcli/agent_router_forget_link.go b/ziti/cmd/agentcli/agent_router_forget_link.go index 1ed92255e..e4cab0e1e 100644 --- a/ziti/cmd/agentcli/agent_router_forget_link.go +++ b/ziti/cmd/agentcli/agent_router_forget_link.go @@ -18,16 +18,12 @@ package agentcli import ( "fmt" - "github.com/openziti/agent" "github.com/openziti/channel/v2" "github.com/openziti/fabric/pb/mgmt_pb" "github.com/openziti/fabric/router" - "github.com/openziti/identity" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" - "net" - "time" ) type ForgetLinkAgentAction struct { @@ -35,56 +31,38 @@ type ForgetLinkAgentAction struct { } func NewForgetLinkAgentCmd(p common.OptionsProvider) *cobra.Command { - options := &ForgetLinkAgentAction{ + action := &ForgetLinkAgentAction{ AgentOptions: AgentOptions{ CommonOptions: p(), }, } cmd := &cobra.Command{ - Args: cobra.RangeArgs(1, 2), - Use: "forget-link ", + Args: cobra.ExactArgs(1), + Use: "forget-link ", Run: func(cmd *cobra.Command, args []string) { - options.Cmd = cmd - options.Args = args - err := options.Run() + action.Cmd = cmd + action.Args = args + err := action.Run() cmdhelper.CheckErr(err) }, } + action.AddAgentOptions(cmd) + return cmd } // Run implements the command func (self *ForgetLinkAgentAction) Run() error { - var addr string - var err error - if len(self.Args) == 2 { - addr, err = agent.ParseGopsAddress(self.Args) - if err != nil { - return err - } - } - - return agent.MakeRequestF(addr, agent.CustomOpAsync, []byte{router.AgentAppId}, self.makeRequest) + return self.MakeChannelRequest(router.AgentAppId, self.makeRequest) } -func (self *ForgetLinkAgentAction) makeRequest(conn net.Conn) error { - options := channel.DefaultOptions() - options.ConnectTimeout = time.Second - dialer := channel.NewExistingConnDialer(&identity.TokenId{Token: "agent"}, conn, nil) - ch, err := channel.NewChannel("agent", dialer, nil, options) - if err != nil { - return err - } - +func (self *ForgetLinkAgentAction) makeRequest(ch channel.Channel) error { linkId := self.Args[0] - if len(self.Args) == 2 { - linkId = self.Args[1] - } msg := channel.NewMessage(int32(mgmt_pb.ContentType_RouterDebugForgetLinkRequestType), []byte(linkId)) - reply, err := msg.WithTimeout(5 * time.Second).SendForReply(ch) + reply, err := msg.WithTimeout(self.timeout).SendForReply(ch) if err != nil { return err } diff --git a/ziti/cmd/agentcli/agent_router_toggle_ctrl_channel.go b/ziti/cmd/agentcli/agent_router_toggle_ctrl_channel.go new file mode 100644 index 000000000..57870f6a4 --- /dev/null +++ b/ziti/cmd/agentcli/agent_router_toggle_ctrl_channel.go @@ -0,0 +1,90 @@ +/* + 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/mgmt_pb" + "github.com/openziti/fabric/router" + "github.com/openziti/ziti/ziti/cmd/common" + cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" + "github.com/spf13/cobra" +) + +type ToggleCtrlChannelAgentAction struct { + AgentOptions + enable bool +} + +func NewToggleCtrlChannelAgentCmd(p common.OptionsProvider, name string, enable bool) *cobra.Command { + options := &ToggleCtrlChannelAgentAction{ + AgentOptions: AgentOptions{ + CommonOptions: p(), + }, + enable: enable, + } + + cmd := &cobra.Command{ + Args: cobra.RangeArgs(0, 1), + Use: name + " ", + Run: func(cmd *cobra.Command, args []string) { + options.Cmd = cmd + options.Args = args + err := options.Run() + cmdhelper.CheckErr(err) + }, + } + + options.AddAgentOptions(cmd) + + return cmd +} + +// Run implements the command +func (self *ToggleCtrlChannelAgentAction) Run() error { + return self.MakeChannelRequest(router.AgentAppId, self.makeRequest) +} + +func (self *ToggleCtrlChannelAgentAction) makeRequest(ch channel.Channel) error { + var ctrlId string + if len(self.Args) > 0 { + ctrlId = self.Args[0] + } + + msg := channel.NewMessage(int32(mgmt_pb.ContentType_RouterDebugToggleCtrlChannelRequestType), []byte(ctrlId)) + msg.PutBoolHeader(int32(mgmt_pb.Header_CtrlChanToggle), self.enable) + 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 +} diff --git a/ziti/cmd/agentcli/agent_set_channel_log_level.go b/ziti/cmd/agentcli/agent_set_channel_log_level.go index a92e8dd11..fe8ba3f71 100644 --- a/ziti/cmd/agentcli/agent_set_channel_log_level.go +++ b/ziti/cmd/agentcli/agent_set_channel_log_level.go @@ -19,6 +19,7 @@ package agentcli import ( "bytes" "encoding/binary" + "fmt" "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" @@ -27,6 +28,7 @@ import ( "github.com/spf13/cobra" "os" "strings" + "time" ) type AgentSetChannelLogLevelAction struct { @@ -52,29 +54,30 @@ func NewSetChannelLogLevelCmd(p common.OptionsProvider) *cobra.Command { }, } + action.AddAgentOptions(cmd) + return cmd } // Run implements the command func (self *AgentSetChannelLogLevelAction) Run() error { - var addr string - var err error + if self.Cmd.Flags().Changed("timeout") { + time.AfterFunc(self.timeout, func() { + fmt.Println("operation timed out") + os.Exit(-1) + }) + } + var channelArg string var levelArg string if len(self.Args) == 2 { - addr, err = agent.ParseGopsAddress(nil) channelArg = self.Args[0] levelArg = self.Args[1] } else { - addr, err = agent.ParseGopsAddress(self.Args) channelArg = self.Args[1] levelArg = self.Args[2] } - if err != nil { - return err - } - var level logrus.Level var found bool for _, l := range logrus.AllLevels { @@ -95,5 +98,13 @@ 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) } diff --git a/ziti/cmd/agentcli/agent_set_log_level.go b/ziti/cmd/agentcli/agent_set_log_level.go index be306648f..0c1d08bc5 100644 --- a/ziti/cmd/agentcli/agent_set_log_level.go +++ b/ziti/cmd/agentcli/agent_set_log_level.go @@ -17,6 +17,7 @@ package agentcli import ( + "fmt" "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" @@ -25,6 +26,7 @@ import ( "github.com/spf13/cobra" "os" "strings" + "time" ) type AgentSetLogLevelAction struct { @@ -50,24 +52,25 @@ func NewSetLogLevelCmd(p common.OptionsProvider) *cobra.Command { }, } + action.AddAgentOptions(cmd) + return cmd } // Run implements the command func (self *AgentSetLogLevelAction) Run() error { - var addr string - var err error - var levelArg string - if len(self.Args) == 1 { - addr, err = agent.ParseGopsAddress(nil) - levelArg = self.Args[0] - } else { - addr, err = agent.ParseGopsAddress(self.Args) - levelArg = self.Args[1] + if self.Cmd.Flags().Changed("timeout") { + time.AfterFunc(self.timeout, func() { + fmt.Println("operation timed out") + os.Exit(-1) + }) } - if err != nil { - return err + var levelArg string + if len(self.Args) == 1 { + levelArg = self.Args[0] + } else { + levelArg = self.Args[1] } var level logrus.Level @@ -84,5 +87,14 @@ 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) } diff --git a/ziti/cmd/agentcli/agent_setgc.go b/ziti/cmd/agentcli/agent_setgc.go index ca1a9663d..3d6176e53 100644 --- a/ziti/cmd/agentcli/agent_setgc.go +++ b/ziti/cmd/agentcli/agent_setgc.go @@ -18,12 +18,14 @@ package agentcli import ( "encoding/binary" + "fmt" "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" "os" "strconv" + "time" ) type AgentSetGcAction struct { @@ -49,24 +51,25 @@ func NewSetGcCmd(p common.OptionsProvider) *cobra.Command { }, } + action.AddAgentOptions(cmd) + return cmd } // Run implements the command -func (o *AgentSetGcAction) Run() error { - var addr string - var err error - var pctArg string - if len(o.Args) == 1 { - addr, err = agent.ParseGopsAddress(nil) - pctArg = o.Args[0] - } else { - addr, err = agent.ParseGopsAddress(o.Args) - pctArg = o.Args[1] +func (self *AgentSetGcAction) Run() error { + if self.Cmd.Flags().Changed("timeout") { + time.AfterFunc(self.timeout, func() { + fmt.Println("operation timed out") + os.Exit(-1) + }) } - if err != nil { - return err + var pctArg string + if len(self.Args) == 1 { + pctArg = self.Args[0] + } else { + pctArg = self.Args[1] } perc, err := strconv.ParseInt(pctArg, 10, strconv.IntSize) @@ -76,5 +79,14 @@ func (o *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) } diff --git a/ziti/cmd/agentcli/agent_simple.go b/ziti/cmd/agentcli/agent_simple.go index 38701e896..ff8f0dc4c 100644 --- a/ziti/cmd/agentcli/agent_simple.go +++ b/ziti/cmd/agentcli/agent_simple.go @@ -28,6 +28,29 @@ type SimpleAgentAction struct { AgentOptions } +func NewSimpleAgentCmd(name string, op byte, p common.OptionsProvider, desc string) *cobra.Command { + action := &SimpleAgentAction{ + AgentOptions: AgentOptions{ + CommonOptions: p(), + }, + } + + cmd := &cobra.Command{ + Args: cobra.MaximumNArgs(1), + Use: name + " ", + Short: desc, + RunE: func(cmd *cobra.Command, args []string) error { + action.Cmd = cmd + action.Args = args + return action.RunCopyOut(op, nil, os.Stdout) + }, + } + + action.AddAgentOptions(cmd) + + return cmd +} + func NewSimpleAgentCustomCmd(name string, appId AgentAppId, op byte, p common.OptionsProvider) *cobra.Command { action := &SimpleAgentAction{ AgentOptions: AgentOptions{ @@ -46,17 +69,13 @@ func NewSimpleAgentCustomCmd(name string, appId AgentAppId, op byte, p common.Op }, } + action.AddAgentOptions(cmd) + return cmd } // Run implements the command func (self *SimpleAgentAction) Run(appId AgentAppId, op byte) error { - addr, err := agent.ParseGopsAddress(self.Args) - if err != nil { - return err - } - buf := []byte{byte(appId), op} - - return agent.MakeRequest(addr, agent.CustomOp, buf, os.Stdout) + return self.RunCopyOut(agent.CustomOpAsync, buf, os.Stdout) } diff --git a/ziti/cmd/agentcli/agent_stack.go b/ziti/cmd/agentcli/agent_stack.go index 338a4a113..f5ba0d662 100644 --- a/ziti/cmd/agentcli/agent_stack.go +++ b/ziti/cmd/agentcli/agent_stack.go @@ -17,6 +17,7 @@ package agentcli import ( + "fmt" "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" @@ -49,7 +50,8 @@ func NewStackCmd(p common.OptionsProvider) *cobra.Command { }, } - cmd.Flags().DurationVar(&action.StackTimeout, "stack-timeout", 5*time.Second, "Timeout for stack operation") + action.AddAgentOptions(cmd) + cmd.Flags().DurationVar(&action.StackTimeout, "stack-timeout", 5*time.Second, "Timeout for stack operation (deprecated, use --timeout instead)") return cmd } @@ -57,11 +59,8 @@ func NewStackCmd(p common.OptionsProvider) *cobra.Command { // Run implements the command func (o *AgentStackAction) Run() error { time.AfterFunc(o.StackTimeout, func() { + fmt.Println("operation timed out") os.Exit(-1) }) - addr, err := agent.ParseGopsAddress(o.Args) - if err != nil { - return err - } - return agent.MakeRequest(addr, agent.StackTrace, nil, os.Stdout) + return o.RunCopyOut(agent.Stats, nil, os.Stdout) } diff --git a/ziti/cmd/agentcli/agent_stats.go b/ziti/cmd/agentcli/agent_stats.go deleted file mode 100644 index adeba86d4..000000000 --- a/ziti/cmd/agentcli/agent_stats.go +++ /dev/null @@ -1,60 +0,0 @@ -/* - 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 ( - "github.com/openziti/agent" - "github.com/openziti/ziti/ziti/cmd/common" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" - "github.com/spf13/cobra" - "os" -) - -type AgentStatsAction struct { - AgentOptions -} - -func NewStatsCmd(p common.OptionsProvider) *cobra.Command { - action := &AgentStatsAction{ - AgentOptions: AgentOptions{ - CommonOptions: p(), - }, - } - - cmd := &cobra.Command{ - Use: "stats ", - Short: "Emits some runtime information (# go-routines, threads, cpus, etc) from the target application", - Args: cobra.MaximumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - action.Cmd = cmd - action.Args = args - err := action.Run() - cmdhelper.CheckErr(err) - }, - } - - return cmd -} - -// Run implements the command -func (self *AgentStatsAction) Run() error { - addr, err := agent.ParseGopsAddress(self.Args) - if err != nil { - return err - } - return agent.MakeRequest(addr, agent.Stats, nil, os.Stdout) -} diff --git a/ziti/cmd/agentcli/agent_trace.go b/ziti/cmd/agentcli/agent_trace.go index ac704a74a..5cd750c12 100644 --- a/ziti/cmd/agentcli/agent_trace.go +++ b/ziti/cmd/agentcli/agent_trace.go @@ -19,7 +19,6 @@ package agentcli import ( "github.com/openziti/agent" "github.com/openziti/ziti/ziti/cmd/common" - cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/spf13/cobra" "os" ) @@ -38,22 +37,14 @@ func NewTraceCmd(p common.OptionsProvider) *cobra.Command { cmd := &cobra.Command{ Use: "trace", Short: "Turn tracing on for 5 seconds in the target application", - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { action.Cmd = cmd action.Args = args - err := action.Run() - cmdhelper.CheckErr(err) + return action.RunCopyOut(agent.Trace, nil, os.Stdout) }, } + action.AddAgentOptions(cmd) + return cmd } - -// Run implements the command -func (self *AgentTraceAction) Run() error { - addr, err := agent.ParseGopsAddress(self.Args) - if err != nil { - return err - } - return agent.MakeRequest(addr, agent.Trace, nil, os.Stdout) -} diff --git a/ziti/cmd/demo/echo_server_update_terminator.go b/ziti/cmd/demo/echo_server_update_terminator.go index 4bd27c748..202b9a5ee 100644 --- a/ziti/cmd/demo/echo_server_update_terminator.go +++ b/ziti/cmd/demo/echo_server_update_terminator.go @@ -70,7 +70,7 @@ func (self *AgentEchoServerUpdateTerminatorAction) Run() error { } } - return agentcli.MakeAgentChannelRequest(addr, agent.CustomOpAsync, []byte{byte(EchoServerAppId)}, self.makeRequest) + return agentcli.MakeAgentChannelRequest(addr, EchoServerAppId, self.makeRequest) } func (self *AgentEchoServerUpdateTerminatorAction) makeRequest(ch channel.Channel) error { diff --git a/ziti/controller/root.go b/ziti/controller/root.go index 4d3d0dff3..55f65fda1 100644 --- a/ziti/controller/root.go +++ b/ziti/controller/root.go @@ -54,6 +54,7 @@ func NewControllerCmd() *cobra.Command { cmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Enable verbose logging") cmd.PersistentFlags().BoolVarP(&cliAgentEnabled, "cliagent", "a", true, "Enable/disabled CLI Agent (enabled by default)") cmd.PersistentFlags().StringVar(&cliAgentAddr, "cli-agent-addr", "", "Specify where CLI Agent should list (ex: unix:/tmp/myfile.sock or tcp:127.0.0.1:10001)") + cmd.PersistentFlags().StringVar(&cliAgentAlias, "cli-agent-alias", "", "Alias which can be used by ziti agent commands to find this instance") cmd.PersistentFlags().StringVar(&logFormatter, "log-formatter", "", "Specify log formatter [json|pfxlog|text]") cmd.AddCommand(NewRunCmd()) @@ -68,6 +69,7 @@ func NewControllerCmd() *cobra.Command { var verbose bool var cliAgentEnabled bool var cliAgentAddr string +var cliAgentAlias string var logFormatter string func Execute() { diff --git a/ziti/controller/run.go b/ziti/controller/run.go index 875ac2f49..8941b3cfb 100644 --- a/ziti/controller/run.go +++ b/ziti/controller/run.go @@ -74,9 +74,14 @@ func run(cmd *cobra.Command, args []string) { edgeController.Initialize() if cliAgentEnabled { - options := agent.Options{Addr: cliAgentAddr} + options := agent.Options{ + Addr: cliAgentAddr, + AppId: config.Id.Token, + AppType: "controller", + AppVersion: version.GetVersion(), + AppAlias: cliAgentAlias, + } options.CustomOps = map[byte]func(conn net.Conn) error{ - agent.CustomOp: fabricController.HandleCustomAgentOp, agent.CustomOpAsync: fabricController.HandleCustomAgentAsyncOp, } if err := agent.Listen(options); err != nil { diff --git a/ziti/router/root.go b/ziti/router/root.go index eb962e88a..3a9c6f66d 100644 --- a/ziti/router/root.go +++ b/ziti/router/root.go @@ -53,6 +53,7 @@ func NewRouterCmd() *cobra.Command { routerCmd.PersistentFlags().StringVar(&logFormatter, "log-formatter", "", "Specify log formatter [json|pfxlog|text]") routerCmd.PersistentFlags().BoolVar(&cliAgentEnabled, "cli-agent", true, "Enable/disable CLI Agent (enabled by default)") routerCmd.PersistentFlags().StringVar(&cliAgentAddr, "cli-agent-addr", "", "Specify where CLI Agent should list (ex: unix:/tmp/myfile.sock or tcp:127.0.0.1:10001)") + routerCmd.PersistentFlags().StringVar(&cliAgentAlias, "cli-agent-alias", "", "Alias which can be used by ziti agent commands to find this instance") routerCmd.PersistentFlags().BoolVar(&enableDebugOps, "debug-ops", false, "Enable/disable debug agent operations (disabled by default)") routerCmd.AddCommand(NewRunCmd()) @@ -67,6 +68,7 @@ var logFormatter string var cliAgentEnabled bool var enableDebugOps bool var cliAgentAddr string +var cliAgentAlias string func Execute() { if err := NewRouterCmd().Execute(); err != nil { diff --git a/ziti/router/run.go b/ziti/router/run.go index 958cffde6..537f11560 100644 --- a/ziti/router/run.go +++ b/ziti/router/run.go @@ -49,7 +49,6 @@ func NewRunCmd() *cobra.Command { //flags are added to an internal map and read later on, see getFlags() runCmd.Flags().BoolP("extend", "e", false, "force the router on startup to extend enrollment certificates") - return runCmd } @@ -94,7 +93,13 @@ func run(cmd *cobra.Command, args []string) { } if cliAgentEnabled { - options := agent.Options{Addr: cliAgentAddr} + options := agent.Options{ + Addr: cliAgentAddr, + AppId: config.Id.Token, + AppType: "router", + AppVersion: version.GetVersion(), + AppAlias: cliAgentAlias, + } if config.EnableDebugOps { enableDebugOps = true } From 26257204927e19a16e0bfd272f3f38f40c91aec3 Mon Sep 17 00:00:00 2001 From: Shawn Carey Date: Fri, 13 Jan 2023 14:55:38 -0500 Subject: [PATCH 05/41] include arm64 build of quickstart image (#947) include arm64 build of quickstart image --- quickstart/docker/image/ziti-cli-functions.sh | 4 +- quickstart/docker/pushLatestDocker.sh | 56 ++++++++----------- 2 files changed, 25 insertions(+), 35 deletions(-) diff --git a/quickstart/docker/image/ziti-cli-functions.sh b/quickstart/docker/image/ziti-cli-functions.sh index b3dbb670a..358f5433a 100755 --- a/quickstart/docker/image/ziti-cli-functions.sh +++ b/quickstart/docker/image/ziti-cli-functions.sh @@ -173,6 +173,7 @@ function verifyZitiVersionExists { } function detectArchitecture { + if [ -n "${ZITI_ARCH}" ]; then return; fi ZITI_ARCH="amd64" detected_arch="$(uname -m)" # Apple M1 silicon @@ -238,7 +239,7 @@ function getZiti { if [[ "${ZITI_BIN_DIR-}" == "" ]]; then export ZITI_BIN_DIR="${ziti_bin_root}/ziti-${ZITI_BINARIES_VERSION}"; else echo "Using ZITI_BIN_DIR: ${ZITI_BIN_DIR}"; fi - ZITI_BINARIES_FILE_ABSPATH="${ZITI_HOME-}/ziti-bin/${ZITI_BINARIES_FILE}" + ZITI_BINARIES_FILE_ABSPATH="${ziti_bin_root}/${ZITI_BINARIES_FILE}" if ! test -f "${ZITI_BINARIES_FILE_ABSPATH}"; then zitidl="https://github.com/openziti/ziti/releases/download/${ZITI_BINARIES_VERSION-}/${ZITI_BINARIES_FILE}" echo -e 'Downloading '"$(BLUE "${zitidl}")"' to '"$(BLUE "${ZITI_BINARIES_FILE_ABSPATH}")" @@ -1487,6 +1488,7 @@ HeredocForSystemd } function setOs { + if [ -n "${ZITI_OSTYPE}" ]; then return; fi if [[ "$OSTYPE" == "linux-gnu"* ]]; then export ZITI_OSTYPE="linux" elif [[ "$OSTYPE" == "darwin"* ]]; then diff --git a/quickstart/docker/pushLatestDocker.sh b/quickstart/docker/pushLatestDocker.sh index 7584a59a6..b3d7e4ff6 100755 --- a/quickstart/docker/pushLatestDocker.sh +++ b/quickstart/docker/pushLatestDocker.sh @@ -6,41 +6,29 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" ZITI_QUICKSTART_ROOT="$(realpath ${SCRIPT_DIR}/..)" ZITI_BIN_ROOT="${ZITI_QUICKSTART_ROOT}/docker" -mkdir -p "${ZITI_BIN_ROOT}/ziti-bin" +for arch in amd64 arm64; do + (export ZITI_OSTYPE=linux; export ZITI_ARCH="${arch}" + source "${ZITI_QUICKSTART_ROOT}/ziti-cli-functions.sh" + if [ -d "${SCRIPT_DIR}/image/ziti.ignore" ]; then + rm -rf "${SCRIPT_DIR}/image/ziti.ignore" + fi -source "${ZITI_QUICKSTART_ROOT}/ziti-cli-functions.sh" + getZiti -ZITI_HOME="${ZITI_BIN_ROOT}" + mv "${ZITI_BIN_DIR}" "${SCRIPT_DIR}/image/ziti.ignore/" + docker build --platform linux/${arch} "${SCRIPT_DIR}/image" -t openziti/quickstart -if [ -d "${ZITI_BIN_ROOT}/image/ziti.ignore" ]; then - rm -rf "${ZITI_BIN_ROOT}/image/ziti.ignore" -fi + if [ -d "${SCRIPT_DIR}/image/ziti.ignore" ]; then + rm -rf "${SCRIPT_DIR}/image/ziti.ignore" + fi -getZiti - -mv "${ZITI_BIN_DIR}" "${SCRIPT_DIR}/image/ziti.ignore/" -docker build "${SCRIPT_DIR}/image" -t openziti/quickstart - -if [ -d "${ZITI_BIN_ROOT}/image/ziti.ignore" ]; then - rm -rf "${ZITI_BIN_ROOT}/image/ziti.ignore" -fi - -#if [ -f "${ZITI_BIN_ROOT}/ziti-*tar.gz" ]; then -# rm "${ZITI_BIN_ROOT}/ziti-*tar.gz" -#fi -if [ -d "${ZITI_BIN_ROOT}/ziti-bin" ]; then - rm -rf "${ZITI_BIN_ROOT}/ziti-bin" -fi -if [ -d "${ZITI_BIN_ROOT}/image/ziti.ignore" ]; then - rm -rf "${ZITI_BIN_ROOT}/image/ziti.ignore/" -fi - -vers="$(echo "${ZITI_BINARIES_VERSION}" | cut -c 2-100)" -echo DOCKERTAG: docker tag openziti/quickstart "openziti/quickstart:${vers}" -docker tag openziti/quickstart "openziti/quickstart:${vers}" -echo DOCKERTAG: docker tag openziti/quickstart "openziti/quickstart:latest" -docker tag openziti/quickstart "openziti/quickstart:latest" -echo DOCKERPUSH: docker push "openziti/quickstart:${vers}" -docker push "openziti/quickstart:${vers}" -echo DOCKERPUSH: docker push "openziti/quickstart:latest" -docker push "openziti/quickstart:latest" + vers="$(echo "${ZITI_BINARIES_VERSION}" | cut -c 2-100)" + echo DOCKERTAG: docker tag openziti/quickstart "openziti/quickstart:${vers}" + docker tag openziti/quickstart "openziti/quickstart:${vers}" + echo DOCKERTAG: docker tag openziti/quickstart "openziti/quickstart:latest" + docker tag openziti/quickstart "openziti/quickstart:latest" + echo DOCKERPUSH: docker push "openziti/quickstart:${vers}" + docker push "openziti/quickstart:${vers}" + echo DOCKERPUSH: docker push "openziti/quickstart:latest" + docker push "openziti/quickstart:latest") +done \ No newline at end of file From fe904d28a9332c26f78982a7d8dac67598d0534e Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Tue, 17 Jan 2023 11:45:40 -0500 Subject: [PATCH 06/41] update readme, add some badges and a logo --- README.md | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 8ac9b4759..44d565a1d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ -# Ziti +[![Build Status](https://github.com/openziti/ziti/actions/workflows/main.yml/badge.svg)](https://github.com/openziti/ziti/actions/workflows/main.yml) +[![Go Report Card](https://goreportcard.com/badge/github.com/openziti/ziti)](https://goreportcard.com/report/github.com/openziti/ziti) +![OpenZiti Logo](https://raw.githubusercontent.com/openziti/ziti-doc/main/docusaurus/static/img/ziti-logo-dark.svg) -Ziti represents the next generation of secure, open-source networking for your applications. Ziti has several components. +# OpenZiti + +OpenZiti represents the next generation of secure, open-source networking for your applications. OpenZiti has several components. ## Quick Reference @@ -17,8 +21,8 @@ Ziti represents the next generation of secure, open-source networking for your a * The OpenZiti fabric provides a scalable, plugable, networking mesh with built in smart routing * The OpenZiti edge components provide a secure, Zero Trust entry point into your network -* The OpenZiti SDKs allow you to integrate Ziti directly into your applications -* The OpenZiti tunnelers and proxies allow existing applications and networks to take advantage of a Ziti deployment +* The OpenZiti SDKs allow you to integrate OpenZiti directly into your applications +* The OpenZiti tunnelers and proxies allow existing applications and networks to take advantage of a OpenZiti deployment ### Security Features @@ -56,11 +60,11 @@ Let's break some of these buzzwords down. Many networking security solutions act like a wall around an internal network. Once you are through the wall, you have access to everything inside. Zero trust solutions enforce not just access to a network, but access to individual applications within that network. -Every client in a Ziti system must have an identity with provisioned certificates. The certificates are used to establish secure communications channels as well as for authentication and authorization of the associated identity. Whenever the client attempts to access a network application, Ziti will first ensure that the identity has access to the application. If access is revoked, open network connections will be closed. +Every client in a OpenZiti system must have an identity with provisioned certificates. The certificates are used to establish secure communications channels as well as for authentication and authorization of the associated identity. Whenever the client attempts to access a network application, OpenZiti will first ensure that the identity has access to the application. If access is revoked, open network connections will be closed. -This model enables Ziti systems to provide access to multiple applications while ensuring that clients only get access to those applications to which they have been granted access. +This model enables OpenZiti systems to provide access to multiple applications while ensuring that clients only get access to those applications to which they have been granted access. -In addition to requiring cert based authentication for clients, Ziti uses certificates to authorize communication between Ziti components. +In addition to requiring cert based authentication for clients, OpenZiti uses certificates to authorize communication between OpenZiti components. ### Dark Services and Routers @@ -74,15 +78,15 @@ There are various levels of accessibility a network application/service can have 1. For end users, VPNs add an extra step that needs to be done each time they want to access the service. 1. Services can be made dark, meaning they do not have any ports open for anyone to even try and connect to. -Making something dark can be done in a few ways, but the way it's generally handled in Ziti is that services reach out and establish one or more connections to the Ziti network fabric. Clients coming into the fabric can then reach the service through these connections after being authenticated and authorized. +Making something dark can be done in a few ways, but the way it's generally handled in OpenZiti is that services reach out and establish one or more connections to the OpenZiti network fabric. Clients coming into the fabric can then reach the service through these connections after being authenticated and authorized. -Ziti routers, which make up the fabric, can also be dark. Routers located in private networks will usually be made dark. These routers will reach out of the private network to talk to the controller and to make connections to join the network fabric mesh. This allows the services and routers in your private networks to make only outbound connections, so no holes have to be opened for inbound traffic. +OpenZiti routers, which make up the fabric, can also be dark. Routers located in private networks will usually be made dark. These routers will reach out of the private network to talk to the controller and to make connections to join the network fabric mesh. This allows the services and routers in your private networks to make only outbound connections, so no holes have to be opened for inbound traffic. -Services can be completely dark if they are implemented with a Ziti SDK. If this is not possible a Ziti tunneler or proxy can be colocated with the service. The service then only needs to allow connections from the local machine or network, depending on how close you colocate the proxy to the service. +Services can be completely dark if they are implemented with a OpenZiti SDK. If this is not possible a OpenZiti tunneler or proxy can be colocated with the service. The service then only needs to allow connections from the local machine or network, depending on how close you colocate the proxy to the service. ### End to End Encryption -If you take advantage of Ziti's developer SDKs and embed Ziti in your client and server applications, your traffic can be configured to be seamlessly encrypted from the client application to server application. If you prefer to use tunnelers or proxy applications, the traffic can be encrypted for you from machine to machine or private network to private network. Various combinations of the above are also supported. +If you take advantage of OpenZiti's developer SDKs and embed OpenZiti in your client and server applications, your traffic can be configured to be seamlessly encrypted from the client application to server application. If you prefer to use tunnelers or proxy applications, the traffic can be encrypted for you from machine to machine or private network to private network. Various combinations of the above are also supported. End-to-end encryption means that even if systems between the client and server are compromised, your traffic cannot be decrypted or tampered with. @@ -94,7 +98,7 @@ If you are looking to jump right in feet first you can follow along with one of guides](https://openziti.github.io/ziti/quickstarts/quickstart-overview.html). These guides are designed to get an overlay network quickly and allow you to run it all locally, use Docker or host it anywhere. -This environment is perfect for evaluators to get to know Ziti and the capabilities it offers. The environment was not +This environment is perfect for evaluators to get to know OpenZiti and the capabilities it offers. The environment was not designed for large scale deployment or for long-term usage. If you are looking for a managed service to help you run a truly global, scalable network browse over [the NetFoundry web site](https://netfoundry.io) to learn more. @@ -121,10 +125,10 @@ cruise on over to [the OpenZiti Discourse forum](https://openziti.discourse.grou ### Contributing -The Ziti project welcomes contributions including, but not limited to, code, documentation and bug reports. +The OpenZiti project welcomes contributions including, but not limited to, code, documentation and bug reports. -* All Ziti code is found on Github under the [OpenZiti](https://github.com/openziti) organization. - * [ziti](https://github.com/openziti/ziti): top level project which builds all Ziti executables +* All OpenZiti code is found on Github under the [OpenZiti](https://github.com/openziti) organization. + * [ziti](https://github.com/openziti/ziti): top level project which builds all OpenZiti executables * [edge](https://github.com/openziti/edge): edge components and model which includes identity, polices and config * [fabric](https://github.com/openziti/fabric): fabric project which includes core controller and router * [foundation](https://github.com/openziti/foundation): project which contains library code used across multiple projects @@ -137,5 +141,5 @@ The Ziti project welcomes contributions including, but not limited to, code, doc * [ziti-sdk-csharp](https://github.com/openziti/ziti-sdk-csharp): C# SDK * [ziti-doc](https://github.com/openziti/ziti-doc): Powers the static documentation site -Ziti was developed and open sourced by [Netfoundry, Inc](https://netfoundry.io). NetFoundry continues to fund and +OpenZiti was developed and open sourced by [Netfoundry, Inc](https://netfoundry.io). NetFoundry continues to fund and contribute to OpenZiti. From 56f9852ed3059132d52b4dbb4a2eb5fc15d4845c Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 17 Jan 2023 13:21:01 -0500 Subject: [PATCH 07/41] Fix CODEOWNERS, update example config with adv addr, fix missing agent timeout --- .github/CODEOWNERS | 3 +-- doc/ha/ctrl1.yml | 4 ++-- doc/ha/ctrl2.yml | 3 ++- doc/ha/ctrl3.yml | 3 ++- ziti/cmd/agentcli/agent.go | 1 + 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 85e37db81..a3faf4834 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,3 @@ # see: # https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-code-owners -* @openziti/sig-core -* @openziti/maintainers +* @openziti/sig-core @openziti/maintainers diff --git a/doc/ha/ctrl1.yml b/doc/ha/ctrl1.yml index 8ec3eb0a3..73ce18051 100644 --- a/doc/ha/ctrl1.yml +++ b/doc/ha/ctrl1.yml @@ -1,8 +1,6 @@ v: 3 - raft: minClusterSize: 3 - advertiseAddress: tls:localhost:6262 dataDir: ./data/ctrl1 bootstrapMembers: - tls:127.0.0.1:6363 @@ -15,6 +13,8 @@ identity: ctrl: listener: tls:127.0.0.1:6262 + options: + advertiseAddress: tls:localhost:6262 healthChecks: boltCheck: diff --git a/doc/ha/ctrl2.yml b/doc/ha/ctrl2.yml index bdbf2b983..7bb51706d 100644 --- a/doc/ha/ctrl2.yml +++ b/doc/ha/ctrl2.yml @@ -2,7 +2,6 @@ v: 3 raft: minClusterSize: 3 - advertiseAddress: tls:localhost:6363 dataDir: ./data/ctrl2 identity: @@ -12,6 +11,8 @@ identity: ctrl: listener: tls:127.0.0.1:6363 + options: + advertiseAddress: tls:localhost:6363 healthChecks: boltCheck: diff --git a/doc/ha/ctrl3.yml b/doc/ha/ctrl3.yml index cdbb4123d..4d5c5dac3 100644 --- a/doc/ha/ctrl3.yml +++ b/doc/ha/ctrl3.yml @@ -2,7 +2,6 @@ v: 3 raft: minClusterSize: 3 - advertiseAddress: tls:localhost:6464 dataDir: ./data/ctrl3 identity: @@ -12,6 +11,8 @@ identity: ctrl: listener: tls:127.0.0.1:6464 + options: + advertiseAddress: tls:localhost:6464 healthChecks: boltCheck: diff --git a/ziti/cmd/agentcli/agent.go b/ziti/cmd/agentcli/agent.go index dd9d8ad6f..55f809d4c 100644 --- a/ziti/cmd/agentcli/agent.go +++ b/ziti/cmd/agentcli/agent.go @@ -108,6 +108,7 @@ func (self *AgentOptions) AddAgentOptions(cmd *cobra.Command) { cmd.Flags().StringVarP(&self.appType, "app-type", "t", "", "Type of host application to talk to (like controller or router)") cmd.Flags().StringVarP(&self.appType, "app-alias", "a", "", "Alias of host application to talk to (specified in host application)") cmd.Flags().StringVar(&self.tcpAddr, "tcp-addr", "", "Type of host application to talk to (like controller or router)") + cmd.Flags().DurationVar(&self.timeout, "timeout", 5*time.Second, "Operation timeout") } func (self *AgentOptions) GetProcess() (*agent.Process, error) { From 2af4c0227597b22a33d937a4c97b66aab1adcf84 Mon Sep 17 00:00:00 2001 From: Shawn Carey Date: Tue, 17 Jan 2023 16:12:39 -0500 Subject: [PATCH 08/41] go mod tidy, and update edge to fix nonlinux builds (#944) --- CHANGELOG.md | 2 +- go.mod | 4 ++-- go.sum | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4204d388..035a0ba72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ## Component Updates and Bug Fixes -* github.com/openziti/edge: [v0.24.95 -> v0.24.101](https://github.com/openziti/edge/compare/v0.24.95...v0.24.101) +* github.com/openziti/edge: [v0.24.95 -> v0.24.104](https://github.com/openziti/edge/compare/v0.24.95...v0.24.104) * [Issue #1292](https://github.com/openziti/edge/issues/1292) - Support alternative tproxy configuration methods diff --git a/go.mod b/go.mod index 40d5c6250..3c0a018ce 100644 --- a/go.mod +++ b/go.mod @@ -22,8 +22,8 @@ require ( github.com/michaelquigley/pfxlog v0.6.9 github.com/openziti/agent v1.0.8 github.com/openziti/channel/v2 v2.0.25 - github.com/openziti/edge v0.24.100 - github.com/openziti/fabric v0.22.9 + github.com/openziti/edge v0.24.104 + github.com/openziti/fabric v0.22.10 github.com/openziti/foundation/v2 v2.0.10 github.com/openziti/identity v1.0.29 github.com/openziti/runzmd v1.0.8 diff --git a/go.sum b/go.sum index 192743f80..b0271e5a2 100644 --- a/go.sum +++ b/go.sum @@ -699,10 +699,10 @@ github.com/openziti/channel/v2 v2.0.25 h1:ihw9DDTfMHDL33gZFLqDyADFGKBec4beaThV/V github.com/openziti/channel/v2 v2.0.25/go.mod h1:eHPS7dmvDV+Q/SmbB2gwvdvdz/NcnetFshHsdNzAnZs= 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.100 h1:sBoG0GtyFCyodukuG1IDCoXm2PjLyjt8jxKhVQjc0ww= -github.com/openziti/edge v0.24.100/go.mod h1:Yn3eOldLoe6BZyJvOQbgY02LDOpo9oW48v1ZKhTwqZs= -github.com/openziti/fabric v0.22.9 h1:8bI+yeWMBwBYwpteg8A2fxI4rYB65B6UBkIkLSsdh8s= -github.com/openziti/fabric v0.22.9/go.mod h1:8i3qG7UJbqWHH3V6nZlhzaaGyqiecn4cCsj9qGf4Rec= +github.com/openziti/edge v0.24.104 h1:+95zy3rYeAtn4DDpYTxNFGqNGqwPCcD44JUB2ezbLxg= +github.com/openziti/edge v0.24.104/go.mod h1:qQhaMTwWE++B+57WDqjWHQJ4tocgL7M7gODNnEzXaNI= +github.com/openziti/fabric v0.22.10 h1:h4wpH9yON4vZHQ1PPyWl8cJfbMC2LpsUC6UT/zM1TSs= +github.com/openziti/fabric v0.22.10/go.mod h1:8i3qG7UJbqWHH3V6nZlhzaaGyqiecn4cCsj9qGf4Rec= 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.29 h1:FkY/Hzpfh2/U2cUzYR2X3380/IKGIQYpJaKWqXpOIAg= From 57e096aefee57643d2c3c707392d7082c5cd6b85 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 17 Jan 2023 16:14:47 -0500 Subject: [PATCH 09/41] force single-byte locale in command "tr" when generating random password --- quickstart/docker/image/ziti-cli-functions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickstart/docker/image/ziti-cli-functions.sh b/quickstart/docker/image/ziti-cli-functions.sh index 358f5433a..87f12020c 100755 --- a/quickstart/docker/image/ziti-cli-functions.sh +++ b/quickstart/docker/image/ziti-cli-functions.sh @@ -1077,7 +1077,7 @@ function ziti_createEnvFile { if [[ "${ZITI_USER-}" == "" ]]; then export ZITI_USER="admin"; fi if [[ "${ZITI_PWD-}" == "" ]]; then - ZITI_PWD="$(tr -dc _A-Z-a-z-0-9 < /dev/urandom | head -c32)" + ZITI_PWD="$(LC_ALL=C tr -dc _A-Z-a-z-0-9 < /dev/urandom | head -c32)" echo -en "Do you want to keep the generated admin password '$ZITI_PWD'? (Y/n) " # shellcheck disable=SC2162 read -r pwd_reply From 40b1dd06c437b0694ab64d04cacf51f37416ad21 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Tue, 17 Jan 2023 21:10:50 -0500 Subject: [PATCH 10/41] updates to compose exposing more ports/variables --- quickstart/docker/docker-compose.yml | 9 +++++---- .../docker/simplified-docker-compose.yml | 20 ++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/quickstart/docker/docker-compose.yml b/quickstart/docker/docker-compose.yml index d578775f6..b550dfd13 100644 --- a/quickstart/docker/docker-compose.yml +++ b/quickstart/docker/docker-compose.yml @@ -50,12 +50,13 @@ services: depends_on: - ziti-controller environment: - - ZITI_CONTROLLER_RAWNAME="${ZITI_CONTROLLER_RAWNAME}" - - ZITI_EDGE_CONTROLLER_RAWNAME="${ZITI_EDGE_CONTROLLER_RAWNAME}" - - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router + - ZITI_CONTROLLER_RAWNAME=${ZITI_CONTROLLER_RAWNAME} + - ZITI_EDGE_CONTROLLER_RAWNAME=${ZITI_EDGE_CONTROLLER_RAWNAME} + - ZITI_EDGE_ROUTER_RAWNAME=${ZITI_EDGE_ROUTER_RAWNAME} - ZITI_EDGE_ROUTER_ROLES=public + - ZITI_EDGE_ROUTER_PORT=${ZITI_EDGE_ROUTER_PORT} ports: - - "3022:3022" + - ${ZITI_EDGE_ROUTER_PORT}:${ZITI_EDGE_ROUTER_PORT} networks: - zitiblue - zitired diff --git a/quickstart/docker/simplified-docker-compose.yml b/quickstart/docker/simplified-docker-compose.yml index 94e0287e8..b889149b8 100644 --- a/quickstart/docker/simplified-docker-compose.yml +++ b/quickstart/docker/simplified-docker-compose.yml @@ -5,7 +5,11 @@ services: env_file: - ./.env ports: - - "1280:1280" + - "${ZITI_EDGE_CONTROLLER_PORT}:${ZITI_EDGE_CONTROLLER_PORT}" + - "${ZITI_CTRL_PORT}:${ZITI_CTRL_PORT}" + environment: + - ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION=${ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION} + - ZITI_EDGE_ROUTER_ENROLLMENT_DURATION=${ZITI_EDGE_ROUTER_ENROLLMENT_DURATION} networks: zitiblue: aliases: @@ -43,13 +47,15 @@ services: ziti-edge-router: image: "${ZITI_IMAGE}:${ZITI_VERSION}" - environment: - - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router - - ZITI_EDGE_ROUTER_ROLES=public depends_on: - ziti-controller + environment: + - ZITI_CONTROLLER_RAWNAME=${ZITI_CONTROLLER_RAWNAME} + - ZITI_EDGE_CONTROLLER_RAWNAME=${ZITI_EDGE_CONTROLLER_RAWNAME} + - ZITI_EDGE_ROUTER_RAWNAME=${ZITI_EDGE_ROUTER_RAWNAME} + - ZITI_EDGE_ROUTER_ROLES=public ports: - - "3022:3022" + - ${ZITI_EDGE_ROUTER_PORT}:${ZITI_EDGE_ROUTER_PORT} networks: - zitiblue - zitired @@ -66,8 +72,8 @@ services: depends_on: - ziti-controller ports: - - "1408:1408" - - "8443:8443" + - 1408:1408 + - 8443:8443 volumes: - ziti-fs:/persistent From 38f920c0a5048c1bef0a89490d588a2367cbef05 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Tue, 17 Jan 2023 22:36:17 -0500 Subject: [PATCH 11/41] undo naming change --- quickstart/docker/docker-compose.yml | 2 +- quickstart/docker/simplified-docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/quickstart/docker/docker-compose.yml b/quickstart/docker/docker-compose.yml index b550dfd13..f4904cd67 100644 --- a/quickstart/docker/docker-compose.yml +++ b/quickstart/docker/docker-compose.yml @@ -52,7 +52,7 @@ services: environment: - ZITI_CONTROLLER_RAWNAME=${ZITI_CONTROLLER_RAWNAME} - ZITI_EDGE_CONTROLLER_RAWNAME=${ZITI_EDGE_CONTROLLER_RAWNAME} - - ZITI_EDGE_ROUTER_RAWNAME=${ZITI_EDGE_ROUTER_RAWNAME} + - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router - ZITI_EDGE_ROUTER_ROLES=public - ZITI_EDGE_ROUTER_PORT=${ZITI_EDGE_ROUTER_PORT} ports: diff --git a/quickstart/docker/simplified-docker-compose.yml b/quickstart/docker/simplified-docker-compose.yml index b889149b8..5f9ce3e32 100644 --- a/quickstart/docker/simplified-docker-compose.yml +++ b/quickstart/docker/simplified-docker-compose.yml @@ -52,7 +52,7 @@ services: environment: - ZITI_CONTROLLER_RAWNAME=${ZITI_CONTROLLER_RAWNAME} - ZITI_EDGE_CONTROLLER_RAWNAME=${ZITI_EDGE_CONTROLLER_RAWNAME} - - ZITI_EDGE_ROUTER_RAWNAME=${ZITI_EDGE_ROUTER_RAWNAME} + - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router - ZITI_EDGE_ROUTER_ROLES=public ports: - ${ZITI_EDGE_ROUTER_PORT}:${ZITI_EDGE_ROUTER_PORT} From d3896f3baf4904308f48eaf7b23284b438e38bd8 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Tue, 17 Jan 2023 23:34:44 -0500 Subject: [PATCH 12/41] updates to compose to support a bit easier customizing --- quickstart/docker/.env | 29 +++++++++++-------- quickstart/docker/docker-compose.yml | 20 ++++++------- .../docker/simplified-docker-compose.yml | 14 +++++---- 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/quickstart/docker/.env b/quickstart/docker/.env index ea311ef47..de3280a73 100644 --- a/quickstart/docker/.env +++ b/quickstart/docker/.env @@ -1,18 +1,23 @@ # OpenZiti Variables ZITI_IMAGE=openziti/quickstart ZITI_VERSION=latest -ZITI_CONTROLLER_RAWNAME=ziti-controller -ZITI_EDGE_CONTROLLER_RAWNAME=ziti-edge-controller # The duration of the enrollment period (in minutes), default if not set -ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION= -ZITI_EDGE_ROUTER_ENROLLMENT_DURATION= +# shown - 7days +ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION=10080 +ZITI_EDGE_ROUTER_ENROLLMENT_DURATION=10080 -## Additional variables to override. -#ZITI_EDGE_CONTROLLER_RAWNAME=some.other.name.com -#ZITI_EDGE_CTRL_ADVERTISED_HOST_PORT=some.other.name.com:1280 -#ZITI_EDGE_CONTROLLER_HOSTNAME=some.other.name.com -#ZITI_EDGE_CONTROLLER_IP_OVERRIDE=20.20.20.20 -#ZITI_CTRL_ADVERTISED_ADDRESS=some.other.name.com -#ZITI_CONTROLLER_HOSTNAME=some.other.name.com -#ZITI_CTRL_PORT=6262 +# controller address/port information +ZITI_CONTROLLER_RAWNAME=ziti-controller +#ZITI_CONTROLLER_HOSTNAME=ec2-3-134-108-218.us-east-2.compute.amazonaws.com +#ZITI_CTRL_PORT=8440 + +ZITI_EDGE_CONTROLLER_RAWNAME=ziti-edge-controller +#ZITI_EDGE_CONTROLLER_HOSTNAME=ec2-3-134-108-218.us-east-2.compute.amazonaws.com +#ZITI_EDGE_CONTROLLER_PORT=8441 +#ZITI_EDGE_CONTROLLER_IP_OVERRIDE=172.17.0.1 + +# router address/port information +#ZITI_EDGE_ROUTER_RAWNAME=ec2-3-134-108-218.us-east-2.compute.amazonaws.com +#ZITI_EDGE_ROUTER_PORT=8442 +#ZITI_EDGE_ROUTER_IP_OVERRIDE=172.17.0.1 diff --git a/quickstart/docker/docker-compose.yml b/quickstart/docker/docker-compose.yml index f4904cd67..b4466c65d 100644 --- a/quickstart/docker/docker-compose.yml +++ b/quickstart/docker/docker-compose.yml @@ -5,8 +5,8 @@ services: env_file: - ./.env ports: - - "${ZITI_EDGE_CONTROLLER_PORT}:${ZITI_EDGE_CONTROLLER_PORT}" - - "${ZITI_CTRL_PORT}:${ZITI_CTRL_PORT}" + - ${ZITI_EDGE_CONTROLLER_PORT:-1280}:${ZITI_EDGE_CONTROLLER_PORT:-1280} + - ${ZITI_CTRL_PORT:-6262}:${ZITI_CTRL_PORT:-6262} environment: - ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION=${ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION} - ZITI_EDGE_ROUTER_ENROLLMENT_DURATION=${ZITI_EDGE_ROUTER_ENROLLMENT_DURATION} @@ -50,13 +50,12 @@ services: depends_on: - ziti-controller environment: - - ZITI_CONTROLLER_RAWNAME=${ZITI_CONTROLLER_RAWNAME} - - ZITI_EDGE_CONTROLLER_RAWNAME=${ZITI_EDGE_CONTROLLER_RAWNAME} + - ZITI_CONTROLLER_RAWNAME="${ZITI_CONTROLLER_RAWNAME}" + - ZITI_EDGE_CONTROLLER_RAWNAME="${ZITI_EDGE_CONTROLLER_RAWNAME}" - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router - ZITI_EDGE_ROUTER_ROLES=public - - ZITI_EDGE_ROUTER_PORT=${ZITI_EDGE_ROUTER_PORT} ports: - - ${ZITI_EDGE_ROUTER_PORT}:${ZITI_EDGE_ROUTER_PORT} + - ${ZITI_EDGE_ROUTER_PORT:-3022}:${ZITI_EDGE_ROUTER_PORT:-3022} networks: - zitiblue - zitired @@ -76,7 +75,7 @@ services: - ZITI_EDGE_ROUTER_PORT=3023 - ZITI_EDGE_ROUTER_ROLES=public ports: - - "3023:3023" + - 3023:3023 networks: - zitiblue - zitired @@ -140,7 +139,7 @@ services: web-test-blue: image: crccheck/hello-world ports: - - "80:8000" + - 80:8000 networks: zitiblue: aliases: @@ -153,9 +152,10 @@ services: environment: - ZAC_SERVER_CERT_CHAIN=/persistent/pki/ziti-controller-intermediate/certs/ziti-controller-server.cert - ZAC_SERVER_KEY=/persistent/pki/ziti-controller-intermediate/keys/ziti-controller-server.key + - PORTTLS=8443 ports: - - "1408:1408" - - "8443:8443" + - 1408:1408 + - 8443:8443 working_dir: /usr/src/app volumes: - ziti-fs:/persistent diff --git a/quickstart/docker/simplified-docker-compose.yml b/quickstart/docker/simplified-docker-compose.yml index 5f9ce3e32..fc1065d43 100644 --- a/quickstart/docker/simplified-docker-compose.yml +++ b/quickstart/docker/simplified-docker-compose.yml @@ -5,8 +5,8 @@ services: env_file: - ./.env ports: - - "${ZITI_EDGE_CONTROLLER_PORT}:${ZITI_EDGE_CONTROLLER_PORT}" - - "${ZITI_CTRL_PORT}:${ZITI_CTRL_PORT}" + - ${ZITI_EDGE_CONTROLLER_PORT:-1280}:${ZITI_EDGE_CONTROLLER_PORT:-1280} + - ${ZITI_CTRL_PORT:-6262}:${ZITI_CTRL_PORT:-6262} environment: - ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION=${ZITI_EDGE_IDENTITY_ENROLLMENT_DURATION} - ZITI_EDGE_ROUTER_ENROLLMENT_DURATION=${ZITI_EDGE_ROUTER_ENROLLMENT_DURATION} @@ -44,18 +44,18 @@ services: - "/var/openziti/scripts/run-with-ziti-cli.sh" command: - "/var/openziti/scripts/access-control.sh" - + ziti-edge-router: image: "${ZITI_IMAGE}:${ZITI_VERSION}" depends_on: - ziti-controller environment: - - ZITI_CONTROLLER_RAWNAME=${ZITI_CONTROLLER_RAWNAME} - - ZITI_EDGE_CONTROLLER_RAWNAME=${ZITI_EDGE_CONTROLLER_RAWNAME} + - ZITI_CONTROLLER_RAWNAME="${ZITI_CONTROLLER_RAWNAME}" + - ZITI_EDGE_CONTROLLER_RAWNAME="${ZITI_EDGE_CONTROLLER_RAWNAME}" - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router - ZITI_EDGE_ROUTER_ROLES=public ports: - - ${ZITI_EDGE_ROUTER_PORT}:${ZITI_EDGE_ROUTER_PORT} + - ${ZITI_EDGE_ROUTER_PORT:-3022}:${ZITI_EDGE_ROUTER_PORT:-3022} networks: - zitiblue - zitired @@ -66,9 +66,11 @@ services: ziti-console: image: openziti/zac + working_dir: /usr/src/app environment: - ZAC_SERVER_CERT_CHAIN=/persistent/pki/ziti-controller-intermediate/certs/ziti-controller-server.cert - ZAC_SERVER_KEY=/persistent/pki/ziti-controller-intermediate/keys/ziti-controller-server.key + - PORTTLS=8443 depends_on: - ziti-controller ports: From 69fd0d8cef0701d0f46cf63bc3b9faf0c3f0f428 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Wed, 18 Jan 2023 00:04:02 -0500 Subject: [PATCH 13/41] allow name set again for customization --- quickstart/docker/docker-compose.yml | 2 +- quickstart/docker/simplified-docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/quickstart/docker/docker-compose.yml b/quickstart/docker/docker-compose.yml index b4466c65d..623619b96 100644 --- a/quickstart/docker/docker-compose.yml +++ b/quickstart/docker/docker-compose.yml @@ -52,7 +52,7 @@ services: environment: - ZITI_CONTROLLER_RAWNAME="${ZITI_CONTROLLER_RAWNAME}" - ZITI_EDGE_CONTROLLER_RAWNAME="${ZITI_EDGE_CONTROLLER_RAWNAME}" - - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router + - ZITI_EDGE_ROUTER_RAWNAME=${ZITI_EDGE_ROUTER_RAWNAME:-ziti-edge-router} - ZITI_EDGE_ROUTER_ROLES=public ports: - ${ZITI_EDGE_ROUTER_PORT:-3022}:${ZITI_EDGE_ROUTER_PORT:-3022} diff --git a/quickstart/docker/simplified-docker-compose.yml b/quickstart/docker/simplified-docker-compose.yml index fc1065d43..520ac9471 100644 --- a/quickstart/docker/simplified-docker-compose.yml +++ b/quickstart/docker/simplified-docker-compose.yml @@ -52,7 +52,7 @@ services: environment: - ZITI_CONTROLLER_RAWNAME="${ZITI_CONTROLLER_RAWNAME}" - ZITI_EDGE_CONTROLLER_RAWNAME="${ZITI_EDGE_CONTROLLER_RAWNAME}" - - ZITI_EDGE_ROUTER_RAWNAME=ziti-edge-router + - ZITI_EDGE_ROUTER_RAWNAME=${ZITI_EDGE_ROUTER_RAWNAME:-ziti-edge-router} - ZITI_EDGE_ROUTER_ROLES=public ports: - ${ZITI_EDGE_ROUTER_PORT:-3022}:${ZITI_EDGE_ROUTER_PORT:-3022} From 4089209f35b133f52c5f165807ebdfd55eeb66b3 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Wed, 18 Jan 2023 08:37:18 -0500 Subject: [PATCH 14/41] try to use proper cert location in container --- quickstart/docker/docker-compose.yml | 4 ++-- quickstart/docker/simplified-docker-compose.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/quickstart/docker/docker-compose.yml b/quickstart/docker/docker-compose.yml index 623619b96..7cff37dce 100644 --- a/quickstart/docker/docker-compose.yml +++ b/quickstart/docker/docker-compose.yml @@ -150,8 +150,8 @@ services: ziti-console: image: openziti/zac environment: - - ZAC_SERVER_CERT_CHAIN=/persistent/pki/ziti-controller-intermediate/certs/ziti-controller-server.cert - - ZAC_SERVER_KEY=/persistent/pki/ziti-controller-intermediate/keys/ziti-controller-server.key + - ZAC_SERVER_CERT_CHAIN=/persistent/pki/${ZITI_EDGE_CONTROLLER_HOSTNAME:-ziti-controller}-intermediate/certs/${ZITI_EDGE_CONTROLLER_HOSTNAME:-ziti-controller}-server.cert + - ZAC_SERVER_KEY=/persistent/pki/${ZITI_EDGE_CONTROLLER_HOSTNAME:-ziti-controller}-intermediate/keys/${ZITI_EDGE_CONTROLLER_HOSTNAME:-ziti-controller}-server.key - PORTTLS=8443 ports: - 1408:1408 diff --git a/quickstart/docker/simplified-docker-compose.yml b/quickstart/docker/simplified-docker-compose.yml index 520ac9471..407beb3eb 100644 --- a/quickstart/docker/simplified-docker-compose.yml +++ b/quickstart/docker/simplified-docker-compose.yml @@ -68,8 +68,8 @@ services: image: openziti/zac working_dir: /usr/src/app environment: - - ZAC_SERVER_CERT_CHAIN=/persistent/pki/ziti-controller-intermediate/certs/ziti-controller-server.cert - - ZAC_SERVER_KEY=/persistent/pki/ziti-controller-intermediate/keys/ziti-controller-server.key + - ZAC_SERVER_CERT_CHAIN=/persistent/pki/${ZITI_EDGE_CONTROLLER_HOSTNAME:-ziti-controller}-intermediate/certs/${ZITI_EDGE_CONTROLLER_HOSTNAME:-ziti-controller}-server.cert + - ZAC_SERVER_KEY=/persistent/pki/${ZITI_EDGE_CONTROLLER_HOSTNAME:-ziti-controller}-intermediate/keys/${ZITI_EDGE_CONTROLLER_HOSTNAME:-ziti-controller}-server.key - PORTTLS=8443 depends_on: - ziti-controller From bea678e5622db9aadbd0f04c2a9ca77f6165a808 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Wed, 18 Jan 2023 15:15:46 -0500 Subject: [PATCH 15/41] use advertised.address, not some ec2 instance --- quickstart/docker/.env | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quickstart/docker/.env b/quickstart/docker/.env index de3280a73..af21b1eff 100644 --- a/quickstart/docker/.env +++ b/quickstart/docker/.env @@ -9,15 +9,15 @@ ZITI_EDGE_ROUTER_ENROLLMENT_DURATION=10080 # controller address/port information ZITI_CONTROLLER_RAWNAME=ziti-controller -#ZITI_CONTROLLER_HOSTNAME=ec2-3-134-108-218.us-east-2.compute.amazonaws.com +#ZITI_CONTROLLER_HOSTNAME=advertised.address #ZITI_CTRL_PORT=8440 ZITI_EDGE_CONTROLLER_RAWNAME=ziti-edge-controller -#ZITI_EDGE_CONTROLLER_HOSTNAME=ec2-3-134-108-218.us-east-2.compute.amazonaws.com +#ZITI_EDGE_CONTROLLER_HOSTNAME=advertised.address #ZITI_EDGE_CONTROLLER_PORT=8441 #ZITI_EDGE_CONTROLLER_IP_OVERRIDE=172.17.0.1 # router address/port information -#ZITI_EDGE_ROUTER_RAWNAME=ec2-3-134-108-218.us-east-2.compute.amazonaws.com +#ZITI_EDGE_ROUTER_RAWNAME=advertised.address #ZITI_EDGE_ROUTER_PORT=8442 #ZITI_EDGE_ROUTER_IP_OVERRIDE=172.17.0.1 From 1cb0cf0bd69936e621b461a4b1f998daf61a56c5 Mon Sep 17 00:00:00 2001 From: Shawn Carey Date: Fri, 20 Jan 2023 09:11:29 -0500 Subject: [PATCH 16/41] Use docker buildx to build/push Quickstart image (#949) use buildx to build quickstart image --- quickstart/docker/image/Dockerfile | 14 +++++++- quickstart/docker/image/fetch-ziti-bins.sh | 13 +++++++ quickstart/docker/pushLatestDocker.sh | 42 ++++++++-------------- 3 files changed, 41 insertions(+), 28 deletions(-) create mode 100644 quickstart/docker/image/fetch-ziti-bins.sh diff --git a/quickstart/docker/image/Dockerfile b/quickstart/docker/image/Dockerfile index 8c93ce969..2ac56a288 100644 --- a/quickstart/docker/image/Dockerfile +++ b/quickstart/docker/image/Dockerfile @@ -1,3 +1,15 @@ +FROM ubuntu:rolling as fetch-ziti-bins + +# optional arg to specify which version to fetch when local "ziti-bin" directory is not present +ARG ZITI_VERSION_OVERRIDE + +COPY . /docker.build.context +RUN apt update && apt install jq curl -y && \ + # get local ziti build in "ziti-bin", if present. + # otherwise fetch from releases (respecting ZITI_VERSION_OVERRIDE, if set). + # put the result in /ziti-bin + /bin/bash /docker.build.context/fetch-ziti-bins.sh /ziti-bin + FROM ubuntu:rolling RUN apt update && \ @@ -20,7 +32,7 @@ ENV ZITI_BIN_ROOT="${ZITI_BIN_DIR}" ENV ZITI_SCRIPTS=/var/openziti/scripts # copy the ziti binaries to a directory already on the path -COPY --chown=ziti ziti.ignore "${ZITI_BIN_DIR}" +COPY --chown=ziti --from=fetch-ziti-bins /ziti-bin "${ZITI_BIN_DIR}" COPY --chown=ziti ziti-cli-functions.sh "${ZITI_SCRIPTS}/" COPY --chown=ziti run-controller.sh "${ZITI_SCRIPTS}/" COPY --chown=ziti run-router.sh "${ZITI_SCRIPTS}/" diff --git a/quickstart/docker/image/fetch-ziti-bins.sh b/quickstart/docker/image/fetch-ziti-bins.sh new file mode 100644 index 000000000..53f8c5dab --- /dev/null +++ b/quickstart/docker/image/fetch-ziti-bins.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# this script is executed during the docker build, after the build context has been copied to /docker.build.context + +dest="${1}" + +if [ -d /docker.build.context/ziti-bin -a ]; then + mv /docker.build.context/ziti-bin/ "${dest}" +else + source /docker.build.context/ziti-cli-functions.sh + getZiti + mv "${ZITI_BIN_DIR}" "${dest}" +fi diff --git a/quickstart/docker/pushLatestDocker.sh b/quickstart/docker/pushLatestDocker.sh index b3d7e4ff6..cfe53b703 100755 --- a/quickstart/docker/pushLatestDocker.sh +++ b/quickstart/docker/pushLatestDocker.sh @@ -3,32 +3,20 @@ set -eo pipefail SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -ZITI_QUICKSTART_ROOT="$(realpath ${SCRIPT_DIR}/..)" -ZITI_BIN_ROOT="${ZITI_QUICKSTART_ROOT}/docker" +if [ -z "${ZITI_VERSION}" ]; then + ZITI_QUICKSTART_ROOT="$(realpath ${SCRIPT_DIR}/..)" + v=$(source "${ZITI_QUICKSTART_ROOT}/ziti-cli-functions.sh"; getLatestZitiVersion > /dev/null 2>&1; echo ${ZITI_BINARIES_VERSION}) + ZITI_VERSION=$(echo "${v}" | sed -e 's/^v//') +fi -for arch in amd64 arm64; do - (export ZITI_OSTYPE=linux; export ZITI_ARCH="${arch}" - source "${ZITI_QUICKSTART_ROOT}/ziti-cli-functions.sh" - if [ -d "${SCRIPT_DIR}/image/ziti.ignore" ]; then - rm -rf "${SCRIPT_DIR}/image/ziti.ignore" - fi +if [ -z "${ZITI_VERSION}" ]; then + echo "ZITI_VERSION was not set and auto-detection failed." + exit 1 +fi - getZiti - - mv "${ZITI_BIN_DIR}" "${SCRIPT_DIR}/image/ziti.ignore/" - docker build --platform linux/${arch} "${SCRIPT_DIR}/image" -t openziti/quickstart - - if [ -d "${SCRIPT_DIR}/image/ziti.ignore" ]; then - rm -rf "${SCRIPT_DIR}/image/ziti.ignore" - fi - - vers="$(echo "${ZITI_BINARIES_VERSION}" | cut -c 2-100)" - echo DOCKERTAG: docker tag openziti/quickstart "openziti/quickstart:${vers}" - docker tag openziti/quickstart "openziti/quickstart:${vers}" - echo DOCKERTAG: docker tag openziti/quickstart "openziti/quickstart:latest" - docker tag openziti/quickstart "openziti/quickstart:latest" - echo DOCKERPUSH: docker push "openziti/quickstart:${vers}" - docker push "openziti/quickstart:${vers}" - echo DOCKERPUSH: docker push "openziti/quickstart:latest" - docker push "openziti/quickstart:latest") -done \ No newline at end of file +docker buildx create --use --name=ziti-builder +docker buildx build --platform linux/amd64,linux/arm64 "${SCRIPT_DIR}/image" \ + --build-arg ZITI_VERSION_OVERRIDE="${ZITI_VERSION}" \ + --tag "openziti/quickstart:${ZITI_VERSION}" \ + --tag "openziti/quickstart:latest" \ + --push From 3a1a94c063bfe9adfc88b8dc8104316adf54ae0c Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Fri, 20 Jan 2023 13:29:44 -0500 Subject: [PATCH 17/41] prune redundant, stale docs --- .../kubernetes-sidecar-tunnel-quickstart.md | 152 -- .../sidecar-tunnel/sidecar-diagram.svg | 1223 ----------------- ziti-tunnel/docker/README.md | 300 +--- 3 files changed, 2 insertions(+), 1673 deletions(-) delete mode 100644 quickstart/kubernetes/sidecar-tunnel/kubernetes-sidecar-tunnel-quickstart.md delete mode 100644 quickstart/kubernetes/sidecar-tunnel/sidecar-diagram.svg diff --git a/quickstart/kubernetes/sidecar-tunnel/kubernetes-sidecar-tunnel-quickstart.md b/quickstart/kubernetes/sidecar-tunnel/kubernetes-sidecar-tunnel-quickstart.md deleted file mode 100644 index 2eed1fc08..000000000 --- a/quickstart/kubernetes/sidecar-tunnel/kubernetes-sidecar-tunnel-quickstart.md +++ /dev/null @@ -1,152 +0,0 @@ -# Kubernetes Sidecar Client - -This guide shows you how to access a Ziti service from a pre-existing (or third party) application that's running -in a Kubernetes Pod. To provide access to the service, we will deploy the `ziti-tunnel` client in a sidecar -container. - -## Overview - -The [Ziti Network Quickstart](https://openziti.github.io/ziti/quickstarts/networks-overview.html) -walked you through standing up a Ziti instance and accessing a Ziti service from your workstation with -`ziti-tunnel`. In this guide we'll deploy the same `ziti-tunnel` client, but instead of running it from the -command line we will deploy it in a sidecar container in a Kubernetes Pod. - -This guide also demonstrates `ziti-tunnel`'s internal DNS server, which allows us to access Ziti services -by hostname instead of IP address. - -[Here's some detail on how the various intercept modes work on Linux](https://openziti.github.io/ziti/clients/linux.html) - -### Solution Overview - -![Diagram of solution](./sidecar-diagram.svg) - -## Prerequisites - -- Complete the [Ziti Network Quickstart](https://openziti.github.io/ziti/quickstarts/networks-overview.html). This guide - uses the Ziti Controller and Ziti Edge Router that are created in the Ziti Quickstart. -- Admin-level access to a Kubernetes cluster via `kubectl`. - -## Create an Identity and AppWAN - -This guide will re-use the "eth0.ziti.cli" service that was created in the Ziti Network Quickstart. - -We will create a new identity for our client, with a new AppWAN that uses the eth0.ziti.cli service. - -Create the Identity: - - ziti edge controller create identity device tunnel-sidecar -o tunnel-sidecar.jwt - -Create the AppWAN and reference the service created in the Ziti Network Quickstart. We'll be using `eth0.ziti.cli` -here but if you created `eth0.ziti.ui` in the quickstart - use that instead. Also note that in the -tunnel-sidecar-demo.yaml: - - ziti edge controller create app-wan ziti-tunnel-appwan -i tunnel-sidecar -s eth0.ziti.cli - -## Create a Kubernetes Secret - -The `ziti-tunnel` sidecar will access its identity by mounting a Kubernetes secret in the container. -We can mount the JWT as a secret like this: - - $ kubectl create secret generic tunnel-sidecar.jwt --from-file=tunnel-sidecar.jwt - secret/tunnel-sidecar.jwt created - -## Deploy the Pod - -Deploy a Pod that runs a client application and `ziti-tunnel` as a sidecar container. For this -demonstration, the client application is `curl`. Our Pod runs `curl` in a loop so we can see content -from our Ziti service in the Pod's logs. - -Save the following yaml to a file named tunnel-sidecar-demo.yaml - - apiVersion: v1 - kind: PersistentVolumeClaim - metadata: - name: tunnel-sidecar-pv-claim - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 100Mi - --- - apiVersion: apps/v1 - kind: Deployment - metadata: - name: ziti-tunnel-sidecar-demo - spec: - replicas: 1 - selector: - matchLabels: - app: ziti-tunnel-sidecar-demo - strategy: - type: Recreate - template: - metadata: - labels: - app: ziti-tunnel-sidecar-demo - spec: - containers: - - image: centos - name: testclient - command: ["sh","-c","while true; set -x; do curl -sSLf eth0.ziti.cli 2>&1; set +x; sleep 5; done"] - - image: netfoundry/ziti-tunnel:latest - name: ziti-tunnel - env: - - name: NF_REG_NAME - value: tunnel-sidecar - volumeMounts: - - name: tunnel-sidecar-jwt - mountPath: "/var/run/secrets/kubernetes.io/enrollment-token" - readOnly: true - - name: ziti-tunnel-persistent-storage - mountPath: /netfoundry - securityContext: - capabilities: - add: - - NET_ADMIN - dnsPolicy: "None" - dnsConfig: - nameservers: - - 127.0.0.1 - - 8.8.8.8 - restartPolicy: Always - volumes: - - name: ziti-tunnel-persistent-storage - persistentVolumeClaim: - claimName: tunnel-sidecar-pv-claim - - name: tunnel-sidecar-jwt - secret: - secretName: tunnel-sidecar.jwt - -You'll notice that the `ziti-tunnel` sidecar container has a few requirements: - -1. The name of the identity that is assumed by `ziti-tunnel` must be passed into the container with the - `NF_REG_NAME` environment variable. -2. The secret that we created above for the enrollment token must be mounted into the container at - "/var/run/secrets/netfoundry.io/enrollment-token". -3. A persistent volume must be mounted at "/netfoundry". This volume is used to save the json file that is created - when the one-time enrollment token is used. If this volume is not persistent, you will need to provide a new - enrollment token each time the Pod is restarted! - -Once the yaml is saved, we can deploy the Pod with `kubectl` - - $ kubectl apply -f ./tunnel-sidecar-demo.yaml - persistentvolumeclaim/tunnel-sidecar-pv-claim created - deployment.apps/ziti-tunnel-sidecar-demo created - -## Test the Service - -First we need to get the name of the Pod that Kubernetes deployed for us: - - $ kubectl get pods - ziti-tunnel-sidecar-demo-749c476989-6wpfn 1/1 Running 0 42s - -Then we can tail the logs for the "testclient" container: - - $ kubectl logs -f ziti-tunnel-sidecar-demo-749c476989-6wpfn --container testclient - 54.67.121.213 - 54.67.121.213 - 54.67.121.213 - -Notice that the `curl` client is using the DNS name that we provided in the Ziti service definition to make the -request. diff --git a/quickstart/kubernetes/sidecar-tunnel/sidecar-diagram.svg b/quickstart/kubernetes/sidecar-tunnel/sidecar-diagram.svg deleted file mode 100644 index c3a27eee4..000000000 --- a/quickstart/kubernetes/sidecar-tunnel/sidecar-diagram.svg +++ /dev/null @@ -1,1223 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Page-1 - - - Rounded Rectangle - - - - - - - - - - - - - - - - - - - - - - Rounded Rectangle.1861 - Cluster A - - - - - - - - - - - - - - - - - - - - - - Cluster A - - Rounded Rectangle.1862 - Node - - - - - - - - - - - - - - - - - - - - - - Node - - Rounded Rectangle.1863 - PodA - - - - - - - - - - - - - - - - - - - - - - - - - PodA - - Sheet.1864 - - Rounded Rectangle.974 - Container A - Client app: wget eth0.ziti.cli - - - - - - - - - - - - - - - - - - - - - - Container A - Client app:wget eth0.ziti.cli - - Sheet.1866 - - - - Rounded Rectangle.1890 - Node - - - - - - - - - - - - - - - - - - - - - - Node - - Rounded Rectangle.1891 - Podz - - - - - - - - - - - - - - - - - - - - - - - - - Podz - - Sheet.1899 - - Rounded Rectangle.937 - Container... - - - - - - - - - - - - - - - - - - - - - - Container... - - - Rounded Rectangle.1933 - AWS Application Load Balancer - - - - - - - - - - - - - - - - - - - - - - - - - AWS Application Load Balancer - - Rounded Rectangle.1934 - Pod - - - - - - - - - - - - - - - - - - - - - - - - - Pod - - Rounded Rectangle.1935 - Container E ALB Ingress Controller - - - - - - - - - - - - - - - - - - - - - - - - - Container EALB Ingress Controller - - Sheet.1936 - - Sheet.1818 - Internet - - - - - - - Internet - - Sheet.1819 - - Sheet.1820 - - Sheet.1821 - - - - Sheet.1822 - - - - Sheet.1823 - - - - Sheet.1824 - - - - Sheet.1825 - - - - Sheet.1826 - - - - Sheet.1827 - - - - Sheet.1828 - - - - Sheet.1829 - - - - Sheet.1830 - - - - Sheet.1831 - - - - Sheet.1832 - - - - Sheet.1833 - - - - Sheet.1834 - - - - - Sheet.1835 - - - - - Sheet.1836 - - - - Sheet.1837 - - - - Sheet.1838 - - - - - Sheet.1839 - - - - - Sheet.1840 - - - - Sheet.1841 - - - - Sheet.1842 - - - - - Sheet.1843 - - - - Sheet.1844 - - - - - Sheet.1845 - - - - Sheet.1846 - - - - Sheet.1847 - - - - - Sheet.1848 - - - - - Sheet.1849 - - - - Sheet.1850 - - - - Sheet.1851 - - - - Sheet.1852 - - - - - - Sheet.1853 - NetFoundry Internet Overlay Fabric - - - - NetFoundry Internet Overlay Fabric - - - Rounded Rectangle.1883 - Container B - - - - - - - - - - - - - - - - - - - - - - Container B - - Sheet.1974 - - - - Sheet.1884 - - Sheet.1889 - NetFoundry Tunneler - - - - NetFoundry Tunneler - - Sheet.1885 - - Logo_Mark - - Sheet.1887 - - - - Sheet.1888 - - - - - - - Sheet.1976 - - Logo_Mark - - Sheet.1978 - - - - Sheet.1979 - - - - - - Rounded Rectangle.2065 - Pody - - - - - - - - - - - - - - - - - - - - - - - - - Pody - - Sheet.2066 - - Rounded Rectangle.937 - Container... - - - - - - - - - - - - - - - - - - - - - - Container... - - - Rounded Rectangle.2068 - Podx - - - - - - - - - - - - - - - - - - - - - - - - - Podx - - Sheet.2069 - - Rounded Rectangle.937 - Container... - - - - - - - - - - - - - - - - - - - - - - Container... - - - Rounded Rectangle.2072 - eth0.me service - - - - - - - - - - - - - - - - - - - - - - eth0.me service - - Sheet.2073 - - Sheet.1855 - - Sheet.1856 - - Sheet.1857 - - - - Sheet.1858 - - Sheet.1859 - - - - Sheet.1860 - - - - - - - Kubernetes_Logo_Hrz_lockup_POS.1868 - - Layer_1-2 - - Sheet.1870 - - - - Sheet.1871 - - - - text4373 - - path2985 - - - - - path2987 - - - - path2989 - - - - path2991 - - - - path2993 - - - - path2995 - - - - path2997 - - - - path2999 - - - - path3001 - - - - path3003 - - - - - - - Sheet.2063 - - Sheet.2062 - - - - - Sheet.2064 - Your NetFoundry AppWANs (Micro-Segmented Network) - - - - Your NetFoundry AppWANs (Micro-Segmented Network) - - - diff --git a/ziti-tunnel/docker/README.md b/ziti-tunnel/docker/README.md index 6c645f11c..6c7481497 100644 --- a/ziti-tunnel/docker/README.md +++ b/ziti-tunnel/docker/README.md @@ -1,299 +1,3 @@ -# Ziti-tunnel Docker Image +# Ziti-tunnel Container Image -Run the ziti-tunnel NetFoundry client. ziti-tunnel captures network traffic that -is destined for Ziti services and proxes the packet payloads to the associated -Ziti service. See the [ziti-tunnel README](../README.md) for more details. - -This image requires access to a Ziti enrollment token (JWT), and a persistent -volume mounted at "/netfoundry" to save the configuration file that is created -when the one-time enrollment token is consumed. - -## Variables - -- `NF_REG_NAME`: Required - file basename of the enroll token JWT file or identity config JSON file that ziti-tunnel will use -- `NF_REG_TOKEN`: Optional - one-time enrollment token to use instead of `${NF_REG_NAME}.jwt` - -If `${NF_REG_NAME}.jwt` does not exist and `NF_REG_TOKEN` is not defined the enroller will try to get the token from -stdin if it is not a TTY. - -## Volumes - -- `/netfoundry`: Configuration files that result from enrollment will be stored - here. This volume should be persistent unless you don't mind losing the key for - your enrollment token. - -## Files - -The enrollment token (jwt) must be mounted into the ziti-tunnel container as a volume. -The token must be in a file named `${NF_REG_NAME}.jwt` that must be in one of the -following directories: - -- `/netfoundry`: This would be used when running in the Docker engine (or IoT Edge). - This could be a bind mount or a docker volume. -- `/enrollment-token`: Alternative mount point for the enrollment token only. -- `/var/run/secrets/netfoundry.io/enrollment-token`: When running in Kubernetes, - the enrollment token should be mounted as a secret at this mount point. - -## Examples - -### Docker - -The ziti-tunnel image can be used in a vanilla Docker environment. - - # enroll with token from inherited env var and run hosting-only mode without any nameserver or IP routes - $ mkdir ./ziti_id - $ export NF_REG_TOKEN=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbSI6Im90dCIsImV4cCI6MTY1MzE2NzcwOCwiaXNzIjoiaHR0cHM6Ly81MGEyMDc4Zi01MGQyLTRhZTAtYWI4Ny0wYTdjMjM1OWVjOTYucHJvZHVjdGlvbi5uZXRmb3VuZHJ5LmlvOjQ0MyIsImp0aSI6IjFiMjJkMzc2LTMzMWItNDMxNS1iZTFiLWJkOTUzYThiYWM4ZiIsInN1YiI6InRGLnZnLjdwM1kifQ.TWbk3-kjBRKwQCXMoD93sXtyQhZOMZ1iJzV73Sqft-cEOkV2kjbA4TBRwl0nuLPCdJqkhPl9Yc1WG7YaYWYXV4ghE1Hk0Gta_HlpWdNjNlB1cVrzMyxaoCXhaX5xqGnwDuqfOK7q6DItuNsKouM2G6KKZvhGOacax6TvP-sunsxFz6AdYQJizNBoL5fJ14r1_O6yczGd5GSd8x9-eP5rNMQuRdUtiu69b-rEu1gO2SXVTrADTD5p8sP9khbT_eQzIDD9jgagXoJJvOKTVdsUAWS7YKfk1On0BpxNvv30bQ6eAkliwU7GTXDR2IPW-blZYt1Wtf3sgeuTDCCtVO_7gjSn7WM7YJqpsB72V-43Xz8I7LCDa0u48baSmmpPDUSphIBDa_nksPZk8jfwx4pHoHYbSbD4r47Af_9P-JUQRT8hzNuvktG56kmcqVCfEZHT-4xgK0Lvxxp4mzqdcNyCB0VwC6kdk7OlxwqmftDWrJhNuxKMy2MtyTjG0mwHxt4P0y_fZo1ZYJZU5AzvxrE9OLTjsQ4nV5NliJ3Qxaw_taCaIWxn98BeiHfAiIc3EL7bWGjAfXz-XWvWG8-AcCmK-cxIj7Pvj0U7lIWH7bVcRmVVc0fQnXdACkeQe7ixWr4IopV5YJ607zm6Qk_am_MrERla6xyXblvroWIITN2aEUk - $ docker run --rm \ - -v $(pwd)/ziti_id:/netfoundry \ - -e NF_REG_NAME=ziti_id \ - -e NF_REG_TOKEN \ - openziti/ziti-tunnel:latest - - # enroll with a JWT file and run a transparent proxy with built-in nameserver - $ mkdir ./ziti_id - $ cp ~/Downloads/ziti_id.jwt ./ziti_id - $ docker run -t --network=host --cap-add=NET_ADMIN \ - -v $(pwd)/ziti_id:/netfoundry \ - -e NF_REG_NAME=ziti_id \ - openziti/ziti-tunnel:latest - -Notes: - -- The container that runs ziti-tunnel will only be able to intercept traffic for other processes within the same - container, unless the container uses the "host" network mode. -- No special network mode or additional capabilities are required when running `ziti-tunnel host`, which is the - hosting-only run mode without any built-in nameserver or IP routers or iptables rules -- The container requires NET_ADMIN capability to create iptables rules in the host network when running in the default - mode `ziti-tunnel tproxy` (implied by `ziti-tunnel run`). -- The `NF_REG_NAME` environment variable must be set to the name of the ziti identity that ziti-tunnel will assume when - connecting to the controller. -- The "/netfoundry" directory must be mounted on its own volume. - - The one-time enrollment token "/netfoundry/${NF_REG_NAME}.jwt" is sought by the enroller when the container is - started for the first time. This is the JWT that was downloaded from the controller when the Ziti identity was - created. - - If the JWT file is not found in one of the well-known directories then the token is subsequently sought from the - env var `NF_REG_TOKEN`, then stdin. - - "/netfoundry/${NF_REG_NAME}.json" is created when the identity is enrolled. The "/netfoundry" volume must be - persistent (that is, ${NF_REG_NAME}.json must endure container restarts), since the enrollment token is only valid - for one enrollment. - -### Docker Compose - -This example uses Compose to store in a file the Docker `build` and `run` parameters for several modes of operation of `ziti-tunnel`. - -#### Docker Compose Setup - -1. Install Docker Engine. -2. `docker-compose` is a utility you can install with the Python Package Index (PyPi) e.g. `pip install --upgrade - docker-compose`. -3. Save your Ziti identity enrollment token e.g. `my-ziti-identity-file.jwt` in the same directory as the file named - `docker-compose.yml`. Your identity will be enrolled the first time you run the container, and the permanent - identity file will be saved e.g. `my-ziti-identity-file.json`. -4. You may change `ZITI_VERSION` to [another release version from our ziti-release - repository](https://netfoundry.jfrog.io/ui/repos/simple/Properties/ziti-release%2Fziti-tunnel%2Famd64%2Flinux%2F0.15.2%2Fziti-tunnel.tar.gz). - -#### Docker Transparent Proxy for Linux - -1. Modify "ziti-tproxy" under "services" in the file named `docker-compose.yml` in this Git repo, optionally overriding - the default value of `command` to pass additional parameters to `ziti-tunnel`. - -```yaml -version: "3.3" -services: - ziti-tproxy: - image: netfoundry/ziti-tunnel:tproxy - build: - context: . - args: - ZITI_VERSION: 0.15.3 - volumes: - - .:/netfoundry - network_mode: host - cap_add: - - NET_ADMIN - environment: - - NF_REG_NAME - - NF_REG_TOKEN -# command: run --resolver udp://127.0.0.123:53 -# command: run --resolver none -``` - -2. Run `NF_REG_NAME=my-ziti-identity-file docker-compose up --build ziti-tproxy` in the same directory. - -This will cause the container to configure the Linux host to transparently proxy any domain names or IP addresses that match a Ziti service. - -#### Docker Proxy or MacOS or Windows - -1. Modify "ziti-proxy" under "services" in the file named `docker-compose.yml` in this Git repo. Change the service - name(s) and port number(s) to suit your actual services. You must align the mapped ports under `ports` with the - bound ports in the `command`. - -```yaml -version: "3.3" -services: - ziti-proxy: - image: netfoundry/ziti-tunnel:proxy - build: - context: . - args: - ZITI_VERSION: 0.15.3 - volumes: - - .:/netfoundry - environment: - - NF_REG_NAME - - NF_REG_TOKEN - ports: - - "8888:8888" - - "9999:9999" - command: proxy "my example service":8888 "my other example service":9999 -``` - -2. Run in the same directory: - -```bash -NF_REG_NAME=my-ziti-identity-file docker-compose up --build ziti-proxy -``` - -This will cause the container to listen on the mapped port(s) and proxy any received traffic to the Ziti service that -are bound to that port. - -### Kubernetes - -The ziti-tunnel image can be used in Kubernetes either as a sidecar, which would -intercept packets only from other containers in the pod definition or as a dedicated -pod that sets `hostNetwork` to true. - -The following example manifest shows how to run ziti-tunnel as a sidecar: - - $ cat app-with-ziti-tunnel-sidecar.yaml - -```yaml - apiVersion: v1 - kind: PersistentVolumeClaim - metadata: - name: tunnel-sidecar-pv-claim - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 1Gi - --- - apiVersion: apps/v1 - kind: Deployment - metadata: - name: ziti-tunnel-sidecar-demo - spec: - replicas: 1 - selector: - matchLabels: - app: ziti-tunnel-sidecar-demo - strategy: - type: Recreate - template: - metadata: - labels: - app: ziti-tunnel-sidecar-demo - spec: - containers: - - image: centos - name: testclient - command: ["sh","-c","while true; set -x; do curl -sSLf ethzero.ziti.ui 2>&1; set +x; sleep 5; done"] - - image: netfoundry/ziti-tunnel:0.5.8-2554 - name: ziti-tunnel - env: - - name: NF_REG_NAME - value: tunnel-sidecar - volumeMounts: - - name: tunnel-sidecar-jwt - mountPath: "/var/run/secrets/netfoundry.io/enrollment-token" - readOnly: true - - name: ziti-tunnel-persistent-storage - mountPath: /netfoundry - securityContext: - capabilities: - add: - - NET_ADMIN - dnsPolicy: "None" - dnsConfig: - nameservers: - - 127.0.0.1 - - 8.8.8.8 - restartPolicy: Always - volumes: - - name: ziti-tunnel-persistent-storage - persistentVolumeClaim: - claimName: tunnel-sidecar-pv-claim - - name: tunnel-sidecar-jwt - secret: - secretName: tunnel-sidecar.jwt -``` - -### Azure IoT Hub - -This image can be used to run a module on an Azure IoT runtime. - - # createOption.HostConfig for tun (instead of tproxy): \"Devices\":[{\"PathOnHost\":\"/dev/net/tun\",\"PathInContainer\":\"/dev/net/tun\",\"CgroupPermissions\":\"rwm\"}], - - - $ cat module.json - -```json - { - "modulesContent": { - "$edgeAgent": { - "properties.desired": { - "modules": { - "ziti-tunnel": { - "settings": { - "image": "netfoundry/ziti-tunnel:0.5.8-2554", - "createOptions": "{\"HostConfig\":{\"CapAdd\":[\"NET_ADMIN\"],\"Mounts\":[{\"Type\":\"bind\",\"Source\":\"/opt/netfoundry\",\"Target\":\"/netfoundry\"}],\"NetworkMode\":\"host\"},\"NetworkingConfig\":{\"EndpointsConfig\":{\"host\":{}}}}" - }, - "type": "docker", - "version": "1.0", - "status": "running", - "restartPolicy": "always" - } - }, - "runtime": { - "settings": { - "minDockerVersion": "v1.25" - }, - "type": "docker" - }, - "schemaVersion": "1.0", - "systemModules": { - "edgeAgent": { - "settings": { - "image": "mcr.microsoft.com/azureiotedge-agent:1.0", - "createOptions": "" - }, - "type": "docker" - }, - "edgeHub": { - "settings": { - "image": "mcr.microsoft.com/azureiotedge-hub:1.0", - "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}" - }, - "type": "docker", - "status": "running", - "restartPolicy": "always" - } - } - } - }, - "$edgeHub": { - "properties.desired": { - "routes": {}, - "schemaVersion": "1.0", - "storeAndForwardConfiguration": { - "timeToLiveSecs": 7200 - } - } - }, - "ziti-tunnel": { - "properties.desired": {} - } - } - } -``` +[Link to container tunneler docs](https://docs.openziti.io/docs/reference/tunnelers/linux/container/) From b30abab12b7b7bb0f7f35bfdddfe42d9d43d083e Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Mon, 23 Jan 2023 14:53:13 -0500 Subject: [PATCH 18/41] release a base CLI container image --- .github/workflows/main.yml | 28 +++++++++-- .github/workflows/mattermost-webhook.yml | 2 +- .github/workflows/publish-containers.yml | 61 ++++++++++++++++++++++++ container-images/Dockerfile.cli-base | 30 ++++++++++++ 4 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/publish-containers.yml create mode 100644 container-images/Dockerfile.cli-base diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 490c07905..fc2552475 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -89,9 +89,8 @@ jobs: fablab-smoketest: name: Fablab Smoketest + if: github.repository_owner == 'openziti' runs-on: ubuntu-20.04 - outputs: - ZITI_VERSION: ${{ steps.get_version.outputs.ZITI_VERSION }} steps: - name: Git Checkout uses: actions/checkout@v3 @@ -193,6 +192,14 @@ jobs: CC=arm-linux-gnueabihf-gcc $(go env GOPATH)/bin/gox -cgo -os=linux -arch=arm -output=$GOX_OUTPUT ./... CC=aarch64-linux-gnu-gcc $(go env GOPATH)/bin/gox -cgo -os=linux -arch=arm64 -output=$GOX_OUTPUT ./... + # upload Linux artifacts so we can copy them into a container image in another workflow + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: linux-release-${{ github.run_id }} + path: release/ + retention-days: 5 + - name: Download darwin release artifact uses: actions/download-artifact@v3 with: @@ -210,9 +217,9 @@ jobs: with: version: 1.51.1 - # remaining steps in job only run on the upstream repo, not forks - - name: Publish - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-v')) + - name: Publish GitHub Release + # forks need to run this step with their own GPG key because ziti-ci creates the GH release + if: env.ziti_ci_gpg_key_id != null && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-v')) env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ziti_ci_gpg_key: ${{ secrets.ZITI_CI_GPG_KEY }} @@ -311,7 +318,18 @@ jobs: # needs: publish name: Call the On-Demand Smoketest Workflow + # not applicable to forks + if: github.repository_owner == 'openziti' uses: ./.github/workflows/jenkins-smoketest.yml secrets: inherit with: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} + + call-publish-containers: + if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main') + name: Publish Container Images + needs: publish + uses: ./.github/workflows/publish-containers.yml + secrets: inherit + with: + ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} diff --git a/.github/workflows/mattermost-webhook.yml b/.github/workflows/mattermost-webhook.yml index a214230f6..c38096299 100644 --- a/.github/workflows/mattermost-webhook.yml +++ b/.github/workflows/mattermost-webhook.yml @@ -15,7 +15,7 @@ jobs: mattermost-ziti-webhook: runs-on: ubuntu-latest name: POST Webhook - if: github.actor != 'dependabot[bot]' + if: github.repository_owner == 'openziti' && github.actor != 'dependabot[bot]' env: ZITI_LOG: 99 ZITI_NODEJS_LOG: 99 diff --git a/.github/workflows/publish-containers.yml b/.github/workflows/publish-containers.yml new file mode 100644 index 000000000..1e7f4b276 --- /dev/null +++ b/.github/workflows/publish-containers.yml @@ -0,0 +1,61 @@ +name: CI build + +on: + workflow_call: + inputs: + ziti-version: + description: 'Ziti Release Version' + type: string + required: true + +jobs: + publish-containers: + runs-on: ubuntu-latest + env: + ZITI_VERSION: ${{ inputs.ziti-version || github.event.inputs.ziti-version }} + steps: + - name: Checkout Workspace + uses: actions/checkout@v3 + + - name: Download darwin release artifact + uses: actions/download-artifact@v3 + with: + name: linux-release-${{ github.run_id }} + path: release/ + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + with: + platforms: amd64,arm64 + + - name: Set up Docker BuildKit + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_API_USER }} + password: ${{ secrets.DOCKER_HUB_API_TOKEN }} + + - name: Set up Docker image tags for base CLI container + env: + RELEASE_REPO: openziti/ziti-cli + id: tagprep_run + run: | + DOCKER_TAGS="" + DOCKER_TAGS="${RELEASE_REPO}:${ZITI_VERSION},${RELEASE_REPO}:latest" + echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" + echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT + + - name: Build & Push Multi-Platform Container Image to Hub + uses: docker/build-push-action@v3 + with: + builder: ${{ steps.buildx.outputs.name }} + context: ${{ github.workspace }}/ + file: ${{ github.workspace }}/container-images/Dockerfile.cli-base + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.tagprep_run.outputs.DOCKER_TAGS }} + build-args: | + ZITI_VERSION=${{ env.ZITI_VERSION }} + push: true diff --git a/container-images/Dockerfile.cli-base b/container-images/Dockerfile.cli-base new file mode 100644 index 000000000..46226fcb0 --- /dev/null +++ b/container-images/Dockerfile.cli-base @@ -0,0 +1,30 @@ +# this builds docker.io/openziti/ziti-cli +FROM registry.access.redhat.com/ubi8/ubi-minimal +# 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. + +ARG ARTIFACTS_DIR=./release +# e.g. linux +ARG TARGETOS +# e.g. arm +ARG TARGETARCH +# e.g. v7 (OS variant) +# TARGETVARIANT + +### Required OpenShift Labels +LABEL name="openziti/ziti-cli" \ + maintainer="developers@openziti.org" \ + vendor="NetFoundry" \ + summary="Run the OpenZiti CLI" \ + description="Run the OpenZiti CLI" + +### add licenses to this directory +RUN mkdir -m0755 /licenses +COPY ./LICENSE /licenses/apache.txt + +RUN mkdir -p /usr/local/bin +COPY ${ARTIFACTS_DIR}/${TARGETARCH}/${TARGETOS}/ziti /usr/local/bin/ +RUN chmod 0755 /usr/local/bin/ziti +USER nobody + +CMD [ "ziti" ] From 17a91c033da87469287c39ff4581fd9566ea3e81 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 10:41:09 -0500 Subject: [PATCH 19/41] correct the name of the step that downloads the Linux release artifacts --- .github/workflows/publish-containers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-containers.yml b/.github/workflows/publish-containers.yml index 1e7f4b276..7ddc35dae 100644 --- a/.github/workflows/publish-containers.yml +++ b/.github/workflows/publish-containers.yml @@ -17,7 +17,7 @@ jobs: - name: Checkout Workspace uses: actions/checkout@v3 - - name: Download darwin release artifact + - name: Download Linux Release Artifact uses: actions/download-artifact@v3 with: name: linux-release-${{ github.run_id }} From 5a6e754674783db8caf4a7e26a9124954b2d31a1 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 10:44:01 -0500 Subject: [PATCH 20/41] organize Docker images into folders --- .../{publish-containers.yml => publish-docker-images.yml} | 0 .../Dockerfile.cli-base => docker-images/cli-base/Dockerfile | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{publish-containers.yml => publish-docker-images.yml} (100%) rename container-images/Dockerfile.cli-base => docker-images/cli-base/Dockerfile (100%) diff --git a/.github/workflows/publish-containers.yml b/.github/workflows/publish-docker-images.yml similarity index 100% rename from .github/workflows/publish-containers.yml rename to .github/workflows/publish-docker-images.yml diff --git a/container-images/Dockerfile.cli-base b/docker-images/cli-base/Dockerfile similarity index 100% rename from container-images/Dockerfile.cli-base rename to docker-images/cli-base/Dockerfile From 9564126a03160400e127b49599bb4a131a68c910 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 10:56:20 -0500 Subject: [PATCH 21/41] fix path to Dockerfile --- .github/workflows/publish-docker-images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-docker-images.yml b/.github/workflows/publish-docker-images.yml index 7ddc35dae..6eff3c34b 100644 --- a/.github/workflows/publish-docker-images.yml +++ b/.github/workflows/publish-docker-images.yml @@ -53,7 +53,7 @@ jobs: with: builder: ${{ steps.buildx.outputs.name }} context: ${{ github.workspace }}/ - file: ${{ github.workspace }}/container-images/Dockerfile.cli-base + file: ${{ github.workspace }}/docker-images/cli-base/Dockerfile platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_run.outputs.DOCKER_TAGS }} build-args: | From 7fdb5e730cba2cdf5db6cd18b04a84698776a432 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 10:59:09 -0500 Subject: [PATCH 22/41] revert me: fork test --- .github/workflows/main.yml | 8 ++++++-- .github/workflows/publish-docker-images.yml | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fc2552475..472d93047 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,6 +27,7 @@ env: jobs: mac-os-build: + if: github.repository_owner == 'openziti' name: Build Mac OS binaries runs-on: macos-11 steps: @@ -57,6 +58,7 @@ jobs: retention-days: 5 windows-build: + if: github.repository_owner == 'openziti' name: Build Windows binaries runs-on: windows-2019 steps: @@ -155,7 +157,7 @@ jobs: publish: name: Publish Binaries and Docker Image runs-on: ubuntu-20.04 - needs: [ mac-os-build, windows-build, fablab-smoketest ] + # needs: [ mac-os-build, windows-build, fablab-smoketest ] outputs: ZITI_VERSION: ${{ steps.get_version.outputs.ZITI_VERSION }} steps: @@ -201,12 +203,14 @@ jobs: retention-days: 5 - name: Download darwin release artifact + if: github.repository_owner == 'openziti' uses: actions/download-artifact@v3 with: name: darwin-release-${{ github.run_id }} path: release/ - name: Download windows release artifact + if: github.repository_owner == 'openziti' uses: actions/download-artifact@v3 with: name: windows-release-${{ github.run_id }} @@ -326,7 +330,7 @@ jobs: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} call-publish-containers: - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main') + if: github.repository_owner == 'qrkourier' && (github.ref == 'refs/heads/main') name: Publish Container Images needs: publish uses: ./.github/workflows/publish-containers.yml diff --git a/.github/workflows/publish-docker-images.yml b/.github/workflows/publish-docker-images.yml index 6eff3c34b..08253c341 100644 --- a/.github/workflows/publish-docker-images.yml +++ b/.github/workflows/publish-docker-images.yml @@ -40,7 +40,7 @@ jobs: - name: Set up Docker image tags for base CLI container env: - RELEASE_REPO: openziti/ziti-cli + RELEASE_REPO: kbinghamnetfoundry/ziti-cli id: tagprep_run run: | DOCKER_TAGS="" From a63943194aac0d44ca0891f73577c2ef2847a7c1 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 11:01:19 -0500 Subject: [PATCH 23/41] fix call to reusable workflow --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 472d93047..eaa2da11f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -329,11 +329,11 @@ jobs: with: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} - call-publish-containers: + call-publish-docker-images: if: github.repository_owner == 'qrkourier' && (github.ref == 'refs/heads/main') - name: Publish Container Images + name: Publish Docker Images needs: publish - uses: ./.github/workflows/publish-containers.yml + uses: ./.github/workflows/publish-docker-images.yml secrets: inherit with: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} From 5084c3a9cd9222c90232401a108e52e84988ae05 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 24 Jan 2023 10:43:50 -0500 Subject: [PATCH 24/41] Fix tunnel args when running via ziti. Fixes #972 --- ziti/tunnel/host.go | 5 ++--- ziti/tunnel/proxy.go | 9 ++++----- ziti/tunnel/root.go | 2 +- ziti/tunnel/tproxy.go | 6 +++++- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/ziti/tunnel/host.go b/ziti/tunnel/host.go index 9adf17130..61287828a 100644 --- a/ziti/tunnel/host.go +++ b/ziti/tunnel/host.go @@ -33,9 +33,8 @@ func NewHostCmd() *cobra.Command { } func runHost(cmd *cobra.Command, args []string) error { - root := cmd.Root() - if !root.Flag(resolverCfgFlag).Changed { - _ = root.PersistentFlags().Set(resolverCfgFlag, "") + if !cmd.Flag(resolverCfgFlag).Changed { + _ = cmd.PersistentFlags().Set(resolverCfgFlag, "") } interceptor = host.New() return nil diff --git a/ziti/tunnel/proxy.go b/ziti/tunnel/proxy.go index 33eb8a6ea..c80597098 100644 --- a/ziti/tunnel/proxy.go +++ b/ziti/tunnel/proxy.go @@ -37,13 +37,12 @@ func NewProxyCmd() *cobra.Command { } func runProxy(cmd *cobra.Command, args []string) error { - root := cmd.Root() // Fiddle with the poll rate and resolver settings if the user didn't wan't anything special. - if !root.Flag(svcPollRateFlag).Changed { - _ = root.PersistentFlags().Set(svcPollRateFlag, strconv.FormatUint(math.MaxUint32, 10)) + if !cmd.Flag(svcPollRateFlag).Changed { + _ = cmd.PersistentFlags().Set(svcPollRateFlag, strconv.FormatUint(math.MaxUint32, 10)) } - if !root.Flag(resolverCfgFlag).Changed { - _ = root.PersistentFlags().Set(resolverCfgFlag, "") + if !cmd.Flag(resolverCfgFlag).Changed { + _ = cmd.PersistentFlags().Set(resolverCfgFlag, "") } var err error if interceptor, err = proxy.New(net.IPv4zero, args); err != nil { diff --git a/ziti/tunnel/root.go b/ziti/tunnel/root.go index d2b59e63c..c78e817ab 100644 --- a/ziti/tunnel/root.go +++ b/ziti/tunnel/root.go @@ -126,7 +126,7 @@ func rootPostRun(cmd *cobra.Command, _ []string) { ziti.SetApplication("ziti-tunnel", version.GetVersion()) - resolverConfig := cmd.Flag("resolver").Value.String() + resolverConfig := cmd.Flag(resolverCfgFlag).Value.String() resolver := dns.NewResolver(resolverConfig) serviceListenerGroup := intercept.NewServiceListenerGroup(interceptor, resolver) diff --git a/ziti/tunnel/tproxy.go b/ziti/tunnel/tproxy.go index 1d884dde0..0b6994df1 100644 --- a/ziti/tunnel/tproxy.go +++ b/ziti/tunnel/tproxy.go @@ -41,9 +41,13 @@ func NewTProxyCmd() *cobra.Command { return runTProxyCmd } -func runTProxy(cmd *cobra.Command, args []string) error { +func runTProxy(cmd *cobra.Command, _ []string) error { var err error lanIf, err := cmd.Flags().GetString("lanIf") + if err != nil { + return err + } + interceptor, err = tproxy.New(lanIf) if err != nil { return fmt.Errorf("failed to initialize tproxy interceptor: %v", err) From 3a081024ee2488f9bc7a6c0e8399bcf4965681d4 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 11:01:19 -0500 Subject: [PATCH 25/41] fix call to reusable workflow --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fc2552475..02edc6fb0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -325,11 +325,11 @@ jobs: with: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} - call-publish-containers: - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main') - name: Publish Container Images + call-publish-docker-images: + if: github.repository_owner == 'qrkourier' && (github.ref == 'refs/heads/main') + name: Publish Docker Images needs: publish - uses: ./.github/workflows/publish-containers.yml + uses: ./.github/workflows/publish-docker-images.yml secrets: inherit with: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} From 8de6c7fc48302728e1f195498f89325c3ee170ac Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Mon, 23 Jan 2023 14:53:13 -0500 Subject: [PATCH 26/41] release a base CLI container image --- .github/workflows/main.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 02edc6fb0..676812329 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -213,6 +213,9 @@ jobs: path: release/ - name: Install Jfrog CLI + if: env.JFROG_API_KEY != null && github.repository_owner == 'openziti' + env: + JFROG_API_KEY: ${{ secrets.JFROG_API_KEY }} uses: jfrog/setup-jfrog-cli@v2 with: version: 1.51.1 @@ -255,7 +258,7 @@ jobs: fi - name: Publish to Artifactory - if: ${{ env.JFROG_API_KEY != null && github.repository == 'openziti/ziti' }} + if: ${{ env.JFROG_API_KEY != null && github.repository_owner == 'openziti' }} run: | $(go env GOPATH)/bin/ziti-ci publish-to-artifactory env: From dba7d73c1b0feeac9b2c5d67510574b636ac70bc Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Mon, 23 Jan 2023 20:19:55 -0500 Subject: [PATCH 27/41] add ctrl, router, tunnel container images --- .github/workflows/main.yml | 56 +----- .github/workflows/publish-docker-images.yml | 89 +++++++++- docker-images/cli-base/Dockerfile | 12 +- docker-images/cli-base/Dockerfile.controller | 20 +++ docker-images/cli-base/Dockerfile.router | 20 +++ docker-images/cli-base/Dockerfile.tunnel | 24 +++ docker-images/cli-base/entrypoint-cli-base.sh | 5 + .../cli-base/entrypoint-controller.sh | 5 + docker-images/cli-base/entrypoint-router.sh | 5 + docker-images/cli-base/entrypoint-tunnel.sh | 165 ++++++++++++++++++ ziti-tunnel/docker/.gitignore | 6 - ziti-tunnel/docker/BUILD.md | 112 ------------ ziti-tunnel/docker/Dockerfile | 38 ---- ziti-tunnel/docker/Dockerfile.copy | 41 ----- ziti-tunnel/docker/README.md | 3 - ziti-tunnel/docker/buildx.sh | 89 ---------- ziti-tunnel/docker/docker-compose.yml | 54 ------ ziti-tunnel/docker/docker-entrypoint.sh | 105 ----------- ziti-tunnel/docker/fetch-ziti-bins.sh | 68 -------- 19 files changed, 336 insertions(+), 581 deletions(-) create mode 100644 docker-images/cli-base/Dockerfile.controller create mode 100644 docker-images/cli-base/Dockerfile.router create mode 100644 docker-images/cli-base/Dockerfile.tunnel create mode 100644 docker-images/cli-base/entrypoint-cli-base.sh create mode 100644 docker-images/cli-base/entrypoint-controller.sh create mode 100644 docker-images/cli-base/entrypoint-router.sh create mode 100755 docker-images/cli-base/entrypoint-tunnel.sh delete mode 100644 ziti-tunnel/docker/.gitignore delete mode 100644 ziti-tunnel/docker/BUILD.md delete mode 100644 ziti-tunnel/docker/Dockerfile delete mode 100644 ziti-tunnel/docker/Dockerfile.copy delete mode 100644 ziti-tunnel/docker/README.md delete mode 100755 ziti-tunnel/docker/buildx.sh delete mode 100644 ziti-tunnel/docker/docker-compose.yml delete mode 100755 ziti-tunnel/docker/docker-entrypoint.sh delete mode 100755 ziti-tunnel/docker/fetch-ziti-bins.sh diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 676812329..79a644aef 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -153,7 +153,7 @@ jobs: # END linux-build-steps publish: - name: Publish Binaries and Docker Image + name: Publish Binaries runs-on: ubuntu-20.04 needs: [ mac-os-build, windows-build, fablab-smoketest ] outputs: @@ -213,9 +213,6 @@ jobs: path: release/ - name: Install Jfrog CLI - if: env.JFROG_API_KEY != null && github.repository_owner == 'openziti' - env: - JFROG_API_KEY: ${{ secrets.JFROG_API_KEY }} uses: jfrog/setup-jfrog-cli@v2 with: version: 1.51.1 @@ -258,62 +255,13 @@ jobs: fi - name: Publish to Artifactory - if: ${{ env.JFROG_API_KEY != null && github.repository_owner == 'openziti' }} + if: ${{ env.JFROG_API_KEY != null && github.repository == 'openziti/ziti' }} run: | $(go env GOPATH)/bin/ziti-ci publish-to-artifactory env: JFROG_API_KEY: ${{ secrets.JFROG_API_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-v')) - uses: docker/setup-qemu-action@v2 - with: - platforms: amd64,arm64,arm - - - name: Set up Docker BuildKit - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-v')) - id: buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to Docker Hub - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-v')) - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_HUB_API_USER }} - password: ${{ secrets.DOCKER_HUB_API_TOKEN }} - - - name: Set up Docker image tags - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-v')) - env: - SNAPSHOT_REPO: openziti/ziti-tunnel - RELEASE_REPO: netfoundry/ziti-tunnel - ZITI_VERSION: ${{ steps.get_version.outputs.ZITI_VERSION }} - id: tagprep - run: | - # the Docker cross-build only runs on branches main or release-v* - # where ziti-ci always computes and publishes a new release tag - DOCKER_TAGS="" - for REPO in ${SNAPSHOT_REPO} ${RELEASE_REPO}; do - DOCKER_TAGS+=",${REPO}:${ZITI_VERSION},${REPO}:latest" - done - DOCKER_TAGS=${DOCKER_TAGS#,} # drop leading comma char - echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" - echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT - - - name: Build & Push Multi-Platform Container Image to Hub - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-v')) - uses: docker/build-push-action@v3 - with: - builder: ${{ steps.buildx.outputs.name }} - context: ${{ github.workspace }} # build context is workspace so we can copy artifacts from ./release - file: ${{ github.workspace }}/ziti-tunnel/docker/Dockerfile.copy # a Dockerfile that does copy instead of fetch - build-args: | # base dir for copy/add operations should be dir containing Dockerfile - DOCKER_BUILD_DIR=./ziti-tunnel/docker - platforms: linux/amd64,linux/arm/v7,linux/arm64 - push: true - tags: ${{ steps.tagprep.outputs.DOCKER_TAGS }} - jenkins-smoketest: # BEGIN smoketest-job # diff --git a/.github/workflows/publish-docker-images.yml b/.github/workflows/publish-docker-images.yml index 6eff3c34b..acc83e7b0 100644 --- a/.github/workflows/publish-docker-images.yml +++ b/.github/workflows/publish-docker-images.yml @@ -17,18 +17,18 @@ jobs: - name: Checkout Workspace uses: actions/checkout@v3 - - name: Download Linux Release Artifact + - name: Download Linux Release Artifacts uses: actions/download-artifact@v3 with: name: linux-release-${{ github.run_id }} path: release/ - - name: Set up QEMU + - name: Set Up QEMU uses: docker/setup-qemu-action@v2 with: platforms: amd64,arm64 - - name: Set up Docker BuildKit + - name: Set Up Docker BuildKit id: buildx uses: docker/setup-buildx-action@v2 @@ -38,24 +38,99 @@ jobs: username: ${{ secrets.DOCKER_HUB_API_USER }} password: ${{ secrets.DOCKER_HUB_API_TOKEN }} - - name: Set up Docker image tags for base CLI container + - name: Set Up Container Image Tags for Base CLI Container env: RELEASE_REPO: openziti/ziti-cli - id: tagprep_run + id: tagprep_cli run: | DOCKER_TAGS="" DOCKER_TAGS="${RELEASE_REPO}:${ZITI_VERSION},${RELEASE_REPO}:latest" echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT - - name: Build & Push Multi-Platform Container Image to Hub + # this is the base image into which is stuffed the Linux binary for each + # arch that was downloaded in ./release/ + - name: Build & Push Multi-Platform CLI Container Image to Hub uses: docker/build-push-action@v3 with: builder: ${{ steps.buildx.outputs.name }} context: ${{ github.workspace }}/ file: ${{ github.workspace }}/docker-images/cli-base/Dockerfile platforms: linux/amd64,linux/arm64 - tags: ${{ steps.tagprep_run.outputs.DOCKER_TAGS }} + tags: ${{ steps.tagprep_cli.outputs.DOCKER_TAGS }} + build-args: | + DOCKER_BUILD_DIR=./container-images + push: true + + - name: Set Up Container Image Tags for Controller Container + env: + RELEASE_REPO: openziti/ziti-controller + id: tagprep_ctrl + run: | + DOCKER_TAGS="" + DOCKER_TAGS="${RELEASE_REPO}:${ZITI_VERSION},${RELEASE_REPO}:latest" + echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" + echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT + + # This is a use-case image based on the minimal CLI image. It needs the + # ZITI_VERSION env var so it can build from the versioned image that + # we pushed in the prior step. + - name: Build & Push Multi-Platform Controller Container Image to Hub + uses: docker/build-push-action@v3 + with: + builder: ${{ steps.buildx.outputs.name }} + context: ${{ github.workspace }}/container-images/ + file: ${{ github.workspace }}/container-images/Dockerfile.controller + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.tagprep_ctrl.outputs.DOCKER_TAGS }} + build-args: | + ZITI_VERSION=${{ env.ZITI_VERSION }} + push: true + + - name: Set Up Container Image Tags for Router Container + env: + RELEASE_REPO: openziti/ziti-router + id: tagprep_router + run: | + DOCKER_TAGS="" + DOCKER_TAGS="${RELEASE_REPO}:${ZITI_VERSION},${RELEASE_REPO}:latest" + echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" + echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT + + - name: Build & Push Multi-Platform Router Container Image to Hub + uses: docker/build-push-action@v3 + with: + builder: ${{ steps.buildx.outputs.name }} + context: ${{ github.workspace }}/container-images/ + file: ${{ github.workspace }}/container-images/Dockerfile.router + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.tagprep_router.outputs.DOCKER_TAGS }} + build-args: | + ZITI_VERSION=${{ env.ZITI_VERSION }} + push: true + + - name: Set Up Container Image Tags for Go Tunneler Container + env: + SNAPSHOT_REPO: netfoundry/ziti-tunnel + RELEASE_REPO: openziti/ziti-tunnel + id: tagprep_tun + run: | + DOCKER_TAGS="" + for REPO in ${SNAPSHOT_REPO} ${RELEASE_REPO}; do + DOCKER_TAGS+=",${REPO}:${ZITI_VERSION},${REPO}:latest" + done + DOCKER_TAGS=${DOCKER_TAGS#,} # drop leading comma char + echo "DEBUG: DOCKER_TAGS=${DOCKER_TAGS}" + echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT + + - name: Build & Push Multi-Platform Go Tunneler Container Image to Hub + uses: docker/build-push-action@v3 + with: + builder: ${{ steps.buildx.outputs.name }} + context: ${{ github.workspace }}/container-images/ + file: ${{ github.workspace }}/container-images/Dockerfile.tunnel + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.tagprep_tun.outputs.DOCKER_TAGS }} build-args: | ZITI_VERSION=${{ env.ZITI_VERSION }} push: true diff --git a/docker-images/cli-base/Dockerfile b/docker-images/cli-base/Dockerfile index 46226fcb0..56a014d50 100644 --- a/docker-images/cli-base/Dockerfile +++ b/docker-images/cli-base/Dockerfile @@ -4,12 +4,11 @@ FROM registry.access.redhat.com/ubi8/ubi-minimal # It uses the same base as the final image to maximize docker cache hits. ARG ARTIFACTS_DIR=./release +ARG DOCKER_BUILD_DIR=. # e.g. linux ARG TARGETOS -# e.g. arm +# e.g. arm64 ARG TARGETARCH -# e.g. v7 (OS variant) -# TARGETVARIANT ### Required OpenShift Labels LABEL name="openziti/ziti-cli" \ @@ -18,6 +17,8 @@ LABEL name="openziti/ziti-cli" \ summary="Run the OpenZiti CLI" \ description="Run the OpenZiti CLI" +USER root + ### add licenses to this directory RUN mkdir -m0755 /licenses COPY ./LICENSE /licenses/apache.txt @@ -25,6 +26,9 @@ COPY ./LICENSE /licenses/apache.txt RUN mkdir -p /usr/local/bin COPY ${ARTIFACTS_DIR}/${TARGETARCH}/${TARGETOS}/ziti /usr/local/bin/ RUN chmod 0755 /usr/local/bin/ziti -USER nobody +COPY ${DOCKER_BUILD_DIR}/entrypoint-cli-base.sh / +RUN chmod +x /entrypoint-cli-base.sh +USER nobody +ENTRYPOINT [ "/entrypoint-cli-base.sh" ] CMD [ "ziti" ] diff --git a/docker-images/cli-base/Dockerfile.controller b/docker-images/cli-base/Dockerfile.controller new file mode 100644 index 000000000..aa0d996db --- /dev/null +++ b/docker-images/cli-base/Dockerfile.controller @@ -0,0 +1,20 @@ +ARG ZITI_VERSION="latest" +# this builds docker.io/openziti/ziti-controller +FROM docker.io/openziti/ziti-cli:${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. + +### Required OpenShift Labels +LABEL name="openziti/ziti-controller" \ + maintainer="developers@openziti.org" \ + vendor="NetFoundry" \ + summary="Run the OpenZiti Controller" \ + description="Run the OpenZiti Controller" + +USER root +COPY ./entrypoint-controller.sh / +RUN chmod +x /entrypoint-controller.sh +USER nobody +ENTRYPOINT [ "/entrypoint-controller.sh" ] +CMD [ "run" ] diff --git a/docker-images/cli-base/Dockerfile.router b/docker-images/cli-base/Dockerfile.router new file mode 100644 index 000000000..2914b5e5b --- /dev/null +++ b/docker-images/cli-base/Dockerfile.router @@ -0,0 +1,20 @@ +ARG ZITI_VERSION="latest" +# this builds docker.io/openziti/ziti-router +FROM docker.io/openziti/ziti-cli:${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. + +### Required OpenShift Labels +LABEL name="openziti/ziti-router" \ + maintainer="developers@openziti.org" \ + vendor="NetFoundry" \ + summary="Run the OpenZiti Router" \ + description="Run the OpenZiti Router" + +USER root +COPY ./entrypoint-router.sh / +RUN chmod +x /entrypoint-router.sh +USER nobody +ENTRYPOINT [ "/entrypoint-router.sh" ] +CMD [ "run" ] diff --git a/docker-images/cli-base/Dockerfile.tunnel b/docker-images/cli-base/Dockerfile.tunnel new file mode 100644 index 000000000..159066efa --- /dev/null +++ b/docker-images/cli-base/Dockerfile.tunnel @@ -0,0 +1,24 @@ +ARG ZITI_VERSION="latest" +# this builds docker.io/openziti/ziti-router +FROM docker.io/openziti/ziti-cli:${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. + +### Required OpenShift Labels +LABEL name="openziti/ziti-tunnel" \ + maintainer="developers@openziti.org" \ + vendor="NetFoundry" \ + summary="Run the OpenZiti Go Tunneler" \ + description="Run the OpenZiti Go Tunneler" + +### Add necessary Red Hat repos and packages: "mountpoint" used by entrypoint +USER root +RUN INSTALL_PKGS="util-linux iptables" && \ + microdnf -y update --setopt=install_weak_deps=0 --setopt=tsflags=nodocs && \ + microdnf -y install --setopt=install_weak_deps=0 --setopt=tsflags=nodocs ${INSTALL_PKGS} + +COPY ./entrypoint-tunnel.sh / +RUN chmod +x /entrypoint-tunnel.sh +ENTRYPOINT [ "/entrypoint-tunnel.sh" ] +CMD [ "run" ] diff --git a/docker-images/cli-base/entrypoint-cli-base.sh b/docker-images/cli-base/entrypoint-cli-base.sh new file mode 100644 index 000000000..e6d33f04c --- /dev/null +++ b/docker-images/cli-base/entrypoint-cli-base.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euo pipefail + +exec ziti "${@}" diff --git a/docker-images/cli-base/entrypoint-controller.sh b/docker-images/cli-base/entrypoint-controller.sh new file mode 100644 index 000000000..cb055cc80 --- /dev/null +++ b/docker-images/cli-base/entrypoint-controller.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euo pipefail + +exec ziti controller "${@}" diff --git a/docker-images/cli-base/entrypoint-router.sh b/docker-images/cli-base/entrypoint-router.sh new file mode 100644 index 000000000..8bb695e7a --- /dev/null +++ b/docker-images/cli-base/entrypoint-router.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euo pipefail + +exec ziti router "${@}" diff --git a/docker-images/cli-base/entrypoint-tunnel.sh b/docker-images/cli-base/entrypoint-tunnel.sh new file mode 100755 index 000000000..ffae02c8d --- /dev/null +++ b/docker-images/cli-base/entrypoint-tunnel.sh @@ -0,0 +1,165 @@ +#!/usr/bin/env bash + +# +# Copyright 2023 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. +# + +set -e -u -o pipefail + +function alldone() { + # if successfully sent to background then send SIGTERM to trigger a cleanup + # of resolver config, tun devices and associated routes + [[ "${ZITI_TUNNEL_PID:-}" =~ ^[0-9]+$ ]] && { + kill -TERM "$ZITI_TUNNEL_PID" + # let entrypoint script exit after ziti tunnel PID + kill -0 "$ZITI_TUNNEL_PID" && wait "$ZITI_TUNNEL_PID" + } +} +trap alldone SIGTERM SIGINT EXIT + +IDENTITIES_DIR="/netfoundry" +if ! [[ -d "${IDENTITIES_DIR}" ]]; then + echo "ERROR: need directory ${IDENTITIES_DIR} to find tokens and identities" >&2 + exit 1 +fi + +if ! mountpoint "${IDENTITIES_DIR}" &>/dev/null; then + echo "WARN: the identities directory is only available inside this container because ${IDENTITIES_DIR} is not a mounted volume. Be careful to not publish this image with identity inside or lose access to the identity by removing the image prematurely." >&2 +else + if [[ -n "${ZITI_IDENTITY_JSON:-}" ]]; then + echo "WARNING: you supplied the Ziti identity as an env var and you mounted a volume on the identities dir. You may avoid this warning and future errors by not mounting a volume on ${IDENTITIES_DIR} when ZITI_IDENTITY_JSON is defined." >&2 + fi +fi + +# +## Map the preferred, Ziti var names to legacy NF names. This allows us to begin using the preferred vars right away +## while minimizing immediate differences to the main control structure. This eases code review. Later, the legacy +## names can be retired and replaced. +# +if [[ -n "${ZITI_IDENTITY_BASENAME:-}" ]]; then + echo "INFO: setting NF_REG_NAME to \${ZITI_IDENTITY_BASENAME} (${ZITI_IDENTITY_BASENAME})" + NF_REG_NAME="${ZITI_IDENTITY_BASENAME}" +fi +if [[ -n "${ZITI_ENROLL_TOKEN:-}" ]]; then + echo "INFO: setting NF_REG_TOKEN to \${ZITI_ENROLL_TOKEN} (${ZITI_ENROLL_TOKEN})" + NF_REG_TOKEN="${ZITI_ENROLL_TOKEN}" +fi +if [[ -n "${ZITI_IDENTITY_WAIT:-}" ]]; then + echo "INFO: setting NF_REG_WAIT to \${ZITI_IDENTITY_WAIT} (${ZITI_IDENTITY_WAIT})" + NF_REG_WAIT="${ZITI_IDENTITY_WAIT}" +fi + +# treat IOTEDGE_DEVICEID, a standard var assigned by Azure IoT, as an alias for NF_REG_NAME +if [[ -z "${NF_REG_NAME:-}" ]]; then + if [[ -n "${IOTEDGE_DEVICEID:-}" ]]; then + echo "INFO: setting NF_REG_NAME to \${IOTEDGE_DEVICEID} (${IOTEDGE_DEVICEID})" + NF_REG_NAME="${IOTEDGE_DEVICEID}" + fi +fi + +# if identity JSON var is defined then write to a file +if [[ -n "${ZITI_IDENTITY_JSON:-}" ]]; then + # if the basename is not defined then use a default basename to write JSON to a file + if [[ -z "${NF_REG_NAME:-}" ]]; then + NF_REG_NAME="ziti_id" + fi + if [[ -s "${IDENTITIES_DIR}/${NF_REG_NAME}.json" ]]; then + echo "ERROR: refusing to clobber non-empty Ziti identity file ${NF_REG_NAME}.json with contents of env var ZITI_IDENTITY_JSON!" >&2 + exit 1 + else + echo "${ZITI_IDENTITY_JSON}" > "${IDENTITIES_DIR}/${NF_REG_NAME}.json" + fi +fi + +typeset -a TUNNEL_OPTS +# if identity file, else multiple identities dir +if [[ -n "${NF_REG_NAME:-}" ]]; then + IDENTITY_FILE="${IDENTITIES_DIR}/${NF_REG_NAME}.json" + TUNNEL_OPTS=("--identity" "${IDENTITY_FILE}") + : ${NF_REG_WAIT:=1} + if [[ "${NF_REG_WAIT}" =~ ^[0-9]+$ ]]; then + echo "DEBUG: waiting ${NF_REG_WAIT}s for ${IDENTITY_FILE} (or token) to appear" + elif (( "${NF_REG_WAIT}" < 0 )); then + echo "DEBUG: waiting forever for ${IDENTITY_FILE} (or token) to appear" + else + echo "ERROR: need integer for NF_REG_WAIT" >&2 + exit 1 + fi + while (( $NF_REG_WAIT > 0 || $NF_REG_WAIT < 0)); do + # if non-empty identity file + if [[ -s "${IDENTITY_FILE}" ]]; then + echo "INFO: found identity file ${IDENTITY_FILE}" + break 1 + # look for enrollment token + else + echo "INFO: identity file ${IDENTITY_FILE} does not exist" + for dir in "/var/run/secrets/netfoundry.io/enrollment-token" \ + "/enrollment-token" \ + "${IDENTITIES_DIR}"; do + JWT_CANDIDATE="${dir}/${NF_REG_NAME}.jwt" + echo "INFO: looking for ${JWT_CANDIDATE}" + if [[ -s "${JWT_CANDIDATE}" ]]; then + JWT_FILE="${JWT_CANDIDATE}" + break 1 + fi + done + if [[ -n "${JWT_FILE:-}" ]]; then + echo "INFO: enrolling ${JWT_FILE}" + ziti edge enroll --jwt "${JWT_FILE}" --out "${IDENTITY_FILE}" || { + echo "ERROR: failed to enroll with token from ${JWT_FILE} ($(wc -c < "${JWT_FILE}")B)" >&2 + exit 1 + } + elif [[ -n "${NF_REG_TOKEN:-}" ]]; then + echo "INFO: attempting enrollment with NF_REG_TOKEN" + if [[ -s "${IDENTITIES_DIR}/${NF_REG_NAME}.jwt" ]]; then + echo "ERROR: refusing to clobber non-empty enrollment OTP file ${NF_REG_NAME}.jwt with contents of env var NF_REG_TOKEN!" >&2 + exit 1 + else + echo "${NF_REG_TOKEN}" > "${IDENTITIES_DIR}/${NF_REG_NAME}.jwt" + fi + ziti edge enroll --jwt "${IDENTITIES_DIR}/${NF_REG_NAME}.jwt" --out "${IDENTITY_FILE}" || { + echo "ERROR: failed to enroll with token from NF_REG_TOKEN ($(wc -c <<<"${NF_REG_TOKEN}")B)" >&2 + exit 1 + } + fi + fi + # decrement the wait seconds until zero or forever if negative + (( NF_REG_WAIT-- )) + sleep 1 + done +else + typeset -a JSON_FILES + mapfile -t JSON_FILES < <(ls -1 "${IDENTITIES_DIR}"/*.json) + if [[ ${#JSON_FILES[*]} -gt 0 ]]; then + echo "INFO: NF_REG_NAME not set, loading ${#JSON_FILES[*]} identities from ${IDENTITIES_DIR}" + TUNNEL_OPTS=("--identity-dir" "${IDENTITIES_DIR}") + else + echo "ERROR: NF_REG_NAME not set and zero identities found in ${IDENTITIES_DIR}" >&2 + exit 1 + fi +fi + +echo "DEBUG: evaluating positionals: $*" +if (( ${#} )) && [[ ${1} =~ t?proxy|host ]]; then + TUNNEL_RUN_MODE=${1} + shift +else + TUNNEL_RUN_MODE=run +fi + +echo "INFO: running \"ziti tunnel ${TUNNEL_RUN_MODE} ${TUNNEL_OPTS[*]} ${*}\"" +ziti tunnel "${TUNNEL_RUN_MODE}" "${TUNNEL_OPTS[@]}" "${@}" & +ZITI_TUNNEL_PID=$! +wait $ZITI_TUNNEL_PID diff --git a/ziti-tunnel/docker/.gitignore b/ziti-tunnel/docker/.gitignore deleted file mode 100644 index 0cf75dfd8..000000000 --- a/ziti-tunnel/docker/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# enrollments in-use with Docker Compose -*.json -*.jwt - -# executable from fetch bins script -/ziti-tunnel diff --git a/ziti-tunnel/docker/BUILD.md b/ziti-tunnel/docker/BUILD.md deleted file mode 100644 index 95f8c9b86..000000000 --- a/ziti-tunnel/docker/BUILD.md +++ /dev/null @@ -1,112 +0,0 @@ -The Dockerfile and scripts in this directory build a `ziti-tunnel` (Go tunneler) Docker image. This procedure is highly similar to that of the `ziti-edge-tunnel` (C tunneler) Docker image [documented here](https://github.com/openziti/ziti-tunnel-sdk-c/blob/main/docker/BUILD.md). - -Ziti binaries are downloaded from https://netfoundry.artifactory.io/netfoundry/ziti-release -by default. The following build arguments are supported: - - | Build Argument | Description | - | -------------------- | ----------------------------------------------------------------- | - | ZITI_VERSION | The version of the ziti binaries to fetch from artifactory. | - | ARTIFACTORY_TOKEN | An Artifactory token with read access to the artifact repository. This is not needed if using the default ARTIFACTORY_BASE_URL / ARTIFACTORY_REPO. | - | ARTIFACTORY_BASE_URL | Defaults to "https://netfoundry.jfrog.io/netfoundry". | - | ARTIFACTORY_REPO | Defaults to "ziti-release". | - -# Building multi-platform Images - -Use this build method if you're pushing the ziti-tunnel image to a public image -registry. - -This build method creates images for the amd64 and arm/v7 platforms, but it -requires experimental Docker features and may involve more setup than you're -willing to endure. See "Building for Development" if you just want to build the -ziti-tunnel image for use on your local workstation, and don't plan on pushing -the image to a public registry. - -## Prerequisites - -1. Enable Docker Experimental Features - - See https://docs.docker.com/engine/reference/commandline/cli/#experimental-features - -2. Install & Enable qemu Emulation for Arm (Docker CE / Linux only) - - This is taken care of by Docker Desktop if you're building on macOS or Windows, - but you'll need to install qemu emulation support and register Arm binaries to - run on your (presumably) x86_64 build host if you are running Docker CE on Linux: - - $ sudo dnf install -y qemu-system-arm - $ docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d - - Verify that the Arm qemu handler is registered: - - $ cat /proc/sys/fs/binfmt_misc/qemu-arm - enabled - interpreter /usr/bin/qemu-arm - ... - - Ensure that the first line of the file is "enabled". - -3. Create a Builder Instance - - $ docker buildx create --use --name=ziti-builder - -## Building - -Run `docker buildx` like this: - - $ ziti_version="0.19.11" - $ docker buildx build \ - --platform linux/amd64,linux/arm/v7,linux/aarch64 \ - --build-arg ZITI_VERSION="${ziti_version}" \ - -t "netfoundry/ziti-tunnel:${ziti_version}" . - -Notes: - -- You'll need to append "--push" to this command, and then subsequently pull the - image to be able to use the image locally. - - Unfortunately `buildx` doesn't currently support building images directly into - the local docker cache. Although the `--load` and `--output=type=docker` options - exist, the underlying capability to load a multi-platform image (OCI) will be - implemented in a future Docker release (see https://github.com/docker/buildx/issues/59). - In the meantime, you'll need to push your image builds (with the `--push` build option) - and then pull them to run the image locally when building with `buildx`. - -- The armv8 image uses armv7 (32-bit) ziti executables. The 32-bit compatibility - libraries are installed in the image, but your Arm CPU must support 32-bit emulation. - -## References: - -- -- -- -- - -# Building for Development - -This build method produces an image for the CPU that is running the build host -(typically amd64), and places the resulting image into your local Docker image -cache. - - $ git fetch --tags && git tag -l | sort -Vr | head -1 - v0.19.11 - $ ziti_version="0.19.11" \ - $ docker build \ - --build-arg ZITI_VERSION="${ziti_version}" \ - -t "netfoundry/ziti-tunnel:${ziti_version}" . - -## Shell Script for Linux - - $ ./buildx.sh -h - Usage: VARIABLES ./buildx.sh [OPTION]... - - Build multi-platform Docker container image on Linux. - - VARIABLES - ZITI_VERSION e.g. "0.16.1" corresponding to Git tag "v0.16.1" - - OPTIONS - -r REPO container image repository e.g. netfoundry/ziti-edge-tunnel - -c don't check out v${ZITI_VERSION} (use Git working copy) - - EXAMPLES - ZITI_VERSION=0.19.11 ./buildx.sh -r netfoundry/ziti-tunnel diff --git a/ziti-tunnel/docker/Dockerfile b/ziti-tunnel/docker/Dockerfile deleted file mode 100644 index 9071733db..000000000 --- a/ziti-tunnel/docker/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -FROM debian:buster-slim as fetch-ziti-artifacts - -# 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. - -ARG ZITI_VERSION - -ARG ARTIFACTORY_TOKEN -ARG ARTIFACTORY_BASE_URL="https://netfoundry.jfrog.io/netfoundry" -# to fetch snapshots from the "feature-0.5" branch, set ZITI_REPO="ziti-snapshot/feature-0.5" -ARG ARTIFACTORY_REPO="ziti-release" - -WORKDIR /tmp - -RUN apt-get -q update && apt-get -q install -y --no-install-recommends curl ca-certificates -# workaround for `openssl rehash` not working on arm. -RUN /bin/bash -c "if ! compgen -G '/etc/ssl/certs/*.[0-9]' > /dev/null; then c_rehash /etc/ssl/certs; fi" - -COPY fetch-ziti-bins.sh . -RUN bash ./fetch-ziti-bins.sh ziti-tunnel - -################ -# -# Main Image -# -################ - -FROM debian:buster-slim - -RUN mkdir -p /usr/local/bin /etc/ssl/certs -RUN apt-get -q update && apt-get -q install -y --no-install-recommends iptables -COPY --from=fetch-ziti-artifacts /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs -COPY --from=fetch-ziti-artifacts /tmp/ziti-tunnel /usr/local/bin -COPY ./docker-entrypoint.sh / -RUN chmod +x /docker-entrypoint.sh - -ENTRYPOINT [ "/docker-entrypoint.sh" ] -CMD [ "run" ] diff --git a/ziti-tunnel/docker/Dockerfile.copy b/ziti-tunnel/docker/Dockerfile.copy deleted file mode 100644 index b75fb84ad..000000000 --- a/ziti-tunnel/docker/Dockerfile.copy +++ /dev/null @@ -1,41 +0,0 @@ -FROM debian:buster-slim as fetch-ziti-artifacts - -# 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. - -ARG ARTIFACTS_DIR=./release -# e.g. linux -ARG TARGETOS -# e.g. arm -ARG TARGETARCH -# e.g. v7 (OS variant) -# TARGETVARIANT - -WORKDIR /tmp - -RUN apt-get -q update && apt-get -q install -y --no-install-recommends curl ca-certificates -# workaround for `openssl rehash` not working on arm. -RUN /bin/bash -c "if ! compgen -G '/etc/ssl/certs/*.[0-9]' > /dev/null; then c_rehash /etc/ssl/certs; fi" - -COPY ${ARTIFACTS_DIR}/${TARGETARCH}/${TARGETOS}/ziti-tunnel . - -################ -# -# Main Image -# -################ - -FROM debian:buster-slim - -ARG DOCKER_BUILD_DIR=. -ARG ZITI_TUNNELER_BIN=ziti-tunnel - -RUN mkdir -p /usr/local/bin /etc/ssl/certs -RUN apt-get -q update && apt-get -q install -y --no-install-recommends iptables -COPY --from=fetch-ziti-artifacts /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs -COPY --from=fetch-ziti-artifacts /tmp/${ZITI_TUNNELER_BIN} /usr/local/bin -COPY ${DOCKER_BUILD_DIR}/docker-entrypoint.sh / -RUN chmod +x /docker-entrypoint.sh - -ENTRYPOINT [ "/docker-entrypoint.sh" ] -CMD [ "run" ] diff --git a/ziti-tunnel/docker/README.md b/ziti-tunnel/docker/README.md deleted file mode 100644 index 6c7481497..000000000 --- a/ziti-tunnel/docker/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Ziti-tunnel Container Image - -[Link to container tunneler docs](https://docs.openziti.io/docs/reference/tunnelers/linux/container/) diff --git a/ziti-tunnel/docker/buildx.sh b/ziti-tunnel/docker/buildx.sh deleted file mode 100755 index a36eadb02..000000000 --- a/ziti-tunnel/docker/buildx.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -_usage(){ - cat >&2 <<-EOF -Usage: VARIABLES ./${BASENAME} -r REPO [OPTIONS] - -Build multi-platform Docker container image on Linux. - -VARIABLES - ZITI_VERSION e.g. "0.16.1" corresponding to Git tag "v0.16.1" - -REQUIRED - -r REPO required container image repository e.g. netfoundry/ziti-edge-tunnel - -OPTIONS - -c don't check out v\${ZITI_VERSION} (use Git working copy) - -P don't push the container image to Hub - -EXAMPLES - ZITI_VERSION=0.16.1 ./${BASENAME} -c - -REFERENCE - https://github.com/openziti/ziti-tunnel-sdk-c/blob/main/docker/BUILD.md -EOF - [[ $# -eq 1 ]] && { - return "$1" - } || { - return 0 - } -} - -BASENAME=$(basename "$0") || exit $? -DIRNAME=$(dirname "$0") || exit $? - -while getopts :chPr: OPT;do - case $OPT in - c) FLAGS+=$OPT # don't checkout vZITI_VERSION - ;; - h) _usage; exit 0 # not an error - ;; - P) FLAGS+=$OPT # don't push container image to Hub - ;; - r) CONTAINER_REPO=$OPTARG - ;; - *|\?) _usage 1 # error - ;; - esac -done -shift "$((OPTIND-1))" - -# default to latest -: "${ZITI_VERSION:=$(git fetch --quiet --tags && git tag -l|sort -Vr|head -1|sed -E 's/^v(.*)/\1/')}" - -[[ -n "${CONTAINER_REPO:-}" ]] || { - echo "ERROR: missing -r REPO option to define container image repository name for tagging the image" >&2 - _usage; exit 1 -} - -if [[ ${FLAGS:-} =~ c ]]; then - echo "WARN: not checking out Git tag v${ZITI_VERSION}" -else - git diff --exit-code # bail if unstaged differences - git fetch --tags - git checkout "v${ZITI_VERSION}" -fi - -docker run --rm --privileged linuxkit/binfmt:v0.8 -grep -E -q enabled /proc/sys/fs/binfmt_misc/qemu-arm -docker run --rm --platform arm arm32v7/alpine uname -a|grep -E -q 'armv7l Linux' -docker run --rm --platform arm64 arm64v8/alpine uname -a|grep -E -q 'aarch64 Linux' - -docker buildx create --use --name=ziti-builder 2>/dev/null || docker buildx use --default ziti-builder - -# if default then push to Hub -BUILDX_OUTPUT="--push" -if [[ ${FLAGS:-} =~ P ]]; then - # if no push then load in image cache - BUILDX_OUTPUT="" -fi - -eval docker buildx build "$DIRNAME" \ - --platform linux/amd64,linux/arm/v7,linux/arm64 \ - --build-arg "ZITI_VERSION=${ZITI_VERSION}" \ - --tag "${CONTAINER_REPO}:${ZITI_VERSION}" \ - --tag "${CONTAINER_REPO}:latest" \ - "${BUILDX_OUTPUT:-}" - -docker buildx stop ziti-builder diff --git a/ziti-tunnel/docker/docker-compose.yml b/ziti-tunnel/docker/docker-compose.yml deleted file mode 100644 index 175764512..000000000 --- a/ziti-tunnel/docker/docker-compose.yml +++ /dev/null @@ -1,54 +0,0 @@ -version: "3.9" - -x-base-service: &base-service - image: netfoundry/ziti-tunnel:latest # https://hub.docker.com/r/netfoundry/ziti-tunnel/tags?page=1&ordering=last_updated - volumes: - - .:/netfoundry # mount current dir (relative to Compose file) with identity config file - environment: - - NF_REG_NAME # NF_REG_NAME=AcmeIdentity docker-compose up ziti-host - - NF_REG_TOKEN # NF_REG_NAME=AcmeIdentity NF_REG_TOKEN=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbSI6Im90dCIsImV4cCI6MTY1MzE2NzcwOCwiaXNzIjoiaHR0cHM6Ly81MGEyMDc4Zi01MGQyLTRhZTAtYWI4Ny0wYTdjMjM1OWVjOTYucHJvZHVjdGlvbi5uZXRmb3VuZHJ5LmlvOjQ0MyIsImp0aSI6IjFiMjJkMzc2LTMzMWItNDMxNS1iZTFiLWJkOTUzYThiYWM4ZiIsInN1YiI6InRGLnZnLjdwM1kifQ.TWbk3-kjBRKwQCXMoD93sXtyQhZOMZ1iJzV73Sqft-cEOkV2kjbA4TBRwl0nuLPCdJqkhPl9Yc1WG7YaYWYXV4ghE1Hk0Gta_HlpWdNjNlB1cVrzMyxaoCXhaX5xqGnwDuqfOK7q6DItuNsKouM2G6KKZvhGOacax6TvP-sunsxFz6AdYQJizNBoL5fJ14r1_O6yczGd5GSd8x9-eP5rNMQuRdUtiu69b-rEu1gO2SXVTrADTD5p8sP9khbT_eQzIDD9jgagXoJJvOKTVdsUAWS7YKfk1On0BpxNvv30bQ6eAkliwU7GTXDR2IPW-blZYt1Wtf3sgeuTDCCtVO_7gjSn7WM7YJqpsB72V-43Xz8I7LCDa0u48baSmmpPDUSphIBDa_nksPZk8jfwx4pHoHYbSbD4r47Af_9P-JUQRT8hzNuvktG56kmcqVCfEZHT-4xgK0Lvxxp4mzqdcNyCB0VwC6kdk7OlxwqmftDWrJhNuxKMy2MtyTjG0mwHxt4P0y_fZo1ZYJZU5AzvxrE9OLTjsQ4nV5NliJ3Qxaw_taCaIWxn98BeiHfAiIc3EL7bWGjAfXz-XWvWG8-AcCmK-cxIj7Pvj0U7lIWH7bVcRmVVc0fQnXdACkeQe7ixWr4IopV5YJ607zm6Qk_am_MrERla6xyXblvroWIITN2aEUk docker-compose up ziti-host - - PFXLOG_NO_JSON=true # suppress JSON logging - network_mode: host # use the Docker host's network, not the Docker bridge - -x-iptables-capabilities: &iptables-capabilities - cap_add: - - NET_ADMIN # iptables filter - - NET_RAW # iptables mangle - -services: - ziti-tproxy: # iptables transparent interceptor with DNS - <<: *base-service - <<: *iptables-capabilities - dns: # optionally, override DNS inherited from Docker host - - 127.0.0.1 # this first NS must match the built-in nameserver's bind address, - - 1.1.1.1 # and a recursive NS is also needed e.g. 8.8.8.8 - command: - - tproxy - #- --resolver=udp://127.1.2.3:53 # override nameserver bind address (always 53/udp); default is 127.0.0.1 - #- --dnsSvcIpRange=100.64.64.0/18 # override the IP range used for DNS intercepts; default is 100.64/10 - ziti-tproxy-ip: # iptables transparent interceptor without DNS - <<: *base-service - <<: *iptables-capabilities - command: - - tproxy - - --resolver none - #- --dnsSvcIpRange=100.64.64.0/18 # override the IP range used for DNS intercepts; default is 100.64/10 - ziti-test: # docker-compose exec ziti-test bash - <<: *base-service - <<: *iptables-capabilities - entrypoint: ["sh", "-c", "while true; do sleep infinity; done"] - ziti-host: # terminate a service for a server that's reachable by the host network - <<: *base-service - command: host - ziti-bridge: # terminate a service for a server that's reachable by this Docker network (default mode is "bridge") - <<: *base-service - network_mode: bridge - command: host - ziti-proxy: # bind a named service to a container TCP port, optionally forward host TCP port to container - <<: *base-service - ports: - - "8888:8888" # optionally forward host ports to container ports listening as TCP proxy - network_mode: bridge - command: - - proxy - - '"my example service":8888' # example named service and container port to bind as TCP proxy diff --git a/ziti-tunnel/docker/docker-entrypoint.sh b/ziti-tunnel/docker/docker-entrypoint.sh deleted file mode 100755 index e820efbf6..000000000 --- a/ziti-tunnel/docker/docker-entrypoint.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -function alldone() { - # if successfully sent to background then send SIGINT to trigger a cleanup - # of iptables mangle rules and loopback assignments - [[ "${ZITI_TUNNEL_PID:-}" =~ ^[0-9]+$ ]] && { - kill -INT "$ZITI_TUNNEL_PID" - # let entrypoint script exit after ziti-tunnel PID - wait "$ZITI_TUNNEL_PID" - } -} -trap alldone exit - -# Ensure that ziti-tunnel's identity is stored on a volume -# so we don't throw away the one-time enrollment token - -IDENTITIES_DIR="/netfoundry" -if ! mountpoint "${IDENTITIES_DIR}" &>/dev/null; then - echo "ERROR: please run this container with a volume mounted on ${IDENTITIES_DIR}" >&2 - exit 1 -fi - -# IOTEDGE_DEVICEID is a standard var assigned by Azure IoT -if [[ -z "${NF_REG_NAME:-}" ]]; then - if [[ -n "${IOTEDGE_DEVICEID:-}" ]]; then - echo "DEBUG: setting NF_REG_NAME to \${IOTEDGE_DEVICEID} (${IOTEDGE_DEVICEID})" - NF_REG_NAME="${IOTEDGE_DEVICEID}" - fi -fi - -typeset -a TUNNEL_OPTS -# if identity file name, else critical error -if [[ -n "${NF_REG_NAME:-}" ]]; then - IDENTITY_FILE="${IDENTITIES_DIR}/${NF_REG_NAME}.json" - TUNNEL_OPTS=("--identity" "${IDENTITY_FILE}") - # if non-empty identity file - if [[ -s "${IDENTITY_FILE}" ]]; then - echo "DEBUG: found identity file ${IDENTITY_FILE}" - # look for enrollment token - else - echo "DEBUG: identity file ${IDENTITY_FILE} does not exist" - for dir in "/var/run/secrets/netfoundry.io/enrollment-token" \ - "/enrollment-token" \ - "${IDENTITIES_DIR}"; do - JWT_CANDIDATE="${dir}/${NF_REG_NAME}.jwt" - echo "DEBUG: looking for ${JWT_CANDIDATE}" - if [[ -s "${JWT_CANDIDATE}" ]]; then - JWT_FILE="${JWT_CANDIDATE}" - break - fi - done - if [[ -n "${JWT_FILE:-}" ]]; then - echo "DEBUG: enrolling ${JWT_FILE}" - ziti-tunnel enroll --verbose --jwt "${JWT_FILE}" --identity "${IDENTITY_FILE}" || { - echo "ERROR: failed to enroll with token from ${JWT_FILE} ($(wc -c < "${JWT_FILE}")B)" >&2 - exit 1 - } - elif [[ -n "${NF_REG_TOKEN:-}" ]]; then - echo "DEBUG: attempting enrollment with NF_REG_TOKEN" - JWT_FILE=${IDENTITIES_DIR}/${NF_REG_NAME}.jwt - echo "${NF_REG_TOKEN}" >| ${JWT_FILE} - ziti-tunnel enroll --verbose --jwt ${JWT_FILE} --identity "${IDENTITY_FILE}" || { - echo "ERROR: failed to enroll with token from NF_REG_TOKEN ($(wc -c <<<"${NF_REG_TOKEN}")B)" >&2 - exit 1 - } - elif ! [[ -t 0 ]]; then - echo "DEBUG: trying to get token from stdin" >&2 - JWT_FILE=${IDENTITIES_DIR}/${NF_REG_NAME}.jwt - while read -r; do - echo "$REPLY" >> ${JWT_FILE} - done - ziti-tunnel enroll --verbose --jwt ${JWT_FILE} --identity "${IDENTITY_FILE}" || { - echo "ERROR: failed to enroll with token from stdin, got $(wc -c < ${JWT_FILE})B" >&2 - exit 1 - } - else - echo "DEBUG: ${NF_REG_NAME}.jwt and env var \$NF_REG_TOKEN not found" >&2 - exit 1 - fi - fi -else - echo "ERROR: need NF_REG_NAME env var to save the identity file in volume mounted on ${IDENTITIES_DIR}" >&2 - exit 1 -fi - -echo "INFO: probing iptables" -if iptables -t mangle -S --wait 2>&1 | grep -q "iptables-legacy tables present"; then - for LEGACY in {ip{,6},eb,arp}tables; do - if which ${LEGACY}-legacy &>/dev/null; then - echo "INFO: updating $LEGACY alternative to ${LEGACY}-legacy" - update-alternatives --set $LEGACY "$(which ${LEGACY}-legacy)" - else - echo "WARN: not updating $LEGACY alternative to ${LEGACY}-legacy" >&2 - fi - done -fi - -# optionally run an alternative shell CMD -echo "running ziti-tunnel" -set -x -ziti-tunnel "${TUNNEL_OPTS[@]}" "${@}" & -ZITI_TUNNEL_PID=$! -wait $ZITI_TUNNEL_PID diff --git a/ziti-tunnel/docker/fetch-ziti-bins.sh b/ziti-tunnel/docker/fetch-ziti-bins.sh deleted file mode 100755 index a0ed986c1..000000000 --- a/ziti-tunnel/docker/fetch-ziti-bins.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -[[ $# -eq 0 ]] && { - echo "ERROR: need the base name(s) of the executable(s) to fetch e.g. \"ziti-tunnel ...\"." >&2 - exit 1 -} - -: "${ARTIFACTORY_BASE_URL:="https://netfoundry.jfrog.io/netfoundry"}" -: "${ARTIFACTORY_REPO:="ziti-release"}" -for var in ARTIFACTORY_BASE_URL ARTIFACTORY_REPO ZITI_VERSION; do - if [ -z "${!var:-}" ]; then - echo "ERROR: ${var} must be set when fetching binaries from Artifactory." >&2 - exit 1 - fi -done - -[[ "$ZITI_VERSION" =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]] || { - echo "ERROR: '$ZITI_VERSION' is not a semantic version like 2.0.0" >&2 - exit 1 -} - -echo "Fetching from Artifactory." - -# map host architecture/os to directories that we use in netfoundry.jfrog.io. -# (our artifact directories seem to align with Docker's TARGETARCH and TARGETOS -# build arguments, which we could rely on if we fully committed to "docker buildx" - see -# https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope) -host_arch=$(uname -m) -case "${host_arch}" in -"x86_64") artifact_arch="amd64";; -"armv7l") artifact_arch="arm";; -"aarch64") artifact_arch="arm64";; -*) echo "ERROR: ziti binaries do not exist for architecture ${host_arch}"; exit 1;; -esac - -host_os=$(uname -s) -case "${host_os}" in - "Linux") artifact_os="linux" - ;; - "Darwin") artifact_os="darwin" - ;; - "Windows") artifact_os="windows" - ;; - *) echo "ERROR: ziti binaries do not exist for os ${host_os}"; - exit 1 - ;; -esac - -for exe in "${@}"; do - url="${ARTIFACTORY_BASE_URL}/${ARTIFACTORY_REPO}/${exe}/${artifact_arch}/${artifact_os}/${ZITI_VERSION}/${exe}.tar.gz" - echo "Fetching ${exe} from ${url}" - rm -f "${exe}" "${exe}.tar.gz" "${exe}.exe" - token_header="${ARTIFACTORY_TOKEN:+X-JFrog-Art-Api:$ARTIFACTORY_TOKEN}" - if { command -v curl > /dev/null; } 2>&1; then - curl ${token_header:+-H "$token_header"} -fLsS -O "${url}" - elif { command -v wget > /dev/null; } 2>&1; then - wget ${token_header:+--header "$token_header"} "${url}" - else - echo "ERROR: need one of curl or wget to fetch the artifact." >&2 - exit 1 - fi - tar -xzf "${exe}.tar.gz" - if [ -f "${exe}" ]; then chmod 755 "${exe}"; fi - if [ -f "${exe}.exe" ]; then chmod 755 "${exe}.exe"; fi - rm "${exe}.tar.gz" -done From c1a22b275655f5974dd409b878cd1f3ba120d48d Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 11:21:01 -0500 Subject: [PATCH 28/41] organize use case images into folders --- .github/workflows/publish-docker-images.yml | 16 +++++++--------- docker-images/cli-base/Dockerfile | 6 +++--- .../{entrypoint-cli-base.sh => entrypoint.sh} | 0 .../Dockerfile} | 6 +++--- .../entrypoint.sh} | 0 .../Dockerfile.router => router/Dockerfile} | 6 +++--- .../entrypoint.sh} | 0 .../Dockerfile.tunnel => tunnel/Dockerfile} | 6 +++--- .../entrypoint.sh} | 0 9 files changed, 19 insertions(+), 21 deletions(-) rename docker-images/cli-base/{entrypoint-cli-base.sh => entrypoint.sh} (100%) rename docker-images/{cli-base/Dockerfile.controller => controller/Dockerfile} (82%) rename docker-images/{cli-base/entrypoint-controller.sh => controller/entrypoint.sh} (100%) rename docker-images/{cli-base/Dockerfile.router => router/Dockerfile} (83%) rename docker-images/{cli-base/entrypoint-router.sh => router/entrypoint.sh} (100%) rename docker-images/{cli-base/Dockerfile.tunnel => tunnel/Dockerfile} (88%) rename docker-images/{cli-base/entrypoint-tunnel.sh => tunnel/entrypoint.sh} (100%) diff --git a/.github/workflows/publish-docker-images.yml b/.github/workflows/publish-docker-images.yml index acc83e7b0..338b724a9 100644 --- a/.github/workflows/publish-docker-images.yml +++ b/.github/workflows/publish-docker-images.yml @@ -9,7 +9,7 @@ on: required: true jobs: - publish-containers: + publish-docker-images: runs-on: ubuntu-latest env: ZITI_VERSION: ${{ inputs.ziti-version || github.event.inputs.ziti-version }} @@ -49,7 +49,8 @@ jobs: echo DOCKER_TAGS="${DOCKER_TAGS}" >> $GITHUB_OUTPUT # this is the base image into which is stuffed the Linux binary for each - # arch that was downloaded in ./release/ + # arch that was downloaded in ./release/, hence the need to specify the + # Dockerfile and DOCKER_BUILD_DIR - name: Build & Push Multi-Platform CLI Container Image to Hub uses: docker/build-push-action@v3 with: @@ -59,7 +60,7 @@ jobs: platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_cli.outputs.DOCKER_TAGS }} build-args: | - DOCKER_BUILD_DIR=./container-images + DOCKER_BUILD_DIR=./docker-images/cli-base push: true - name: Set Up Container Image Tags for Controller Container @@ -79,8 +80,7 @@ jobs: uses: docker/build-push-action@v3 with: builder: ${{ steps.buildx.outputs.name }} - context: ${{ github.workspace }}/container-images/ - file: ${{ github.workspace }}/container-images/Dockerfile.controller + context: ${{ github.workspace }}/docker-images/controller/ platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_ctrl.outputs.DOCKER_TAGS }} build-args: | @@ -101,8 +101,7 @@ jobs: uses: docker/build-push-action@v3 with: builder: ${{ steps.buildx.outputs.name }} - context: ${{ github.workspace }}/container-images/ - file: ${{ github.workspace }}/container-images/Dockerfile.router + context: ${{ github.workspace }}/docker-images/router/ platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_router.outputs.DOCKER_TAGS }} build-args: | @@ -127,8 +126,7 @@ jobs: uses: docker/build-push-action@v3 with: builder: ${{ steps.buildx.outputs.name }} - context: ${{ github.workspace }}/container-images/ - file: ${{ github.workspace }}/container-images/Dockerfile.tunnel + context: ${{ github.workspace }}/docker-images/tunnel/ platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_tun.outputs.DOCKER_TAGS }} build-args: | diff --git a/docker-images/cli-base/Dockerfile b/docker-images/cli-base/Dockerfile index 56a014d50..e5b49cfdf 100644 --- a/docker-images/cli-base/Dockerfile +++ b/docker-images/cli-base/Dockerfile @@ -27,8 +27,8 @@ RUN mkdir -p /usr/local/bin COPY ${ARTIFACTS_DIR}/${TARGETARCH}/${TARGETOS}/ziti /usr/local/bin/ RUN chmod 0755 /usr/local/bin/ziti -COPY ${DOCKER_BUILD_DIR}/entrypoint-cli-base.sh / -RUN chmod +x /entrypoint-cli-base.sh +COPY ${DOCKER_BUILD_DIR}/entrypoint.sh / +RUN chmod +x /entrypoint.sh USER nobody -ENTRYPOINT [ "/entrypoint-cli-base.sh" ] +ENTRYPOINT [ "/entrypoint.sh" ] CMD [ "ziti" ] diff --git a/docker-images/cli-base/entrypoint-cli-base.sh b/docker-images/cli-base/entrypoint.sh similarity index 100% rename from docker-images/cli-base/entrypoint-cli-base.sh rename to docker-images/cli-base/entrypoint.sh diff --git a/docker-images/cli-base/Dockerfile.controller b/docker-images/controller/Dockerfile similarity index 82% rename from docker-images/cli-base/Dockerfile.controller rename to docker-images/controller/Dockerfile index aa0d996db..900b59ab5 100644 --- a/docker-images/cli-base/Dockerfile.controller +++ b/docker-images/controller/Dockerfile @@ -13,8 +13,8 @@ LABEL name="openziti/ziti-controller" \ description="Run the OpenZiti Controller" USER root -COPY ./entrypoint-controller.sh / -RUN chmod +x /entrypoint-controller.sh +COPY ./entrypoint.sh / +RUN chmod +x /entrypoint.sh USER nobody -ENTRYPOINT [ "/entrypoint-controller.sh" ] +ENTRYPOINT [ "/entrypoint.sh" ] CMD [ "run" ] diff --git a/docker-images/cli-base/entrypoint-controller.sh b/docker-images/controller/entrypoint.sh similarity index 100% rename from docker-images/cli-base/entrypoint-controller.sh rename to docker-images/controller/entrypoint.sh diff --git a/docker-images/cli-base/Dockerfile.router b/docker-images/router/Dockerfile similarity index 83% rename from docker-images/cli-base/Dockerfile.router rename to docker-images/router/Dockerfile index 2914b5e5b..5dba0585f 100644 --- a/docker-images/cli-base/Dockerfile.router +++ b/docker-images/router/Dockerfile @@ -13,8 +13,8 @@ LABEL name="openziti/ziti-router" \ description="Run the OpenZiti Router" USER root -COPY ./entrypoint-router.sh / -RUN chmod +x /entrypoint-router.sh +COPY ./entrypoint.sh / +RUN chmod +x /entrypoint.sh USER nobody -ENTRYPOINT [ "/entrypoint-router.sh" ] +ENTRYPOINT [ "/entrypoint.sh" ] CMD [ "run" ] diff --git a/docker-images/cli-base/entrypoint-router.sh b/docker-images/router/entrypoint.sh similarity index 100% rename from docker-images/cli-base/entrypoint-router.sh rename to docker-images/router/entrypoint.sh diff --git a/docker-images/cli-base/Dockerfile.tunnel b/docker-images/tunnel/Dockerfile similarity index 88% rename from docker-images/cli-base/Dockerfile.tunnel rename to docker-images/tunnel/Dockerfile index 159066efa..299c9e4b4 100644 --- a/docker-images/cli-base/Dockerfile.tunnel +++ b/docker-images/tunnel/Dockerfile @@ -18,7 +18,7 @@ RUN INSTALL_PKGS="util-linux iptables" && \ microdnf -y update --setopt=install_weak_deps=0 --setopt=tsflags=nodocs && \ microdnf -y install --setopt=install_weak_deps=0 --setopt=tsflags=nodocs ${INSTALL_PKGS} -COPY ./entrypoint-tunnel.sh / -RUN chmod +x /entrypoint-tunnel.sh -ENTRYPOINT [ "/entrypoint-tunnel.sh" ] +COPY ./entrypoint.sh / +RUN chmod +x /entrypoint.sh +ENTRYPOINT [ "/entrypoint.sh" ] CMD [ "run" ] diff --git a/docker-images/cli-base/entrypoint-tunnel.sh b/docker-images/tunnel/entrypoint.sh similarity index 100% rename from docker-images/cli-base/entrypoint-tunnel.sh rename to docker-images/tunnel/entrypoint.sh From 12525fed83549372b8b262b18078b9423cbba330 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 11:45:06 -0500 Subject: [PATCH 29/41] undo fork test --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 79a644aef..e60566ead 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -277,7 +277,7 @@ jobs: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} call-publish-docker-images: - if: github.repository_owner == 'qrkourier' && (github.ref == 'refs/heads/main') + if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main') name: Publish Docker Images needs: publish uses: ./.github/workflows/publish-docker-images.yml From 80f081b9408aebdd8cdf7448d127bd6380377c2c Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 12:02:14 -0500 Subject: [PATCH 30/41] revert me: fork fix --- .github/workflows/main.yml | 10 +++++++--- .github/workflows/publish-docker-images.yml | 10 +++++----- docker-images/controller/Dockerfile | 2 +- docker-images/router/Dockerfile | 2 +- docker-images/tunnel/Dockerfile | 2 +- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e60566ead..07920154c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,6 +27,7 @@ env: jobs: mac-os-build: + if: github.repository_owner == 'openziti' name: Build Mac OS binaries runs-on: macos-11 steps: @@ -57,6 +58,7 @@ jobs: retention-days: 5 windows-build: + if: github.repository_owner == 'openziti' name: Build Windows binaries runs-on: windows-2019 steps: @@ -155,7 +157,7 @@ jobs: publish: name: Publish Binaries runs-on: ubuntu-20.04 - needs: [ mac-os-build, windows-build, fablab-smoketest ] + # needs: [ mac-os-build, windows-build, fablab-smoketest ] outputs: ZITI_VERSION: ${{ steps.get_version.outputs.ZITI_VERSION }} steps: @@ -189,7 +191,7 @@ jobs: $(go env GOPATH)/bin/ziti-ci generate-build-info common/version/info_generated.go version go install github.com/mitchellh/gox@latest $(go env GOPATH)/bin/gox -cgo -os=linux -arch=amd64 -output=$GOX_OUTPUT ./... - CC=arm-linux-gnueabihf-gcc $(go env GOPATH)/bin/gox -cgo -os=linux -arch=arm -output=$GOX_OUTPUT ./... + # CC=arm-linux-gnueabihf-gcc $(go env GOPATH)/bin/gox -cgo -os=linux -arch=arm -output=$GOX_OUTPUT ./... CC=aarch64-linux-gnu-gcc $(go env GOPATH)/bin/gox -cgo -os=linux -arch=arm64 -output=$GOX_OUTPUT ./... # upload Linux artifacts so we can copy them into a container image in another workflow @@ -201,12 +203,14 @@ jobs: retention-days: 5 - name: Download darwin release artifact + if: github.repository_owner == 'openziti' uses: actions/download-artifact@v3 with: name: darwin-release-${{ github.run_id }} path: release/ - name: Download windows release artifact + if: github.repository_owner == 'openziti' uses: actions/download-artifact@v3 with: name: windows-release-${{ github.run_id }} @@ -277,7 +281,7 @@ jobs: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} call-publish-docker-images: - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main') + if: github.repository_owner == 'qrkourier' && (github.ref == 'refs/heads/main') name: Publish Docker Images needs: publish uses: ./.github/workflows/publish-docker-images.yml diff --git a/.github/workflows/publish-docker-images.yml b/.github/workflows/publish-docker-images.yml index 338b724a9..d58e4b12e 100644 --- a/.github/workflows/publish-docker-images.yml +++ b/.github/workflows/publish-docker-images.yml @@ -40,7 +40,7 @@ jobs: - name: Set Up Container Image Tags for Base CLI Container env: - RELEASE_REPO: openziti/ziti-cli + RELEASE_REPO: kbinghamnetfoundry/ziti-cli id: tagprep_cli run: | DOCKER_TAGS="" @@ -65,7 +65,7 @@ jobs: - name: Set Up Container Image Tags for Controller Container env: - RELEASE_REPO: openziti/ziti-controller + RELEASE_REPO: kbinghamnetfoundry/ziti-controller id: tagprep_ctrl run: | DOCKER_TAGS="" @@ -89,7 +89,7 @@ jobs: - name: Set Up Container Image Tags for Router Container env: - RELEASE_REPO: openziti/ziti-router + RELEASE_REPO: kbinghamnetfoundry/ziti-router id: tagprep_router run: | DOCKER_TAGS="" @@ -110,8 +110,8 @@ jobs: - name: Set Up Container Image Tags for Go Tunneler Container env: - SNAPSHOT_REPO: netfoundry/ziti-tunnel - RELEASE_REPO: openziti/ziti-tunnel + SNAPSHOT_REPO: kbinghamnetfoundry/ziti-tunnel + RELEASE_REPO: kbinghamnetfoundry/ziti-tunnel id: tagprep_tun run: | DOCKER_TAGS="" diff --git a/docker-images/controller/Dockerfile b/docker-images/controller/Dockerfile index 900b59ab5..95678f9a3 100644 --- a/docker-images/controller/Dockerfile +++ b/docker-images/controller/Dockerfile @@ -1,6 +1,6 @@ ARG ZITI_VERSION="latest" # this builds docker.io/openziti/ziti-controller -FROM docker.io/openziti/ziti-cli:${ZITI_VERSION} +FROM docker.io/kbinghamnetfoundry/ziti-cli:${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. diff --git a/docker-images/router/Dockerfile b/docker-images/router/Dockerfile index 5dba0585f..5ec149bd0 100644 --- a/docker-images/router/Dockerfile +++ b/docker-images/router/Dockerfile @@ -1,6 +1,6 @@ ARG ZITI_VERSION="latest" # this builds docker.io/openziti/ziti-router -FROM docker.io/openziti/ziti-cli:${ZITI_VERSION} +FROM docker.io/kbinghamnetfoundry/ziti-cli:${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. diff --git a/docker-images/tunnel/Dockerfile b/docker-images/tunnel/Dockerfile index 299c9e4b4..d8d406896 100644 --- a/docker-images/tunnel/Dockerfile +++ b/docker-images/tunnel/Dockerfile @@ -1,6 +1,6 @@ ARG ZITI_VERSION="latest" # this builds docker.io/openziti/ziti-router -FROM docker.io/openziti/ziti-cli:${ZITI_VERSION} +FROM docker.io/kbinghamnetfoundry/ziti-cli:${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. From a7d74316f7e54399f5010da0d5740e68639e93e6 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 12:19:55 -0500 Subject: [PATCH 31/41] Revert "revert me: fork fix" This reverts commit 80f081b9408aebdd8cdf7448d127bd6380377c2c. --- .github/workflows/main.yml | 10 +++------- .github/workflows/publish-docker-images.yml | 10 +++++----- docker-images/controller/Dockerfile | 2 +- docker-images/router/Dockerfile | 2 +- docker-images/tunnel/Dockerfile | 2 +- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 07920154c..e60566ead 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,7 +27,6 @@ env: jobs: mac-os-build: - if: github.repository_owner == 'openziti' name: Build Mac OS binaries runs-on: macos-11 steps: @@ -58,7 +57,6 @@ jobs: retention-days: 5 windows-build: - if: github.repository_owner == 'openziti' name: Build Windows binaries runs-on: windows-2019 steps: @@ -157,7 +155,7 @@ jobs: publish: name: Publish Binaries runs-on: ubuntu-20.04 - # needs: [ mac-os-build, windows-build, fablab-smoketest ] + needs: [ mac-os-build, windows-build, fablab-smoketest ] outputs: ZITI_VERSION: ${{ steps.get_version.outputs.ZITI_VERSION }} steps: @@ -191,7 +189,7 @@ jobs: $(go env GOPATH)/bin/ziti-ci generate-build-info common/version/info_generated.go version go install github.com/mitchellh/gox@latest $(go env GOPATH)/bin/gox -cgo -os=linux -arch=amd64 -output=$GOX_OUTPUT ./... - # CC=arm-linux-gnueabihf-gcc $(go env GOPATH)/bin/gox -cgo -os=linux -arch=arm -output=$GOX_OUTPUT ./... + CC=arm-linux-gnueabihf-gcc $(go env GOPATH)/bin/gox -cgo -os=linux -arch=arm -output=$GOX_OUTPUT ./... CC=aarch64-linux-gnu-gcc $(go env GOPATH)/bin/gox -cgo -os=linux -arch=arm64 -output=$GOX_OUTPUT ./... # upload Linux artifacts so we can copy them into a container image in another workflow @@ -203,14 +201,12 @@ jobs: retention-days: 5 - name: Download darwin release artifact - if: github.repository_owner == 'openziti' uses: actions/download-artifact@v3 with: name: darwin-release-${{ github.run_id }} path: release/ - name: Download windows release artifact - if: github.repository_owner == 'openziti' uses: actions/download-artifact@v3 with: name: windows-release-${{ github.run_id }} @@ -281,7 +277,7 @@ jobs: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} call-publish-docker-images: - if: github.repository_owner == 'qrkourier' && (github.ref == 'refs/heads/main') + if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main') name: Publish Docker Images needs: publish uses: ./.github/workflows/publish-docker-images.yml diff --git a/.github/workflows/publish-docker-images.yml b/.github/workflows/publish-docker-images.yml index d58e4b12e..338b724a9 100644 --- a/.github/workflows/publish-docker-images.yml +++ b/.github/workflows/publish-docker-images.yml @@ -40,7 +40,7 @@ jobs: - name: Set Up Container Image Tags for Base CLI Container env: - RELEASE_REPO: kbinghamnetfoundry/ziti-cli + RELEASE_REPO: openziti/ziti-cli id: tagprep_cli run: | DOCKER_TAGS="" @@ -65,7 +65,7 @@ jobs: - name: Set Up Container Image Tags for Controller Container env: - RELEASE_REPO: kbinghamnetfoundry/ziti-controller + RELEASE_REPO: openziti/ziti-controller id: tagprep_ctrl run: | DOCKER_TAGS="" @@ -89,7 +89,7 @@ jobs: - name: Set Up Container Image Tags for Router Container env: - RELEASE_REPO: kbinghamnetfoundry/ziti-router + RELEASE_REPO: openziti/ziti-router id: tagprep_router run: | DOCKER_TAGS="" @@ -110,8 +110,8 @@ jobs: - name: Set Up Container Image Tags for Go Tunneler Container env: - SNAPSHOT_REPO: kbinghamnetfoundry/ziti-tunnel - RELEASE_REPO: kbinghamnetfoundry/ziti-tunnel + SNAPSHOT_REPO: netfoundry/ziti-tunnel + RELEASE_REPO: openziti/ziti-tunnel id: tagprep_tun run: | DOCKER_TAGS="" diff --git a/docker-images/controller/Dockerfile b/docker-images/controller/Dockerfile index 95678f9a3..900b59ab5 100644 --- a/docker-images/controller/Dockerfile +++ b/docker-images/controller/Dockerfile @@ -1,6 +1,6 @@ ARG ZITI_VERSION="latest" # this builds docker.io/openziti/ziti-controller -FROM docker.io/kbinghamnetfoundry/ziti-cli:${ZITI_VERSION} +FROM docker.io/openziti/ziti-cli:${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. diff --git a/docker-images/router/Dockerfile b/docker-images/router/Dockerfile index 5ec149bd0..5dba0585f 100644 --- a/docker-images/router/Dockerfile +++ b/docker-images/router/Dockerfile @@ -1,6 +1,6 @@ ARG ZITI_VERSION="latest" # this builds docker.io/openziti/ziti-router -FROM docker.io/kbinghamnetfoundry/ziti-cli:${ZITI_VERSION} +FROM docker.io/openziti/ziti-cli:${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. diff --git a/docker-images/tunnel/Dockerfile b/docker-images/tunnel/Dockerfile index d8d406896..299c9e4b4 100644 --- a/docker-images/tunnel/Dockerfile +++ b/docker-images/tunnel/Dockerfile @@ -1,6 +1,6 @@ ARG ZITI_VERSION="latest" # this builds docker.io/openziti/ziti-router -FROM docker.io/kbinghamnetfoundry/ziti-cli:${ZITI_VERSION} +FROM docker.io/openziti/ziti-cli:${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. From aafd99c6ca3ceb4fece9de35c5d74b131fb441cf Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 13:32:12 -0500 Subject: [PATCH 32/41] finish organizing and testing Docker images --- .github/workflows/main.yml | 8 ++------ .github/workflows/publish-docker-images.yml | 10 +++++----- docker-images/{cli-base => ziti-cli}/Dockerfile | 0 docker-images/{cli-base => ziti-cli}/entrypoint.sh | 0 .../{controller => ziti-controller}/Dockerfile | 0 .../{controller => ziti-controller}/entrypoint.sh | 0 docker-images/{router => ziti-router}/Dockerfile | 0 docker-images/{router => ziti-router}/entrypoint.sh | 0 docker-images/{tunnel => ziti-tunnel}/Dockerfile | 0 docker-images/{tunnel => ziti-tunnel}/entrypoint.sh | 0 10 files changed, 7 insertions(+), 11 deletions(-) rename docker-images/{cli-base => ziti-cli}/Dockerfile (100%) rename docker-images/{cli-base => ziti-cli}/entrypoint.sh (100%) rename docker-images/{controller => ziti-controller}/Dockerfile (100%) rename docker-images/{controller => ziti-controller}/entrypoint.sh (100%) rename docker-images/{router => ziti-router}/Dockerfile (100%) rename docker-images/{router => ziti-router}/entrypoint.sh (100%) rename docker-images/{tunnel => ziti-tunnel}/Dockerfile (100%) rename docker-images/{tunnel => ziti-tunnel}/entrypoint.sh (100%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 09d621e5f..10fec44a1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,7 +27,6 @@ env: jobs: mac-os-build: - if: github.repository_owner == 'openziti' name: Build Mac OS binaries runs-on: macos-11 steps: @@ -58,7 +57,6 @@ jobs: retention-days: 5 windows-build: - if: github.repository_owner == 'openziti' name: Build Windows binaries runs-on: windows-2019 steps: @@ -157,7 +155,7 @@ jobs: publish: name: Publish Binaries runs-on: ubuntu-20.04 - # needs: [ mac-os-build, windows-build, fablab-smoketest ] + needs: [ mac-os-build, windows-build, fablab-smoketest ] outputs: ZITI_VERSION: ${{ steps.get_version.outputs.ZITI_VERSION }} steps: @@ -203,14 +201,12 @@ jobs: retention-days: 5 - name: Download darwin release artifact - if: github.repository_owner == 'openziti' uses: actions/download-artifact@v3 with: name: darwin-release-${{ github.run_id }} path: release/ - name: Download windows release artifact - if: github.repository_owner == 'openziti' uses: actions/download-artifact@v3 with: name: windows-release-${{ github.run_id }} @@ -281,7 +277,7 @@ jobs: ziti-version: ${{ needs.publish.outputs.ZITI_VERSION }} call-publish-docker-images: - if: github.repository_owner == 'openziti' && (github.ref == 'refs/heads/main') + if: github.ref == 'refs/heads/main' name: Publish Docker Images needs: publish uses: ./.github/workflows/publish-docker-images.yml diff --git a/.github/workflows/publish-docker-images.yml b/.github/workflows/publish-docker-images.yml index 338b724a9..1596cb61f 100644 --- a/.github/workflows/publish-docker-images.yml +++ b/.github/workflows/publish-docker-images.yml @@ -56,11 +56,11 @@ jobs: with: builder: ${{ steps.buildx.outputs.name }} context: ${{ github.workspace }}/ - file: ${{ github.workspace }}/docker-images/cli-base/Dockerfile + file: ${{ github.workspace }}/docker-images/ziti-cli/Dockerfile platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_cli.outputs.DOCKER_TAGS }} build-args: | - DOCKER_BUILD_DIR=./docker-images/cli-base + DOCKER_BUILD_DIR=./docker-images/ziti-cli push: true - name: Set Up Container Image Tags for Controller Container @@ -80,7 +80,7 @@ jobs: uses: docker/build-push-action@v3 with: builder: ${{ steps.buildx.outputs.name }} - context: ${{ github.workspace }}/docker-images/controller/ + context: ${{ github.workspace }}/docker-images/ziti-controller/ platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_ctrl.outputs.DOCKER_TAGS }} build-args: | @@ -101,7 +101,7 @@ jobs: uses: docker/build-push-action@v3 with: builder: ${{ steps.buildx.outputs.name }} - context: ${{ github.workspace }}/docker-images/router/ + context: ${{ github.workspace }}/docker-images/ziti-router/ platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_router.outputs.DOCKER_TAGS }} build-args: | @@ -126,7 +126,7 @@ jobs: uses: docker/build-push-action@v3 with: builder: ${{ steps.buildx.outputs.name }} - context: ${{ github.workspace }}/docker-images/tunnel/ + context: ${{ github.workspace }}/docker-images/ziti-tunnel/ platforms: linux/amd64,linux/arm64 tags: ${{ steps.tagprep_tun.outputs.DOCKER_TAGS }} build-args: | diff --git a/docker-images/cli-base/Dockerfile b/docker-images/ziti-cli/Dockerfile similarity index 100% rename from docker-images/cli-base/Dockerfile rename to docker-images/ziti-cli/Dockerfile diff --git a/docker-images/cli-base/entrypoint.sh b/docker-images/ziti-cli/entrypoint.sh similarity index 100% rename from docker-images/cli-base/entrypoint.sh rename to docker-images/ziti-cli/entrypoint.sh diff --git a/docker-images/controller/Dockerfile b/docker-images/ziti-controller/Dockerfile similarity index 100% rename from docker-images/controller/Dockerfile rename to docker-images/ziti-controller/Dockerfile diff --git a/docker-images/controller/entrypoint.sh b/docker-images/ziti-controller/entrypoint.sh similarity index 100% rename from docker-images/controller/entrypoint.sh rename to docker-images/ziti-controller/entrypoint.sh diff --git a/docker-images/router/Dockerfile b/docker-images/ziti-router/Dockerfile similarity index 100% rename from docker-images/router/Dockerfile rename to docker-images/ziti-router/Dockerfile diff --git a/docker-images/router/entrypoint.sh b/docker-images/ziti-router/entrypoint.sh similarity index 100% rename from docker-images/router/entrypoint.sh rename to docker-images/ziti-router/entrypoint.sh diff --git a/docker-images/tunnel/Dockerfile b/docker-images/ziti-tunnel/Dockerfile similarity index 100% rename from docker-images/tunnel/Dockerfile rename to docker-images/ziti-tunnel/Dockerfile diff --git a/docker-images/tunnel/entrypoint.sh b/docker-images/ziti-tunnel/entrypoint.sh similarity index 100% rename from docker-images/tunnel/entrypoint.sh rename to docker-images/ziti-tunnel/entrypoint.sh From 0858779943d4dcfcb1d27872f851885ac8a974f1 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 24 Jan 2023 14:36:03 -0500 Subject: [PATCH 33/41] Update changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 035a0ba72..cb3115b11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,17 @@ ## 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/edge: [v0.24.95 -> v0.24.104](https://github.com/openziti/edge/compare/v0.24.95...v0.24.104) * [Issue #1292](https://github.com/openziti/edge/issues/1292) - Support alternative tproxy configuration methods +* github.com/openziti/fabric: [v0.22.7 -> v0.22.10](https://github.com/openziti/fabric/compare/v0.22.7...v0.22.10) + * [Issue #508](https://github.com/openziti/fabric/issues/508) - Refactor router debug ops for multiple controllers + +* github.com/openziti/runzmd: [v1.0.7 -> v1.0.8](https://github.com/openziti/runzmd/compare/v1.0.7...v1.0.8) +* github.com/openziti/sdk-golang: [v0.18.21 -> v0.18.24](https://github.com/openziti/sdk-golang/compare/v0.18.21...v0.18.24) +* github.com/openziti/ziti: [v0.27.2 -> v0.27.3](https://github.com/openziti/ziti/compare/v0.27.2...v0.27.3) + * [Issue #972](https://github.com/openziti/ziti/issues/972) - tunnel segfault # Release 0.27.2 From 07e830a157c6a40ac4816cfa90736cb68fa3e324 Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Tue, 24 Jan 2023 14:37:59 -0500 Subject: [PATCH 34/41] changelog what's new: docker images --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 035a0ba72..b1233baa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Release 0.27.3 -# What's New +## What's New + +* Docker images for `ziti` CLI ## Component Updates and Bug Fixes @@ -10,7 +12,7 @@ # Release 0.27.2 -# What's New +## What's New * Bug fixes From 08e05777af1a3fb985aedce669a00b0c27d98b10 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 24 Jan 2023 16:08:33 -0500 Subject: [PATCH 35/41] Don't run DNS server for tunnel proxy/host modes. Fixes #974 --- ziti/tunnel/host.go | 4 ++-- ziti/tunnel/proxy.go | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ziti/tunnel/host.go b/ziti/tunnel/host.go index 61287828a..dc71d9d6e 100644 --- a/ziti/tunnel/host.go +++ b/ziti/tunnel/host.go @@ -33,8 +33,8 @@ func NewHostCmd() *cobra.Command { } func runHost(cmd *cobra.Command, args []string) error { - if !cmd.Flag(resolverCfgFlag).Changed { - _ = cmd.PersistentFlags().Set(resolverCfgFlag, "") + if flag := cmd.Flag(resolverCfgFlag); !flag.Changed { + _ = flag.Value.Set("") } interceptor = host.New() return nil diff --git a/ziti/tunnel/proxy.go b/ziti/tunnel/proxy.go index c80597098..f7eb6669d 100644 --- a/ziti/tunnel/proxy.go +++ b/ziti/tunnel/proxy.go @@ -38,11 +38,11 @@ func NewProxyCmd() *cobra.Command { func runProxy(cmd *cobra.Command, args []string) error { // Fiddle with the poll rate and resolver settings if the user didn't wan't anything special. - if !cmd.Flag(svcPollRateFlag).Changed { - _ = cmd.PersistentFlags().Set(svcPollRateFlag, strconv.FormatUint(math.MaxUint32, 10)) + if flag := cmd.Flag(svcPollRateFlag); !flag.Changed { + _ = flag.Value.Set(strconv.FormatUint(math.MaxUint32, 10)) } - if !cmd.Flag(resolverCfgFlag).Changed { - _ = cmd.PersistentFlags().Set(resolverCfgFlag, "") + if flag := cmd.Flag(resolverCfgFlag); !flag.Changed { + _ = flag.Value.Set("") } var err error if interceptor, err = proxy.New(net.IPv4zero, args); err != nil { From 81b8064684edcd2b1d2fd253978855fea09b28af Mon Sep 17 00:00:00 2001 From: Cam Otts Date: Wed, 25 Jan 2023 09:24:04 -0600 Subject: [PATCH 36/41] added commands for new raft interactions (#940) * added commands for new raft interactions * new fabric version * fixed up new cli structure and added changelog --- CHANGELOG.md | 5 ++ ziti/cmd/agentcli/agent.go | 16 ++-- .../agentcli/agent_controller_raft_leave.go | 84 +++++++++++++++++++ .../agentcli/agent_controller_raft_list.go | 11 ++- ziti/cmd/fabric/raft.go | 81 ++++++++++++++++++ ziti/cmd/fabric/root.go | 1 + 6 files changed, 190 insertions(+), 8 deletions(-) create mode 100644 ziti/cmd/agentcli/agent_controller_raft_leave.go create mode 100644 ziti/cmd/fabric/raft.go diff --git a/CHANGELOG.md b/CHANGELOG.md index cb3115b11..afabccc45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ # What's New +* 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) diff --git a/ziti/cmd/agentcli/agent.go b/ziti/cmd/agentcli/agent.go index 55f809d4c..93f690f32 100644 --- a/ziti/cmd/agentcli/agent.go +++ b/ziti/cmd/agentcli/agent.go @@ -2,6 +2,12 @@ package agentcli import ( "fmt" + "io" + "net" + "os" + "strings" + "time" + "github.com/openziti/agent" "github.com/openziti/channel/v2" "github.com/openziti/edge/router/debugops" @@ -13,11 +19,6 @@ import ( cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/pkg/errors" "github.com/spf13/cobra" - "io" - "net" - "os" - "strings" - "time" ) type AgentAppId byte @@ -64,6 +65,7 @@ func NewAgentCmd(p common.OptionsProvider) *cobra.Command { ctrlCmd.AddCommand(NewSimpleChAgentCustomCmd("snapshot-db", AgentAppController, int32(mgmt_pb.ContentType_SnapshotDbRequestType), p)) ctrlCmd.AddCommand(NewAgentCtrlRaftJoin(p)) ctrlCmd.AddCommand(NewAgentCtrlRaftList(p)) + ctrlCmd.AddCommand(NewAgentCtrlRaftLeave(p)) ctrlCmd.AddCommand(NewAgentCtrlInit(p)) ctrlCmd.AddCommand(NewAgentCtrlInitFromDb(p)) @@ -92,7 +94,7 @@ func NewAgentCmd(p common.OptionsProvider) *cobra.Command { // AgentOptions contains the command line options type AgentOptions struct { common.CommonOptions - pid uint16 + pid uint32 processName string appId string appType string @@ -102,7 +104,7 @@ type AgentOptions struct { } func (self *AgentOptions) AddAgentOptions(cmd *cobra.Command) { - cmd.Flags().Uint16VarP(&self.pid, "pid", "p", 0, "Process ID of host application to talk to") + cmd.Flags().Uint32VarP(&self.pid, "pid", "p", 0, "Process ID of host application to talk to") cmd.Flags().StringVarP(&self.processName, "process-name", "n", "", "Process name of host application to talk to") cmd.Flags().StringVarP(&self.appId, "app-id", "i", "", "Id of host application to talk to (like controller or router id)") cmd.Flags().StringVarP(&self.appType, "app-type", "t", "", "Type of host application to talk to (like controller or router)") diff --git a/ziti/cmd/agentcli/agent_controller_raft_leave.go b/ziti/cmd/agentcli/agent_controller_raft_leave.go new file mode 100644 index 000000000..2d8b98ad2 --- /dev/null +++ b/ziti/cmd/agentcli/agent_controller_raft_leave.go @@ -0,0 +1,84 @@ +/* + 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" + "time" + + "github.com/openziti/channel/v2" + "github.com/openziti/fabric/controller" + "github.com/openziti/fabric/pb/mgmt_pb" + "github.com/openziti/ziti/ziti/cmd/common" + cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" + "github.com/spf13/cobra" +) + +type AgentCtrlRaftLeaveAction struct { + AgentOptions + MemberId string + MemberAddr string +} + +func NewAgentCtrlRaftLeave(p common.OptionsProvider) *cobra.Command { + action := AgentCtrlRaftLeaveAction{ + AgentOptions: AgentOptions{ + CommonOptions: p(), + }, + } + + cmd := &cobra.Command{ + Args: cobra.RangeArgs(0, 1), + Use: "raft-leave", + Run: func(cmd *cobra.Command, args []string) { + action.Cmd = cmd + action.Args = args + err := action.MakeChannelRequest(byte(AgentAppController), action.makeRequest) + cmdhelper.CheckErr(err) + }, + } + action.AddAgentOptions(cmd) + cmd.Flags().StringVar(&action.MemberId, "id", "", "The member id. If not provided, it will be looked up by the provided address") + cmd.Flags().StringVar(&action.MemberAddr, "address", "", "The member address") + + return cmd +} + +func (o *AgentCtrlRaftLeaveAction) makeRequest(ch channel.Channel) error { + msg := channel.NewMessage(int32(mgmt_pb.ContentType_RaftRemoveRequestType), nil) + + if o.MemberId != "" { + msg.PutStringHeader(controller.AgentIdHeader, o.MemberId) + } + + if o.MemberAddr != "" { + msg.PutStringHeader(controller.AgentAddrHeader, o.MemberAddr) + } + + reply, err := msg.WithTimeout(5 * time.Second).SendForReply(ch) + + if err != nil { + return err + } + result := channel.UnmarshalResult(reply) + if result.Success { + fmt.Println(result.Message) + } else { + fmt.Printf("error: %v\n", result.Message) + } + return nil +} diff --git a/ziti/cmd/agentcli/agent_controller_raft_list.go b/ziti/cmd/agentcli/agent_controller_raft_list.go index 6429a3623..859b7e981 100644 --- a/ziti/cmd/agentcli/agent_controller_raft_list.go +++ b/ziti/cmd/agentcli/agent_controller_raft_list.go @@ -18,9 +18,12 @@ package agentcli import ( "fmt" + "github.com/golang/protobuf/proto" + "github.com/jedib0t/go-pretty/v6/table" "github.com/openziti/channel/v2" "github.com/openziti/fabric/pb/mgmt_pb" + "github.com/openziti/ziti/ziti/cmd/api" "github.com/openziti/ziti/ziti/cmd/common" "github.com/spf13/cobra" ) @@ -69,9 +72,15 @@ func (self *AgentCtrlRaftListAction) makeRequest(ch channel.Channel) error { if err = proto.Unmarshal(reply.Body, resp); err != nil { return err } + t := table.NewWriter() + t.SetStyle(table.StyleRounded) + t.AppendHeader(table.Row{"Id", "Address", "Voter", "Leader", "Version", "Connected"}) for _, m := range resp.Members { - fmt.Printf("id: %v, addr: %v, voter: %v, leader: %v\n", m.Id, m.Addr, m.IsVoter, m.IsLeader) + t.AppendRow(table.Row{m.Id, m.Addr, m.IsVoter, m.IsLeader, m.Version, m.IsConnected}) } + api.RenderTable(&api.Options{ + CommonOptions: self.CommonOptions, + }, t, nil) } return nil } diff --git a/ziti/cmd/fabric/raft.go b/ziti/cmd/fabric/raft.go new file mode 100644 index 000000000..548634c2b --- /dev/null +++ b/ziti/cmd/fabric/raft.go @@ -0,0 +1,81 @@ +package fabric + +import ( + "context" + + "github.com/jedib0t/go-pretty/v6/table" + "github.com/openziti/fabric/rest_client/raft" + "github.com/openziti/ziti/ziti/cmd/api" + "github.com/openziti/ziti/ziti/cmd/common" + cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" + "github.com/openziti/ziti/ziti/util" + "github.com/spf13/cobra" +) + +// newRaftCmd creates a command object for the "controller raft" command +func newRaftCmd(p common.OptionsProvider) *cobra.Command { + cmd := &cobra.Command{ + Use: "raft", + Short: "Raft operations", + Run: func(cmd *cobra.Command, args []string) { + err := cmd.Help() + cmdhelper.CheckErr(err) + }, + } + + cmd.AddCommand(newRaftListMembersCmd(p)) + + return cmd +} + +type raftListMembersOptions struct { + api.Options +} + +func newRaftListMembersCmd(p common.OptionsProvider) *cobra.Command { + options := &raftListMembersOptions{ + Options: api.Options{CommonOptions: p()}, + } + + cmd := &cobra.Command{ + Use: "list-members", + Short: "list cluster members and their status", + Args: cobra.ExactArgs(0), + Run: func(cmd *cobra.Command, args []string) { + options.Cmd = cmd + options.Args = args + err := raftListMembers(options) + cmdhelper.CheckErr(err) + }, + } + + // allow interspersing positional args and flags + cmd.Flags().SetInterspersed(true) + options.AddCommonFlags(cmd) + + return cmd +} + +func raftListMembers(o *raftListMembersOptions) error { + client, err := util.NewFabricManagementClient(o) + if err != nil { + return err + } + members, err := client.Raft.RaftListMembers(&raft.RaftListMembersParams{ + Context: context.Background(), + }) + if err != nil { + return err + } + + t := table.NewWriter() + t.SetStyle(table.StyleRounded) + t.AppendHeader(table.Row{"Id", "Address", "Voter", "Leader", "Version", "Connected"}) + for _, m := range members.Payload.Values { + t.AppendRow(table.Row{*m.ID, *m.Address, *m.Voter, *m.Leader, *m.Version, *m.Connected}) + } + api.RenderTable(&api.Options{ + CommonOptions: o.CommonOptions, + }, t, nil) + return nil +} diff --git a/ziti/cmd/fabric/root.go b/ziti/cmd/fabric/root.go index fdff1eff9..39ed4f782 100644 --- a/ziti/cmd/fabric/root.go +++ b/ziti/cmd/fabric/root.go @@ -35,6 +35,7 @@ func NewFabricCmd(p common.OptionsProvider) *cobra.Command { fabricCmd.AddCommand(newInspectCmd(p)) fabricCmd.AddCommand(newDbCmd(p)) fabricCmd.AddCommand(newStreamCommand(p)) + fabricCmd.AddCommand(newRaftCmd(p)) return fabricCmd } From 2cf040cce6247880639ffe040dc0b4cdd4bb20b5 Mon Sep 17 00:00:00 2001 From: Ken Bingham Date: Fri, 27 Jan 2023 11:35:20 -0500 Subject: [PATCH 37/41] mention the preferred tunneler image --- docker-images/ziti-tunnel/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-images/ziti-tunnel/Dockerfile b/docker-images/ziti-tunnel/Dockerfile index 299c9e4b4..e6ded3ce1 100644 --- a/docker-images/ziti-tunnel/Dockerfile +++ b/docker-images/ziti-tunnel/Dockerfile @@ -1,5 +1,5 @@ ARG ZITI_VERSION="latest" -# this builds docker.io/openziti/ziti-router +# this builds docker.io/openziti/ziti-router, 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 build stage grabs artifacts that are copied into the final image. From d1cf57acc64a5595ac5d6e9cc6a96eea86d15643 Mon Sep 17 00:00:00 2001 From: Ken Bingham Date: Fri, 27 Jan 2023 11:43:40 -0500 Subject: [PATCH 38/41] correct the tag that this Dockerfile builds --- docker-images/ziti-tunnel/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-images/ziti-tunnel/Dockerfile b/docker-images/ziti-tunnel/Dockerfile index e6ded3ce1..6f370a0c0 100644 --- a/docker-images/ziti-tunnel/Dockerfile +++ b/docker-images/ziti-tunnel/Dockerfile @@ -1,5 +1,5 @@ ARG ZITI_VERSION="latest" -# this builds docker.io/openziti/ziti-router, the legacy tunneler. The preferred tunneler is openziti/ziti-edge-tunnel documented in https://docs.openziti.io/docs/reference/tunnelers/linux/container/ +# 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 build stage grabs artifacts that are copied into the final image. From faaeb7b1ac8c69dc4d90bb22592fe7934ea32391 Mon Sep 17 00:00:00 2001 From: dovholuknf <46322585+dovholuknf@users.noreply.github.com> Date: Tue, 31 Jan 2023 07:34:03 -0500 Subject: [PATCH 39/41] add adopter DeltaSecure Gmbh --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index b61048da1..16c549504 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -22,4 +22,4 @@ Here's the list of projects using and adopting OpenZiti |---------------------------|-----------------------------------------------|----------|-----------------| | NetFoundry | https://nfconsole.io/signup | | NetFoundry SaaS provides management, orchestrations, support, and SLAs for OpenZiti networks. | | HackBunker | https://www.hackbunker.com/ | | 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/ | | 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. | From 64552d0962b4273e7ee9025f832176599de122dd Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Thu, 2 Feb 2023 23:11:58 -0500 Subject: [PATCH 40/41] add utils in base cli image --- docker-images/ziti-cli/Dockerfile | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/docker-images/ziti-cli/Dockerfile b/docker-images/ziti-cli/Dockerfile index e5b49cfdf..8243230ad 100644 --- a/docker-images/ziti-cli/Dockerfile +++ b/docker-images/ziti-cli/Dockerfile @@ -1,4 +1,12 @@ -# this builds docker.io/openziti/ziti-cli +# this Dockerfile builds docker.io/openziti/ziti-cli + +# get kubectl CLI from a source with Docker Content Trust (DCT) +# FIXME: require DCT at build time +FROM bitnami/kubectl as bitnami-kubectl + +# FIXME: This repo requires terms acceptance and is only available on registry.redhat.io. +# FROM registry.access.redhat.com/openshift4/ose-cli as openshift-cli + FROM registry.access.redhat.com/ubi8/ubi-minimal # 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. @@ -19,7 +27,19 @@ LABEL name="openziti/ziti-cli" \ USER root -### add licenses to this directory +### install packages +RUN INSTALL_PKGS="python38 python38-pip" && \ + microdnf -y update --setopt=install_weak_deps=0 --setopt=tsflags=nodocs && \ + microdnf -y install --setopt=install_weak_deps=0 --setopt=tsflags=nodocs ${INSTALL_PKGS} + +### install OpenShift CLI (oc) +# FIXME: This repo requires terms acceptance and is only available on registry.redhat.io. +# COPY --from=openshift-cli /path/to/oc /usr/local/bin/oc + +### install Kubernetes CLI +COPY --from=bitnami-kubectl /opt/bitnami/kubectl/bin/kubectl /usr/local/bin/ + +### add license in the path prescribed by OpenShift RUN mkdir -m0755 /licenses COPY ./LICENSE /licenses/apache.txt From 0fb130667dc5883ec8207eaaafdc2df6bd015eb3 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 24 Jan 2023 14:16:01 -0500 Subject: [PATCH 41/41] Update deps and changelog. Update for edge-api extraction --- CHANGELOG.md | 17 +- go.mod | 43 ++-- go.sum | 88 ++++---- network-tests/go.mod | 94 +++++---- network-tests/go.sum | 198 ++++++++++-------- .../simple-transfer/configs/ctrl.yml | 39 +--- .../simple-transfer/configs/router.yml | 8 +- network-tests/simple-transfer/main.go | 3 +- quickstart/test/quickstart_test.go | 22 +- ziti/cmd/edge/create_authenticator_updb.go | 2 +- ziti/cmd/edge/create_ca.go | 4 +- ziti/cmd/edge/create_enrollment.go | 4 +- ziti/cmd/edge/create_posture_check.go | 4 +- ziti/cmd/edge/list.go | 4 +- ziti/cmd/edge/update_authenticator_updb.go | 2 +- ziti/cmd/edge/update_ca.go | 4 +- ziti/util/identities.go | 2 +- ziti/util/rest.go | 4 +- 18 files changed, 280 insertions(+), 262 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1c272505..ef61f1f33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,15 +12,24 @@ ## 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/edge: [v0.24.95 -> v0.24.104](https://github.com/openziti/edge/compare/v0.24.95...v0.24.104) +* 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/fabric: [v0.22.7 -> v0.22.10](https://github.com/openziti/fabric/compare/v0.22.7...v0.22.10) +* 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/runzmd: [v1.0.7 -> v1.0.8](https://github.com/openziti/runzmd/compare/v1.0.7...v1.0.8) -* github.com/openziti/sdk-golang: [v0.18.21 -> v0.18.24](https://github.com/openziti/sdk-golang/compare/v0.18.21...v0.18.24) +* 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 diff --git a/go.mod b/go.mod index 3c0a018ce..44abc0572 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/MakeNowJust/heredoc v1.0.0 github.com/blang/semver v3.5.1+incompatible github.com/docker/docker v20.10.21+incompatible - github.com/fatih/color v1.13.0 + github.com/fatih/color v1.14.1 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 @@ -21,28 +21,29 @@ require ( github.com/keybase/go-ps v0.0.0-20190827175125-91aafc93ba19 github.com/michaelquigley/pfxlog v0.6.9 github.com/openziti/agent v1.0.8 - github.com/openziti/channel/v2 v2.0.25 - github.com/openziti/edge v0.24.104 - github.com/openziti/fabric v0.22.10 + github.com/openziti/channel/v2 v2.0.26 + github.com/openziti/edge v0.24.115 + github.com/openziti/edge-api v0.25.6 + github.com/openziti/fabric v0.22.19 github.com/openziti/foundation/v2 v2.0.10 - github.com/openziti/identity v1.0.29 - github.com/openziti/runzmd v1.0.8 - github.com/openziti/sdk-golang v0.18.24 - github.com/openziti/storage v0.1.31 - github.com/openziti/transport/v2 v2.0.49 + github.com/openziti/identity v1.0.30 + github.com/openziti/runzmd v1.0.9 + github.com/openziti/sdk-golang v0.18.26 + github.com/openziti/storage v0.1.33 + github.com/openziti/transport/v2 v2.0.50 github.com/openziti/xweb/v2 v2.0.2 github.com/openziti/ziti-db-explorer v1.1.1 github.com/pborman/uuid v1.2.0 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.22.12 + github.com/shirou/gopsutil/v3 v3.23.1 github.com/sirupsen/logrus v1.9.0 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.10.0 github.com/stretchr/testify v1.8.1 - go.etcd.io/bbolt v1.3.6 + go.etcd.io/bbolt v1.3.7 golang.org/x/net v0.5.0 google.golang.org/grpc v1.42.0 google.golang.org/protobuf v1.28.1 @@ -73,10 +74,10 @@ 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.7.0 // indirect + github.com/dlclark/regexp2 v1.8.0 // indirect github.com/docker/distribution v2.8.1+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect - github.com/docker/go-units v0.4.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 @@ -87,12 +88,12 @@ require ( github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/analysis v0.21.4 // indirect github.com/go-openapi/errors v0.20.3 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect + 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.7 // indirect + github.com/go-openapi/spec v0.20.8 // indirect github.com/go-openapi/swag v0.22.3 // indirect - github.com/go-openapi/validate v0.22.0 // 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 @@ -168,12 +169,12 @@ require ( 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.10.0 // indirect + go.mongodb.org/mongo-driver v1.11.1 // indirect go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect - go.opentelemetry.io/otel v1.11.1 // indirect - go.opentelemetry.io/otel/trace v1.11.1 // 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-20230111222715-75897c7a292a // indirect + golang.org/x/exp v0.0.0-20230202163644-54bba9f4231b // indirect golang.org/x/image v0.3.0 // indirect golang.org/x/mod v0.6.0 // indirect golang.org/x/sync v0.1.0 // indirect diff --git a/go.sum b/go.sum index b0271e5a2..e5eac95f4 100644 --- a/go.sum +++ b/go.sum @@ -191,8 +191,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.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= -github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2 v1.8.0 h1:rJD5HeGIT/2b5CDk63FVCwZA3qgYElfg+oQK7uH5pfE= +github.com/dlclark/regexp2 v1.8.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= @@ -200,8 +200,8 @@ github.com/docker/docker v20.10.21+incompatible h1:UTLdBmHk3bEY+w8qeO5KttOhy6OmX github.com/docker/docker v20.10.21+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +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= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= @@ -225,8 +225,9 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/exoscale/egoscale v0.23.0/go.mod h1:hRo78jkjkCDKpivQdRBEpNYF5+cVpCJCPDg2/r45KaY= 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 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= 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/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= @@ -271,11 +272,13 @@ github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpX github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= 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= @@ -283,8 +286,8 @@ github.com/go-openapi/runtime v0.25.0 h1:7yQTCdRbWhX8vnIjdzU8S00tBYf7Sg71EBeorlP github.com/go-openapi/runtime v0.25.0/go.mod h1:Ux6fikcHXyyob6LNWxtE96hWwjBPYF0DXgVFuMTneOs= 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.7 h1:1Rlu/ZrOCCob0n+JKKJAWhNWMPW8bOZRg8FJaY+0SKI= -github.com/go-openapi/spec v0.20.7/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/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= @@ -294,8 +297,8 @@ github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/ github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/validate v0.22.0 h1:b0QecH6VslW/TxtpKgzpO1SNG7GU2FsaqKdP1E2T50Y= -github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +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-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= @@ -536,8 +539,9 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= @@ -695,30 +699,32 @@ github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTm 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.25 h1:ihw9DDTfMHDL33gZFLqDyADFGKBec4beaThV/VJLWhI= -github.com/openziti/channel/v2 v2.0.25/go.mod h1:eHPS7dmvDV+Q/SmbB2gwvdvdz/NcnetFshHsdNzAnZs= +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/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.104 h1:+95zy3rYeAtn4DDpYTxNFGqNGqwPCcD44JUB2ezbLxg= -github.com/openziti/edge v0.24.104/go.mod h1:qQhaMTwWE++B+57WDqjWHQJ4tocgL7M7gODNnEzXaNI= -github.com/openziti/fabric v0.22.10 h1:h4wpH9yON4vZHQ1PPyWl8cJfbMC2LpsUC6UT/zM1TSs= -github.com/openziti/fabric v0.22.10/go.mod h1:8i3qG7UJbqWHH3V6nZlhzaaGyqiecn4cCsj9qGf4Rec= +github.com/openziti/edge v0.24.115 h1:8mFqSq/6Bzpkkh61p4GwX86mOi1tcRP2mdo8/x7umgk= +github.com/openziti/edge v0.24.115/go.mod h1:QZJ/5nJBewfkqcHwAEU0Wz8B6i1uB5+DQ5788XRXY4U= +github.com/openziti/edge-api v0.25.6 h1:gn7oJRgAojyJlMgbidAbPTuPhfGWr+stGsTtzkIfjFA= +github.com/openziti/edge-api v0.25.6/go.mod h1:Ohmiq2Fdz1UXiXIyxGUIPI1gXY3ZVNMiT7urvp8u6xw= +github.com/openziti/fabric v0.22.19 h1:QFieGI8mQYX+OooVLeKLl2nI30GS8jD7XXjF8/xp6A0= +github.com/openziti/fabric v0.22.19/go.mod h1:kU+xlaM0GFoVBPIOzVnTSSFDBmigEtfhdFhzTUWh/W4= 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.29 h1:FkY/Hzpfh2/U2cUzYR2X3380/IKGIQYpJaKWqXpOIAg= -github.com/openziti/identity v1.0.29/go.mod h1:SPZAaqvDToS2jtae4D2fvO9IsR6G6FKNZ8WTqAwKKJE= +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.8 h1:snjZebyVVeXL4UfSYhJxHTzo/jeSKFkvjMwWWZ7uRMg= -github.com/openziti/runzmd v1.0.8/go.mod h1:og+vSXZFDZiAturQQJVyfo2j41XFTmv+oZptzKZnPqI= -github.com/openziti/sdk-golang v0.18.24 h1:pKNupqa3ZnaLxNRL1tKn7JUT22xAeKcTIWFUSQaHtRk= -github.com/openziti/sdk-golang v0.18.24/go.mod h1:MEHIen3YTNwPaDGMgDgcTf04RqG5fCti4CnNRJhk70g= -github.com/openziti/storage v0.1.31 h1:YO1c1mzn+DfmBOtzhBlMe6q5cgjSOUv+sY8iUOwXals= -github.com/openziti/storage v0.1.31/go.mod h1:DFRIpfCkI7lLuhGUl4CgZR6sGbsMJ/+nGnjkVIqCgrw= -github.com/openziti/transport/v2 v2.0.49 h1:P3gUazaC8Z7iy4eXk510wjTKot6GucWMtqexU3mn83U= -github.com/openziti/transport/v2 v2.0.49/go.mod h1:aFx8zQsuXttifuJI9WXZQ8p6CHm5H75Ab/cuPg/gFFw= +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/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= @@ -812,8 +818,8 @@ 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.22.12 h1:oG0ns6poeUSxf78JtOsfygNWuEHYYz8hnnNg7P04TJs= -github.com/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI= +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/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= @@ -945,15 +951,16 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= 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 h1:UtV6N5k14upNp4LTduX0QCufG124fSu25Wz9tu94GLg= 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.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= @@ -966,11 +973,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.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= -go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +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/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= -go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= -go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +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/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= @@ -1020,8 +1027,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-20230111222715-75897c7a292a h1:/YWeLOBWYV5WAQORVPkZF3Pq9IppkcT72GKnWjNf5W8= -golang.org/x/exp v0.0.0-20230111222715-75897c7a292a/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +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/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= @@ -1201,7 +1208,6 @@ golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1228,7 +1234,6 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc 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.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1454,6 +1459,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= diff --git a/network-tests/go.mod b/network-tests/go.mod index 53b8b4905..bbc927a31 100644 --- a/network-tests/go.mod +++ b/network-tests/go.mod @@ -3,9 +3,9 @@ module github.com/openziti/ziti/network-tests go 1.19 require ( - github.com/openziti/fablab v0.4.15 - github.com/openziti/sdk-golang v0.18.2 - github.com/openziti/zitilab v0.1.9 + 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 ) @@ -28,31 +28,34 @@ require ( 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/coreos/go-iptables v0.6.0 // 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.7.0 // indirect - github.com/docker/go-units v0.4.0 // indirect + github.com/dlclark/regexp2 v1.8.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.13.0 // indirect + github.com/fatih/color v1.14.1 // 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/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/analysis v0.21.4 // indirect github.com/go-openapi/errors v0.20.3 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect + 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/runtime v0.24.2 // indirect - github.com/go-openapi/spec v0.20.7 // 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/swag v0.22.3 // indirect - github.com/go-openapi/validate v0.22.0 // 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 @@ -62,34 +65,37 @@ require ( 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.3.1 // indirect + github.com/hashicorp/go-hclog v1.4.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.5.4 // indirect + github.com/hashicorp/golang-lru v0.6.0 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/raft v1.3.11 // indirect github.com/hashicorp/raft-boltdb v0.0.0-20220329195025-15018e9b97e0 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect - github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d // indirect - github.com/jedib0t/go-pretty/v6 v6.4.2 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jedib0t/go-pretty/v6 v6.4.4 // 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/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.10 // indirect + github.com/kyokomi/emoji/v2 v2.2.11 // 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-20220913051719-115f729f3c8c // indirect + github.com/lufia/plan9stats v0.0.0-20230110061619-bbe2e5e100de // 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.16 // indirect + github.com/mattn/go-isatty v0.0.17 // 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 @@ -103,34 +109,34 @@ require ( 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.5 // indirect - github.com/openziti/channel/v2 v2.0.15 // indirect - github.com/openziti/edge v0.24.50 // indirect - github.com/openziti/fabric v0.21.21 // indirect - github.com/openziti/foundation/v2 v2.0.7 // indirect - github.com/openziti/identity v1.0.23 // 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.1.6 // indirect - github.com/openziti/runzmd v1.0.3 // indirect - github.com/openziti/storage v0.1.26 // indirect - github.com/openziti/transport/v2 v2.0.41 // 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/x509-claims v1.0.3 // indirect github.com/openziti/xweb/v2 v2.0.2 // indirect - github.com/openziti/ziti v0.26.11 // indirect + github.com/openziti/ziti v0.27.2 // indirect github.com/openziti/ziti-db-explorer v1.1.1 // indirect - github.com/orcaman/concurrent-map/v2 v2.0.0 // 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-20220216144756-c35f1ee13d7c // 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.2 // indirect + github.com/rivo/uniseg v0.4.3 // indirect github.com/rodaine/table v1.0.1 // indirect github.com/russross/blackfriday v1.5.2 // indirect - github.com/shirou/gopsutil/v3 v3.22.10 // indirect + github.com/shirou/gopsutil/v3 v3.23.1 // 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 @@ -149,18 +155,20 @@ require ( 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.etcd.io/bbolt v1.3.6 // indirect - go.mongodb.org/mongo-driver v1.10.0 // indirect + go.etcd.io/bbolt v1.3.7 // indirect + go.mongodb.org/mongo-driver v1.11.1 // indirect go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect - golang.org/x/crypto v0.3.0 // indirect - golang.org/x/exp v0.0.0-20221126150942-6ab00d035af9 // indirect - golang.org/x/image v0.1.0 // 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.3.0 // indirect golang.org/x/mod v0.6.0 // indirect - golang.org/x/net v0.2.0 // indirect + golang.org/x/net v0.5.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/term v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/term v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect golang.org/x/tools v0.2.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/AlecAivazis/survey.v1 v1.8.7 // indirect diff --git a/network-tests/go.sum b/network-tests/go.sum index 3ef802002..3afa7e8e7 100644 --- a/network-tests/go.sum +++ b/network-tests/go.sum @@ -137,14 +137,16 @@ github.com/cloudflare/cloudflare-go v0.13.2/go.mod h1:27kfc1apuifUmJhp069y0+hwlK github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/coreos/go-iptables v0.6.0 h1:is9qnZMPYjLd8LYqmm/qlE+wwEgJIkTYdhV3rfZo4jk= +github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpu/goacmedns v0.1.1/go.mod h1:MuaouqEhPAHxsbqjgnck5zeghuwBP1dLnPoobeGqugQ= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -159,11 +161,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.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= -github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2 v1.8.0 h1:rJD5HeGIT/2b5CDk63FVCwZA3qgYElfg+oQK7uH5pfE= +github.com/dlclark/regexp2 v1.8.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.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +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= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= @@ -183,8 +185,9 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/exoscale/egoscale v0.23.0/go.mod h1:hRo78jkjkCDKpivQdRBEpNYF5+cVpCJCPDg2/r45KaY= 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 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= 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/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= @@ -208,6 +211,11 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-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/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= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= @@ -219,23 +227,24 @@ github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpX github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= 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.24.2 h1:yX9HMGQbz32M87ECaAhGpJjBmErO3QLcgdZj9BzGx7c= -github.com/go-openapi/runtime v0.24.2/go.mod h1:AKurw9fNre+h3ELZfk6ILsfvPN+bvvlaU/M9q/r9hpk= +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/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.7 h1:1Rlu/ZrOCCob0n+JKKJAWhNWMPW8bOZRg8FJaY+0SKI= -github.com/go-openapi/spec v0.20.7/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/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.2/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/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= @@ -243,15 +252,13 @@ github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/ github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= -github.com/go-openapi/validate v0.22.0 h1:b0QecH6VslW/TxtpKgzpO1SNG7GU2FsaqKdP1E2T50Y= -github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +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-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= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= @@ -380,8 +387,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.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= -github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +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-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= @@ -400,8 +407,10 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +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/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= @@ -420,12 +429,11 @@ 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 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d h1:/WZQPMZNsjZ7IlCpsLGdQBINg5bxKQ1K1sh6awxLtkA= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jedib0t/go-pretty/v6 v6.4.2 h1:DcJNSNIb1E17Tvy9w9S7z+sExvWvvjNbFdyr6C+FUL0= -github.com/jedib0t/go-pretty/v6 v6.4.2/go.mod h1:MgmISkTWDSFu0xOqiZ0mKNntMQ2mDgOcwOkwBEkMDJI= +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/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= @@ -439,6 +447,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 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/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= @@ -468,14 +478,15 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= 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.10 h1:1z5eMVcxFifsmEoNpdeq4UahbcicgQ4FEHuzrCVwmiI= -github.com/kyokomi/emoji/v2 v2.2.10/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/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= @@ -486,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-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY= -github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= +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/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= @@ -514,8 +525,9 @@ github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcME github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= 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 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= 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-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= @@ -528,6 +540,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/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= @@ -554,7 +570,6 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -597,45 +612,45 @@ 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.5 h1:wZUcMYqvwspOjDSaejMtczSXnJoqK0edI9HcEIFsTIs= -github.com/openziti/agent v1.0.5/go.mod h1:6APWgkPP6Uxf1/VyirdTVLAJxwam2vVyakrVw6yvs40= -github.com/openziti/channel/v2 v2.0.15 h1:y1YwewnZTPTPtE3YVjaVpOWGoqJ3+I8+7KqQB4D3poQ= -github.com/openziti/channel/v2 v2.0.15/go.mod h1:LdoKRnefknW4WllUyHJtvKDtKK716lYdHqApKbBy3rk= -github.com/openziti/edge v0.24.50 h1:gmtjAJISV1mLXWSJmyRunVcZ6gk7WPS2aPkFaWh34uo= -github.com/openziti/edge v0.24.50/go.mod h1:71Cp8bypuFbJpt7FPsETZrmLdmHagFcWKDD+SzsIL0s= -github.com/openziti/fablab v0.4.15 h1:4sLJ9UC4rmpYOaxjTmwtfA2h/uwmVifwdpVJUBW6eQ4= -github.com/openziti/fablab v0.4.15/go.mod h1:FmnlfLEQUa/Gdf82wnkQLFe44lGexoIxGd+JOtRIMHs= -github.com/openziti/fabric v0.21.21 h1:vswdjm4xvZuCps62S4JjZZyA43YYLgc0uOCx6tdXWUY= -github.com/openziti/fabric v0.21.21/go.mod h1:F6L8c4AnNOACdx2IJqSW2JLG6J3Gm798BLL58sBYtZY= -github.com/openziti/foundation/v2 v2.0.7 h1:QtpP0ntUhr/7uLR1iM7eEkrusQ2b2ZqTblgdq8cac9Y= -github.com/openziti/foundation/v2 v2.0.7/go.mod h1:Z0gnQsGJb/H/B+pixLtmCIpw1dBllD4QoT6LeD35WzA= -github.com/openziti/identity v1.0.23 h1:SJ2UN3qCiUKwuwFc0dr3nuHyKvhOr5aN5bEJa2wY9Sw= -github.com/openziti/identity v1.0.23/go.mod h1:uVqZEC4Lr7pEud9b5g0h/cH0Ir5K0egCjUrEVup4ERc= +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.1.6 h1:fc4t5JEuYYr4gr+tF3qNpbvQ55QhoLyeOG+hiDfKLF8= -github.com/openziti/metrics v1.1.6/go.mod h1:07aMMS1VNzZvz0246fX73SFfuuoRz2nKcvDJumrVlZ0= -github.com/openziti/runzmd v1.0.3 h1:g+JyJS66ykMIidLTzroKBLwbsSF9S1hDvolj2PpD8lE= -github.com/openziti/runzmd v1.0.3/go.mod h1:2YuoQl5zZ6edfb+k1MjglW2cwfZvXwug2WldvBIUNrU= -github.com/openziti/sdk-golang v0.18.2 h1:RA+47vGtPwzqrgWlgTyqKurttvzhG25bu9qnhEU1Ghw= -github.com/openziti/sdk-golang v0.18.2/go.mod h1:79XTAIkizuRq5NpAex3Yg7oDH/fcNSlcrVeSiYEf2q0= -github.com/openziti/storage v0.1.26 h1:1tV4czY/TNmzX3raUZjbR8jVl5L92pdD0SjmdzCzUmE= -github.com/openziti/storage v0.1.26/go.mod h1:Zkm+4d2gckkIbuuCw/sKFWKKhPROZak3gLFzdII0KWQ= -github.com/openziti/transport/v2 v2.0.41 h1:T9RPXsJ0wbDgIx6mjKY1YDOg6ncRDmLPq8xU52B0mvU= -github.com/openziti/transport/v2 v2.0.41/go.mod h1:YM4hnHjHK1gQZuWgmDoPGSDP+8l7uT8kT8oBGM1u6nk= +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/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.26.11 h1:umXrmrBnbQeSV/hsKTdor/hWx/tJ5Hs/Xv/k5GXitL0= -github.com/openziti/ziti v0.26.11/go.mod h1:GJ6thwbiuCRf5rRO2/lalmvZVdWCQkLgiX7i8zAhuUo= +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-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.9 h1:NWUgq4ZyZIhXlH9HVL19JK6ArDnTNLnlKOteE6PLa8E= -github.com/openziti/zitilab v0.1.9/go.mod h1:ElsdjW6cyMBeLxda/n8DF9ec4KtZavys3hbYkgHpQf4= +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/oracle/oci-go-sdk v24.2.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= -github.com/orcaman/concurrent-map/v2 v2.0.0 h1:iSMwuBQvQ1nX5i9gYuGMiSy0fjWHmazdjF+NdSO9JzI= -github.com/orcaman/concurrent-map/v2 v2.0.0/go.mod h1:9Eq3TG2oBe5FirmYWQfYO5iH1q0Jv47PLaNK++uCdOM= +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= github.com/ovh/go-ovh v1.1.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA= github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9 h1:mOvehYivJ4Aqu2CPe3D3lv8jhqOI9/1o0THxJHBE0qw= github.com/parallaxsecond/parsec-client-go v0.0.0-20221025095442-f0a77d263cf9/go.mod h1:gLH27qo/dvMhLTVVyMELpe3Tut7sOfkiDg7ZpeqKwsw= @@ -663,8 +678,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkBTKvR5gQLgA3e0hqjkY9u1wm+iOL45VN/qI= -github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= +github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= @@ -694,8 +709,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.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8= -github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/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= @@ -711,8 +726,8 @@ 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.22.10 h1:4KMHdfBRYXGF9skjDWiL4RA2N+E8dRdodU/bOZpPoVg= -github.com/shirou/gopsutil/v3 v3.22.10/go.mod h1:QNza6r4YQoydyCfo6rH0blGfKahgibh4dQmV5xdFkQk= +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/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= @@ -771,10 +786,8 @@ github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 h1:3SNcvBmEPE1YlB github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/transip/gotransip/v6 v6.2.0/go.mod h1:pQZ36hWWRahCUXkFWlx9Hs711gLd8J4qdgLdRzmtY+g= @@ -806,16 +819,16 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 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= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= 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.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= -go.mongodb.org/mongo-driver v1.10.0 h1:UtV6N5k14upNp4LTduX0QCufG124fSu25Wz9tu94GLg= 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.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= @@ -827,6 +840,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/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.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= @@ -848,13 +866,12 @@ golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPh 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-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= 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.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +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/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= @@ -865,14 +882,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-20221126150942-6ab00d035af9 h1:yZNXmy+j/JpX19vZkVktWqAo7Gny4PBWYYK3zskGpx4= -golang.org/x/exp v0.0.0-20221126150942-6ab00d035af9/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +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/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.1.0 h1:r8Oj8ZA2Xy12/b5KZYj3tuv7NG/fBz3TwQVvpJ9l8Rk= -golang.org/x/image v0.1.0/go.mod h1:iyPr49SD/G/TBxYVB/9RRtGUT5eNbo2u4NamWeQcD5c= +golang.org/x/image v0.3.0 h1:HTDXbdK9bjfSWkPzDJIw89W8CAtfFGduujWs33NLLsg= +golang.org/x/image v0.3.0/go.mod h1:fXd9211C/0VTlYuAcOhW8dY/RtEJqODXOWBDpmYBf+A= 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= @@ -951,8 +968,8 @@ golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qx 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.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= 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= @@ -1033,7 +1050,6 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1054,20 +1070,19 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.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.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= 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= @@ -1077,8 +1092,8 @@ 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.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 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= @@ -1266,6 +1281,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= diff --git a/network-tests/simple-transfer/configs/ctrl.yml b/network-tests/simple-transfer/configs/ctrl.yml index 812f96da2..b487530c6 100644 --- a/network-tests/simple-transfer/configs/ctrl.yml +++ b/network-tests/simple-transfer/configs/ctrl.yml @@ -3,13 +3,9 @@ v: 3 db: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/ctrl.db identity: - cert: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/intermediate/certs/{{ .Component.PublicIdentity }}-client.cert - server_cert: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/intermediate/certs/{{ .Component.PublicIdentity }}-server.cert - key: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/intermediate/keys/{{ .Component.PublicIdentity }}.key - ca: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/intermediate/certs/{{ .Component.PublicIdentity }}-server.chain.pem - -#trace: -# path: ctrl.trace + 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 profile: # cpu: @@ -21,6 +17,7 @@ profile: 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 @@ -39,18 +36,6 @@ ctrl: # connections. The value of newListener must be resolvable both via DNS and validate via certificates #newListener: tls:localhost:6262 -# the endpoint that management tools connect to the controller over. -mgmt: - listener: tls:0.0.0.0:10000 - #options: - # (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 - #metrics: #file: #path: /tmp/ziti-controller-metrics.log @@ -87,12 +72,6 @@ mgmt: # format: json # path: /tmp/ziti-events.log -# xctrl_example -# -#example: -# enabled: false -# delay: 5 - healthChecks: boltCheck: # How often to try entering a bolt read tx. Defaults to 30 seconds @@ -127,8 +106,8 @@ edge: # 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/intermediate/certs/intermediate.cert - key: /home/{{ .Model.MustVariable "credentials.ssh.username" }}/fablab/pki/intermediate/keys/intermediate.key + 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 @@ -220,13 +199,13 @@ web: # - edge-client # - fabric-management - binding: health-checks - options: { } + 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: { } + options: {} - binding: edge-client - options: { } + options: {} diff --git a/network-tests/simple-transfer/configs/router.yml b/network-tests/simple-transfer/configs/router.yml index 6393990c2..056cd6d53 100644 --- a/network-tests/simple-transfer/configs/router.yml +++ b/network-tests/simple-transfer/configs/router.yml @@ -8,10 +8,10 @@ v: 3 enableDebugOps: true identity: - cert: /home/{{$ssh_username}}/fablab/pki/intermediate/certs/{{$identity}}-client.cert - server_cert: /home/{{$ssh_username}}/fablab/pki/intermediate/certs/{{$identity}}-server.cert - key: /home/{{$ssh_username}}/fablab/pki/intermediate/keys/{{$identity}}.key - ca: /home/{{$ssh_username}}/fablab/pki/intermediate/certs/{{$identity}}-server.chain.pem + 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 diff --git a/network-tests/simple-transfer/main.go b/network-tests/simple-transfer/main.go index b96fc518f..416cde24a 100644 --- a/network-tests/simple-transfer/main.go +++ b/network-tests/simple-transfer/main.go @@ -177,8 +177,7 @@ var m = &model.Model{ Configuration: model.ConfigurationStages{ zitilib_runlevel_1_configuration.IfPkiNeedsRefresh( - zitilib_runlevel_1_configuration.Fabric(), - zitilib_runlevel_1_configuration.DotZiti(), + zitilib_runlevel_1_configuration.Fabric("simple-transfer.test", "#ctrl"), ), config.Component(), devkit.DevKitF(zitilab.ZitiRoot, []string{"ziti", "ziti-echo"}), diff --git a/quickstart/test/quickstart_test.go b/quickstart/test/quickstart_test.go index e6c804f1d..d93801671 100644 --- a/quickstart/test/quickstart_test.go +++ b/quickstart/test/quickstart_test.go @@ -12,17 +12,17 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/client" - "github.com/openziti/edge/rest_management_api_client" - api_client_config "github.com/openziti/edge/rest_management_api_client/config" - "github.com/openziti/edge/rest_management_api_client/edge_router" - "github.com/openziti/edge/rest_management_api_client/edge_router_policy" - "github.com/openziti/edge/rest_management_api_client/identity" - "github.com/openziti/edge/rest_management_api_client/service" - "github.com/openziti/edge/rest_management_api_client/service_edge_router_policy" - "github.com/openziti/edge/rest_management_api_client/service_policy" - "github.com/openziti/edge/rest_management_api_client/terminator" - "github.com/openziti/edge/rest_model" - "github.com/openziti/edge/rest_util" + "github.com/openziti/edge-api/rest_management_api_client" + api_client_config "github.com/openziti/edge-api/rest_management_api_client/config" + "github.com/openziti/edge-api/rest_management_api_client/edge_router" + "github.com/openziti/edge-api/rest_management_api_client/edge_router_policy" + "github.com/openziti/edge-api/rest_management_api_client/identity" + "github.com/openziti/edge-api/rest_management_api_client/service" + "github.com/openziti/edge-api/rest_management_api_client/service_edge_router_policy" + "github.com/openziti/edge-api/rest_management_api_client/service_policy" + "github.com/openziti/edge-api/rest_management_api_client/terminator" + "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" diff --git a/ziti/cmd/edge/create_authenticator_updb.go b/ziti/cmd/edge/create_authenticator_updb.go index be118dd0e..223423414 100644 --- a/ziti/cmd/edge/create_authenticator_updb.go +++ b/ziti/cmd/edge/create_authenticator_updb.go @@ -21,7 +21,7 @@ import ( "errors" "fmt" "github.com/Jeffail/gabs" - "github.com/openziti/edge/rest_management_api_client/authenticator" + "github.com/openziti/edge-api/rest_management_api_client/authenticator" "github.com/openziti/foundation/v2/term" "github.com/openziti/ziti/ziti/cmd/api" "github.com/openziti/ziti/ziti/cmd/helpers" diff --git a/ziti/cmd/edge/create_ca.go b/ziti/cmd/edge/create_ca.go index 6195b7e6d..0d84e53d8 100644 --- a/ziti/cmd/edge/create_ca.go +++ b/ziti/cmd/edge/create_ca.go @@ -18,8 +18,8 @@ package edge import ( "fmt" - "github.com/openziti/edge/rest_management_api_client/certificate_authority" - "github.com/openziti/edge/rest_model" + "github.com/openziti/edge-api/rest_management_api_client/certificate_authority" + "github.com/openziti/edge-api/rest_model" "github.com/openziti/ziti/ziti/cmd/api" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/openziti/ziti/ziti/util" diff --git a/ziti/cmd/edge/create_enrollment.go b/ziti/cmd/edge/create_enrollment.go index b00e23970..41a31c0d4 100644 --- a/ziti/cmd/edge/create_enrollment.go +++ b/ziti/cmd/edge/create_enrollment.go @@ -20,8 +20,8 @@ import ( "context" "fmt" "github.com/go-openapi/strfmt" - "github.com/openziti/edge/rest_management_api_client/enrollment" - "github.com/openziti/edge/rest_model" + "github.com/openziti/edge-api/rest_management_api_client/enrollment" + "github.com/openziti/edge-api/rest_model" "github.com/openziti/ziti/ziti/cmd/api" "github.com/openziti/ziti/ziti/cmd/common" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" diff --git a/ziti/cmd/edge/create_posture_check.go b/ziti/cmd/edge/create_posture_check.go index 421ce9a08..407ff7ca3 100644 --- a/ziti/cmd/edge/create_posture_check.go +++ b/ziti/cmd/edge/create_posture_check.go @@ -19,8 +19,8 @@ package edge import ( "fmt" "github.com/Jeffail/gabs" - "github.com/openziti/edge/rest_management_api_client/posture_checks" - "github.com/openziti/edge/rest_model" + "github.com/openziti/edge-api/rest_management_api_client/posture_checks" + "github.com/openziti/edge-api/rest_model" "github.com/openziti/ziti/ziti/cmd/api" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/openziti/ziti/ziti/util" diff --git a/ziti/cmd/edge/list.go b/ziti/cmd/edge/list.go index 2b122cc40..1561393c9 100644 --- a/ziti/cmd/edge/list.go +++ b/ziti/cmd/edge/list.go @@ -34,8 +34,8 @@ import ( "strings" "github.com/Jeffail/gabs" - "github.com/openziti/edge/rest_management_api_client/certificate_authority" - "github.com/openziti/edge/rest_model" + "github.com/openziti/edge-api/rest_management_api_client/certificate_authority" + "github.com/openziti/edge-api/rest_model" "github.com/pkg/errors" "github.com/spf13/cobra" ) diff --git a/ziti/cmd/edge/update_authenticator_updb.go b/ziti/cmd/edge/update_authenticator_updb.go index 2cb48b99c..f5a31a9a9 100644 --- a/ziti/cmd/edge/update_authenticator_updb.go +++ b/ziti/cmd/edge/update_authenticator_updb.go @@ -21,7 +21,7 @@ import ( "errors" "fmt" "github.com/Jeffail/gabs" - "github.com/openziti/edge/rest_management_api_client/authenticator" + "github.com/openziti/edge-api/rest_management_api_client/authenticator" "github.com/openziti/foundation/v2/term" "github.com/openziti/ziti/ziti/cmd/api" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers" diff --git a/ziti/cmd/edge/update_ca.go b/ziti/cmd/edge/update_ca.go index 353fefafd..fbb2f93b0 100644 --- a/ziti/cmd/edge/update_ca.go +++ b/ziti/cmd/edge/update_ca.go @@ -18,8 +18,8 @@ package edge import ( "fmt" - "github.com/openziti/edge/rest_management_api_client/certificate_authority" - "github.com/openziti/edge/rest_model" + "github.com/openziti/edge-api/rest_management_api_client/certificate_authority" + "github.com/openziti/edge-api/rest_model" "github.com/openziti/ziti/ziti/cmd/api" "github.com/openziti/ziti/ziti/cmd/helpers" "github.com/openziti/ziti/ziti/util" diff --git a/ziti/util/identities.go b/ziti/util/identities.go index 57f594a5b..f32162d05 100644 --- a/ziti/util/identities.go +++ b/ziti/util/identities.go @@ -6,7 +6,7 @@ import ( "encoding/json" "fmt" httptransport "github.com/go-openapi/runtime/client" - "github.com/openziti/edge/rest_management_api_client" + "github.com/openziti/edge-api/rest_management_api_client" fabric_rest_client "github.com/openziti/fabric/rest_client" "github.com/openziti/identity" "github.com/openziti/sdk-golang/ziti/constants" diff --git a/ziti/util/rest.go b/ziti/util/rest.go index 350660fb4..a9aa17155 100644 --- a/ziti/util/rest.go +++ b/ziti/util/rest.go @@ -27,8 +27,8 @@ import ( "github.com/blang/semver" openApiRuntime "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" - "github.com/openziti/edge/rest_management_api_client" - "github.com/openziti/edge/rest_model" + "github.com/openziti/edge-api/rest_management_api_client" + "github.com/openziti/edge-api/rest_model" fabric_rest_client "github.com/openziti/fabric/rest_client" "github.com/openziti/ziti/common/version" cmdhelper "github.com/openziti/ziti/ziti/cmd/helpers"