mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			105 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.1 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 {
 | 
						|
	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)
 | 
						|
}
 |