|
|
@@ -0,0 +1,65 @@
|
|
|
+package context
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "io/ioutil"
|
|
|
+ "path/filepath"
|
|
|
+
|
|
|
+ "github.com/opencontainers/go-digest"
|
|
|
+)
|
|
|
+
|
|
|
+const (
|
|
|
+ contextsDir = "contexts"
|
|
|
+ metadataDir = "meta"
|
|
|
+ metaFile = "meta.json"
|
|
|
+)
|
|
|
+
|
|
|
+// ContextStoreDir returns the directory the docker contexts are stored in
|
|
|
+func ContextStoreDir() string {
|
|
|
+ return filepath.Join(ConfigDir, contextsDir)
|
|
|
+}
|
|
|
+
|
|
|
+type Metadata struct {
|
|
|
+ Name string `json:",omitempty"`
|
|
|
+ Metadata TypeContext `json:",omitempty"`
|
|
|
+ Endpoints map[string]interface{} `json:",omitempty"`
|
|
|
+}
|
|
|
+
|
|
|
+type TypeContext struct {
|
|
|
+ Type string
|
|
|
+}
|
|
|
+
|
|
|
+func GetContext() (*Metadata, error) {
|
|
|
+ config, err := LoadConfigFile()
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ r := &Metadata{
|
|
|
+ Endpoints: make(map[string]interface{}),
|
|
|
+ }
|
|
|
+
|
|
|
+ if ContextName == "" {
|
|
|
+ ContextName = config.CurrentContext
|
|
|
+ }
|
|
|
+ if ContextName == "" || ContextName == "default" {
|
|
|
+ r.Metadata.Type = "Moby"
|
|
|
+ return r, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ meta := filepath.Join(ConfigDir, contextsDir, metadataDir, contextdirOf(ContextName), metaFile)
|
|
|
+ bytes, err := ioutil.ReadFile(meta)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := json.Unmarshal(bytes, r); err != nil {
|
|
|
+ return r, err
|
|
|
+ }
|
|
|
+
|
|
|
+ r.Name = ContextName
|
|
|
+ return r, nil
|
|
|
+}
|
|
|
+
|
|
|
+func contextdirOf(name string) string {
|
|
|
+ return digest.FromString(name).Encoded()
|
|
|
+}
|