12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- Copyright 2018 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package podresources
- import (
- "context"
- "k8s.io/api/core/v1"
- "k8s.io/kubernetes/pkg/kubelet/apis/podresources/v1alpha1"
- )
- // DevicesProvider knows how to provide the devices used by the given container
- type DevicesProvider interface {
- GetDevices(podUID, containerName string) []*v1alpha1.ContainerDevices
- }
- // PodsProvider knows how to provide the pods admitted by the node
- type PodsProvider interface {
- GetPods() []*v1.Pod
- }
- // podResourcesServer implements PodResourcesListerServer
- type podResourcesServer struct {
- podsProvider PodsProvider
- devicesProvider DevicesProvider
- }
- // NewPodResourcesServer returns a PodResourcesListerServer which lists pods provided by the PodsProvider
- // with device information provided by the DevicesProvider
- func NewPodResourcesServer(podsProvider PodsProvider, devicesProvider DevicesProvider) v1alpha1.PodResourcesListerServer {
- return &podResourcesServer{
- podsProvider: podsProvider,
- devicesProvider: devicesProvider,
- }
- }
- // List returns information about the resources assigned to pods on the node
- func (p *podResourcesServer) List(ctx context.Context, req *v1alpha1.ListPodResourcesRequest) (*v1alpha1.ListPodResourcesResponse, error) {
- pods := p.podsProvider.GetPods()
- podResources := make([]*v1alpha1.PodResources, len(pods))
- for i, pod := range pods {
- pRes := v1alpha1.PodResources{
- Name: pod.Name,
- Namespace: pod.Namespace,
- Containers: make([]*v1alpha1.ContainerResources, len(pod.Spec.Containers)),
- }
- for j, container := range pod.Spec.Containers {
- pRes.Containers[j] = &v1alpha1.ContainerResources{
- Name: container.Name,
- Devices: p.devicesProvider.GetDevices(string(pod.UID), container.Name),
- }
- }
- podResources[i] = &pRes
- }
- return &v1alpha1.ListPodResourcesResponse{
- PodResources: podResources,
- }, nil
- }
|