canary and sdk tweaks for demo setups

This commit is contained in:
Michael Quigley 2025-03-06 14:18:21 -05:00
parent 8e7ebbe4e6
commit bb4b4f5485
No known key found for this signature in database
GPG Key ID: 9B60314A9DD20A62
6 changed files with 43 additions and 14 deletions

View File

@ -16,6 +16,8 @@ type LooperOptions struct {
MaxDwell time.Duration
MinPacing time.Duration
MaxPacing time.Duration
TargetName string
BindAddress string
}
type LooperResults struct {

View File

@ -19,15 +19,17 @@ import (
)
type PrivateHttpLooper struct {
id uint
acc *sdk.Access
opt *LooperOptions
root env_core.Root
shr *sdk.Share
listener edge.Listener
abort bool
done chan struct{}
results *LooperResults
id uint
target string
bindAddress string
acc *sdk.Access
opt *LooperOptions
root env_core.Root
shr *sdk.Share
listener edge.Listener
abort bool
done chan struct{}
results *LooperResults
}
func NewPrivateHttpLooper(id uint, opt *LooperOptions, root env_core.Root) *PrivateHttpLooper {
@ -74,10 +76,14 @@ func (l *PrivateHttpLooper) Results() *LooperResults {
}
func (l *PrivateHttpLooper) startup() error {
target := "canary.PrivateHttpLooper"
if l.opt.TargetName != "" {
target = l.opt.TargetName
}
shr, err := sdk.CreateShare(l.root, &sdk.ShareRequest{
ShareMode: sdk.PrivateShareMode,
BackendMode: sdk.ProxyBackendMode,
Target: "canary.PrivateHttpLooper",
Target: target,
PermissionMode: sdk.ClosedPermissionMode,
})
if err != nil {
@ -85,8 +91,13 @@ func (l *PrivateHttpLooper) startup() error {
}
l.shr = shr
bindAddress := ""
if l.opt.BindAddress != "" {
bindAddress = l.opt.BindAddress
}
acc, err := sdk.CreateAccess(l.root, &sdk.AccessRequest{
ShareToken: shr.Token,
ShareToken: shr.Token,
BindAddress: bindAddress,
})
if err != nil {
return err
@ -156,7 +167,7 @@ func (l *PrivateHttpLooper) iterate() {
l.results.StartTime = time.Now()
defer func() { l.results.StopTime = time.Now() }()
for i := uint(0); i < l.opt.Iterations; i++ {
for i := uint(0); i < l.opt.Iterations && !l.abort; i++ {
if i > 0 && i%l.opt.StatusInterval == 0 {
logrus.Infof("#%d: iteration %d", l.id, i)
}

View File

@ -30,6 +30,8 @@ type testCanaryPrivateProxy struct {
maxDwell time.Duration
minPacing time.Duration
maxPacing time.Duration
targetName string
bindAddress string
}
func newTestCanaryPrivateProxy() *testCanaryPrivateProxy {
@ -52,6 +54,8 @@ func newTestCanaryPrivateProxy() *testCanaryPrivateProxy {
cmd.Flags().DurationVar(&command.maxDwell, "max-dwell", 1*time.Second, "Maximum dwell time")
cmd.Flags().DurationVar(&command.minPacing, "min-pacing", 0, "Minimum pacing time")
cmd.Flags().DurationVar(&command.maxPacing, "max-pacing", 0, "Maximum pacing time")
cmd.Flags().StringVar(&command.targetName, "target-name", "", "Metadata describing the virtual target")
cmd.Flags().StringVar(&command.bindAddress, "bind-address", "", "Metadata describing the virtual bind address")
return command
}
@ -84,6 +88,8 @@ func (cmd *testCanaryPrivateProxy) run(_ *cobra.Command, _ []string) {
MaxDwell: cmd.maxDwell,
MinPacing: cmd.minPacing,
MaxPacing: cmd.maxPacing,
TargetName: cmd.targetName,
BindAddress: cmd.bindAddress,
}
looper := canary.NewPrivateHttpLooper(i, looperOpts, root)
loopers = append(loopers, looper)

View File

@ -81,7 +81,11 @@ func (h *accessHandler) Handle(params share.AccessParams, principal *rest_model_
return share.NewAccessInternalServerError()
}
if _, err := str.CreateFrontend(envId, &store.Frontend{PrivateShareId: &shr.Id, Token: feToken, ZId: envZId, PermissionMode: store.ClosedPermissionMode}, trx); err != nil {
fe := &store.Frontend{PrivateShareId: &shr.Id, Token: feToken, ZId: envZId, PermissionMode: store.ClosedPermissionMode}
if params.Body.BindAddress != "" {
fe.BindAddress = &params.Body.BindAddress
}
if _, err := str.CreateFrontend(envId, fe, trx); err != nil {
logrus.Errorf("error creating frontend record for user '%v': %v", principal.Email, err)
return share.NewAccessInternalServerError()
}

View File

@ -5,6 +5,7 @@ import (
"github.com/openziti/zrok/environment/env_core"
"github.com/openziti/zrok/rest_client_zrok/share"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
func CreateAccess(root env_core.Root, request *AccessRequest) (*Access, error) {
@ -15,6 +16,10 @@ func CreateAccess(root env_core.Root, request *AccessRequest) (*Access, error) {
out := share.NewAccessParams()
out.Body.ShareToken = request.ShareToken
out.Body.EnvZID = root.Environment().ZitiIdentity
if request.BindAddress != "" {
out.Body.BindAddress = request.BindAddress
logrus.Infof("requesting bind address '%v'", out.Body.BindAddress)
}
zrok, err := root.Client()
if err != nil {

View File

@ -50,7 +50,8 @@ type Share struct {
}
type AccessRequest struct {
ShareToken string
ShareToken string
BindAddress string
}
type Access struct {