/
client.go
72 lines (63 loc) · 2.21 KB
/
client.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
package setup
import (
"fmt"
"net/url"
"os"
"github.com/containerum/chkit/pkg/cli/mode"
"github.com/containerum/chkit/pkg/client"
"github.com/containerum/chkit/pkg/configuration"
"github.com/containerum/chkit/pkg/context"
"github.com/containerum/chkit/pkg/model"
"github.com/containerum/chkit/pkg/util/fingerprint"
"github.com/sirupsen/logrus"
)
type CertPolicy string
const (
DoNotAllowSelfSignedTLSCerts CertPolicy = ""
AllowSelfSignedTLSCerts CertPolicy = "allow self signed certs"
)
func (certPolicy CertPolicy) String() string {
return string(certPolicy)
}
func Client(ctx *context.Context, certPolicy CertPolicy) error {
var logger = ctx.Log.Component("client setup")
logger.Debugf("START")
defer logger.Debugf("END")
ctx.GetClient().Fingerprint = fingerpint.Fingerprint()
tokens, err := configuration.LoadTokens(ctx)
if err != nil && !os.IsNotExist(err) {
return ErrUnableToLoadTokens.Wrap(err)
} else if os.IsNotExist(err) {
if err = configuration.SaveTokens(ctx, model.Tokens{}); err != nil {
logrus.WithError(ErrUnableToSaveTokens.Wrap(err)).Errorf("unable to setup config")
return ErrUnableToSaveTokens.Wrap(err)
}
}
ctx.GetClient().Tokens = tokens
if _, err := url.Parse(ctx.GetClient().APIaddr); err != nil {
logrus.Debugf("invalid API url: %q", ctx.GetClient().APIaddr)
return ErrInvalidAPIurl.Wrap(err)
}
if ctx.GetClient().Password == "" || ctx.GetClient().Username == "" {
logrus.Debugf("invalid username or pass")
return ErrInvalidUserInfo
}
// ctx.SetSelfSignedTLSRule(certPolicy == AllowSelfSignedTLSCerts)
if mode.DEBUG && !mode.MOCK {
logger.Debugf("Using test API: %q", ctx.GetClient().APIaddr)
// ctx.GetClient().Log = ctx.Log.Component("kube-client")
err = ctx.GetClient().Init(chClient.WithTestAPI)
} else if mode.DEBUG && mode.MOCK {
logger.Debugf("Using mock API")
err = ctx.GetClient().Init(chClient.WithMock)
} else if !mode.DEBUG {
logger.Debugf("Using production API: %v", ctx.GetClient().APIaddr)
err = ctx.GetClient().Init(chClient.WithCommonAPI)
} else {
panic(fmt.Sprintf("[setup.Client] invalid client mode state: DEBUG:%v MOCK:%v", mode.DEBUG, mode.MOCK))
}
if err != nil {
logger.WithError(err).Errorf("unable to init client")
}
return nil
}