pkg/conversions/arns_conversion.go (60 lines of code) (raw):
package conversions
import (
"github.com/aws/aws-sdk-go/aws/arn"
"github.com/pkg/errors"
"k8s.io/apimachinery/pkg/conversion"
"regexp"
)
func Convert_CRD_VirtualNodeARN_To_SDK_VirtualNodeName(vnARN *string, vnName *string, scope conversion.Scope) error {
parsedARN, err := arn.Parse(*vnARN)
if err != nil {
return errors.Wrapf(err, "invalid arn")
}
_, resourceType, resourceName, err := parseAppMeshARNResource(parsedARN.Resource)
if err != nil {
return err
}
if resourceType != "virtualNode" {
return errors.Errorf("expects %v ARN, got %v", "virtualNode", resourceType)
}
*vnName = resourceName
return nil
}
func Convert_CRD_VirtualServiceARN_To_SDK_VirtualServiceName(vsARN *string, vsName *string, scope conversion.Scope) error {
parsedARN, err := arn.Parse(*vsARN)
if err != nil {
return errors.Wrapf(err, "invalid arn")
}
_, resourceType, resourceName, err := parseAppMeshARNResource(parsedARN.Resource)
if err != nil {
return err
}
if resourceType != "virtualService" {
return errors.Errorf("expects %v ARN, got %v", "virtualService", resourceType)
}
*vsName = resourceName
return nil
}
func Convert_CRD_VirtualRouterARN_To_SDK_VirtualRouterName(vrARN *string, vrName *string, scope conversion.Scope) error {
parsedARN, err := arn.Parse(*vrARN)
if err != nil {
return errors.Wrapf(err, "invalid arn")
}
_, resourceType, resourceName, err := parseAppMeshARNResource(parsedARN.Resource)
if err != nil {
return err
}
if resourceType != "virtualRouter" {
return errors.Errorf("expects %v ARN, got %v", "virtualRouter", resourceType)
}
*vrName = resourceName
return nil
}
var appMeshARNResourcePattern = regexp.MustCompile("^mesh/([^/]+)/([^/]+)/([^/]+)$")
// parseAppMeshARNResource parses the resource part for an appmesh resource's ARN
func parseAppMeshARNResource(arnResource string) (augmentedMeshName string, resourceType string, resourceName string, err error) {
subExps := appMeshARNResourcePattern.FindStringSubmatch(arnResource)
if len(subExps) != 4 {
return "", "", "", errors.Errorf("invalid resource in appMesh ARN: %v", arnResource)
}
return subExps[1], subExps[2], subExps[3], nil
}