mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			246 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package schema1
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/Microsoft/hcsshim/internal/schema2"
 | |
| )
 | |
| 
 | |
| // ProcessConfig is used as both the input of Container.CreateProcess
 | |
| // and to convert the parameters to JSON for passing onto the HCS
 | |
| type ProcessConfig struct {
 | |
| 	ApplicationName   string            `json:",omitempty"`
 | |
| 	CommandLine       string            `json:",omitempty"`
 | |
| 	CommandArgs       []string          `json:",omitempty"` // Used by Linux Containers on Windows
 | |
| 	User              string            `json:",omitempty"`
 | |
| 	WorkingDirectory  string            `json:",omitempty"`
 | |
| 	Environment       map[string]string `json:",omitempty"`
 | |
| 	EmulateConsole    bool              `json:",omitempty"`
 | |
| 	CreateStdInPipe   bool              `json:",omitempty"`
 | |
| 	CreateStdOutPipe  bool              `json:",omitempty"`
 | |
| 	CreateStdErrPipe  bool              `json:",omitempty"`
 | |
| 	ConsoleSize       [2]uint           `json:",omitempty"`
 | |
| 	CreateInUtilityVm bool              `json:",omitempty"` // Used by Linux Containers on Windows
 | |
| 	OCISpecification  *json.RawMessage  `json:",omitempty"` // Used by Linux Containers on Windows
 | |
| }
 | |
| 
 | |
| type Layer struct {
 | |
| 	ID   string
 | |
| 	Path string
 | |
| }
 | |
| 
 | |
| type MappedDir struct {
 | |
| 	HostPath          string
 | |
| 	ContainerPath     string
 | |
| 	ReadOnly          bool
 | |
| 	BandwidthMaximum  uint64
 | |
| 	IOPSMaximum       uint64
 | |
| 	CreateInUtilityVM bool
 | |
| 	// LinuxMetadata - Support added in 1803/RS4+.
 | |
| 	LinuxMetadata bool `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| type MappedPipe struct {
 | |
| 	HostPath          string
 | |
| 	ContainerPipeName string
 | |
| }
 | |
| 
 | |
| type HvRuntime struct {
 | |
| 	ImagePath           string `json:",omitempty"`
 | |
| 	SkipTemplate        bool   `json:",omitempty"`
 | |
| 	LinuxInitrdFile     string `json:",omitempty"` // File under ImagePath on host containing an initrd image for starting a Linux utility VM
 | |
| 	LinuxKernelFile     string `json:",omitempty"` // File under ImagePath on host containing a kernel for starting a Linux utility VM
 | |
| 	LinuxBootParameters string `json:",omitempty"` // Additional boot parameters for starting a Linux Utility VM in initrd mode
 | |
| 	BootSource          string `json:",omitempty"` // "Vhd" for Linux Utility VM booting from VHD
 | |
| 	WritableBootSource  bool   `json:",omitempty"` // Linux Utility VM booting from VHD
 | |
| }
 | |
| 
 | |
| type MappedVirtualDisk struct {
 | |
| 	HostPath          string `json:",omitempty"` // Path to VHD on the host
 | |
| 	ContainerPath     string // Platform-specific mount point path in the container
 | |
| 	CreateInUtilityVM bool   `json:",omitempty"`
 | |
| 	ReadOnly          bool   `json:",omitempty"`
 | |
| 	Cache             string `json:",omitempty"` // "" (Unspecified); "Disabled"; "Enabled"; "Private"; "PrivateAllowSharing"
 | |
| 	AttachOnly        bool   `json:",omitempty:`
 | |
| }
 | |
| 
 | |
| // AssignedDevice represents a device that has been directly assigned to a container
 | |
| //
 | |
| // NOTE: Support added in RS5
 | |
| type AssignedDevice struct {
 | |
| 	//  InterfaceClassGUID of the device to assign to container.
 | |
| 	InterfaceClassGUID string `json:"InterfaceClassGuid,omitempty"`
 | |
| }
 | |
| 
 | |
| // ContainerConfig is used as both the input of CreateContainer
 | |
| // and to convert the parameters to JSON for passing onto the HCS
 | |
