-
Notifications
You must be signed in to change notification settings - Fork 7
/
variables.go
122 lines (99 loc) · 2.83 KB
/
variables.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package domain
import (
"fmt"
"github.com/flowci/flow-agent-x/util"
)
const (
VarServerUrl = "FLOWCI_SERVER_URL"
VarAgentDebug = "FLOWCI_AGENT_DEBUG" // boolean
VarAgentToken = "FLOWCI_AGENT_TOKEN"
VarAgentPort = "FLOWCI_AGENT_PORT"
VarAgentWorkspace = "FLOWCI_AGENT_WORKSPACE"
VarAgentJobDir = "FLOWCI_AGENT_JOB_DIR"
VarAgentPluginDir = "FLOWCI_AGENT_PLUGIN_DIR"
VarAgentLogDir = "FLOWCI_AGENT_LOG_DIR"
VarAgentVolumes = "FLOWCI_AGENT_VOLUMES"
VarAgentDockerNetwork = "FLOWCI_AGENT_DOCKER_NETWORK"
VarAgentDockerAuth = "FLOWCI_AGENT_DOCKER_AUTH" // for private docker repo auth
VarAgentEnableProfile = "FLOWCI_AGENT_PROFILE_ENABLED" // boolean
VarAgentFromDocker = "FLOWCI_DOCKER_AGENT" // boolean
VarK8sEnabled = "FLOWCI_AGENT_K8S_ENABLED" // boolean
VarK8sInCluster = "FLOWCI_AGENT_K8S_IN_CLUSTER" // boolean
VarK8sNodeName = "K8S_NODE_NAME"
VarK8sPodName = "K8S_POD_NAME"
VarK8sPodIp = "K8S_POD_IP"
VarK8sNamespace = "K8S_NAMESPACE"
VarAgentIpPattern = "FLOWCI_AGENT_IP_%s" // ip address of agent host
VarExportContainerIdPattern = "export CONTAINER_ID_%d=%s" // container id , d=index of dockers
VarExportContainerIpPattern = "export CONTAINER_IP_%d=%s" // container ip , d=index of dockers
)
// Variables applied for environment variable as key, value
type Variables map[string]string
func NewVariables() Variables {
return Variables{
"_TYPE_": "_string_",
}
}
// NilOrEmpty detect variable is nil or empty
func NilOrEmpty(v Variables) bool {
return v == nil || v.IsEmpty()
}
func ConnectVars(a Variables, b Variables) Variables {
if a == nil {
a = Variables{}
}
if b == nil {
b = Variables{}
}
vars := make(Variables, a.Size()+b.Size())
for k, val := range a {
vars[k] = val
}
for k, val := range b {
vars[k] = val
}
return vars
}
func (v Variables) Copy() Variables {
copied := make(Variables, v.Size())
for k, val := range v {
copied[k] = val
}
return copied
}
func (v Variables) Size() int {
return len(v)
}
// Resolve to gain actual value from env variables
func (v Variables) Resolve() Variables {
// resolve from system env vars
for key, val := range v {
val = util.ParseString(val)
v[key] = val
}
// resolve from current env vars
for key, val := range v {
val = util.ParseStringWithSource(val, v)
v[key] = val
}
return v
}
// ToStringArray convert variables map to key=value string array
func (v Variables) ToStringArray() []string {
array := make([]string, v.Size())
index := 0
for key, val := range v {
array[index] = fmt.Sprintf("%s=%s", key, val)
index++
}
return array
}
// IsEmpty to check is empty variables
func (v Variables) IsEmpty() bool {
return len(v) == 0
}
func (v Variables) AddMapVars(vars map[string]string) {
for key, value := range vars {
v[key] = value
}
}