1/*
2Copyright 2015 The Kubernetes Authors.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8    http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17package cm
18
19import (
20	v1 "k8s.io/api/core/v1"
21	"k8s.io/klog/v2"
22
23	"k8s.io/apimachinery/pkg/api/resource"
24	internalapi "k8s.io/cri-api/pkg/apis"
25	podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1"
26	"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
27	"k8s.io/kubernetes/pkg/kubelet/cm/memorymanager"
28	"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
29	"k8s.io/kubernetes/pkg/kubelet/config"
30	kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
31	"k8s.io/kubernetes/pkg/kubelet/lifecycle"
32	"k8s.io/kubernetes/pkg/kubelet/pluginmanager/cache"
33	"k8s.io/kubernetes/pkg/kubelet/status"
34	schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework"
35)
36
37type containerManagerStub struct {
38	shouldResetExtendedResourceCapacity bool
39	extendedPluginResources             v1.ResourceList
40}
41
42var _ ContainerManager = &containerManagerStub{}
43
44func (cm *containerManagerStub) Start(_ *v1.Node, _ ActivePodsFunc, _ config.SourcesReady, _ status.PodStatusProvider, _ internalapi.RuntimeService) error {
45	klog.V(2).InfoS("Starting stub container manager")
46	return nil
47}
48
49func (cm *containerManagerStub) SystemCgroupsLimit() v1.ResourceList {
50	return v1.ResourceList{}
51}
52
53func (cm *containerManagerStub) GetNodeConfig() NodeConfig {
54	return NodeConfig{}
55}
56
57func (cm *containerManagerStub) GetMountedSubsystems() *CgroupSubsystems {
58	return &CgroupSubsystems{}
59}
60
61func (cm *containerManagerStub) GetQOSContainersInfo() QOSContainersInfo {
62	return QOSContainersInfo{}
63}
64
65func (cm *containerManagerStub) UpdateQOSCgroups() error {
66	return nil
67}
68
69func (cm *containerManagerStub) Status() Status {
70	return Status{}
71}
72
73func (cm *containerManagerStub) GetNodeAllocatableReservation() v1.ResourceList {
74	return nil
75}
76
77func (cm *containerManagerStub) GetCapacity() v1.ResourceList {
78	c := v1.ResourceList{
79		v1.ResourceEphemeralStorage: *resource.NewQuantity(
80			int64(0),
81			resource.BinarySI),
82	}
83	return c
84}
85
86func (cm *containerManagerStub) GetPluginRegistrationHandler() cache.PluginHandler {
87	return nil
88}
89
90func (cm *containerManagerStub) GetDevicePluginResourceCapacity() (v1.ResourceList, v1.ResourceList, []string) {
91	return cm.extendedPluginResources, cm.extendedPluginResources, []string{}
92}
93
94func (cm *containerManagerStub) NewPodContainerManager() PodContainerManager {
95	return &podContainerManagerStub{}
96}
97
98func (cm *containerManagerStub) GetResources(pod *v1.Pod, container *v1.Container) (*kubecontainer.RunContainerOptions, error) {
99	return &kubecontainer.RunContainerOptions{}, nil
100}
101
102func (cm *containerManagerStub) UpdatePluginResources(*schedulerframework.NodeInfo, *lifecycle.PodAdmitAttributes) error {
103	return nil
104}
105
106func (cm *containerManagerStub) InternalContainerLifecycle() InternalContainerLifecycle {
107	return &internalContainerLifecycleImpl{cpumanager.NewFakeManager(), memorymanager.NewFakeManager(), topologymanager.NewFakeManager()}
108}
109
110func (cm *containerManagerStub) GetPodCgroupRoot() string {
111	return ""
112}
113
114func (cm *containerManagerStub) GetDevices(_, _ string) []*podresourcesapi.ContainerDevices {
115	return nil
116}
117
118func (cm *containerManagerStub) GetAllocatableDevices() []*podresourcesapi.ContainerDevices {
119	return nil
120}
121
122func (cm *containerManagerStub) ShouldResetExtendedResourceCapacity() bool {
123	return cm.shouldResetExtendedResourceCapacity
124}
125
126func (cm *containerManagerStub) GetAllocateResourcesPodAdmitHandler() lifecycle.PodAdmitHandler {
127	return topologymanager.NewFakeManager()
128}
129
130func (cm *containerManagerStub) UpdateAllocatedDevices() {
131	return
132}
133
134func (cm *containerManagerStub) GetCPUs(_, _ string) []int64 {
135	return nil
136}
137
138func (cm *containerManagerStub) GetAllocatableCPUs() []int64 {
139	return nil
140}
141
142func (cm *containerManagerStub) GetMemory(_, _ string) []*podresourcesapi.ContainerMemory {
143	return nil
144}
145
146func (cm *containerManagerStub) GetAllocatableMemory() []*podresourcesapi.ContainerMemory {
147	return nil
148}
149
150func (cm *containerManagerStub) GetNodeAllocatableAbsolute() v1.ResourceList {
151	return nil
152}
153
154func NewStubContainerManager() ContainerManager {
155	return &containerManagerStub{shouldResetExtendedResourceCapacity: false}
156}
157
158func NewStubContainerManagerWithExtendedResource(shouldResetExtendedResourceCapacity bool) ContainerManager {
159	return &containerManagerStub{shouldResetExtendedResourceCapacity: shouldResetExtendedResourceCapacity}
160}
161
162func NewStubContainerManagerWithDevicePluginResource(extendedPluginResources v1.ResourceList) ContainerManager {
163	return &containerManagerStub{
164		shouldResetExtendedResourceCapacity: false,
165		extendedPluginResources:             extendedPluginResources,
166	}
167}
168