grim/convey
Clone
Summary
Browse
Changes
Graph
Add a new subtask task
2020-03-02, Gary Kramlich
469b76e1bd24
Add a new subtask task
// 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
}