Skip to content

Conversation

@jlebon
Copy link
Member

@jlebon jlebon commented Jul 31, 2020

On CloudStack/OpenStack, we fetch from three different sources
simultaneously: two config drives, and the metadata service.
Error-handling for these goroutines was causing ErrNeedNet from the
latter to be ignored and so we weren't correctly propagating it back to
the caller (which keys off of it to signal to the OS that networking is
needed).

Do a simple hack where we check if ErrNeedNet was hit and if none of
the fetchers succeed, then we return that instead. (The better fix of
course is to not try to parallel guess the metadata source like this,
but that's a much bigger issue.)

Fixes: #956
Fixes: #1056

On CloudStack/OpenStack, we fetch from three different sources
simultaneously: two config drives, and the metadata service.
Error-handling for these goroutines was causing `ErrNeedNet` from the
latter to be ignored and so we weren't correctly propagating it back to
the caller (which keys off of it to signal to the OS that networking is
needed).

Do a simple hack where we check if `ErrNeedNet` was hit and if none of
the fetchers succeed, then we return that instead. (The better fix of
course is to not try to parallel guess the metadata source like this,
but that's a much bigger issue.)

Fixes: coreos#956
Fixes: coreos#1056
@jlebon
Copy link
Member Author

jlebon commented Jul 31, 2020

Need to test this.

@jlebon
Copy link
Member Author

jlebon commented Jul 31, 2020

Tested working! (At least on an OpenStack with a metadata server; don't have access to one without, but I'm 95% confident it should work fine.)

@jlebon jlebon marked this pull request as ready for review July 31, 2020 19:57
Copy link
Contributor

@arithx arithx left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code LGTM

Copy link
Member

@cgwalters cgwalters left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@lucab lucab merged commit 2aedcd5 into coreos:master Aug 7, 2020
jlebon added a commit to jlebon/ignition that referenced this pull request Sep 16, 2020
This is a follow up to (and revert of) coreos#1057.

On OpenStack, we don't actually know if we're fetching from the
config-drive or from the metadata server.

In theory, if it's from the config-drive, we don't strictly need
networking, and so `fetch-offline` would work. The issue is that in the
more common case of the metadata server, `fetch-offline` will still wait
the full 30s for the config-drive to also time out only to then have to
bring up networking and run the `fetch` stage.

Instead, let's just accept the brokenness of the OpenStack provider and
declare it as always requiring networking.

For more information, see:
coreos#1081 (comment)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fetch-offline fails to request networking on OpenStack/CloudStack

4 participants