diff --git a/runtime_config_linux.go b/runtime_config_linux.go index 7673e693e..bd2aaa37a 100644 --- a/runtime_config_linux.go +++ b/runtime_config_linux.go @@ -24,11 +24,11 @@ type LinuxRuntime struct { Sysctl map[string]string `json:"sysctl"` // Resources contain cgroup information for handling resource constraints // for the container - Resources *Resources `json:"resources"` + Resources *Resources `json:"resources,omitempty"` // CgroupsPath specifies the path to cgroups that are created and/or joined by the container. // The path is expected to be relative to the cgroups mountpoint. // If resources are specified, the cgroups at CgroupsPath will be updated based on resources. - CgroupsPath string `json:"cgroupsPath"` + CgroupsPath *string `json:"cgroupsPath,omitempty"` // Namespaces contains the namespaces that are created and/or joined by the container Namespaces []Namespace `json:"namespaces"` // Devices are a list of device nodes that are created and enabled for the container @@ -93,9 +93,9 @@ type Rlimit struct { // HugepageLimit structure corresponds to limiting kernel hugepages type HugepageLimit struct { // Pagesize is the hugepage size - Pagesize string `json:"pageSize"` + Pagesize *string `json:"pageSize,omitempty"` // Limit is the limit of "hugepagesize" hugetlb usage - Limit uint64 `json:"limit"` + Limit *uint64 `json:"limit,omitempty"` } // InterfacePriority for network interfaces @@ -118,9 +118,9 @@ type blockIODevice struct { type WeightDevice struct { blockIODevice // Weight is the bandwidth rate for the device, range is from 10 to 1000 - Weight uint16 `json:"weight"` + Weight *uint16 `json:"weight,omitempty"` // LeafWeight is the bandwidth rate for the device while competing with the cgroup's child cgroups, range is from 10 to 1000, CFQ scheduler only - LeafWeight uint16 `json:"leafWeight"` + LeafWeight *uint16 `json:"leafWeight,omitempty"` } // ThrottleDevice struct holds a `major:minor rate_per_second` pair @@ -133,59 +133,59 @@ type ThrottleDevice struct { // BlockIO for Linux cgroup 'blkio' resource management type BlockIO struct { // Specifies per cgroup weight, range is from 10 to 1000 - Weight uint16 `json:"blkioWeight"` + Weight *uint16 `json:"blkioWeight,omitempty"` // Specifies tasks' weight in the given cgroup while competing with the cgroup's child cgroups, range is from 10 to 1000, CFQ scheduler only - LeafWeight uint16 `json:"blkioLeafWeight"` + LeafWeight *uint16 `json:"blkioLeafWeight,omitempty"` // Weight per cgroup per device, can override BlkioWeight - WeightDevice []*WeightDevice `json:"blkioWeightDevice"` + WeightDevice []*WeightDevice `json:"blkioWeightDevice,omitempty"` // IO read rate limit per cgroup per device, bytes per second - ThrottleReadBpsDevice []*ThrottleDevice `json:"blkioThrottleReadBpsDevice"` + ThrottleReadBpsDevice []*ThrottleDevice `json:"blkioThrottleReadBpsDevice,omitempty"` // IO write rate limit per cgroup per device, bytes per second - ThrottleWriteBpsDevice []*ThrottleDevice `json:"blkioThrottleWriteBpsDevice"` + ThrottleWriteBpsDevice []*ThrottleDevice `json:"blkioThrottleWriteBpsDevice,omitempty"` // IO read rate limit per cgroup per device, IO per second - ThrottleReadIOPSDevice []*ThrottleDevice `json:"blkioThrottleReadIOPSDevice"` + ThrottleReadIOPSDevice []*ThrottleDevice `json:"blkioThrottleReadIOPSDevice,omitempty"` // IO write rate limit per cgroup per device, IO per second - ThrottleWriteIOPSDevice []*ThrottleDevice `json:"blkioThrottleWriteIOPSDevice"` + ThrottleWriteIOPSDevice []*ThrottleDevice `json:"blkioThrottleWriteIOPSDevice,omitempty"` } // Memory for Linux cgroup 'memory' resource management type Memory struct { - // Memory limit (in bytes) - Limit uint64 `json:"limit"` - // Memory reservation or soft_limit (in bytes) - Reservation uint64 `json:"reservation"` - // Total memory usage (memory + swap); set `-1' to disable swap - Swap uint64 `json:"swap"` - // Kernel memory limit (in bytes) - Kernel uint64 `json:"kernel"` + // Memory limit (in bytes). + Limit *int64 `json:"limit,omitempty"` + // Memory reservation or soft_limit (in bytes). + Reservation *int64 `json:"reservation,omitempty"` + // Total memory limit (memory + swap). + Swap *int64 `json:"swap,omitempty"` + // Kernel memory limit (in bytes). + Kernel *int64 `json:"kernel,omitempty"` // Kernel memory limit for tcp (in bytes) - KernelTCP uint64 `json:"kernelTCP"` - // How aggressive the kernel will swap memory pages. Range from 0 to 100. Set -1 to use system default - Swappiness uint64 `json:"swappiness"` + KernelTCP *int64 `json:"kernelTCP"` + // How aggressive the kernel will swap memory pages. Range from 0 to 100. + Swappiness *int64 `json:"swappiness,omitempty"` } // CPU for Linux cgroup 'cpu' resource management type CPU struct { - // CPU shares (relative weight vs. other cgroups with cpu shares) - Shares uint64 `json:"shares"` - // CPU hardcap limit (in usecs). Allowed cpu time in a given period - Quota uint64 `json:"quota"` - // CPU period to be used for hardcapping (in usecs). 0 to use system default - Period uint64 `json:"period"` - // How many time CPU will use in realtime scheduling (in usecs) - RealtimeRuntime uint64 `json:"realtimeRuntime"` - // CPU period to be used for realtime scheduling (in usecs) - RealtimePeriod uint64 `json:"realtimePeriod"` - // CPU to use within the cpuset - Cpus string `json:"cpus"` - // MEM to use within the cpuset - Mems string `json:"mems"` + // CPU shares (relative weight (ratio) vs. other cgroups with cpu shares). + Shares *int64 `json:"shares,omitempty"` + // CPU hardcap limit (in usecs). Allowed cpu time in a given period. + Quota *int64 `json:"quota,omitempty"` + // CPU period to be used for hardcapping (in usecs). + Period *int64 `json:"period,omitempty"` + // How much time realtime scheduling may use (in usecs). + RealtimeRuntime *int64 `json:"realtimeRuntime,omitempty"` + // CPU period to be used for realtime scheduling (in usecs). + RealtimePeriod *int64 `json:"realtimePeriod,omitempty"` + // CPUs to use within the cpuset. Default is to use any CPU available. + Cpus *string `json:"cpus,omitempty"` + // List of memory nodes in the cpuset. Default is to use any available memory node. + Mems *string `json:"mems,omitempty"` } // Pids for Linux cgroup 'pids' resource management (Linux 4.3) type Pids struct { - // Maximum number of PIDs. A value <= 0 indicates "no limit". - Limit int64 `json:"limit"` + // Maximum number of PIDs. Default is "no limit". + Limit *int64 `json:"limit,omitempty"` } // Network identification and priority configuration @@ -201,21 +201,21 @@ type Network struct { // Resources has container runtime resource constraints type Resources struct { // DisableOOMKiller disables the OOM killer for out of memory conditions - DisableOOMKiller bool `json:"disableOOMKiller"` - // Specify an oom_score_adj for the container. Optional. - OOMScoreAdj int `json:"oomScoreAdj"` + DisableOOMKiller *bool `json:"disableOOMKiller,omitempty"` + // Specify an oom_score_adj for the container. + OOMScoreAdj *int `json:"oomScoreAdj,omitempty"` // Memory restriction configuration - Memory Memory `json:"memory"` + Memory *Memory `json:"memory,omitempty"` // CPU resource restriction configuration - CPU CPU `json:"cpu"` + CPU *CPU `json:"cpu,omitempty"` // Task resource restriction configuration. - Pids Pids `json:"pids"` + Pids *Pids `json:"pids,omitempty"` // BlockIO restriction configuration - BlockIO BlockIO `json:"blockIO"` + BlockIO *BlockIO `json:"blockIO,omitempty"` // Hugetlb limit (in bytes) - HugepageLimits []HugepageLimit `json:"hugepageLimits"` + HugepageLimits []HugepageLimit `json:"hugepageLimits,omitempty"` // Network restriction configuration - Network Network `json:"network"` + Network *Network `json:"network,omitempty"` } // Device represents the information on a Linux special device file