-
Notifications
You must be signed in to change notification settings - Fork 55
/
target.go
201 lines (177 loc) · 4.93 KB
/
target.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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
// © 2022 Nokia.
//
// This code is a Contribution to the gNMIc project (“Work”) made under the Google Software Grant and Corporate Contributor License Agreement (“CLA”) and governed by the Apache License 2.0.
// No other rights or licenses in or to any of Nokia’s intellectual property are granted for any other purpose.
// This code is provided on an “as is” basis without any warranties of any kind.
//
// SPDX-License-Identifier: Apache-2.0
package api
import (
"crypto/tls"
"errors"
"strings"
"time"
"github.com/AlekSi/pointer"
"github.com/openconfig/gnmic/pkg/api/target"
"github.com/openconfig/gnmic/pkg/api/types"
)
var DefaultTargetTimeout = 10 * time.Second
type TargetOption func(*target.Target) error
func NewTarget(opts ...TargetOption) (*target.Target, error) {
t := target.NewTarget(&types.TargetConfig{})
var err error
for _, o := range opts {
err = o(t)
if err != nil {
return nil, err
}
}
if t.Config.Address == "" {
return nil, errors.New("missing address")
}
if t.Config.Name == "" {
t.Config.Name = strings.Split(t.Config.Address, ",")[0]
}
if t.Config.Timeout == 0 {
t.Config.Timeout = DefaultTargetTimeout
}
if t.Config.Insecure == nil && t.Config.SkipVerify == nil {
t.Config.Insecure = pointer.ToBool(false)
t.Config.SkipVerify = pointer.ToBool(false)
}
if t.Config.SkipVerify == nil {
t.Config.SkipVerify = pointer.ToBool(false)
}
if t.Config.Insecure == nil {
t.Config.Insecure = pointer.ToBool(false)
}
return t, nil
}
// Name sets the target name.
func Name(name string) TargetOption {
return func(t *target.Target) error {
t.Config.Name = name
return nil
}
}
// Address sets the target address.
// This Option can be set multiple times.
func Address(addr string) TargetOption {
return func(t *target.Target) error {
if t.Config.Address != "" {
t.Config.Address = strings.Join([]string{t.Config.Address, addr}, ",")
return nil
}
t.Config.Address = addr
return nil
}
}
// Username sets the target Username.
func Username(username string) TargetOption {
return func(t *target.Target) error {
t.Config.Username = pointer.ToString(username)
return nil
}
}
// Password sets the target Password.
func Password(password string) TargetOption {
return func(t *target.Target) error {
t.Config.Password = pointer.ToString(password)
return nil
}
}
// Timeout sets the gNMI client creation timeout.
func Timeout(timeout time.Duration) TargetOption {
return func(t *target.Target) error {
t.Config.Timeout = timeout
return nil
}
}
// Insecure sets the option to create a gNMI client with an
// insecure gRPC connection
func Insecure(i bool) TargetOption {
return func(t *target.Target) error {
t.Config.Insecure = pointer.ToBool(i)
return nil
}
}
// SkipVerify sets the option to create a gNMI client with a
// secure gRPC connection without verifying the target's certificates.
func SkipVerify(i bool) TargetOption {
return func(t *target.Target) error {
t.Config.SkipVerify = pointer.ToBool(i)
return nil
}
}
// TLSCA sets that path towards the TLS certificate authority file.
func TLSCA(tlsca string) TargetOption {
return func(t *target.Target) error {
t.Config.TLSCA = pointer.ToString(tlsca)
return nil
}
}
// TLSCert sets that path towards the TLS certificate file.
func TLSCert(cert string) TargetOption {
return func(t *target.Target) error {
t.Config.TLSCert = pointer.ToString(cert)
return nil
}
}
// TLSKey sets that path towards the TLS key file.
func TLSKey(key string) TargetOption {
return func(t *target.Target) error {
t.Config.TLSKey = pointer.ToString(key)
return nil
}
}
// TLSMinVersion sets the TLS minimum version used during the TLS handshake.
func TLSMinVersion(v string) TargetOption {
return func(t *target.Target) error {
t.Config.TLSMinVersion = v
return nil
}
}
// TLSMaxVersion sets the TLS maximum version used during the TLS handshake.
func TLSMaxVersion(v string) TargetOption {
return func(t *target.Target) error {
t.Config.TLSMaxVersion = v
return nil
}
}
// TLSVersion sets the desired TLS version used during the TLS handshake.
func TLSVersion(v string) TargetOption {
return func(t *target.Target) error {
t.Config.TLSVersion = v
return nil
}
}
// TLSConfig
func TLSConfig(tlsconfig *tls.Config) TargetOption {
return func(t *target.Target) error {
t.Config.SetTLSConfig(tlsconfig)
return nil
}
}
// LogTLSSecret, if set to true,
// enables logging of the TLS master key.
func LogTLSSecret(b bool) TargetOption {
return func(t *target.Target) error {
t.Config.LogTLSSecret = pointer.ToBool(b)
return nil
}
}
// Gzip, if set to true,
// adds gzip compression to the gRPC connection.
func Gzip(b bool) TargetOption {
return func(t *target.Target) error {
t.Config.Gzip = pointer.ToBool(b)
return nil
}
}
// Token sets the per RPC credentials for all RPC calls.
func Token(token string) TargetOption {
return func(t *target.Target) error {
t.Config.Token = pointer.ToString(token)
return nil
}
}