ohai 18.2.6 → 19.0.3

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.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +28 -28
  3. data/LICENSE +201 -201
  4. data/bin/ohai +25 -25
  5. data/lib/ohai/application.rb +189 -189
  6. data/lib/ohai/common/dmi.rb +167 -167
  7. data/lib/ohai/config.rb +51 -51
  8. data/lib/ohai/dsl/plugin/versionvii.rb +203 -203
  9. data/lib/ohai/dsl/plugin.rb +232 -232
  10. data/lib/ohai/dsl.rb +22 -22
  11. data/lib/ohai/exception.rb +36 -36
  12. data/lib/ohai/hints.rb +68 -68
  13. data/lib/ohai/loader.rb +178 -178
  14. data/lib/ohai/log.rb +34 -34
  15. data/lib/ohai/mash.rb +22 -22
  16. data/lib/ohai/mixin/alibaba_metadata.rb +83 -83
  17. data/lib/ohai/mixin/azure_metadata.rb +105 -105
  18. data/lib/ohai/mixin/chef_utils_wiring.rb +52 -52
  19. data/lib/ohai/mixin/command.rb +4 -4
  20. data/lib/ohai/mixin/constant_helper.rb +55 -55
  21. data/lib/ohai/mixin/dmi_decode.rb +54 -54
  22. data/lib/ohai/mixin/do_metadata.rb +48 -48
  23. data/lib/ohai/mixin/ec2_metadata.rb +264 -270
  24. data/lib/ohai/mixin/gce_metadata.rb +79 -79
  25. data/lib/ohai/mixin/http_helper.rb +64 -64
  26. data/lib/ohai/mixin/json_helper.rb +36 -36
  27. data/lib/ohai/mixin/network_helper.rb +92 -92
  28. data/lib/ohai/mixin/oci_metadata.rb +60 -60
  29. data/lib/ohai/mixin/os.rb +128 -128
  30. data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
  31. data/lib/ohai/mixin/seconds_to_human.rb +52 -52
  32. data/lib/ohai/mixin/shell_out.rb +51 -51
  33. data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
  34. data/lib/ohai/mixin/string.rb +31 -31
  35. data/lib/ohai/mixin/train_helpers.rb +36 -36
  36. data/lib/ohai/mixin/which.rb +39 -39
  37. data/lib/ohai/plugin_config.rb +47 -47
  38. data/lib/ohai/plugins/aix/kernel.rb +50 -50
  39. data/lib/ohai/plugins/aix/memory.rb +37 -37
  40. data/lib/ohai/plugins/aix/network.rb +142 -142
  41. data/lib/ohai/plugins/aix/platform.rb +30 -30
  42. data/lib/ohai/plugins/aix/uptime.rb +54 -54
  43. data/lib/ohai/plugins/aix/virtualization.rb +154 -154
  44. data/lib/ohai/plugins/alibaba.rb +72 -72
  45. data/lib/ohai/plugins/azure.rb +154 -154
  46. data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
  47. data/lib/ohai/plugins/c.rb +178 -178
  48. data/lib/ohai/plugins/chef.rb +50 -50
  49. data/lib/ohai/plugins/cloud.rb +379 -379
  50. data/lib/ohai/plugins/command.rb +26 -26
  51. data/lib/ohai/plugins/cpu.rb +642 -642
  52. data/lib/ohai/plugins/darwin/hardware.rb +99 -99
  53. data/lib/ohai/plugins/darwin/memory.rb +62 -62
  54. data/lib/ohai/plugins/darwin/network.rb +207 -207
  55. data/lib/ohai/plugins/darwin/platform.rb +40 -40
  56. data/lib/ohai/plugins/darwin/virtualization.rb +104 -104
  57. data/lib/ohai/plugins/digital_ocean.rb +67 -67
  58. data/lib/ohai/plugins/dmi.rb +134 -134
  59. data/lib/ohai/plugins/docker.rb +58 -58
  60. data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
  61. data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
  62. data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
  63. data/lib/ohai/plugins/ec2.rb +148 -148
  64. data/lib/ohai/plugins/elixir.rb +36 -36
  65. data/lib/ohai/plugins/erlang.rb +60 -60
  66. data/lib/ohai/plugins/eucalyptus.rb +86 -86
  67. data/lib/ohai/plugins/filesystem.rb +753 -753
  68. data/lib/ohai/plugins/fips.rb +36 -36
  69. data/lib/ohai/plugins/freebsd/memory.rb +60 -60
  70. data/lib/ohai/plugins/freebsd/network.rb +128 -128
  71. data/lib/ohai/plugins/freebsd/platform.rb +28 -28
  72. data/lib/ohai/plugins/gce.rb +89 -89
  73. data/lib/ohai/plugins/go.rb +34 -34
  74. data/lib/ohai/plugins/groovy.rb +38 -38
  75. data/lib/ohai/plugins/grub2.rb +40 -40
  76. data/lib/ohai/plugins/habitat.rb +73 -73
  77. data/lib/ohai/plugins/haskell.rb +96 -96
  78. data/lib/ohai/plugins/hostname.rb +133 -133
  79. data/lib/ohai/plugins/init_package.rb +26 -26
  80. data/lib/ohai/plugins/java.rb +78 -78
  81. data/lib/ohai/plugins/kernel.rb +292 -292
  82. data/lib/ohai/plugins/keys.rb +27 -27
  83. data/lib/ohai/plugins/languages.rb +26 -26
  84. data/lib/ohai/plugins/libvirt.rb +114 -114
  85. data/lib/ohai/plugins/linode.rb +73 -73
  86. data/lib/ohai/plugins/linux/block_device.rb +48 -48
  87. data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
  88. data/lib/ohai/plugins/linux/interrupts.rb +84 -83
  89. data/lib/ohai/plugins/linux/ipc.rb +52 -52
  90. data/lib/ohai/plugins/linux/livepatch.rb +38 -38
  91. data/lib/ohai/plugins/linux/lsb.rb +46 -46
  92. data/lib/ohai/plugins/linux/lspci.rb +80 -80
  93. data/lib/ohai/plugins/linux/machineid.rb +36 -36
  94. data/lib/ohai/plugins/linux/mdadm.rb +120 -120
  95. data/lib/ohai/plugins/linux/memory.rb +106 -106
  96. data/lib/ohai/plugins/linux/network.rb +879 -879
  97. data/lib/ohai/plugins/linux/os_release.rb +38 -38
  98. data/lib/ohai/plugins/linux/platform.rb +314 -314
  99. data/lib/ohai/plugins/linux/selinux.rb +69 -69
  100. data/lib/ohai/plugins/linux/sessions.rb +54 -54
  101. data/lib/ohai/plugins/linux/sysctl.rb +39 -39
  102. data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
  103. data/lib/ohai/plugins/linux/tc.rb +61 -61
  104. data/lib/ohai/plugins/linux/virtualization.rb +300 -300
  105. data/lib/ohai/plugins/lua.rb +39 -39
  106. data/lib/ohai/plugins/mono.rb +50 -50
  107. data/lib/ohai/plugins/netbsd/memory.rb +99 -99
  108. data/lib/ohai/plugins/netbsd/network.rb +122 -122
  109. data/lib/ohai/plugins/netbsd/platform.rb +28 -28
  110. data/lib/ohai/plugins/network.rb +186 -186
  111. data/lib/ohai/plugins/nodejs.rb +40 -40
  112. data/lib/ohai/plugins/oci.rb +94 -94
  113. data/lib/ohai/plugins/ohai.rb +29 -29
  114. data/lib/ohai/plugins/ohai_time.rb +26 -26
  115. data/lib/ohai/plugins/openbsd/memory.rb +99 -99
  116. data/lib/ohai/plugins/openbsd/network.rb +122 -122
  117. data/lib/ohai/plugins/openbsd/platform.rb +28 -28
  118. data/lib/ohai/plugins/openstack.rb +84 -84
  119. data/lib/ohai/plugins/os.rb +55 -55
  120. data/lib/ohai/plugins/packages.rb +234 -234
  121. data/lib/ohai/plugins/passwd.rb +104 -104
  122. data/lib/ohai/plugins/perl.rb +45 -45
  123. data/lib/ohai/plugins/php.rb +52 -52
  124. data/lib/ohai/plugins/platform.rb +41 -41
  125. data/lib/ohai/plugins/powershell.rb +82 -82
  126. data/lib/ohai/plugins/ps.rb +35 -35
  127. data/lib/ohai/plugins/python.rb +43 -43
  128. data/lib/ohai/plugins/rackspace.rb +177 -177
  129. data/lib/ohai/plugins/root_group.rb +41 -41
  130. data/lib/ohai/plugins/rpm.rb +121 -121
  131. data/lib/ohai/plugins/ruby.rb +66 -66
  132. data/lib/ohai/plugins/rust.rb +34 -34
  133. data/lib/ohai/plugins/scala.rb +38 -38
  134. data/lib/ohai/plugins/scaleway.rb +58 -58
  135. data/lib/ohai/plugins/scsi.rb +52 -52
  136. data/lib/ohai/plugins/shard.rb +142 -142
  137. data/lib/ohai/plugins/shells.rb +32 -32
  138. data/lib/ohai/plugins/softlayer.rb +48 -48
  139. data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
  140. data/lib/ohai/plugins/solaris2/memory.rb +32 -32
  141. data/lib/ohai/plugins/solaris2/network.rb +192 -192
  142. data/lib/ohai/plugins/solaris2/platform.rb +58 -58
  143. data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
  144. data/lib/ohai/plugins/ssh_host_key.rb +84 -84
  145. data/lib/ohai/plugins/sysconf.rb +46 -46
  146. data/lib/ohai/plugins/timezone.rb +45 -45
  147. data/lib/ohai/plugins/train.rb +35 -35
  148. data/lib/ohai/plugins/uptime.rb +95 -95
  149. data/lib/ohai/plugins/virtualbox.rb +197 -197
  150. data/lib/ohai/plugins/vmware.rb +109 -109
  151. data/lib/ohai/plugins/windows/dmi.rb +95 -95
  152. data/lib/ohai/plugins/windows/drivers.rb +52 -52
  153. data/lib/ohai/plugins/windows/memory.rb +39 -39
  154. data/lib/ohai/plugins/windows/network.rb +222 -222
  155. data/lib/ohai/plugins/windows/platform.rb +34 -34
  156. data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
  157. data/lib/ohai/plugins/windows/virtualization.rb +45 -45
  158. data/lib/ohai/plugins/zpools.rb +94 -94
  159. data/lib/ohai/provides_map.rb +208 -208
  160. data/lib/ohai/runner.rb +128 -126
  161. data/lib/ohai/system.rb +258 -258
  162. data/lib/ohai/train_transport.rb +29 -29
  163. data/lib/ohai/util/file_helper.rb +6 -6
  164. data/lib/ohai/util/ip_helper.rb +56 -56
  165. data/lib/ohai/util/win32.rb +47 -47
  166. data/lib/ohai/version.rb +23 -23
  167. data/lib/ohai.rb +23 -23
  168. data/ohai.gemspec +35 -35
  169. metadata +9 -15
