| package hcsshim |
| |
| import ( |
| "github.com/Microsoft/hcsshim/internal/hns" |
| ) |
| |
| // HNSEndpoint represents a network endpoint in HNS |
| type HNSEndpoint = hns.HNSEndpoint |
| |
| // Namespace represents a Compartment. |
| type Namespace = hns.Namespace |
| |
| //SystemType represents the type of the system on which actions are done |
| type SystemType string |
| |
| // SystemType const |
| const ( |
| ContainerType SystemType = "Container" |
| VirtualMachineType SystemType = "VirtualMachine" |
| HostType SystemType = "Host" |
| ) |
| |
| // EndpointAttachDetachRequest is the structure used to send request to the container to modify the system |
| // Supported resource types are Network and Request Types are Add/Remove |
| type EndpointAttachDetachRequest = hns.EndpointAttachDetachRequest |
| |
| // EndpointResquestResponse is object to get the endpoint request response |
| type EndpointResquestResponse = hns.EndpointResquestResponse |
| |
| // HNSEndpointRequest makes a HNS call to modify/query a network endpoint |
| func HNSEndpointRequest(method, path, request string) (*HNSEndpoint, error) { |
| return hns.HNSEndpointRequest(method, path, request) |
| } |
| |
| // HNSListEndpointRequest makes a HNS call to query the list of available endpoints |
| func HNSListEndpointRequest() ([]HNSEndpoint, error) { |
| return hns.HNSListEndpointRequest() |
| } |
| |
| // HotAttachEndpoint makes a HCS Call to attach the endpoint to the container |
| func HotAttachEndpoint(containerID string, endpointID string) error { |
| endpoint, err := GetHNSEndpointByID(endpointID) |
| isAttached, err := endpoint.IsAttached(containerID) |
| if isAttached { |
| return err |
| } |
| return modifyNetworkEndpoint(containerID, endpointID, Add) |
| } |
| |
| // HotDetachEndpoint makes a HCS Call to detach the endpoint from the container |
| func HotDetachEndpoint(containerID string, endpointID string) error { |
| endpoint, err := GetHNSEndpointByID(endpointID) |
| isAttached, err := endpoint.IsAttached(containerID) |
| if !isAttached { |
| return err |
| } |
| return modifyNetworkEndpoint(containerID, endpointID, Remove) |
| } |
| |
| // ModifyContainer corresponding to the container id, by sending a request |
| func modifyContainer(id string, request *ResourceModificationRequestResponse) error { |
| container, err := OpenContainer(id) |
| if err != nil { |
| if IsNotExist(err) { |
| return ErrComputeSystemDoesNotExist |
| } |
| return getInnerError(err) |
| } |
| defer container.Close() |
| err = container.Modify(request) |
| if err != nil { |
| if IsNotSupported(err) { |
| return ErrPlatformNotSupported |
| } |
| return getInnerError(err) |
| } |
| |
| return nil |
| } |
| |
| func modifyNetworkEndpoint(containerID string, endpointID string, request RequestType) error { |
| requestMessage := &ResourceModificationRequestResponse{ |
| Resource: Network, |
| Request: request, |
| Data: endpointID, |
| } |
| err := modifyContainer(containerID, requestMessage) |
| |
| if err != nil { |
| return err |
| } |
| |
| return nil |
| } |
| |
| // GetHNSEndpointByID get the Endpoint by ID |
| func GetHNSEndpointByID(endpointID string) (*HNSEndpoint, error) { |
| return hns.GetHNSEndpointByID(endpointID) |
| } |
| |
| // GetHNSEndpointByName gets the endpoint filtered by Name |
| func GetHNSEndpointByName(endpointName string) (*HNSEndpoint, error) { |
| return hns.GetHNSEndpointByName(endpointName) |
| } |