mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-31 08:03:43 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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 {
 | |
| 	return modifyNetworkEndpoint(containerID, endpointID, Add)
 | |
| }
 | |
| 
 | |
| // HotDetachEndpoint makes a HCS Call to detach the endpoint from the container
 | |
| func HotDetachEndpoint(containerID string, endpointID string) error {
 | |
| 	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)
 | |
| }
 | 