@@ -1,148 +1,148 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Tim Dysinger (<tim@dysinger.net>)
4
- # Author:: Benjamin Black (<bb@chef.io>)
5
- # Author:: Christopher Brown (<cb@chef.io>)
6
- # Author:: Tim Smith (<tsmith@chef.io>)
7
- # Copyright:: Copyright (c) Chef Software Inc.
8
- # License:: Apache License, Version 2.0
9
- #
10
- # Licensed under the Apache License, Version 2.0 (the "License");
11
- # you may not use this file except in compliance with the License.
12
- # You may obtain a copy of the License at
13
- #
14
- # http://www.apache.org/licenses/LICENSE-2.0
15
- #
16
- # Unless required by applicable law or agreed to in writing, software
17
- # distributed under the License is distributed on an "AS IS" BASIS,
18
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
- # See the License for the specific language governing permissions and
20
- # limitations under the License.
21
-
22
- # How we detect EC2 from easiest to hardest & least reliable
23
- # 1. Ohai ec2 hint exists. This always works
24
- # 2. Xen hypervisor UUID starts with 'ec2'. This catches Linux HVM & paravirt instances
25
- # 3. DMI bios version data mentions amazon. This catches HVM instances in a VPC on the Xen based hypervisor
26
- # 3. DMI bios vendor data mentions amazon. This catches HVM instances in a VPC on the non-Xen based hypervisor
27
- # 4. Kernel data mentioned Amazon. This catches Windows HVM & paravirt instances
28
-
29
- Ohai.plugin(:EC2) do
30
- require_relative "../mixin/ec2_metadata"
31
-
32
- include Ohai::Mixin::Ec2Metadata
33
-
34
- provides "ec2"
35
-
36
- # look for amazon string in dmi vendor bios data within the sys tree.
37
- # this works even if the system lacks dmidecode use by the Dmi plugin
38
- # this gets us detection of new Xen-less HVM instances that are within a VPC
39
- # @return [Boolean] do we have Amazon DMI data?
40
- def has_ec2_amazon_dmi?
41
- # detect a version of '4.2.amazon'
42
- if file_val_if_exists("/sys/class/dmi/id/bios_vendor").to_s.include?("Amazon")
43
- logger.trace("Plugin EC2: has_ec2_amazon_dmi? == true")
44
- true
45
- else
46
- logger.trace("Plugin EC2: has_ec2_amazon_dmi? == false")
47
- false
48
- end
49
- end
50
-
51
- # look for amazon string in dmi bios version data within the sys tree.
52
- # this works even if the system lacks dmidecode use by the Dmi plugin
53
- # this gets us detection of HVM instances that are within a VPC
54
- # @return [Boolean] do we have Amazon DMI data?
55
- def has_ec2_xen_dmi?
56
- # detect a version of '4.2.amazon'
57
- if file_val_if_exists("/sys/class/dmi/id/bios_version").to_s.include?("amazon")
58
- logger.trace("Plugin EC2: has_ec2_xen_dmi? == true")
59
- true
60
- else
61
- logger.trace("Plugin EC2: has_ec2_xen_dmi? == false")
62
- false
63
- end
64
- end
65
-
66
- # looks for a xen UUID that starts with ec2 from within the Linux sys tree
67
- # @return [Boolean] do we have a Xen UUID or not?
68
- def has_ec2_xen_uuid?
69
- if /^ec2/.match?(file_val_if_exists("/sys/hypervisor/uuid"))
70
- logger.trace("Plugin EC2: has_ec2_xen_uuid? == true")
71
- return true
72
- end
73
- logger.trace("Plugin EC2: has_ec2_xen_uuid? == false")
74
- false
75
- end
76
-
77
- # looks at the identifying number WMI value to see if it starts with ec2.
78
- # this is actually the same value we're looking at in has_ec2_xen_uuid? on
79
- # linux hosts
80
- # @return [Boolean] do we have a Xen Identifying Number or not?
81
- def has_ec2_identifying_number?
82
- if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
83
- require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
84
- wmi = WmiLite::Wmi.new
85
- if /^ec2/.match?(wmi.first_of("Win32_ComputerSystemProduct")["identifyingnumber"])
86
- logger.trace("Plugin EC2: has_ec2_identifying_number? == true")
87
- true
88
- end
89
- else
90
- logger.trace("Plugin EC2: has_ec2_identifying_number? == false")
91
- false
92
- end
93
- end
94
-
95
- # return the contents of a file if the file exists
96
- # @param path[String] abs path to the file
97
- # @return [String] contents of the file if it exists
98
- def file_val_if_exists(path)
99
- if file_exist?(path)
100
- file_read(path)
101
- end
102
- end
103
-
104
- # a single check that combines all the various detection methods for EC2
105
- # @return [Boolean] Does the system appear to be on EC2
106
- def looks_like_ec2?
107
- hint?("ec2") || has_ec2_xen_uuid? || has_ec2_amazon_dmi? || has_ec2_xen_dmi? || has_ec2_identifying_number?
108
- end
109
-
110
- collect_data do
111
- require "base64" unless defined?(Base64)
112
-
113
- if looks_like_ec2?
114
- logger.trace("Plugin EC2: looks_like_ec2? == true")
115
- ec2 Mash.new
116
- fetch_metadata.each do |k, v|
117
- # this includes sensitive data we don't want to store on the node
118
- next if k == "identity_credentials_ec2_security_credentials_ec2_instance"
119
-
120
- # fetch_metadata returns IAM security credentials, including the IAM user's
121
- # secret access key. We'd rather not have ohai send this information
122
- # to the server. If the instance is associated with an IAM role we grab
123
- # only the "info" key and the IAM role name.
124
- # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html
125
- if k == "iam" && !hint?("iam")
126
- ec2[:iam] = v.select { |key, value| key == "info" }
127
- if v["security-credentials"] && v["security-credentials"].keys.length == 1
128
- ec2[:iam]["role_name"] = v["security-credentials"].keys[0]
129
- end
130
- else
131
- ec2[k] = v
132
- end
133
- end
134
- ec2[:userdata] = fetch_userdata
135
- ec2[:account_id] = fetch_dynamic_data["accountId"]
136
- ec2[:availability_zone] = fetch_dynamic_data["availabilityZone"]
137
- ec2[:region] = fetch_dynamic_data["region"]
138
-
139
- if ec2[:userdata] && ec2[:userdata].encoding == Encoding::BINARY
140
- logger.trace("Plugin EC2: Binary UserData Found. Storing in base64")
141
- ec2[:userdata] = Base64.encode64(ec2[:userdata])
142
- end
143
- else
144
- logger.trace("Plugin EC2: looks_like_ec2? == false")
145
- false
146
- end
147
- end
148
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Tim Dysinger (<tim@dysinger.net>)
4
+ # Author:: Benjamin Black (<bb@chef.io>)
5
+ # Author:: Christopher Brown (<cb@chef.io>)
6
+ # Author:: Tim Smith (<tsmith@chef.io>)
7
+ # Copyright:: Copyright (c) Chef Software Inc.
8
+ # License:: Apache License, Version 2.0
9
+ #
10
+ # Licensed under the Apache License, Version 2.0 (the "License");
11
+ # you may not use this file except in compliance with the License.
12
+ # You may obtain a copy of the License at
13
+ #
14
+ # http://www.apache.org/licenses/LICENSE-2.0
15
+ #
16
+ # Unless required by applicable law or agreed to in writing, software
17
+ # distributed under the License is distributed on an "AS IS" BASIS,
18
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ # See the License for the specific language governing permissions and
20
+ # limitations under the License.
21
+
22
+ # How we detect EC2 from easiest to hardest & least reliable
23
+ # 1. Ohai ec2 hint exists. This always works
24
+ # 2. Xen hypervisor UUID starts with 'ec2'. This catches Linux HVM & paravirt instances
25
+ # 3. DMI bios version data mentions amazon. This catches HVM instances in a VPC on the Xen based hypervisor
26
+ # 3. DMI bios vendor data mentions amazon. This catches HVM instances in a VPC on the non-Xen based hypervisor
27
+ # 4. Kernel data mentioned Amazon. This catches Windows HVM & paravirt instances
28
+
29
+ Ohai.plugin(:EC2) do
30
+ require_relative "../mixin/ec2_metadata"
31
+
32
+ include Ohai::Mixin::Ec2Metadata
33
+
34
+ provides "ec2"
35
+
36
+ # look for amazon string in dmi vendor bios data within the sys tree.
37
+ # this works even if the system lacks dmidecode use by the Dmi plugin
38
+ # this gets us detection of new Xen-less HVM instances that are within a VPC
39
+ # @return [Boolean] do we have Amazon DMI data?
40
+ def has_ec2_amazon_dmi?
41
+ # detect a version of '4.2.amazon'
42
+ if file_val_if_exists("/sys/class/dmi/id/bios_vendor").to_s.include?("Amazon")
43
+ logger.trace("Plugin EC2: has_ec2_amazon_dmi? == true")
44
+ true
45
+ else
46
+ logger.trace("Plugin EC2: has_ec2_amazon_dmi? == false")
47
+ false
48
+ end
49
+ end
50
+
51
+ # look for amazon string in dmi bios version data within the sys tree.
52
+ # this works even if the system lacks dmidecode use by the Dmi plugin
53
+ # this gets us detection of HVM instances that are within a VPC
54
+ # @return [Boolean] do we have Amazon DMI data?
55
+ def has_ec2_xen_dmi?
56
+ # detect a version of '4.2.amazon'
57
+ if file_val_if_exists("/sys/class/dmi/id/bios_version").to_s.include?("amazon")
58
+ logger.trace("Plugin EC2: has_ec2_xen_dmi? == true")
59
+ true
60
+ else
61
+ logger.trace("Plugin EC2: has_ec2_xen_dmi? == false")
62
+ false
63
+ end
64
+ end
65
+
66
+ # looks for a xen UUID that starts with ec2 from within the Linux sys tree
67
+ # @return [Boolean] do we have a Xen UUID or not?
68
+ def has_ec2_xen_uuid?
69
+ if /^ec2/.match?(file_val_if_exists("/sys/hypervisor/uuid"))
70
+ logger.trace("Plugin EC2: has_ec2_xen_uuid? == true")
71
+ return true
72
+ end
73
+ logger.trace("Plugin EC2: has_ec2_xen_uuid? == false")
74
+ false
75
+ end
76
+
77
+ # looks at the identifying number WMI value to see if it starts with ec2.
78
+ # this is actually the same value we're looking at in has_ec2_xen_uuid? on
79
+ # linux hosts
80
+ # @return [Boolean] do we have a Xen Identifying Number or not?
81
+ def has_ec2_identifying_number?
82
+ if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
83
+ require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
84
+ wmi = WmiLite::Wmi.new
85
+ if /^ec2/.match?(wmi.first_of("Win32_ComputerSystemProduct")["identifyingnumber"])
86
+ logger.trace("Plugin EC2: has_ec2_identifying_number? == true")
87
+ true
88
+ end
89
+ else
90
+ logger.trace("Plugin EC2: has_ec2_identifying_number? == false")
91
+ false
92
+ end
93
+ end
94
+
95
+ # return the contents of a file if the file exists
96
+ # @param path[String] abs path to the file
97
+ # @return [String] contents of the file if it exists
98
+ def file_val_if_exists(path)
99
+ if file_exist?(path)
100
+ file_read(path)
101
+ end
102
+ end
103
+
104
+ # a single check that combines all the various detection methods for EC2
105
+ # @return [Boolean] Does the system appear to be on EC2
106
+ def looks_like_ec2?
107
+ hint?("ec2") || has_ec2_xen_uuid? || has_ec2_amazon_dmi? || has_ec2_xen_dmi? || has_ec2_identifying_number?
108
+ end
109
+
110
+ collect_data do
111
+ require "base64" unless defined?(Base64)
112
+
113
+ if looks_like_ec2?
114
+ logger.trace("Plugin EC2: looks_like_ec2? == true")
115
+ ec2 Mash.new
116
+ fetch_metadata.each do |k, v|
117
+ # this includes sensitive data we don't want to store on the node
118
+ next if k == "identity_credentials_ec2_security_credentials_ec2_instance"
119
+
120
+ # fetch_metadata returns IAM security credentials, including the IAM user's
121
+ # secret access key. We'd rather not have ohai send this information
122
+ # to the server. If the instance is associated with an IAM role we grab
123
+ # only the "info" key and the IAM role name.
124
+ # https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html
125
+ if k == "iam" && !hint?("iam")
126
+ ec2[:iam] = v.select { |key, value| key == "info" }
127
+ if v["security-credentials"] && v["security-credentials"].keys.length == 1
128
+ ec2[:iam]["role_name"] = v["security-credentials"].keys[0]
129
+ end
130
+ else
131
+ ec2[k] = v
132
+ end
133
+ end
134
+ ec2[:userdata] = fetch_userdata
135
+ ec2[:account_id] = fetch_dynamic_data["accountId"]
136
+ ec2[:availability_zone] = fetch_dynamic_data["availabilityZone"]
137
+ ec2[:region] = fetch_dynamic_data["region"]
138
+
139
+ if ec2[:userdata] && ec2[:userdata].encoding == Encoding::BINARY
140
+ logger.trace("Plugin EC2: Binary UserData Found. Storing in base64")
141
+ ec2[:userdata] = Base64.encode64(ec2[:userdata])
142
+ end
143
+ else
144
+ logger.trace("Plugin EC2: looks_like_ec2? == false")
145
+ false
146
+ end
147
+ end
148
+ end
@@ -1,36 +1,36 @@
1
- # Author:: Christopher M Luciano (<cmlucian@us.ibm.com>)
2
- # License:: Apache License, Version 2.0
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- Ohai.plugin(:Elixir) do
17
- provides "languages/elixir"
18
- depends "languages".freeze
19
-
20
- collect_data do
21
-
22
- so = shell_out("elixir -v")
23
- # Sample output:
24
- # Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
25
- #
26
- # Elixir 1.2.4
27
- if so.exitstatus == 0 && so.stdout =~ /^Elixir (\S*)/
28
- elixir = Mash.new
29
- elixir[:version] = $1
30
- languages[:elixir] = elixir
31
- end
32
- rescue Ohai::Exceptions::Exec
33
- logger.trace('Plugin Elixir: Could not shell_out "elixir -v". Skipping plugin')
34
-
35
- end
36
- end
1
+ # Author:: Christopher M Luciano (<cmlucian@us.ibm.com>)
2
+ # License:: Apache License, Version 2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ Ohai.plugin(:Elixir) do
17
+ provides "languages/elixir"
18
+ depends "languages".freeze
19
+
20
+ collect_data do
21
+
22
+ so = shell_out("elixir -v")
23
+ # Sample output:
24
+ # Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
25
+ #
26
+ # Elixir 1.2.4
27
+ if so.exitstatus == 0 && so.stdout =~ /^Elixir (\S*)/
28
+ elixir = Mash.new
29
+ elixir[:version] = $1
30
+ languages[:elixir] = elixir
31
+ end
32
+ rescue Ohai::Exceptions::Exec
33
+ logger.trace('Plugin Elixir: Could not shell_out "elixir -v". Skipping plugin')
34
+
35
+ end
36
+ end
@@ -1,60 +1,60 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Joe Williams (<joe@joetify.com>)
4
- # Copyright:: Copyright (c) Chef Software Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- Ohai.plugin(:Erlang) do
21
- provides "languages/erlang"
22
- depends "languages"
23
-
24
- collect_data do
25
- erlang = Mash.new
26
-
27
- begin
28
- so = shell_out("erl -eval '{ok, Ver} = file:read_file(filename:join([code:root_dir(), \"releases\", erlang:system_info(otp_release), \"OTP_VERSION\"])), Vsn = binary:bin_to_list(Ver, {0, byte_size(Ver) - 1}), io:format(\"~s,~s,~s\", [Vsn, erlang:system_info(version), erlang:system_info(nif_version)]), halt().' -noshell")
29
- # Sample output:
30
- # 19.1,8.1,2.11
31
- if so.exitstatus == 0
32
- output = so.stdout.split(",")
33
- erlang[:version] = output[0]
34
- erlang[:erts_version] = output[1]
35
- erlang[:nif_version] = output[2]
36
- end
37
- rescue Ohai::Exceptions::Exec
38
- logger.trace('Plugin Erlang: Could not shell_out "erl -eval \'erlang:display(erlang:system_info(otp_release)), erlang:display(erlang:system_info(version)), erlang:display(erlang:system_info(nif_version)), halt().\' -noshell". Skipping data')
39
- end
40
-
41
- begin
42
- so = shell_out("erl +V")
43
- # Sample output:
44
- # Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 7.3
45
- if so.exitstatus == 0
46
- output = so.stderr.split
47
- if output.length >= 6
48
- options = output[1]
49
- options.gsub!(/(\(|\))/, "")
50
- erlang[:options] = options.split(",")
51
- erlang[:emulator] = output[2].gsub!(/(\(|\))/, "")
52
- end
53
- end
54
- rescue Ohai::Exceptions::Exec
55
- logger.trace('Plugin Erlang: Could not shell_out "erl +V". Skipping data')
56
- end
57
-
58
- languages[:erlang] = erlang unless erlang.empty?
59
- end
60
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Joe Williams (<joe@joetify.com>)
4
+ # Copyright:: Copyright (c) Chef Software Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ Ohai.plugin(:Erlang) do
21
+ provides "languages/erlang"
22
+ depends "languages"
23
+
24
+ collect_data do
25
+ erlang = Mash.new
26
+
27
+ begin
28
+ so = shell_out("erl -eval '{ok, Ver} = file:read_file(filename:join([code:root_dir(), \"releases\", erlang:system_info(otp_release), \"OTP_VERSION\"])), Vsn = binary:bin_to_list(Ver, {0, byte_size(Ver) - 1}), io:format(\"~s,~s,~s\", [Vsn, erlang:system_info(version), erlang:system_info(nif_version)]), halt().' -noshell")
29
+ # Sample output:
30
+ # 19.1,8.1,2.11
31
+ if so.exitstatus == 0
32
+ output = so.stdout.split(",")
33
+ erlang[:version] = output[0]
34
+ erlang[:erts_version] = output[1]
35
+ erlang[:nif_version] = output[2]
36
+ end
37
+ rescue Ohai::Exceptions::Exec
38
+ logger.trace('Plugin Erlang: Could not shell_out "erl -eval \'erlang:display(erlang:system_info(otp_release)), erlang:display(erlang:system_info(version)), erlang:display(erlang:system_info(nif_version)), halt().\' -noshell". Skipping data')
39
+ end
40
+
41
+ begin
42
+ so = shell_out("erl +V")
43
+ # Sample output:
44
+ # Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 7.3
45
+ if so.exitstatus == 0
46
+ output = so.stderr.split
47
+ if output.length >= 6
48
+ options = output[1]
49
+ options.gsub!(/(\(|\))/, "")
50
+ erlang[:options] = options.split(",")
51
+ erlang[:emulator] = output[2].gsub!(/(\(|\))/, "")
52
+ end
53
+ end
54
+ rescue Ohai::Exceptions::Exec
55
+ logger.trace('Plugin Erlang: Could not shell_out "erl +V". Skipping data')
56
+ end
57
+
58
+ languages[:erlang] = erlang unless erlang.empty?
59
+ end
60
+ end
@@ -1,86 +1,86 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Tim Dysinger (<tim@dysinger.net>)
4
- # Author:: Benjamin Black (<bb@chef.io>)
5
- # Author:: Christopher Brown (<cb@chef.io>)
6
- # Copyright:: Copyright (c) Chef Software Inc.
7
- # License:: Apache License, Version 2.0
8
- #
9
- # Licensed under the Apache License, Version 2.0 (the "License");
10
- # you may not use this file except in compliance with the License.
11
- # You may obtain a copy of the License at
12
- #
13
- # http://www.apache.org/licenses/LICENSE-2.0
14
- #
15
- # Unless required by applicable law or agreed to in writing, software
16
- # distributed under the License is distributed on an "AS IS" BASIS,
17
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
-
21
- Ohai.plugin(:Eucalyptus) do
22
- # eucalyptus metadata service is compatible with the ec2 service calls
23
- require_relative "../mixin/ec2_metadata"
24
- require_relative "../mixin/http_helper"
25
-
26
- include Ohai::Mixin::Ec2Metadata
27
- include Ohai::Mixin::HttpHelper
28
-
29
- provides "eucalyptus"
30
- depends "network/interfaces"
31
-
32
- MAC_MATCH = /^[dD]0:0[dD]:/.freeze unless defined?(MAC_MATCH)
33
-
34
- # returns the mac address from the collection of all address types
35
- def get_mac_address(addresses)
36
- detected_addresses = addresses.detect { |address, keypair| keypair == { "family" => "lladdr" } }
37
- if detected_addresses
38
- detected_addresses.first
39
- else
40
- ""
41
- end
42
- end
43
-
44
- # detect if the mac address starts with d0:0d
45
- def has_euca_mac?
46
- network[:interfaces].each_value do |iface|
47
- mac = get_mac_address(iface[:addresses])
48
- if MAC_MATCH.match?(mac)
49
- logger.trace("Plugin Eucalyptus: has_euca_mac? == true (#{mac})")
50
- return true
51
- end
52
- end
53
-
54
- logger.trace("Plugin Eucalyptus: has_euca_mac? == false")
55
- false
56
- end
57
-
58
- def looks_like_euca?
59
- # Try non-blocking connect so we don't "block" if
60
- # the metadata service doesn't respond
61
- hint?("eucalyptus") || has_euca_mac? && can_socket_connect?(Ohai::Mixin::Ec2Metadata::EC2_METADATA_ADDR, 80)
62
- end
63
-
64
- collect_data do
65
- if looks_like_euca?
66
- logger.trace("Plugin Eucalyptus: looks_like_euca? == true")
67
- eucalyptus Mash.new
68
- fetch_metadata.each do |k, v|
69
- # Eucalyptus 3.4+ supports IAM roles and Instance Profiles much like AWS
70
- # https://www.eucalyptus.com/blog/2013/10/15/iam-roles-and-instance-profiles-eucalyptus-34
71
- #
72
- # fetch_metadata returns IAM security credentials, including the IAM user's
73
- # secret access key. We'd rather not have ohai send this information
74
- # to the server.
75
- # http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html#instancedata-data-categories
76
- next if k == "iam" && !hint?("iam")
77
-
78
- eucalyptus[k] = v
79
- end
80
- eucalyptus[:userdata] = fetch_userdata
81
- else
82
- logger.trace("Plugin Eucalyptus: looks_like_euca? == false")
83
- false
84
- end
85
- end
86
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Tim Dysinger (<tim@dysinger.net>)
4
+ # Author:: Benjamin Black (<bb@chef.io>)
5
+ # Author:: Christopher Brown (<cb@chef.io>)
6
+ # Copyright:: Copyright (c) Chef Software Inc.
7
+ # License:: Apache License, Version 2.0
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+
21
+ Ohai.plugin(:Eucalyptus) do
22
+ # eucalyptus metadata service is compatible with the ec2 service calls
23
+ require_relative "../mixin/ec2_metadata"
24
+ require_relative "../mixin/http_helper"
25
+
26
+ include Ohai::Mixin::Ec2Metadata
27
+ include Ohai::Mixin::HttpHelper
28
+
29
+ provides "eucalyptus"
30
+ depends "network/interfaces"
31
+
32
+ MAC_MATCH = /^[dD]0:0[dD]:/.freeze unless defined?(MAC_MATCH)
33
+
34
+ # returns the mac address from the collection of all address types
35
+ def get_mac_address(addresses)
36
+ detected_addresses = addresses.detect { |address, keypair| keypair == { "family" => "lladdr" } }
37
+ if detected_addresses
38
+ detected_addresses.first
39
+ else
40
+ ""
41
+ end
42
+ end
43
+
44
+ # detect if the mac address starts with d0:0d
45
+ def has_euca_mac?
46
+ network[:interfaces].each_value do |iface|
47
+ mac = get_mac_address(iface[:addresses])
48
+ if MAC_MATCH.match?(mac)
49
+ logger.trace("Plugin Eucalyptus: has_euca_mac? == true (#{mac})")
50
+ return true
51
+ end
52
+ end
53
+
54
+ logger.trace("Plugin Eucalyptus: has_euca_mac? == false")
55
+ false
56
+ end
57
+
58
+ def looks_like_euca?
59
+ # Try non-blocking connect so we don't "block" if
60
+ # the metadata service doesn't respond
61
+ hint?("eucalyptus") || has_euca_mac? && can_socket_connect?(Ohai::Mixin::Ec2Metadata::EC2_METADATA_ADDR, 80)
62
+ end
63
+
64
+ collect_data do
65
+ if looks_like_euca?
66
+ logger.trace("Plugin Eucalyptus: looks_like_euca? == true")
67
+ eucalyptus Mash.new
68
+ fetch_metadata.each do |k, v|
69
+ # Eucalyptus 3.4+ supports IAM roles and Instance Profiles much like AWS
70
+ # https://www.eucalyptus.com/blog/2013/10/15/iam-roles-and-instance-profiles-eucalyptus-34
71
+ #
72
+ # fetch_metadata returns IAM security credentials, including the IAM user's
73
+ # secret access key. We'd rather not have ohai send this information
74
+ # to the server.
75
+ # http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html#instancedata-data-categories
76
+ next if k == "iam" && !hint?("iam")
77
+
78
+ eucalyptus[k] = v
79
+ end
80
+ eucalyptus[:userdata] = fetch_userdata
81
+ else
82
+ logger.trace("Plugin Eucalyptus: looks_like_euca? == false")
83
+ false
84
+ end
85
+ end
86
+ end