pkg/skoop/provider/provider.go (28 lines of code) (raw):
package provider
import (
"fmt"
"strings"
"github.com/samber/lo"
ctx "github.com/alibaba/kubeskoop/pkg/skoop/context"
"github.com/alibaba/kubeskoop/pkg/skoop/network"
)
const (
providerNameGeneric = "generic"
providerNameAliyun = "aliyun"
)
type Provider interface {
CreateNetwork(ctx *ctx.Context) (network.Network, error)
}
var providers = map[string]Provider{
providerNameGeneric: genericProvider{},
providerNameAliyun: aliyunProvider{},
}
func GetProvider(name string) (Provider, error) {
provider, ok := providers[name]
if !ok {
supoortedProviders := lo.MapToSlice(providers, func(k string, _ Provider) string { return k })
return nil, fmt.Errorf("service provider %q not found, supported providers: %s",
name, strings.Join(supoortedProviders, ","))
}
return provider, nil
}