![dependabot[bot]](/assets/img/avatar_default.png)
Bumps [github.com/Microsoft/hcsshim](https://github.com/Microsoft/hcsshim) from 0.9.9 to 0.11.1. - [Release notes](https://github.com/Microsoft/hcsshim/releases) - [Commits](https://github.com/Microsoft/hcsshim/compare/v0.9.9...v0.11.1) --- updated-dependencies: - dependency-name: github.com/Microsoft/hcsshim dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
114 lines
2.5 KiB
Go
114 lines
2.5 KiB
Go
//go:build windows
|
|
|
|
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"`
|
|
CompartmentId uint32 `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
|
|
}
|