mirror of
https://github.com/kubevirt/containerized-data-importer.git
synced 2025-06-03 06:30:22 +00:00

* Updated dependencies Signed-off-by: Tomasz Baranski <tbaransk@redhat.com> * Replace skopeo with containers API. This commit removes dependence on skopeo (binary) and uses containers API. By doing that we're able to opimize the use of storage (scratch) space, storage I/O and download bandwith. Signed-off-by: Tomasz Baranski <tbaransk@redhat.com> * Fixing rebase - dependencies kerfuffle. Signed-off-by: Tomasz Baranski <tbaransk@redhat.com> * Handling docker-format images as well as OCI. Signed-off-by: Tomasz Baranski <tbaransk@redhat.com> * Fix for missing code-generator module. Signed-off-by: Tomasz Baranski <tbaransk@redhat.com> * Remove regex, image file in registry images are matched by a path prefix. Signed-off-by: Tomasz Baranski <tbaransk@redhat.com> * Added nginx proxy in front of docker registry for a rate-limited access. Signed-off-by: Tomasz Baranski <tbaransk@redhat.com>
111 lines
2.4 KiB
Go
111 lines
2.4 KiB
Go
package hns
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
type namespaceRequest struct {
|
|
IsDefault bool `json:",omitempty"`
|
|
}
|
|
|
|
type namespaceEndpointRequest struct {
|
|
ID string `json:"Id"`
|
|
}
|
|
|
|
type NamespaceResource struct {
|
|
Type string
|
|
Data json.RawMessage
|
|
}
|
|
|
|
type namespaceResourceRequest struct {
|
|
Type string
|
|
Data interface{}
|
|
}
|
|
|
|
type Namespace struct {
|
|
ID string
|
|
IsDefault bool `json:",omitempty"`
|
|
ResourceList []NamespaceResource `json:",omitempty"`
|
|
}
|
|
|
|
func issueNamespaceRequest(id *string, method, subpath string, request interface{}) (*Namespace, error) {
|
|
var err error
|
|
hnspath := "/namespaces/"
|
|
if id != nil {
|
|
hnspath = path.Join(hnspath, *id)
|
|
}
|
|
if subpath != "" {
|
|
hnspath = path.Join(hnspath, subpath)
|
|
}
|
|
var reqJSON []byte
|
|
if request != nil {
|
|
if reqJSON, err = json.Marshal(request); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
var ns Namespace
|
|
err = hnsCall(method, hnspath, string(reqJSON), &ns)
|
|
if err != nil {
|
|
if strings.Contains(err.Error(), "Element not found.") {
|
|
return nil, os.ErrNotExist
|
|
}
|
|
return nil, fmt.Errorf("%s %s: %s", method, hnspath, err)
|
|
}
|
|
return &ns, err
|
|
}
|
|
|
|
func CreateNamespace() (string, error) {
|
|
req := namespaceRequest{}
|
|
ns, err := issueNamespaceRequest(nil, "POST", "", &req)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return ns.ID, nil
|
|
}
|
|
|
|
func RemoveNamespace(id string) error {
|
|
_, err := issueNamespaceRequest(&id, "DELETE", "", nil)
|
|
return err
|
|
}
|
|
|
|
func GetNamespaceEndpoints(id string) ([]string, error) {
|
|
ns, err := issueNamespaceRequest(&id, "GET", "", nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var endpoints []string
|
|
for _, rsrc := range ns.ResourceList {
|
|
if rsrc.Type == "Endpoint" {
|
|
var endpoint namespaceEndpointRequest
|
|
err = json.Unmarshal(rsrc.Data, &endpoint)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("unmarshal endpoint: %s", err)
|
|
}
|
|
endpoints = append(endpoints, endpoint.ID)
|
|
}
|
|
}
|
|
return endpoints, nil
|
|
}
|
|
|
|
func AddNamespaceEndpoint(id string, endpointID string) error {
|
|
resource := namespaceResourceRequest{
|
|
Type: "Endpoint",
|
|
Data: namespaceEndpointRequest{endpointID},
|
|
}
|
|
_, err := issueNamespaceRequest(&id, "POST", "addresource", &resource)
|
|
return err
|
|
}
|
|
|
|
func RemoveNamespaceEndpoint(id string, endpointID string) error {
|
|
resource := namespaceResourceRequest{
|
|
Type: "Endpoint",
|
|
Data: namespaceEndpointRequest{endpointID},
|
|
}
|
|
_, err := issueNamespaceRequest(&id, "POST", "removeresource", &resource)
|
|
return err
|
|
}
|