| 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"` |
| } |