Fix userdata/metadata fetch on Packet

This commit is contained in:
Benjamin Gilbert 2020-03-28 10:13:49 -04:00
parent 6ab21c400a
commit e279304633
3 changed files with 84 additions and 1 deletions

View File

@ -73,12 +73,16 @@
Name: ignition Name: ignition
Version: 2.2.1 Version: 2.2.1
Release: 1.git%{shortcommit}%{?dist} Release: 2.git%{shortcommit}%{?dist}
Summary: First boot installer and configuration tool Summary: First boot installer and configuration tool
License: ASL 2.0 and BSD License: ASL 2.0 and BSD
URL: https://%{provider_prefix} URL: https://%{provider_prefix}
Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz
Source1: https://%{dracutprovider_prefix}/archive/%{dracutcommit}/%{dracutrepo}-%{dracutshortcommit}.tar.gz Source1: https://%{dracutprovider_prefix}/archive/%{dracutcommit}/%{dracutrepo}-%{dracutshortcommit}.tar.gz
# Upstream 73cbfa847e4319a202c360bd8cd447712d2067bc
Patch0: packet-fix-userdata-fetch.patch
# Upstream 4c2dcd547b01b2f13ced8d35263ded5fd67fa645
Patch1: packet-fix-metadata-fetch.patch
%define gopath %{_datadir}/gocode %define gopath %{_datadir}/gocode
ExcludeArch: ppc64 ExcludeArch: ppc64
@ -376,6 +380,8 @@ Ignition project's Github releases page.
# setup command reference: http://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html # setup command reference: http://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html
# unpack source0 and apply patches # unpack source0 and apply patches
%setup -T -b 0 -q -n %{repo}-%{commit} %setup -T -b 0 -q -n %{repo}-%{commit}
%patch0 -p1
%patch1 -p1
# unpack source1 (dracut modules) # unpack source1 (dracut modules)
%setup -T -D -a 1 -q -n %{repo}-%{commit} %setup -T -D -a 1 -q -n %{repo}-%{commit}
@ -540,6 +546,9 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/vendor:%{gopath}
%endif %endif
%changelog %changelog
* Sat Mar 28 2020 Benjamin Gilbert <bgilbert@redhat.com> - 2.2.1-2.git2d3ff58
- Fix userdata/metadata fetch on Packet
* Tue Mar 24 2020 Benjamin Gilbert <bgilbert@redhat.com> - 2.2.1-1.git2d3ff58 * Tue Mar 24 2020 Benjamin Gilbert <bgilbert@redhat.com> - 2.2.1-1.git2d3ff58
- New release - New release
- Bump ignition-dracut for initramfs network teardown - Bump ignition-dracut for initramfs network teardown

View File

@ -0,0 +1,33 @@
From 4c2dcd547b01b2f13ced8d35263ded5fd67fa645 Mon Sep 17 00:00:00 2001
From: Benjamin Gilbert <bgilbert@redhat.com>
Date: Sat, 28 Mar 2020 01:15:32 -0400
Subject: [PATCH 2/2] providers/packet: override Accept header fetching
instance metadata
Passing nil Headers is no longer sufficient to avoid the default Accept
header; we need to override it. Fixes 406 Not Acceptable error.
Fixes: 75d3e2da74ae ("Rework fetch/resource to automatically append required headers")
---
internal/providers/packet/packet.go | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/internal/providers/packet/packet.go b/internal/providers/packet/packet.go
index 8771734..613a6ba 100644
--- a/internal/providers/packet/packet.go
+++ b/internal/providers/packet/packet.go
@@ -71,8 +71,10 @@ func FetchConfig(f *resource.Fetcher) (types.Config, report.Report, error) {
func PostStatus(stageName string, f resource.Fetcher, errMsg error) error {
f.Logger.Info("POST message to Packet Timeline")
// fetch JSON from https://metadata.packet.net/metadata
+ headers := make(http.Header)
+ headers.Set("Accept", "*/*")
data, err := f.FetchToBuffer(metadataUrl, resource.FetchOptions{
- Headers: nil,
+ Headers: headers,
})
if err != nil {
return err
--
2.24.1

View File

@ -0,0 +1,41 @@
From 73cbfa847e4319a202c360bd8cd447712d2067bc Mon Sep 17 00:00:00 2001
From: Benjamin Gilbert <bgilbert@redhat.com>
Date: Sat, 28 Mar 2020 01:07:54 -0400
Subject: [PATCH 1/2] resource/url: allow caller-specified headers to override
defaults
Set defaults first, then override them with caller-specified headers.
Fixes default Accept header causing 406 Not Acceptable when fetching
userdata on Packet.
Fixes: 75d3e2da74ae ("Rework fetch/resource to automatically append required headers")
---
internal/resource/url.go | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/internal/resource/url.go b/internal/resource/url.go
index c304758..d08964a 100644
--- a/internal/resource/url.go
+++ b/internal/resource/url.go
@@ -257,14 +257,14 @@ func (f *Fetcher) fetchFromHTTP(u url.URL, dest io.Writer, opts FetchOptions) er
// 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 k, va := range configHeaders {
for _, v := range va {
- headers.Add(k, v)
+ headers.Set(k, v)
}
}
- for k, va := range configHeaders {
+ for k, va := range opts.Headers {
for _, v := range va {
- headers.Add(k, v)
+ headers.Set(k, v)
}
}
--
2.24.1