From 2b0e3415a4b786c3c59b584e68cf74e3fef3ff13 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Fri, 1 Feb 2019 16:37:56 -0800 Subject: [PATCH] Default container limit on a namespace --- apis/cluster.cattle.io/v3/schema/schema.go | 9 ++++--- apis/cluster.cattle.io/v3/schema/types.go | 7 ++++++ apis/management.cattle.io/v3/authz_types.go | 1 + .../v3/resource_quota_types.go | 7 ++++++ .../v3/zz_generated_deepcopy.go | 25 ++++++++++++++++++- main.go | 1 + 6 files changed, 46 insertions(+), 4 deletions(-) diff --git a/apis/cluster.cattle.io/v3/schema/schema.go b/apis/cluster.cattle.io/v3/schema/schema.go index a1fff61a..2a7e7f5c 100644 --- a/apis/cluster.cattle.io/v3/schema/schema.go +++ b/apis/cluster.cattle.io/v3/schema/schema.go @@ -34,13 +34,16 @@ func namespaceTypes(schemas *types.Schemas) *types.Schemas { &m.AnnotationField{Field: "description"}, &m.AnnotationField{Field: "projectId"}, &m.AnnotationField{Field: "resourceQuota", Object: true}, + &m.AnnotationField{Field: "containerDefaultResourceLimit", Object: true}, &m.Drop{Field: "status"}, ). MustImport(&Version, NamespaceResourceQuota{}). + MustImport(&Version, ContainerResourceLimit{}). MustImport(&Version, v1.Namespace{}, struct { - Description string `json:"description"` - ProjectID string `norman:"type=reference[/v3/schemas/project],noupdate"` - ResourceQuota string `json:"resourceQuota,omitempty" norman:"type=namespaceResourceQuota"` + Description string `json:"description"` + ProjectID string `norman:"type=reference[/v3/schemas/project],noupdate"` + ResourceQuota string `json:"resourceQuota,omitempty" norman:"type=namespaceResourceQuota"` + ContainerDefaultResourceLimit string `json:"containerDefaultResourceLimit,omitempty" norman:"type=containerResourceLimit"` }{}). MustImport(&Version, NamespaceMove{}). MustImportAndCustomize(&Version, v1.Namespace{}, func(schema *types.Schema) { diff --git a/apis/cluster.cattle.io/v3/schema/types.go b/apis/cluster.cattle.io/v3/schema/types.go index 7e890d7d..0e99718a 100644 --- a/apis/cluster.cattle.io/v3/schema/types.go +++ b/apis/cluster.cattle.io/v3/schema/types.go @@ -49,3 +49,10 @@ type ResourceQuotaLimit struct { type NamespaceMove struct { ProjectID string `json:"projectId,omitempty"` } + +type ContainerResourceLimit struct { + RequestsCPU string `json:"requestsCpu,omitempty"` + RequestsMemory string `json:"requestsMemory,omitempty"` + LimitsCPU string `json:"limitsCpu,omitempty"` + LimitsMemory string `json:"limitsMemory,omitempty"` +} diff --git a/apis/management.cattle.io/v3/authz_types.go b/apis/management.cattle.io/v3/authz_types.go index c0014808..11f1822c 100644 --- a/apis/management.cattle.io/v3/authz_types.go +++ b/apis/management.cattle.io/v3/authz_types.go @@ -55,6 +55,7 @@ type ProjectSpec struct { ClusterName string `json:"clusterName,omitempty" norman:"required,type=reference[cluster]"` ResourceQuota *ProjectResourceQuota `json:"resourceQuota,omitempty"` NamespaceDefaultResourceQuota *NamespaceResourceQuota `json:"namespaceDefaultResourceQuota,omitempty"` + ContainerDefaultResourceLimit *ContainerResourceLimit `json:"containerDefaultResourceLimit,omitempty"` EnableProjectMonitoring bool `json:"enableProjectMonitoring" norman:"default=false"` } diff --git a/apis/management.cattle.io/v3/resource_quota_types.go b/apis/management.cattle.io/v3/resource_quota_types.go index 586de7ab..1a3545b5 100644 --- a/apis/management.cattle.io/v3/resource_quota_types.go +++ b/apis/management.cattle.io/v3/resource_quota_types.go @@ -24,3 +24,10 @@ type ResourceQuotaLimit struct { LimitsCPU string `json:"limitsCpu,omitempty"` LimitsMemory string `json:"limitsMemory,omitempty"` } + +type ContainerResourceLimit struct { + RequestsCPU string `json:"requestsCpu,omitempty"` + RequestsMemory string `json:"requestsMemory,omitempty"` + LimitsCPU string `json:"limitsCpu,omitempty"` + LimitsMemory string `json:"limitsMemory,omitempty"` +} diff --git a/apis/management.cattle.io/v3/zz_generated_deepcopy.go b/apis/management.cattle.io/v3/zz_generated_deepcopy.go index 29cea745..fc8e7bed 100644 --- a/apis/management.cattle.io/v3/zz_generated_deepcopy.go +++ b/apis/management.cattle.io/v3/zz_generated_deepcopy.go @@ -2050,6 +2050,22 @@ func (in *Condition) DeepCopy() *Condition { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ContainerResourceLimit) DeepCopyInto(out *ContainerResourceLimit) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerResourceLimit. +func (in *ContainerResourceLimit) DeepCopy() *ContainerResourceLimit { + if in == nil { + return nil + } + out := new(ContainerResourceLimit) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CustomConfig) DeepCopyInto(out *CustomConfig) { *out = *in @@ -4403,7 +4419,9 @@ func (in *MultiClusterAppStatus) DeepCopyInto(out *MultiClusterAppStatus) { if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions *out = make([]projectcattleiov3.AppCondition, len(*in)) - copy(*out, *in) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } return } @@ -6574,6 +6592,11 @@ func (in *ProjectSpec) DeepCopyInto(out *ProjectSpec) { *out = new(NamespaceResourceQuota) **out = **in } + if in.ContainerDefaultResourceLimit != nil { + in, out := &in.ContainerDefaultResourceLimit, &out.ContainerDefaultResourceLimit + *out = new(ContainerResourceLimit) + **out = **in + } return } diff --git a/main.go b/main.go index f7a97a47..ec4c56d5 100644 --- a/main.go +++ b/main.go @@ -42,6 +42,7 @@ func main() { v1.ServiceAccount{}, v1.ReplicationController{}, v1.ResourceQuota{}, + v1.LimitRange{}, }, []interface{}{ v1.Node{}, v1.ComponentStatus{},