소스 검색

Container.SetUserData() and GetUserData(): attach optional user data to a container

Solomon Hykes 12 년 전
부모
커밋
11b65a00c6
1개의 변경된 파일44개의 추가작업 그리고 0개의 파일을 삭제
  1. 44 0
      container.go

+ 44 - 0
container.go

@@ -77,6 +77,50 @@ func loadContainer(containerPath string) (*Container, error) {
 	return container, nil
 	return container, nil
 }
 }
 
 
+func (container *Container) loadUserData() (map[string]string, error) {
+	jsonData, err := ioutil.ReadFile(path.Join(container.Root, "userdata.json"))
+	if err != nil {
+		if os.IsNotExist(err) {
+			return make(map[string]string), nil
+		}
+		return nil, err
+	}
+	data := make(map[string]string)
+	if err := json.Unmarshal(jsonData, &data); err != nil {
+		return nil, err
+	}
+	return data, nil
+}
+
+func (container *Container) saveUserData(data map[string]string) error {
+	jsonData, err := json.Marshal(data)
+	if err != nil {
+		return err
+	}
+	return ioutil.WriteFile(path.Join(container.Root, "userdata.json"), jsonData, 0700)
+}
+
+func (container *Container) SetUserData(key, value string) error {
+	data, err := container.loadUserData()
+	if err != nil {
+		return err
+	}
+	data[key] = value
+	return container.saveUserData(data)
+}
+
+func (container *Container) GetUserData(key string) (string) {
+	data, err := container.loadUserData()
+	if err != nil {
+		return ""
+	}
+	if value, exists := data[key]; exists {
+		return value
+	}
+	return ""
+}
+
+
 func (container *Container) save() (err error) {
 func (container *Container) save() (err error) {
 	data, err := json.Marshal(container)
 	data, err := json.Marshal(container)
 	if err != nil {
 	if err != nil {