-
Notifications
You must be signed in to change notification settings - Fork 13
/
environment.go
159 lines (130 loc) · 3.43 KB
/
environment.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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package environment
import (
"os"
"strconv"
"github.com/pkg/errors"
"github.com/threefoldtech/zos/pkg"
"github.com/threefoldtech/zos/pkg/kernel"
)
// Environment holds information about running environment of a node
// it defines the different constant based on the running mode (dev, test, prod)
type Environment struct {
RunningMode RunningMode
BcdbURL string
BcdbPassword string
FlistURL string
BinRepo string
FarmerID pkg.FarmID
Orphan bool
}
// RunningMode type
type RunningMode string
func (r RunningMode) String() string {
switch r {
case RunningDev:
return "development"
case RunningMain:
return "production"
case RunningTest:
return "testing"
}
return "unknown"
}
// Possible running mode of a node
const (
RunningDev RunningMode = "dev"
RunningTest RunningMode = "test"
RunningMain RunningMode = "prod"
// Orphanage is the default farmid where nodes are registered
// if no farmid were specified on the kernel command line
OrphanageDev pkg.FarmID = 0
OrphanageTest pkg.FarmID = 0
OrphanageMain pkg.FarmID = 0
)
var (
envDev = Environment{
RunningMode: RunningDev,
BcdbURL: "https://explorer.devnet.grid.tf/explorer",
FlistURL: "zdb://hub.grid.tf:9900",
BinRepo: "tf-zos-bins.dev",
}
envTest = Environment{
RunningMode: RunningTest,
BcdbURL: "https://explorer.testnet.grid.tf/explorer",
FlistURL: "zdb://hub.grid.tf:9900",
BinRepo: "tf-zos-bins.test",
}
// same as testnet for now. will be updated the day of the launch of production network
envProd = Environment{
RunningMode: RunningMain,
BcdbURL: "https://explorer.grid.tf/explorer",
FlistURL: "zdb://hub.grid.tf:9900",
BinRepo: "tf-zos-bins",
}
)
// Get return the running environment of the node
func Get() (Environment, error) {
params := kernel.GetParams()
return getEnvironmentFromParams(params)
}
func getEnvironmentFromParams(params kernel.Params) (Environment, error) {
var runmode []string
var env Environment
runmode, found := params.Get("runmode")
if !found || len(runmode) < 1 {
// Fallback to default production mode
runmode = []string{string(RunningMain)}
}
switch RunningMode(runmode[0]) {
case RunningDev:
env = envDev
case RunningTest:
env = envTest
case RunningMain:
env = envProd
default:
env = envProd
}
if RunningMode(runmode[0]) == RunningDev {
//allow override of the bcdb url in dev mode
bcdb, found := params.Get("bcdb")
if found && len(bcdb) >= 1 {
env.BcdbURL = bcdb[0]
}
}
farmerID, found := params.Get("farmer_id")
if !found || len(farmerID) < 1 || farmerID[0] == "" {
// fmt.Println("Warning: no valid farmer_id found in kernel parameter, fallback to orphanage")
env.Orphan = true
switch env.RunningMode {
case RunningDev:
env.FarmerID = OrphanageDev
case RunningTest:
env.FarmerID = OrphanageTest
case RunningMain:
env.FarmerID = OrphanageMain
}
} else {
env.Orphan = false
id, err := strconv.ParseUint(farmerID[0], 10, 64)
if err != nil {
return env, errors.Wrap(err, "wrong format for farm ID")
}
env.FarmerID = pkg.FarmID(id)
}
// Checking if there environment variable
// override default settings
if e := os.Getenv("ZOS_BCDB_URL"); e != "" {
env.BcdbURL = e
}
if e := os.Getenv("ZOS_BCDB_PASSWORD"); e != "" {
env.BcdbPassword = e
}
if e := os.Getenv("ZOS_FLIST_URL"); e != "" {
env.FlistURL = e
}
if e := os.Getenv("ZOS_BIN_REPO"); e != "" {
env.BinRepo = e
}
return env, nil
}