proxy.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package proxy
  2. import (
  3. "context"
  4. "github.com/docker/api/client"
  5. "github.com/docker/api/containers"
  6. v1 "github.com/docker/api/containers/v1"
  7. )
  8. type clientKey struct{}
  9. func WithClient(ctx context.Context, c *client.Client) (context.Context, error) {
  10. return context.WithValue(ctx, clientKey{}, c), nil
  11. }
  12. func Client(ctx context.Context) *client.Client {
  13. c, _ := ctx.Value(clientKey{}).(*client.Client)
  14. return c
  15. }
  16. func NewContainerApi() v1.ContainersServer {
  17. return &proxyContainerApi{}
  18. }
  19. type proxyContainerApi struct{}
  20. func (p *proxyContainerApi) List(ctx context.Context, _ *v1.ListRequest) (*v1.ListResponse, error) {
  21. client := Client(ctx)
  22. c, err := client.ContainerService().List(ctx)
  23. if err != nil {
  24. return &v1.ListResponse{}, nil
  25. }
  26. response := &v1.ListResponse{
  27. Containers: []*v1.Container{},
  28. }
  29. for _, container := range c {
  30. response.Containers = append(response.Containers, &v1.Container{
  31. Id: container.ID,
  32. Image: container.Image,
  33. })
  34. }
  35. return response, nil
  36. }
  37. func (p *proxyContainerApi) Create(ctx context.Context, request *v1.CreateRequest) (*v1.CreateResponse, error) {
  38. client := Client(ctx)
  39. err := client.ContainerService().Run(ctx, containers.ContainerConfig{
  40. ID: request.Id,
  41. Image: request.Image,
  42. })
  43. return &v1.CreateResponse{}, err
  44. }
  45. func (p *proxyContainerApi) Start(_ context.Context, _ *v1.StartRequest) (*v1.StartResponse, error) {
  46. panic("not implemented") // TODO: Implement
  47. }
  48. func (p *proxyContainerApi) Stop(_ context.Context, _ *v1.StopRequest) (*v1.StopResponse, error) {
  49. panic("not implemented") // TODO: Implement
  50. }
  51. func (p *proxyContainerApi) Kill(_ context.Context, _ *v1.KillRequest) (*v1.KillResponse, error) {
  52. panic("not implemented") // TODO: Implement
  53. }
  54. func (p *proxyContainerApi) Delete(_ context.Context, _ *v1.DeleteRequest) (*v1.DeleteResponse, error) {
  55. panic("not implemented") // TODO: Implement
  56. }
  57. func (p *proxyContainerApi) Update(_ context.Context, _ *v1.UpdateRequest) (*v1.UpdateResponse, error) {
  58. panic("not implemented") // TODO: Implement
  59. }
  60. func (p *proxyContainerApi) Exec(_ context.Context, _ *v1.ExecRequest) (*v1.ExecResponse, error) {
  61. panic("not implemented") // TODO: Implement
  62. }