Files
threshold/internal/target/options.go
T
b6df5693b5 Add generic read/update/delete commands (#3992)
* Add generic read/update/delete commands

This adds three generic commands that use the resource prefix to
determine the subcommand to run and pass through args over to that
subcommand. Since this occurs very early on and to avoid loading
essentially every internal resource package, I moved subtype definitions
to globals.

This replaces #3967

Co-authored-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>

* De-duplicate Subtype code (#4031)

Co-authored-by: Timothy Messier <tim.messier@gmail.com>

---------

Co-authored-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Co-authored-by: Timothy Messier <tim.messier@gmail.com>
2023-11-15 19:55:46 -05:00

268 lines
7.0 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package target
import (
"net"
"time"
"github.com/hashicorp/boundary/globals"
intglobals "github.com/hashicorp/boundary/internal/globals"
"github.com/hashicorp/boundary/internal/perms"
)
// GetOpts - iterate the inbound Options and return a struct
func GetOpts(opt ...Option) options {
opts := getDefaultOptions()
for _, o := range opt {
o(&opts)
}
return opts
}
// Option - how Options are passed as arguments
type Option func(*options)
// options = how options are represented
type options struct {
WithName string
WithDescription string
WithDefaultPort uint32
WithDefaultClientPort uint32
WithLimit int
WithProjectId string
WithProjectIds []string
WithProjectName string
WithUserId string
WithType globals.Subtype
WithHostSources []string
WithCredentialLibraries []*CredentialLibrary
WithStaticCredentials []*StaticCredential
WithSessionMaxSeconds uint32
WithSessionConnectionLimit int32
WithPermissions []perms.Permission
WithPublicId string
WithWorkerFilter string
WithTestWorkerFilter string
WithEgressWorkerFilter string
WithIngressWorkerFilter string
WithTargetIds []string
WithAddress string
WithStorageBucketId string
WithEnableSessionRecording bool
WithNetResolver intglobals.NetIpResolver
}
func getDefaultOptions() options {
return options{
WithName: "",
WithDescription: "",
WithLimit: 0,
WithDefaultPort: 0,
WithDefaultClientPort: 0,
WithProjectId: "",
WithProjectIds: nil,
WithProjectName: "",
WithUserId: "",
WithType: "",
WithHostSources: nil,
WithCredentialLibraries: nil,
WithStaticCredentials: nil,
WithSessionMaxSeconds: uint32((8 * time.Hour).Seconds()),
WithSessionConnectionLimit: -1,
WithPermissions: nil,
WithPublicId: "",
WithWorkerFilter: "",
WithTestWorkerFilter: "",
WithEgressWorkerFilter: "",
WithIngressWorkerFilter: "",
WithAddress: "",
WithNetResolver: net.DefaultResolver,
}
}
// WithDescription provides an optional description
func WithDescription(desc string) Option {
return func(o *options) {
o.WithDescription = desc
}
}
// WithName provides an option to search by a friendly name
func WithName(name string) Option {
return func(o *options) {
o.WithName = name
}
}
// WithLimit provides an option to provide a limit. Intentionally allowing
// negative integers. If WithLimit < 0, then unlimited results are returned.
// If WithLimit == 0, then default limits are used for results.
func WithLimit(limit int) Option {
return func(o *options) {
o.WithLimit = limit
}
}
// WithDefaultPort provides an option to specify the default target port.
func WithDefaultPort(p uint32) Option {
return func(o *options) {
o.WithDefaultPort = p
}
}
// WithDefaultClientPort provides an option to specify the default client listening port.
func WithDefaultClientPort(p uint32) Option {
return func(o *options) {
o.WithDefaultClientPort = p
}
}
// WithProjectId provides an option to search by a project id
func WithProjectId(projectId string) Option {
return func(o *options) {
o.WithProjectId = projectId
}
}
// WithProjectId provides an option to search by multiple project id
func WithProjectIds(projectIds []string) Option {
return func(o *options) {
o.WithProjectIds = projectIds
}
}
// WithProjectId provides an option to search by a project name
func WithProjectName(projectName string) Option {
return func(o *options) {
o.WithProjectName = projectName
}
}
// WithUserId provides an option to search by a user public id
func WithUserId(userId string) Option {
return func(o *options) {
o.WithUserId = userId
}
}
// WithType provides an option to search by a target type
func WithType(t globals.Subtype) Option {
return func(o *options) {
o.WithType = t
}
}
// WithHostSources provides an option for providing a list of host source ids
func WithHostSources(hs []string) Option {
return func(o *options) {
o.WithHostSources = hs
}
}
// WithCredentialLibraries provides an option for providing a list of credential libraries.
func WithCredentialLibraries(cl []*CredentialLibrary) Option {
return func(o *options) {
o.WithCredentialLibraries = cl
}
}
// WithStaticCredentials provides an option for providing a list of static credentials.
func WithStaticCredentials(c []*StaticCredential) Option {
return func(o *options) {
o.WithStaticCredentials = c
}
}
func WithSessionMaxSeconds(dur uint32) Option {
return func(o *options) {
o.WithSessionMaxSeconds = dur
}
}
func WithSessionConnectionLimit(limit int32) Option {
return func(o *options) {
o.WithSessionConnectionLimit = limit
}
}
// WithPublicId provides an optional public id
func WithPublicId(id string) Option {
return func(o *options) {
o.WithPublicId = id
}
}
// WithWorkerFilter provides an optional worker filter
func WithWorkerFilter(filter string) Option {
return func(o *options) {
o.WithWorkerFilter = filter
}
}
// WithTestWorkerFilter provides an optional worker filter used only in testing
func WithTestWorkerFilter(filter string) Option {
return func(o *options) {
o.WithTestWorkerFilter = filter
}
}
// WithEgressWorkerFilter provides an optional egress worker filter
func WithEgressWorkerFilter(filter string) Option {
return func(o *options) {
o.WithEgressWorkerFilter = filter
}
}
// WithIngressWorkerFilter provides an optional ingress worker filter
func WithIngressWorkerFilter(filter string) Option {
return func(o *options) {
o.WithIngressWorkerFilter = filter
}
}
// WithTargetIds provides an option to search by specific target IDs
func WithTargetIds(with []string) Option {
return func(o *options) {
o.WithTargetIds = with
}
}
// WithPermissions is used by this repo to restrict a list
// request's results based on the given set of permissions.
func WithPermissions(perms []perms.Permission) Option {
return func(o *options) {
o.WithPermissions = perms
}
}
// WithAddress provides an optional network address
func WithAddress(address string) Option {
return func(o *options) {
o.WithAddress = address
}
}
// WithEnableSessionRecording provides an option to enable session recording on
// the target
func WithEnableSessionRecording(enable bool) Option {
return func(o *options) {
o.WithEnableSessionRecording = enable
}
}
// WithStorageBucketId provides an option to set a storage bucket on a target
func WithStorageBucketId(id string) Option {
return func(o *options) {
o.WithStorageBucketId = id
}
}
// WithNetResolver provides an option to specify a custom DNS resolver
func WithNetResolver(resolver intglobals.NetIpResolver) Option {
return func(o *options) {
o.WithNetResolver = resolver
}
}