lxd/container_lxc.go
func (c *containerLXC) Freeze() error {
	ctxMap := log.Ctx{
		"project":   c.project,
		"name":      c.name,
		"created":   c.creationDate,
		"ephemeral": c.ephemeral,
		"used":      c.lastUsedDate}

	// Check that we're running
	if !c.IsRunning() {
		return fmt.Errorf("The container isn't running")
	}

	// Check if the CGroup is available
	if !c.state.OS.CGroupFreezerController {
		logger.Info("Unable to freeze container (lack of kernel support)", ctxMap)
		return nil
	}

	// Check that we're not already frozen
	if c.IsFrozen() {
		return fmt.Errorf("The container is already frozen")
	}

	logger.Info("Freezing container", ctxMap)

	// Load the go-lxc struct
	err := c.initLXC(false)
	if err != nil {
		ctxMap["err"] = err
		logger.Error("Failed freezing container", ctxMap)
		return err
	}

	err = c.c.Freeze()
	if err != nil {
		ctxMap["err"] = err
		logger.Error("Failed freezing container", ctxMap)
		return err
	}

	logger.Info("Froze container", ctxMap)
	eventSendLifecycle(c.project, "container-paused",
		fmt.Sprintf("/1.0/containers/%s", c.name), nil)

	return err
}
func (c *containerLXC) Freeze() error {
	ctxMap := log.Ctx{
		"project":   c.project,
		"name":      c.name,
		"created":   c.creationDate,
		"ephemeral": c.ephemeral,
		"used":      c.lastUsedDate}

	// Check that we're running
	if !c.IsRunning() {
		return fmt.Errorf("The container isn't running")
	}

	// Check if the CGroup is available
	if !c.state.OS.CGroupFreezerController {
		logger.Info("Unable to freeze container (lack of kernel support)", ctxMap)
		return nil
	}

	// Check that we're not already frozen
	if c.IsFrozen() {
		return fmt.Errorf("The container is already frozen")
	}

	logger.Info("Freezing container", ctxMap)

	// Load the go-lxc struct
	err := c.initLXC(false)
	if err != nil {
		ctxMap["err"] = err
		logger.Error("Failed freezing container", ctxMap)
		return err
	}

	err = c.c.Freeze()
	if err != nil {
		ctxMap["err"] = err
		logger.Error("Failed freezing container", ctxMap)
		return err
	}

	logger.Info("Froze container", ctxMap)
	eventSendLifecycle(c.project, "container-paused",
		fmt.Sprintf("/1.0/containers/%s", c.name), nil)

	return err
}
func ( c * containerLXC ) Freeze ( ) error { ctxMap := log . Ctx { " " : c . project , " " : c . name , " " : c . creationDate , " " : c . ephemeral , " " : c . lastUsedDate } // Check that we're running if ! c . IsRunning ( ) { return fmt . Errorf ( " " ) } // Check if the CGroup is available if ! c . state . OS . CGroupFreezerController { logger . Info ( " " , ctxMap ) return nil } // Check that we're not already frozen if c . IsFrozen ( ) { return fmt . Errorf ( " " ) } logger . Info ( " " , ctxMap ) // Load the go-lxc struct err := c . initLXC ( false ) if err != nil { ctxMap [ " " ] = err logger . Error ( " " , ctxMap ) return err } err = c . c . Freeze ( ) if err != nil { ctxMap [ " " ] = err logger . Error ( " " , ctxMap ) return err } logger . Info ( " " , ctxMap ) eventSendLifecycle ( c . project , " " , fmt . Sprintf ( " " , c . name ) , nil ) return err }
// Freezer functions
Freezer functions