github.com/mheon/docker@v0.11.2-0.20150922122814-44f47903a831/daemon/rename.go (about) 1 package daemon 2 3 import ( 4 "fmt" 5 ) 6 7 // ContainerRename changes the name of a container, using the oldName 8 // to find the container. An error is returned if newName is already 9 // reserved. 10 func (daemon *Daemon) ContainerRename(oldName, newName string) error { 11 if oldName == "" || newName == "" { 12 return fmt.Errorf("Neither old nor new names may be empty") 13 } 14 15 container, err := daemon.Get(oldName) 16 if err != nil { 17 return err 18 } 19 20 oldName = container.Name 21 22 container.Lock() 23 defer container.Unlock() 24 if newName, err = daemon.reserveName(container.ID, newName); err != nil { 25 return fmt.Errorf("Error when allocating new name: %s", err) 26 } 27 28 container.Name = newName 29 30 undo := func() { 31 container.Name = oldName 32 daemon.reserveName(container.ID, oldName) 33 daemon.containerGraphDB.Delete(newName) 34 } 35 36 if err := daemon.containerGraphDB.Delete(oldName); err != nil { 37 undo() 38 return fmt.Errorf("Failed to delete container %q: %v", oldName, err) 39 } 40 41 if err := container.toDisk(); err != nil { 42 undo() 43 return err 44 } 45 46 container.logEvent("rename") 47 return nil 48 }