openfact 5.7.0 → 5.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2436b1bee62f23687acd129998826dd14375cfd0db9805b6b0be6bf94d60658
4
- data.tar.gz: 914cc3673def6ead78853f0b4cf0addece2313c534c15fcc9850e47a37c39e82
3
+ metadata.gz: a40ca49d6a933b0b0a72db330d0c4eb03e5b391f7604e22e23ef12753257987a
4
+ data.tar.gz: 82062ea6a8217bd955e37c2f33f30653e4e20a1869b00de7dd99eb15007574e5
5
5
  SHA512:
6
- metadata.gz: 80fbe8822e7b0f6bbdfdfb76eee4a6cee2771e7f36fd251b655e264bfcf032e76034217fa5e1477f59d973d3e7b2a9b264f2ee4fe91f402de7a6507b3d1b034c
7
- data.tar.gz: 8adbeb6dad88667ec34f829b830282f3812a3b3e8b54615500b0564b3f2f2d4b911c36c3571207722ee4bc56dba73864d170eeba7cec57423e6c6bd8056e082b
6
+ metadata.gz: e90cd6387fb767064000a5b5681ce56796666b267c5d6ca11b60eca0b875aa3fe8177b09e421831fd09c73fc09823b229523d7960e1d74e47bafec941f307e30
7
+ data.tar.gz: 6a6d9b5468083643e89518afbbcba2eb4c6ca7f3498b1324e8a27faa0c844d6660e4ae6c0991f5f01b24fb97951cda9fe06200b933632890551b0d256127baaa
@@ -18,14 +18,19 @@ module Facter
18
18
  end
19
19
 
20
20
  def read_facts(fact_name)
21
- @fact_list[:metadata] = {}
22
- query_for_metadata(EC2_METADATA_ROOT_URL, @fact_list[:metadata])
23
- @fact_list[:userdata] = get_data_from(EC2_USERDATA_ROOT_URL).strip.force_encoding('UTF-8')
21
+ if fact_name == :metadata
22
+ metadata = {}
23
+ query_for_metadata(EC2_METADATA_ROOT_URL, metadata)
24
+ @fact_list[:metadata] = metadata
25
+ else
26
+ @fact_list[:userdata] = get_data_from(EC2_USERDATA_ROOT_URL).strip.force_encoding('UTF-8')
27
+ end
28
+
24
29
  @fact_list[fact_name]
25
30
  end
26
31
 
27
32
  def query_for_metadata(url, container)
28
- metadata = get_data_from(url)
33
+ metadata = get_metadata_from(url)
29
34
  metadata.each_line do |line|
30
35
  next if line.empty?
31
36
 
@@ -34,14 +39,15 @@ module Facter
34
39
 
35
40
  if http_path_component.end_with?('/')
36
41
  child = {}
37
- child[http_path_component] = query_for_metadata("#{url}#{http_path_component}", child)
38
- child.reject! { |key, _info| key == http_path_component }
42
+ query_for_metadata("#{url}#{http_path_component}", child)
39
43
  name = http_path_component.chomp('/')
40
44
  container[name] = child
41
45
  else
42
- container[http_path_component] = get_data_from("#{url}#{http_path_component}").strip
46
+ container[http_path_component] = get_metadata_from("#{url}#{http_path_component}").strip
43
47
  end
44
48
  end
49
+
50
+ container
45
51
  end
46
52
 
47
53
  def build_path_component(line)
@@ -55,6 +61,12 @@ module Facter
55
61
  Facter::Util::Resolvers::Http.get_request(url, headers, { session: determine_session_timeout }, false)
56
62
  end
57
63
 
64
+ def get_metadata_from(url)
65
+ headers = {}
66
+ headers['X-aws-ec2-metadata-token'] = v2_token if v2_token
67
+ Facter::Util::Resolvers::Http.get_request!(url, headers, { session: determine_session_timeout }, false)
68
+ end
69
+
58
70
  def determine_session_timeout
59
71
  session_env = ENV['EC2_SESSION_TIMEOUT']
60
72
  session_env ? session_env.to_i : EC2_SESSION_TIMEOUT
@@ -6,6 +6,8 @@ module Facter
6
6
  module Http
7
7
  @log = Facter::Log.new(self)
8
8
 
9
+ class RequestError < StandardError; end
10
+
9
11
  class << self
10
12
  CONNECTION_TIMEOUT = 0.6
11
13
  SESSION_TIMEOUT = 5
@@ -27,6 +29,15 @@ module Facter
27
29
  make_request(url, headers, timeouts, 'GET', proxy)
28
30
  end
29
31
 
32
+ # Makes a GET HTTP request and returns its response body.
33
+ #
34
+ # Unlike get_request, this method raises when the response code is
35
+ # not 200 or when the request fails. A successful empty response is
36
+ # still returned as an empty string.
37
+ def get_request!(url, headers = {}, timeouts = {}, proxy = true)
38
+ make_request!(url, headers, timeouts, 'GET', proxy)
39
+ end
40
+
30
41
  # Makes a PUT HTTP request and returns its response
31
42
  # @param (see #get_request)
32
43
  # @return (see #get_request)
@@ -37,6 +48,28 @@ module Facter
37
48
  private
38
49
 
39
50
  def make_request(url, headers, timeouts, request_type, proxy)
51
+ response = perform_request(url, headers, timeouts, request_type, proxy)
52
+
53
+ successful_response?(response) ? response.body : ''
54
+ rescue StandardError => e
55
+ @log.debug("Trying to connect to #{url} but got: #{e.message}")
56
+ ''
57
+ end
58
+
59
+ def make_request!(url, headers, timeouts, request_type, proxy)
60
+ response = perform_request(url, headers, timeouts, request_type, proxy)
61
+
62
+ return response.body if successful_response?(response)
63
+
64
+ raise RequestError, "Request to #{url} failed with HTTP status #{response.code}"
65
+ rescue RequestError
66
+ raise
67
+ rescue StandardError => e
68
+ @log.debug("Trying to connect to #{url} but got: #{e.message}")
69
+ raise
70
+ end
71
+
72
+ def perform_request(url, headers, timeouts, request_type, proxy)
40
73
  require 'net/http'
41
74
 
42
75
  uri = URI.parse(url)
@@ -52,11 +85,7 @@ module Facter
52
85
  # Make the request
53
86
  response = http.request(request)
54
87
  response.uri = url
55
-
56
- successful_response?(response) ? response.body : ''
57
- rescue StandardError => e
58
- @log.debug("Trying to connect to #{url} but got: #{e.message}")
59
- ''
88
+ response
60
89
  end
61
90
 
62
91
  def http_obj(parsed_url, timeouts, proxy)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Facter
4
- VERSION = '5.7.0' unless defined?(VERSION)
4
+ VERSION = '5.7.1' unless defined?(VERSION)
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openfact
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.7.0
4
+ version: 5.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenVox Project