Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for AWS IMDSv2 in Availability Zone resolver #2688

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions lib/facter/resolvers/az.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,21 @@ def read_facts(fact_name)

def get_data_from(url)
headers = { Metadata: 'true' }
headers['X-aws-ec2-metadata-token'] = v2_token if v2_token
Facter::Util::Resolvers::Http.get_request(url, headers, { session: determine_session_timeout })
end

def determine_session_timeout
session_env = ENV['AZ_SESSION_TIMEOUT']
session_env ? session_env.to_i : AZ_SESSION_TIMEOUT
end

def v2_token
@v2_token ||= begin
token = Facter::Util::Resolvers::AwsToken.get
Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe you need to add this file to your commit? Also could you describe how the behavior changes and why? Some questions that come to mind are: If v2 is unavailable do we fall back to v1? Is v2 versus v1 configurable?

Copy link
Author

Choose a reason for hiding this comment

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

Hi,

I don't really understand your question about adding a file.
I just copied what happens in ec2.rb
https://github.com/puppetlabs/facter/blob/main/lib/facter/resolvers/ec2.rb

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html

IMDSv2 is never supposed to be unavailable. It is a superset on the v1 service.
v1 is supposed to be deprecated at a future date.

Regards,

Stefan.

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't really understand your question about adding a file.

Oh sorry, I thought maybe that was why spec tests were failing. But it looks like the webmock expectation needs updating

Thanks for the context about v2. Could you amend your git commit with that info?

token == '' ? nil : token
end
end
end
end
end
Expand Down
Loading