8
8
"context"
9
9
"fmt"
10
10
"io"
11
+ "net/http"
11
12
"os"
12
13
"strconv"
13
14
"strings"
@@ -21,6 +22,7 @@ import (
21
22
"github.com/pkg/errors"
22
23
"github.com/prometheus/common/model"
23
24
"github.com/thanos-io/objstore"
25
+ "github.com/thanos-io/objstore/exthttp"
24
26
"gopkg.in/yaml.v2"
25
27
)
26
28
@@ -37,33 +39,35 @@ var DefaultConfig = Config{
37
39
Retries : 3 ,
38
40
ConnectTimeout : model .Duration (10 * time .Second ),
39
41
Timeout : model .Duration (5 * time .Minute ),
42
+ HTTPConfig : exthttp .DefaultHTTPConfig ,
40
43
}
41
44
42
45
type Config struct {
43
- AuthVersion int `yaml:"auth_version"`
44
- AuthUrl string `yaml:"auth_url"`
45
- Username string `yaml:"username"`
46
- UserDomainName string `yaml:"user_domain_name"`
47
- UserDomainID string `yaml:"user_domain_id"`
48
- UserId string `yaml:"user_id"`
49
- Password string `yaml:"password"`
50
- DomainId string `yaml:"domain_id"`
51
- DomainName string `yaml:"domain_name"`
52
- ApplicationCredentialID string `yaml:"application_credential_id"`
53
- ApplicationCredentialName string `yaml:"application_credential_name"`
54
- ApplicationCredentialSecret string `yaml:"application_credential_secret"`
55
- ProjectID string `yaml:"project_id"`
56
- ProjectName string `yaml:"project_name"`
57
- ProjectDomainID string `yaml:"project_domain_id"`
58
- ProjectDomainName string `yaml:"project_domain_name"`
59
- RegionName string `yaml:"region_name"`
60
- ContainerName string `yaml:"container_name"`
61
- ChunkSize int64 `yaml:"large_object_chunk_size"`
62
- SegmentContainerName string `yaml:"large_object_segments_container_name"`
63
- Retries int `yaml:"retries"`
64
- ConnectTimeout model.Duration `yaml:"connect_timeout"`
65
- Timeout model.Duration `yaml:"timeout"`
66
- UseDynamicLargeObjects bool `yaml:"use_dynamic_large_objects"`
46
+ AuthVersion int `yaml:"auth_version"`
47
+ AuthUrl string `yaml:"auth_url"`
48
+ Username string `yaml:"username"`
49
+ UserDomainName string `yaml:"user_domain_name"`
50
+ UserDomainID string `yaml:"user_domain_id"`
51
+ UserId string `yaml:"user_id"`
52
+ Password string `yaml:"password"`
53
+ DomainId string `yaml:"domain_id"`
54
+ DomainName string `yaml:"domain_name"`
55
+ ApplicationCredentialID string `yaml:"application_credential_id"`
56
+ ApplicationCredentialName string `yaml:"application_credential_name"`
57
+ ApplicationCredentialSecret string `yaml:"application_credential_secret"`
58
+ ProjectID string `yaml:"project_id"`
59
+ ProjectName string `yaml:"project_name"`
60
+ ProjectDomainID string `yaml:"project_domain_id"`
61
+ ProjectDomainName string `yaml:"project_domain_name"`
62
+ RegionName string `yaml:"region_name"`
63
+ ContainerName string `yaml:"container_name"`
64
+ ChunkSize int64 `yaml:"large_object_chunk_size"`
65
+ SegmentContainerName string `yaml:"large_object_segments_container_name"`
66
+ Retries int `yaml:"retries"`
67
+ ConnectTimeout model.Duration `yaml:"connect_timeout"`
68
+ Timeout model.Duration `yaml:"timeout"`
69
+ UseDynamicLargeObjects bool `yaml:"use_dynamic_large_objects"`
70
+ HTTPConfig exthttp.HTTPConfig `yaml:"http_config"`
67
71
}
68
72
69
73
func parseConfig (conf []byte ) (* Config , error ) {
@@ -101,6 +105,7 @@ func configFromEnv() (*Config, error) {
101
105
ConnectTimeout : model .Duration (c .ConnectTimeout ),
102
106
Timeout : model .Duration (c .Timeout ),
103
107
UseDynamicLargeObjects : false ,
108
+ HTTPConfig : DefaultConfig .HTTPConfig ,
104
109
}
105
110
if os .Getenv ("SWIFT_CHUNK_SIZE" ) != "" {
106
111
var err error
@@ -115,7 +120,7 @@ func configFromEnv() (*Config, error) {
115
120
return & config , nil
116
121
}
117
122
118
- func connectionFromConfig (sc * Config ) * swift.Connection {
123
+ func connectionFromConfig (sc * Config , rt http. RoundTripper ) * swift.Connection {
119
124
connection := swift.Connection {
120
125
AuthVersion : sc .AuthVersion ,
121
126
AuthUrl : sc .AuthUrl ,
@@ -135,6 +140,7 @@ func connectionFromConfig(sc *Config) *swift.Connection {
135
140
Retries : sc .Retries ,
136
141
ConnectTimeout : time .Duration (sc .ConnectTimeout ),
137
142
Timeout : time .Duration (sc .Timeout ),
143
+ Transport : rt ,
138
144
}
139
145
return & connection
140
146
}
@@ -173,7 +179,21 @@ func ensureContainer(connection *swift.Connection, name string, createIfNotExist
173
179
}
174
180
175
181
func NewContainerFromConfig (logger log.Logger , sc * Config , createContainer bool ) (* Container , error ) {
176
- connection := connectionFromConfig (sc )
182
+
183
+ // Check if a roundtripper has been set in the config
184
+ // otherwise build the default transport.
185
+ var rt http.RoundTripper
186
+ if sc .HTTPConfig .Transport != nil {
187
+ rt = sc .HTTPConfig .Transport
188
+ } else {
189
+ var err error
190
+ rt , err = exthttp .DefaultTransport (sc .HTTPConfig )
191
+ if err != nil {
192
+ return nil , err
193
+ }
194
+ }
195
+
196
+ connection := connectionFromConfig (sc , rt )
177
197
if err := connection .Authenticate (); err != nil {
178
198
return nil , errors .Wrap (err , "authentication" )
179
199
}
0 commit comments