client_daemon_windows.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package libcontainerd
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. "github.com/containerd/containerd/cio"
  6. "github.com/containerd/containerd/windows/hcsshimtypes"
  7. specs "github.com/opencontainers/runtime-spec/specs-go"
  8. "github.com/pkg/errors"
  9. )
  10. func summaryFromInterface(i interface{}) (*Summary, error) {
  11. switch pd := i.(type) {
  12. case *hcsshimtypes.ProcessDetails:
  13. return &Summary{
  14. CreateTimestamp: pd.CreatedAt,
  15. ImageName: pd.ImageName,
  16. KernelTime100ns: pd.KernelTime_100Ns,
  17. MemoryCommitBytes: pd.MemoryCommitBytes,
  18. MemoryWorkingSetPrivateBytes: pd.MemoryWorkingSetPrivateBytes,
  19. MemoryWorkingSetSharedBytes: pd.MemoryWorkingSetSharedBytes,
  20. ProcessId: pd.ProcessID,
  21. UserTime100ns: pd.UserTime_100Ns,
  22. }, nil
  23. default:
  24. return nil, errors.Errorf("Unknown process details type %T", pd)
  25. }
  26. }
  27. func prepareBundleDir(bundleDir string, ociSpec *specs.Spec) (string, error) {
  28. return bundleDir, nil
  29. }
  30. func pipeName(containerID, processID, name string) string {
  31. return fmt.Sprintf(`\\.\pipe\containerd-%s-%s-%s`, containerID, processID, name)
  32. }
  33. func newFIFOSet(bundleDir, processID string, withStdin, withTerminal bool) *cio.FIFOSet {
  34. containerID := filepath.Base(bundleDir)
  35. config := cio.Config{
  36. Terminal: withTerminal,
  37. Stdout: pipeName(containerID, processID, "stdout"),
  38. }
  39. if withStdin {
  40. config.Stdin = pipeName(containerID, processID, "stdin")
  41. }
  42. if !config.Terminal {
  43. config.Stderr = pipeName(containerID, processID, "stderr")
  44. }
  45. return cio.NewFIFOSet(config, nil)
  46. }