// DeleteController deletes a replication controller named 'name', requires that the controller // already be stopped func DeleteController(name string, client client.ClientInterface) error { controller, err := client.GetReplicationController(name) if err != nil { return err } if controller.DesiredState.Replicas != 0 { return fmt.Errorf("controller has non-zero replicas (%d)", controller.DesiredState.Replicas) } return client.DeleteReplicationController(name) }
// StopController stops a controller named 'name' by setting replicas to zero func StopController(name string, client client.ClientInterface) error { controller, err := client.GetReplicationController(name) if err != nil { return err } controller.DesiredState.Replicas = 0 controllerOut, err := client.UpdateReplicationController(controller) if err != nil { return err } data, err := yaml.Marshal(controllerOut) if err != nil { return err } fmt.Print(string(data)) return nil }
// Perform a rolling update of a collection of pods. // 'name' points to a replication controller. // 'client' is used for updating pods. // 'updatePeriod' is the time between pod updates. func Update(name string, client client.ClientInterface, updatePeriod time.Duration) error { controller, err := client.GetReplicationController(name) if err != nil { return err } labels := controller.DesiredState.ReplicasInSet podList, err := client.ListPods(labels) if err != nil { return err } for _, pod := range podList.Items { _, err = client.UpdatePod(pod) if err != nil { return err } time.Sleep(updatePeriod) } return nil }
// Perform a rolling update of a collection of pods. // 'name' points to a replication controller. // 'client' is used for updating pods. // 'updatePeriod' is the time between pod updates. func Update(name string, client client.ClientInterface, updatePeriod time.Duration) error { controller, err := client.GetReplicationController(name) if err != nil { return err } s := labels.Set(controller.DesiredState.ReplicaSelector).AsSelector() podList, err := client.ListPods(s) if err != nil { return err } for _, pod := range podList.Items { // We delete the pod here, the controller will recreate it. This will result in pulling // a new Docker image. This isn't a full "update" but its what we support for now. err = client.DeletePod(pod.ID) if err != nil { return err } time.Sleep(updatePeriod) } return nil }