mirror of
https://github.com/coreos/ignition.git
synced 2026-02-06 18:47:54 +01:00
Rework fetch/resource to automatically append required headers
Rather than having each platform provider pass down `resource.ConfigHeaders`, automatically inject it. Then each platform only needs to pass additional headers, which in most cases is none. Unexport `configHeaders` then. This also avoids mutating a global variable (!). Queue obligatory crying for 3 seconds that this code isn't Rust. Prep for further work around headers.
This commit is contained in:
@@ -272,9 +272,7 @@ func (e *Engine) fetchReferencedConfig(cfgRef types.ConfigReference) (types.Conf
|
||||
if err != nil {
|
||||
return types.Config{}, err
|
||||
}
|
||||
rawCfg, err := e.Fetcher.FetchToBuffer(*u, resource.FetchOptions{
|
||||
Headers: resource.ConfigHeaders,
|
||||
})
|
||||
rawCfg, err := e.Fetcher.FetchToBuffer(*u, resource.FetchOptions{})
|
||||
if err != nil {
|
||||
return types.Config{}, err
|
||||
}
|
||||
|
||||
@@ -36,9 +36,7 @@ var (
|
||||
)
|
||||
|
||||
func FetchConfig(f *resource.Fetcher) (types.Config, report.Report, error) {
|
||||
data, err := f.FetchToBuffer(userdataUrl, resource.FetchOptions{
|
||||
Headers: resource.ConfigHeaders,
|
||||
})
|
||||
data, err := f.FetchToBuffer(userdataUrl, resource.FetchOptions{})
|
||||
if err != nil && err != resource.ErrNotFound {
|
||||
return types.Config{}, report.Report{}, err
|
||||
}
|
||||
|
||||
@@ -41,9 +41,7 @@ var (
|
||||
)
|
||||
|
||||
func FetchConfig(f *resource.Fetcher) (types.Config, report.Report, error) {
|
||||
data, err := f.FetchToBuffer(userdataUrl, resource.FetchOptions{
|
||||
Headers: resource.ConfigHeaders,
|
||||
})
|
||||
data, err := f.FetchToBuffer(userdataUrl, resource.FetchOptions{})
|
||||
if err != nil && err != resource.ErrNotFound {
|
||||
return types.Config{}, report.Report{}, err
|
||||
}
|
||||
|
||||
@@ -204,8 +204,6 @@ func fetchConfigFromMetadataService(f *resource.Fetcher) ([]byte, error) {
|
||||
Path: "/latest/user-data",
|
||||
}
|
||||
|
||||
res, err := f.FetchToBuffer(metadataServiceUrl, resource.FetchOptions{
|
||||
Headers: resource.ConfigHeaders,
|
||||
})
|
||||
res, err := f.FetchToBuffer(metadataServiceUrl, resource.FetchOptions{})
|
||||
return res, err
|
||||
}
|
||||
|
||||
@@ -46,9 +46,7 @@ func FetchConfig(f *resource.Fetcher) (types.Config, report.Report, error) {
|
||||
return types.Config{}, report.Report{}, providers.ErrNoProvider
|
||||
}
|
||||
|
||||
data, err := f.FetchToBuffer(*url, resource.FetchOptions{
|
||||
Headers: resource.ConfigHeaders,
|
||||
})
|
||||
data, err := f.FetchToBuffer(*url, resource.FetchOptions{})
|
||||
if err != nil {
|
||||
return types.Config{}, report.Report{}, err
|
||||
}
|
||||
|
||||
@@ -36,9 +36,7 @@ var (
|
||||
)
|
||||
|
||||
func FetchConfig(f *resource.Fetcher) (types.Config, report.Report, error) {
|
||||
data, err := f.FetchToBuffer(userdataUrl, resource.FetchOptions{
|
||||
Headers: resource.ConfigHeaders,
|
||||
})
|
||||
data, err := f.FetchToBuffer(userdataUrl, resource.FetchOptions{})
|
||||
if err != nil {
|
||||
return types.Config{}, report.Report{}, err
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package gcp
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/coreos/ignition/v2/config/v3_1_experimental/types"
|
||||
@@ -38,7 +39,7 @@ var (
|
||||
)
|
||||
|
||||
func FetchConfig(f *resource.Fetcher) (types.Config, report.Report, error) {
|
||||
headers := resource.ConfigHeaders
|
||||
headers := make(http.Header)
|
||||
headers.Set(metadataHeaderKey, metadataHeaderVal)
|
||||
data, err := f.FetchToBuffer(userdataUrl, resource.FetchOptions{
|
||||
Headers: headers,
|
||||
|
||||
@@ -131,8 +131,6 @@ func fetchConfigFromDevice(logger *log.Logger, ctx context.Context, path string)
|
||||
}
|
||||
|
||||
func fetchConfigFromMetadataService(f *resource.Fetcher) ([]byte, error) {
|
||||
res, err := f.FetchToBuffer(metadataServiceUrl, resource.FetchOptions{
|
||||
Headers: resource.ConfigHeaders,
|
||||
})
|
||||
res, err := f.FetchToBuffer(metadataServiceUrl, resource.FetchOptions{})
|
||||
return res, err
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ var (
|
||||
func FetchConfig(f *resource.Fetcher) (types.Config, report.Report, error) {
|
||||
// Packet's metadata service returns "Not Acceptable" when queried
|
||||
// with the default Accept header.
|
||||
headers := resource.ConfigHeaders
|
||||
headers := make(http.Header)
|
||||
headers.Set("Accept", "*/*")
|
||||
data, err := f.FetchToBuffer(userdataUrl, resource.FetchOptions{
|
||||
Headers: headers,
|
||||
|
||||
@@ -52,7 +52,7 @@ var (
|
||||
|
||||
// ConfigHeaders are the HTTP headers that should be used when the Ignition
|
||||
// config is being fetched
|
||||
ConfigHeaders = http.Header{
|
||||
configHeaders = http.Header{
|
||||
"Accept-Encoding": []string{"identity"},
|
||||
"Accept": []string{"application/vnd.coreos.ignition+json;version=3.0.0, */*;q=0.1"},
|
||||
}
|
||||
@@ -248,7 +248,21 @@ func (f *Fetcher) fetchFromHTTP(u url.URL, dest io.Writer, opts FetchOptions) er
|
||||
}
|
||||
}
|
||||
|
||||
dataReader, status, ctxCancel, err := f.client.getReaderWithHeader(u.String(), opts.Headers)
|
||||
// TODO use .Clone() when we have a new enough golang
|
||||
// (With Rust, we'd have immutability and wouldn't need to defensively clone)
|
||||
headers := make(http.Header)
|
||||
for k, va := range opts.Headers {
|
||||
for _, v := range va {
|
||||
headers.Add(k, v)
|
||||
}
|
||||
}
|
||||
for k, va := range configHeaders {
|
||||
for _, v := range va {
|
||||
headers.Add(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
dataReader, status, ctxCancel, err := f.client.getReaderWithHeader(u.String(), headers)
|
||||
if ctxCancel != nil {
|
||||
// whatever context getReaderWithHeader created for the request should
|
||||
// be cancelled once we're done reading the response
|
||||
|
||||
Reference in New Issue
Block a user