nvidia_gpu.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package cdi
  2. import (
  3. "yunion.io/x/jsonutils"
  4. "yunion.io/x/pkg/errors"
  5. "yunion.io/x/onecloud/pkg/apis"
  6. hostapi "yunion.io/x/onecloud/pkg/apis/host"
  7. "yunion.io/x/onecloud/pkg/hostman/isolated_device"
  8. )
  9. func init() {
  10. isolated_device.RegisterContainerCDIManaer(apis.CONTAINER_CDI_KIND_NVIDIA_GPU, func() (isolated_device.IContainerCDIManager, error) {
  11. return newNvidiaGPU(), nil
  12. })
  13. }
  14. type nvidiaGPU struct{}
  15. func newNvidiaGPU() isolated_device.IContainerCDIManager {
  16. return &nvidiaGPU{}
  17. }
  18. func (n *nvidiaGPU) GetKind() apis.ContainerCDIKind {
  19. return apis.CONTAINER_CDI_KIND_NVIDIA_GPU
  20. }
  21. func (n *nvidiaGPU) GetSpecFilePath() string {
  22. return "/etc/cdi/nvidia.yaml"
  23. }
  24. // TODO: 检查 cdi 是否存在 /etc/cdi/nvidia.yaml
  25. func (n *nvidiaGPU) GetDeviceName(dev *hostapi.ContainerDevice) (string, error) {
  26. if dev.IsolatedDevice == nil {
  27. return "", errors.Errorf("isolated_device is nil: %s", jsonutils.Marshal(dev))
  28. }
  29. gpuId := dev.IsolatedDevice.Path
  30. if gpuId == "" {
  31. return "", errors.Wrapf(errors.ErrNotEmpty, "gpu_id from %s", jsonutils.Marshal(dev))
  32. }
  33. return gpuId, nil
  34. }