grim/convey

Rename convey-dev.yml to dev-convey.yml so that the clean task won't delete it
// Convey
// Copyright 2016-2018 Gary Kramlich <grim@reaperworld.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package runtime
import (
"sync"
)
type Containers struct {
running map[string]struct{}
detached map[string]struct{}
mutex sync.RWMutex
}
func NewContainers() *Containers {
return &Containers{
running: map[string]struct{}{},
detached: map[string]struct{}{},
}
}
// MarkRunning will add the given container name into the list
// of containers currently running. This falls through directly to
// the root state so that states wrapping the global one do not have
// to sync additional running container names.
func (c *Containers) MarkRunning(name string) {
c.mutex.Lock()
defer c.mutex.Unlock()
c.running[name] = struct{}{}
}
// UnmarkRunning removes a container from the list of running containers.
func (c *Containers) UnmarkRunning(name string) {
c.mutex.Lock()
defer c.mutex.Unlock()
delete(c.running, name)
}
// GetRunning returns a list of all running containers.
func (c *Containers) GetRunning() []string {
c.mutex.RLock()
defer c.mutex.RUnlock()
names := []string{}
for key := range c.running {
names = append(names, key)
}
return names
}
// MarkDetached will add the given container name into the list
// of containers running in detached mode which must be shut down
// at the end of the plan. This falls through directly to the root
// state so that states wrapping the global one do not have to sync
// additional detached container names.
func (c *Containers) MarkDetached(name string) {
c.mutex.Lock()
defer c.mutex.Unlock()
c.detached[name] = struct{}{}
}
// GetDetached returns a list of all detached containers.
func (c *Containers) GetDetached() []string {
c.mutex.RLock()
defer c.mutex.RUnlock()
names := []string{}
for key := range c.detached {
names = append(names, key)
}
return names
}