mirror of
https://github.com/openziti/zrok.git
synced 2026-08-28 10:16:59 -05:00
126 lines
3.5 KiB
Go
126 lines
3.5 KiB
Go
package automation
|
|
|
|
import (
|
|
"crypto/x509"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/openziti/edge-api/rest_management_api_client"
|
|
"github.com/openziti/edge-api/rest_util"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type Config struct {
|
|
ApiEndpoint string
|
|
Username string
|
|
Password string `dd:"+secret"`
|
|
}
|
|
|
|
type ZitiAutomation struct {
|
|
edge *rest_management_api_client.ZitiEdgeManagement
|
|
Identities *IdentityManager
|
|
Services *ServiceManager
|
|
Configs *ConfigManager
|
|
ConfigTypes *ConfigTypeManager
|
|
EdgeRouterPolicies *EdgeRouterPolicyManager
|
|
ServiceEdgeRouterPolicies *ServiceEdgeRouterPolicyManager
|
|
ServicePolicies *ServicePolicyManager
|
|
}
|
|
|
|
func NewZitiAutomation(cfg *Config) (*ZitiAutomation, error) {
|
|
caCerts, err := rest_util.GetControllerWellKnownCas(cfg.ApiEndpoint)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
caPool := x509.NewCertPool()
|
|
for _, ca := range caCerts {
|
|
caPool.AddCert(ca)
|
|
}
|
|
edge, err := rest_util.NewEdgeManagementClientWithUpdb(cfg.Username, cfg.Password, cfg.ApiEndpoint, caPool)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
ziti := &ZitiAutomation{edge: edge}
|
|
ziti.Identities = NewIdentityManager(ziti)
|
|
ziti.Services = NewServiceManager(ziti)
|
|
ziti.Configs = NewConfigManager(ziti)
|
|
ziti.ConfigTypes = NewConfigTypeManager(ziti)
|
|
ziti.EdgeRouterPolicies = NewEdgeRouterPolicyManager(ziti)
|
|
ziti.ServiceEdgeRouterPolicies = NewServiceEdgeRouterPolicyManager(ziti)
|
|
ziti.ServicePolicies = NewServicePolicyManager(ziti)
|
|
return ziti, nil
|
|
}
|
|
|
|
func (za *ZitiAutomation) Edge() *rest_management_api_client.ZitiEdgeManagement {
|
|
return za.edge
|
|
}
|
|
|
|
// error helper methods to simplify error handling
|
|
|
|
func (za *ZitiAutomation) IsNotFound(err error) bool {
|
|
var automationErr *AutomationError
|
|
if errors.As(err, &automationErr) {
|
|
return automationErr.IsNotFound()
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (za *ZitiAutomation) ShouldRetry(err error) bool {
|
|
var automationErr *AutomationError
|
|
if errors.As(err, &automationErr) {
|
|
return automationErr.IsRetryable()
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (za *ZitiAutomation) CleanupByTag(tag, value string) error {
|
|
var filter string
|
|
if value == "*" {
|
|
// cleanup all resources with the tag (any value)
|
|
filter = fmt.Sprintf("tags.%s != null", tag)
|
|
} else {
|
|
// cleanup resources with specific tag value
|
|
filter = BuildTagFilter(tag, value)
|
|
}
|
|
|
|
// delete service edge router policies
|
|
if err := za.ServiceEdgeRouterPolicies.DeleteWithFilter(filter); err != nil {
|
|
return errors.Wrap(err, "failed to delete service edge router policies")
|
|
}
|
|
|
|
// delete service policies
|
|
if err := za.ServicePolicies.DeleteWithFilter(filter); err != nil {
|
|
return errors.Wrap(err, "failed to delete service policies")
|
|
}
|
|
|
|
// delete configs
|
|
if err := za.Configs.DeleteWithFilter(filter); err != nil {
|
|
return errors.Wrap(err, "failed to delete configs")
|
|
}
|
|
|
|
// delete services
|
|
if err := za.Services.DeleteWithFilter(filter); err != nil {
|
|
return errors.Wrap(err, "failed to delete services")
|
|
}
|
|
|
|
// delete edge router policies
|
|
if err := za.EdgeRouterPolicies.DeleteWithFilter(filter); err != nil {
|
|
return errors.Wrap(err, "failed to delete edge router policies")
|
|
}
|
|
|
|
// find and delete identities
|
|
if err := za.Identities.DeleteWithFilter(filter); err != nil {
|
|
return errors.Wrap(err, "failed to delete identities")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
const (
|
|
// DefaultRequestTimeout is the default timeout for API requests
|
|
DefaultRequestTimeout = 30 * time.Second
|
|
|
|
// DefaultOperationTimeout is the default timeout for CRUD operations
|
|
DefaultOperationTimeout = 30 * time.Second
|
|
)
|