| type ContainerConfig struct {
 | |
| 	SystemType                  string              // HCS requires this to be hard-coded to "Container"
 | |
| 	Name                        string              // Name of the container. We use the docker ID.
 | |
| 	Owner                       string              `json:",omitempty"` // The management platform that created this container
 | |
| 	VolumePath                  string              `json:",omitempty"` // Windows volume path for scratch space. Used by Windows Server Containers only. Format \\?\\Volume{GUID}
 | |
| 	IgnoreFlushesDuringBoot     bool                `json:",omitempty"` // Optimization hint for container startup in Windows
 | |
| 	LayerFolderPath             string              `json:",omitempty"` // Where the layer folders are located. Used by Windows Server Containers only. Format  %root%\windowsfilter\containerID
 | |
| 	Layers                      []Layer             // List of storage layers. Required for Windows Server and Hyper-V Containers. Format ID=GUID;Path=%root%\windowsfilter\layerID
 | |
| 	Credentials                 string              `json:",omitempty"` // Credentials information
 | |
| 	ProcessorCount              uint32              `json:",omitempty"` // Number of processors to assign to the container.
 | |
| 	ProcessorWeight             uint64              `json:",omitempty"` // CPU shares (relative weight to other containers with cpu shares). Range is from 1 to 10000. A value of 0 results in default shares.
 | |
| 	ProcessorMaximum            int64               `json:",omitempty"` // Specifies the portion of processor cycles that this container can use as a percentage times 100. Range is from 1 to 10000. A value of 0 results in no limit.
 | |
| 	StorageIOPSMaximum          uint64              `json:",omitempty"` // Maximum Storage IOPS
 | |
| 	StorageBandwidthMaximum     uint64              `json:",omitempty"` // Maximum Storage Bandwidth in bytes per second
 | |
| 	StorageSandboxSize          uint64              `json:",omitempty"` // Size in bytes that the container system drive should be expanded to if smaller
 | |
| 	MemoryMaximumInMB           int64               `json:",omitempty"` // Maximum memory available to the container in Megabytes
 | |
| 	HostName                    string              `json:",omitempty"` // Hostname
 | |
| 	MappedDirectories           []MappedDir         `json:",omitempty"` // List of mapped directories (volumes/mounts)
 | |
| 	MappedPipes                 []MappedPipe        `json:",omitempty"` // List of mapped Windows named pipes
 | |
| 	HvPartition                 bool                // True if it a Hyper-V Container
 | |
| 	NetworkSharedContainerName  string              `json:",omitempty"` // Name (ID) of the container that we will share the network stack with.
 | |
| 	EndpointList                []string            `json:",omitempty"` // List of networking endpoints to be attached to container
 | |
| 	HvRuntime                   *HvRuntime          `json:",omitempty"` // Hyper-V container settings. Used by Hyper-V containers only. Format ImagePath=%root%\BaseLayerID\UtilityVM
 | |
| 	Servicing                   bool                `json:",omitempty"` // True if this container is for servicing
 | |
| 	AllowUnqualifiedDNSQuery    bool                `json:",omitempty"` // True to allow unqualified DNS name resolution
 | |
| 	DNSSearchList               string              `json:",omitempty"` // Comma seperated list of DNS suffixes to use for name resolution
 | |
| 	ContainerType               string              `json:",omitempty"` // "Linux" for Linux containers on Windows. Omitted otherwise.
 | |
| 	TerminateOnLastHandleClosed bool                `json:",omitempty"` // Should HCS terminate the container once all handles have been closed
 | |
| 	MappedVirtualDisks          []MappedVirtualDisk `json:",omitempty"` // Array of virtual disks to mount at start
 | |
| 	AssignedDevices             []AssignedDevice    `json:",omitempty"` // Array of devices to assign. NOTE: Support added in RS5
 | |
| }
 | |
| 
 | |
