/
commands_runnetwork.go
64 lines (50 loc) · 1.27 KB
/
commands_runnetwork.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//go:build dfrunnetwork
// +build dfrunnetwork
package instructions
import (
"github.com/pkg/errors"
)
const (
NetworkDefault = "default"
NetworkNone = "none"
NetworkHost = "host"
)
var allowedNetwork = map[string]struct{}{
NetworkDefault: {},
NetworkNone: {},
NetworkHost: {},
}
func isValidNetwork(value string) bool {
_, ok := allowedNetwork[value]
return ok
}
var networkKey = "dockerfile/run/network"
func init() {
parseRunPreHooks = append(parseRunPreHooks, runNetworkPreHook)
parseRunPostHooks = append(parseRunPostHooks, runNetworkPostHook)
}
func runNetworkPreHook(cmd *RunCommand, req parseRequest) error {
st := &networkState{}
st.flag = req.flags.AddString("network", NetworkDefault)
cmd.setExternalValue(networkKey, st)
return nil
}
func runNetworkPostHook(cmd *RunCommand, req parseRequest) error {
st := cmd.getExternalValue(networkKey).(*networkState)
if st == nil {
return errors.Errorf("no network state")
}
value := st.flag.Value
if !isValidNetwork(value) {
return errors.Errorf("invalid network mode %q", value)
}
st.networkMode = value
return nil
}
func GetNetwork(cmd *RunCommand) string {
return cmd.getExternalValue(networkKey).(*networkState).networkMode
}
type networkState struct {
flag *Flag
networkMode string
}