Browse code

store hostConfig to /tmp while container is running

Victor Vieux authored on 2013/07/02 21:19:25
Showing 2 changed files
... ...
@@ -265,6 +265,29 @@ func (container *Container) ToDisk() (err error) {
265 265
 	return ioutil.WriteFile(container.jsonPath(), data, 0666)
266 266
 }
267 267
 
268
+func (container *Container) ReadTempHostConfig() (*HostConfig, error) {
269
+	data, err := ioutil.ReadFile(container.hostConfigPath())
270
+	if err != nil {
271
+		return &HostConfig{}, err
272
+	}
273
+	hostConfig := &HostConfig{}
274
+	if err := json.Unmarshal(data, hostConfig); err != nil {
275
+		return &HostConfig{}, err
276
+	}
277
+	return hostConfig, nil
278
+}
279
+
280
+func (container *Container) SaveHostConfig(hostConfig *HostConfig) (err error) {
281
+	if hostConfig == nil {
282
+		return os.Remove(container.hostConfigPath())
283
+	}
284
+	data, err := json.Marshal(hostConfig)
285
+	if err != nil {
286
+		return
287
+	}
288
+	return ioutil.WriteFile(container.hostConfigPath(), data, 0666)
289
+}
290
+
268 291
 func (container *Container) generateLXCConfig() error {
269 292
 	fo, err := os.Create(container.lxcConfigPath())
270 293
 	if err != nil {
... ...
@@ -636,6 +659,7 @@ func (container *Container) Start(hostConfig *HostConfig) error {
636 636
 	container.waitLock = make(chan struct{})
637 637
 
638 638
 	container.ToDisk()
639
+	container.SaveHostConfig(hostConfig)
639 640
 	go container.monitor()
640 641
 	return nil
641 642
 }
... ...
@@ -791,6 +815,8 @@ func (container *Container) monitor() {
791 791
 		// FIXME: why are we serializing running state to disk in the first place?
792 792
 		//log.Printf("%s: Failed to dump configuration to the disk: %s", container.ID, err)
793 793
 	}
794
+	// Remove temp host config
795
+	container.SaveHostConfig(nil)
794 796
 }
795 797
 
796 798
 func (container *Container) kill() error {
... ...
@@ -970,6 +996,10 @@ func (container *Container) ReadLog(name string) (io.Reader, error) {
970 970
 	return os.Open(container.logPath(name))
971 971
 }
972 972
 
973
+func (container *Container) hostConfigPath() string {
974
+	return path.Join("/tmp", container.ID+".config.host")
975
+}
976
+
973 977
 func (container *Container) jsonPath() string {
974 978
 	return path.Join(container.root, "config.json")
975 979
 }
... ...
@@ -145,7 +145,7 @@ func (runtime *Runtime) Register(container *Container) error {
145 145
 				container.State.Ghost = false
146 146
 				container.State.setStopped(0)
147 147
 				// assume empty host config
148
-				hostConfig := &HostConfig{}
148
+				hostConfig, _ := container.ReadTempHostConfig()
149 149
 				if err := container.Start(hostConfig); err != nil {
150 150
 					return err
151 151
 				}
... ...
@@ -156,6 +156,8 @@ func (runtime *Runtime) Register(container *Container) error {
156 156
 				if err := container.ToDisk(); err != nil {
157 157
 					return err
158 158
 				}
159
+				// remove temp host config
160
+				container.SaveHostConfig(nil)
159 161
 			}
160 162
 		}
161 163
 	}