| type ComputeSystemQuery struct {
 | |
| 	IDs    []string `json:"Ids,omitempty"`
 | |
| 	Types  []string `json:",omitempty"`
 | |
| 	Names  []string `json:",omitempty"`
 | |
| 	Owners []string `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| type PropertyType string
 | |
| 
 | |
| const (
 | |
| 	PropertyTypeStatistics        PropertyType = "Statistics"        // V1 and V2
 | |
| 	PropertyTypeProcessList                    = "ProcessList"       // V1 and V2
 | |
| 	PropertyTypeMappedVirtualDisk              = "MappedVirtualDisk" // Not supported in V2 schema call
 | |
| 	PropertyTypeGuestConnection                = "GuestConnection"   // V1 and V2. Nil return from HCS before RS5
 | |
| )
 | |
| 
 | |
| type PropertyQuery struct {
 | |
| 	PropertyTypes []PropertyType `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // ContainerProperties holds the properties for a container and the processes running in that container
 | |
| type ContainerProperties struct {
 | |
| 	ID                           string `json:"Id"`
 | |
| 	State                        string
 | |
| 	Name                         string
 | |
| 	SystemType                   string
 | |
| 	Owner                        string
 | |
| 	SiloGUID                     string                              `json:"SiloGuid,omitempty"`
 | |
| 	RuntimeID                    string                              `json:"RuntimeId,omitempty"`
 | |
| 	IsRuntimeTemplate            bool                                `json:",omitempty"`
 | |
| 	RuntimeImagePath             string                              `json:",omitempty"`
 | |
| 	Stopped                      bool                                `json:",omitempty"`
 | |
| 	ExitType                     string                              `json:",omitempty"`
 | |
| 	AreUpdatesPending            bool                                `json:",omitempty"`
 | |
| 	ObRoot                       string                              `json:",omitempty"`
 | |
| 	Statistics                   Statistics                          `json:",omitempty"`
 | |
| 	ProcessList                  []ProcessListItem                   `json:",omitempty"`
 | |
| 	MappedVirtualDiskControllers map[int]MappedVirtualDiskController `json:",omitempty"`
 | |
| 	GuestConnectionInfo          GuestConnectionInfo                 `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // MemoryStats holds the memory statistics for a container
 | |
| type MemoryStats struct {
 | |
| 	UsageCommitBytes            uint64 `json:"MemoryUsageCommitBytes,omitempty"`
 | |
| 	UsageCommitPeakBytes        uint64 `json:"MemoryUsageCommitPeakBytes,omitempty"`
 | |
| 	UsagePrivateWorkingSetBytes uint64 `json:"MemoryUsagePrivateWorkingSetBytes,omitempty"`
 | |
| }
 | |
| 
 | |
| // ProcessorStats holds the processor statistics for a container
 | |
| type ProcessorStats struct {
 | |
| 	TotalRuntime100ns  uint64 `json:",omitempty"`
 | |
| 	RuntimeUser100ns   uint64 `json:",omitempty"`
 | |
| 	RuntimeKernel100ns uint64 `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // StorageStats holds the storage statistics for a container
 | |
| type StorageStats struct {
 | |
| 	ReadCountNormalized  uint64 `json:",omitempty"`
 | |
| 	ReadSizeBytes        uint64 `json:",omitempty"`
 | |
| 	WriteCountNormalized uint64 `json:",omitempty"`
 | |
| 	WriteSizeBytes       uint64 `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // NetworkStats holds the network statistics for a container
 | |
| type NetworkStats struct {
 | |
| 	BytesReceived          uint64 `json:",omitempty"`
 | |
| 	BytesSent              uint64 `json:",omitempty"`
 | |
| 	PacketsReceived        uint64 `json:",omitempty"`
 | |
| 	PacketsSent            uint64 `json:",omitempty"`
 | |
| 	DroppedPacketsIncoming uint64 `json:",omitempty"`
 | |
| 	DroppedPacketsOutgoing uint64 `json:",omitempty"`
 | |
| 	EndpointId             string `json:",omitempty"`
 | |
| 	InstanceId             string `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // Statistics is the structure returned by a statistics call on a container
 | |
| type Statistics struct {
 | |
| 	Timestamp          time.Time      `json:",omitempty"`
 | |
| 	ContainerStartTime time.Time      `json:",omitempty"`
 | |
| 	Uptime100ns        uint64         `json:",omitempty"`
 | |
| 	Memory             MemoryStats    `json:",omitempty"`
 | |
| 	Processor          ProcessorStats `json:",omitempty"`
 | |
| 	Storage            StorageStats   `json:",omitempty"`
 | |
| 	Network            []NetworkStats `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // ProcessList is the structure of an item returned by a ProcessList call on a container
 | |
| type ProcessListItem struct {
 | |
| 	CreateTimestamp              time.Time `json:",omitempty"`
 | |
| 	ImageName                    string    `json:",omitempty"`
 | |
| 	KernelTime100ns              uint64    `json:",omitempty"`
 | |
| 	MemoryCommitBytes            uint64    `json:",omitempty"`
 | |
| 	MemoryWorkingSetPrivateBytes uint64    `json:",omitempty"`
 | |
| 	MemoryWorkingSetSharedBytes  uint64    `json:",omitempty"`
 | |
| 	ProcessId                    uint32    `json:",omitempty"`
 | |
| 	UserTime100ns                uint64    `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // MappedVirtualDiskController is the structure of an item returned by a MappedVirtualDiskList call on a container
 | |
| type MappedVirtualDiskController struct {
 | |
| 	MappedVirtualDisks map[int]MappedVirtualDisk `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // GuestDefinedCapabilities is part of the GuestConnectionInfo returned by a GuestConnection call on a utility VM
 | |
| type GuestDefinedCapabilities struct {
 | |
| 	NamespaceAddRequestSupported bool `json:",omitempty"`
 | |
| 	SignalProcessSupported       bool `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // GuestConnectionInfo is the structure of an iterm return by a GuestConnection call on a utility VM
 | |
| type GuestConnectionInfo struct {
 | |
| 	SupportedSchemaVersions  []hcsschema.Version      `json:",omitempty"`
 | |
| 	ProtocolVersion          uint32                   `json:",omitempty"`
 | |
| 	GuestDefinedCapabilities GuestDefinedCapabilities `json:",omitempty"`
 | |
| }
 | |
| 
 | |
| // Type of Request Support in ModifySystem
 | |
| type RequestType string
 | |
| 
 | |
| // Type of Resource Support in ModifySystem
 | |
| type ResourceType string
 | |
| 
 | |
| // RequestType const
 | |
| const (
 | |
| 	Add     RequestType  = "Add"
 | |
| 	Remove  RequestType  = "Remove"
 | |
| 	Network ResourceType = "Network"
 | |
| )
 | |
| 
 | |
| // ResourceModificationRequestResponse 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 ResourceModificationRequestResponse struct {
 | |
| 	Resource ResourceType `json:"ResourceType"`
 | |
| 	Data     interface{}  `json:"Settings"`
 | |
| 	Request  RequestType  `json:"RequestType,omitempty"`
 | |
| }
 | 
