mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-12-11 00:44:20 -05:00
52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
/*
|
|
Copyright (c) Edgeless Systems GmbH
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
package client
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
|
|
"google.golang.org/genproto/googleapis/cloud/compute/v1"
|
|
)
|
|
|
|
var (
|
|
diskSourceRegex = regexp.MustCompile(`^https://www.googleapis.com/compute/v1/projects/([^/]+)/zones/([^/]+)/disks/([^/]+)$`)
|
|
computeAPIBase = regexp.MustCompile(`^https://www.googleapis.com/compute/v1/(.+)$`)
|
|
)
|
|
|
|
// diskSourceToDiskReq converts a disk source URI to a disk request.
|
|
func diskSourceToDiskReq(diskSource string) (*compute.GetDiskRequest, error) {
|
|
matches := diskSourceRegex.FindStringSubmatch(diskSource)
|
|
if len(matches) != 4 {
|
|
return nil, fmt.Errorf("error splitting diskSource: %v", diskSource)
|
|
}
|
|
return &compute.GetDiskRequest{
|
|
Disk: matches[3],
|
|
Project: matches[1],
|
|
Zone: matches[2],
|
|
}, nil
|
|
}
|
|
|
|
// uriNormalize normalizes a compute API URI by removing the optional URI prefix.
|
|
// for normalization, the prefix 'https://www.googleapis.com/compute/v1/' is removed.
|
|
func uriNormalize(imageURI string) string {
|
|
matches := computeAPIBase.FindStringSubmatch(imageURI)
|
|
if len(matches) != 2 {
|
|
return imageURI
|
|
}
|
|
return matches[1]
|
|
}
|
|
|
|
// ensureURIPrefixed ensures that a compute API URI is prefixed with the optional URI prefix.
|
|
func ensureURIPrefixed(uri string) string {
|
|
matches := computeAPIBase.FindStringSubmatch(uri)
|
|
if len(matches) == 2 {
|
|
return uri
|
|
}
|
|
return "https://www.googleapis.com/compute/v1/" + uri
|
|
}
|