store.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package context
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "path/filepath"
  6. "github.com/opencontainers/go-digest"
  7. )
  8. const (
  9. contextsDir = "contexts"
  10. metadataDir = "meta"
  11. metaFile = "meta.json"
  12. )
  13. // ContextStoreDir returns the directory the docker contexts are stored in
  14. func ContextStoreDir() string {
  15. return filepath.Join(ConfigDir, contextsDir)
  16. }
  17. type Metadata struct {
  18. Name string `json:",omitempty"`
  19. Metadata TypeContext `json:",omitempty"`
  20. Endpoints map[string]interface{} `json:",omitempty"`
  21. }
  22. type TypeContext struct {
  23. Type string
  24. }
  25. func GetContext() (*Metadata, error) {
  26. config, err := LoadConfigFile()
  27. if err != nil {
  28. return nil, err
  29. }
  30. r := &Metadata{
  31. Endpoints: make(map[string]interface{}),
  32. }
  33. if ContextName == "" {
  34. ContextName = config.CurrentContext
  35. }
  36. if ContextName == "" || ContextName == "default" {
  37. r.Metadata.Type = "Moby"
  38. return r, nil
  39. }
  40. meta := filepath.Join(ConfigDir, contextsDir, metadataDir, contextdirOf(ContextName), metaFile)
  41. bytes, err := ioutil.ReadFile(meta)
  42. if err != nil {
  43. return nil, err
  44. }
  45. if err := json.Unmarshal(bytes, r); err != nil {
  46. return r, err
  47. }
  48. r.Name = ContextName
  49. return r, nil
  50. }
  51. func contextdirOf(name string) string {
  52. return digest.FromString(name).Encoded()
  53. }