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,35 +1,35 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Adam Jacob (<adam@chef.io>)
4
- # Author:: Bryan McLellan (<btm@loftninjas.org>)
5
- # Copyright:: Copyright (c) Chef Software Inc.
6
- # Copyright:: Copyright (c) 2009 Bryan McLellan
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
18
- # implied.
19
- # See the License for the specific language governing permissions and
20
- # limitations under the License.
21
- #
22
-
23
- Ohai.plugin(:PS) do
24
- provides "command/ps"
25
- depends "command"
26
-
27
- collect_data(:aix, :darwin, :linux, :solaris2) do
28
- command[:ps] = "ps -ef"
29
- end
30
-
31
- collect_data(:freebsd, :netbsd, :openbsd, :dragonflybsd) do
32
- # ps -e requires procfs
33
- command[:ps] = "ps -axww"
34
- end
35
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Adam Jacob (<adam@chef.io>)
4
+ # Author:: Bryan McLellan (<btm@loftninjas.org>)
5
+ # Copyright:: Copyright (c) Chef Software Inc.
6
+ # Copyright:: Copyright (c) 2009 Bryan McLellan
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
18
+ # implied.
19
+ # See the License for the specific language governing permissions and
20
+ # limitations under the License.
21
+ #
22
+
23
+ Ohai.plugin(:PS) do
24
+ provides "command/ps"
25
+ depends "command"
26
+
27
+ collect_data(:aix, :darwin, :linux, :solaris2) do
28
+ command[:ps] = "ps -ef"
29
+ end
30
+
31
+ collect_data(:freebsd, :netbsd, :openbsd, :dragonflybsd) do
32
+ # ps -e requires procfs
33
+ command[:ps] = "ps -axww"
34
+ end
35
+ end
@@ -1,43 +1,43 @@
1
- #
2
- # Author:: Thom May (<thom@clearairturbulence.org>)
3
- # Copyright:: Copyright (c) Chef Software Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- Ohai.plugin(:Python) do
20
- provides "languages/python"
21
-
22
- depends "languages".freeze
23
-
24
- collect_data do
25
-
26
- so = shell_out("python -c \"import sys; print (sys.version)\"")
27
- # Sample output:
28
- # 2.7.11 (default, Dec 26 2015, 17:47:53)
29
- # [GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)]
30
- if so.exitstatus == 0
31
- python = Mash.new
32
- output = so.stdout.split
33
- python[:version] = output[0]
34
- if output.length >= 6
35
- python[:builddate] = "%s %s %s %s" % [output[2], output[3], output[4], output[5].delete!(")")]
36
- end
37
- languages[:python] = python unless python.empty?
38
- end
39
- rescue Ohai::Exceptions::Exec
40
- logger.trace('Plugin Python: Could not shell_out "python -c "import sys; print (sys.version)"". Skipping plugin')
41
-
42
- end
43
- end
1
+ #
2
+ # Author:: Thom May (<thom@clearairturbulence.org>)
3
+ # Copyright:: Copyright (c) Chef Software Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ Ohai.plugin(:Python) do
20
+ provides "languages/python"
21
+
22
+ depends "languages".freeze
23
+
24
+ collect_data do
25
+
26
+ so = shell_out("python -c \"import sys; print (sys.version)\"")
27
+ # Sample output:
28
+ # 2.7.11 (default, Dec 26 2015, 17:47:53)
29
+ # [GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)]
30
+ if so.exitstatus == 0
31
+ python = Mash.new
32
+ output = so.stdout.split
33
+ python[:version] = output[0]
34
+ if output.length >= 6
35
+ python[:builddate] = "%s %s %s %s" % [output[2], output[3], output[4], output[5].delete!(")")]
36
+ end
37
+ languages[:python] = python unless python.empty?
38
+ end
39
+ rescue Ohai::Exceptions::Exec
40
+ logger.trace('Plugin Python: Could not shell_out "python -c "import sys; print (sys.version)"". Skipping plugin')
41
+
42
+ end
43
+ end
@@ -1,177 +1,177 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Cary Penniman (<cary@rightscale.com>)
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
-
18
- Ohai.plugin(:Rackspace) do
19
- provides "rackspace"
20
-
21
- depends "kernel", "network/interfaces"
22
-
23
- # Checks for matching rackspace kernel name
24
- #
25
- # === Return
26
- # true:: If kernel name matches
27
- # false:: Otherwise
28
- def has_rackspace_kernel?
29
- kernel[:release].end_with?("-rscloud")
30
- end
31
-
32
- # Checks for rackspace provider attribute
33
- #
34
- # === Return
35
- # true:: If rackspace provider attribute found
36
- # false:: Otherwise
37
- def has_rackspace_metadata?
38
- so = shell_out("xenstore-read vm-data/provider_data/provider")
39
- if so.exitstatus == 0
40
- so.stdout.strip.casecmp("rackspace") == 0
41
- end
42
- rescue Ohai::Exceptions::Exec
43
- false
44
- end
45
-
46
- # Checks for the rackspace manufacturer on Windows
47
- # === Return
48
- # true:: If the rackspace cloud can be identified
49
- # false:: Otherwise
50
- def has_rackspace_manufacturer?
51
- return false unless RUBY_PLATFORM.match?(/mswin|mingw|windows/)
52
-
53
- require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
54
- wmi = WmiLite::Wmi.new
55
- if wmi.first_of("Win32_ComputerSystem")["PrimaryOwnerName"] == "Rackspace"
56
- logger.trace("Plugin Rackspace: has_rackspace_manufacturer? == true")
57
- true
58
- end
59
- end
60
-
61
- # Identifies the rackspace cloud
62
- #
63
- # === Return
64
- # true:: If the rackspace cloud can be identified
65
- # false:: Otherwise
66
- def looks_like_rackspace?
67
- hint?("rackspace") || has_rackspace_metadata? || has_rackspace_kernel? || has_rackspace_manufacturer?
68
- end
69
-
70
- # Names rackspace ip address
71
- #
72
- # === Parameters
73
- # name<Symbol>:: Use :public_ip or :private_ip
74
- # eth<Symbol>:: Interface name of public or private ip
75
- def get_ip_address(name, eth)
76
- network[:interfaces][eth][:addresses].each do |key, info|
77
- if info["family"] == "inet"
78
- rackspace[name] = key
79
- break # break when we found an address
80
- end
81
- end
82
- end
83
-
84
- # Names rackspace ipv6 address for interface
85
- #
86
- # === Parameters
87
- # name<Symbol>:: Use :public_ip or :private_ip
88
- # eth<Symbol>:: Interface name of public or private ip
89
- def get_global_ipv6_address(name, eth)
90
- network[:interfaces][eth][:addresses].each do |key, info|
91
- # check if we got an ipv6 address and if its in global scope
92
- if info["family"] == "inet6" && info["scope"] == "Global"
93
- rackspace[name] = key
94
- break # break when we found an address
95
- end
96
- end
97
- end
98
-
99
- # Get the rackspace region
100
- #
101
- def get_region
102
- so = shell_out("xenstore-ls vm-data/provider_data")
103
- if so.exitstatus == 0
104
- so.stdout.split("\n").each do |line|
105
- rackspace[:region] = line.split[2].delete('\"') if /^region/.match?(line)
106
- end
107
- end
108
- rescue Ohai::Exceptions::Exec
109
- logger.trace("Plugin Rackspace: Unable to find xenstore-ls, cannot capture region information for Rackspace cloud")
110
- nil
111
- end
112
-
113
- # Get the rackspace instance_id
114
- #
115
- def get_instance_id
116
- so = shell_out("xenstore-read name")
117
- if so.exitstatus == 0
118
- rackspace[:instance_id] = so.stdout.gsub("instance-", "")
119
- end
120
- rescue Ohai::Exceptions::Exec
121
- logger.trace("Plugin Rackspace: Unable to find xenstore-read, cannot capture instance ID information for Rackspace cloud")
122
- nil
123
- end
124
-
125
- # Get the rackspace private networks
126
- #
127
- def get_private_networks
128
- so = shell_out("xenstore-ls vm-data/networking")
129
- if so.exitstatus == 0
130
- networks = []
131
- so.stdout.split("\n").map { |l| l.split("=").first.strip }.map do |item|
132
- so = shell_out("xenstore-read vm-data/networking/#{item}")
133
- if so.exitstatus == 0
134
- networks.push(FFI_Yajl::Parser.new.parse(so.stdout))
135
- else
136
- logger.trace("Plugin Rackspace: Unable to capture custom private networking information for Rackspace cloud")
137
- return false
138
- end
139
- end
140
- # these networks are already known to ohai, and are not 'private networks'
141
- networks.delete_if { |hash| hash["label"] == "private" }
142
- networks.delete_if { |hash| hash["label"] == "public" }
143
- end
144
- rescue Ohai::Exceptions::Exec
145
- logger.trace("Plugin Rackspace: Unable to capture custom private networking information for Rackspace cloud")
146
- nil
147
- end
148
-
149
- collect_data do
150
- require "resolv"
151
-
152
- # Adds rackspace Mash
153
- if looks_like_rackspace?
154
- rackspace Mash.new
155
- get_ip_address(:public_ip, :eth0)
156
- get_ip_address(:private_ip, :eth1)
157
- get_region
158
- get_instance_id
159
- # public_ip + private_ip are deprecated in favor of public_ipv4 and local_ipv4 to standardize.
160
- rackspace[:public_ipv4] = rackspace[:public_ip]
161
- get_global_ipv6_address(:public_ipv6, :eth0)
162
- unless rackspace[:public_ip].nil?
163
- rackspace[:public_hostname] = begin
164
- Resolv.getname(rackspace[:public_ip])
165
- rescue Resolv::ResolvError, Resolv::ResolvTimeout
166
- rackspace[:public_ip]
167
- end
168
- end
169
- rackspace[:local_ipv4] = rackspace[:private_ip]
170
- get_global_ipv6_address(:local_ipv6, :eth1)
171
- rackspace[:local_hostname] = hostname
172
- private_networks = get_private_networks
173
- rackspace[:private_networks] = private_networks if private_networks
174
- end
175
- end
176
-
177
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Cary Penniman (<cary@rightscale.com>)
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ Ohai.plugin(:Rackspace) do
19
+ provides "rackspace"
20
+
21
+ depends "kernel", "network/interfaces"
22
+
23
+ # Checks for matching rackspace kernel name
24
+ #
25
+ # === Return
26
+ # true:: If kernel name matches
27
+ # false:: Otherwise
28
+ def has_rackspace_kernel?
29
+ kernel[:release].end_with?("-rscloud")
30
+ end
31
+
32
+ # Checks for rackspace provider attribute
33
+ #
34
+ # === Return
35
+ # true:: If rackspace provider attribute found
36
+ # false:: Otherwise
37
+ def has_rackspace_metadata?
38
+ so = shell_out("xenstore-read vm-data/provider_data/provider")
39
+ if so.exitstatus == 0
40
+ so.stdout.strip.casecmp("rackspace") == 0
41
+ end
42
+ rescue Ohai::Exceptions::Exec
43
+ false
44
+ end
45
+
46
+ # Checks for the rackspace manufacturer on Windows
47
+ # === Return
48
+ # true:: If the rackspace cloud can be identified
49
+ # false:: Otherwise
50
+ def has_rackspace_manufacturer?
51
+ return false unless RUBY_PLATFORM.match?(/mswin|mingw|windows/)
52
+
53
+ require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
54
+ wmi = WmiLite::Wmi.new
55
+ if wmi.first_of("Win32_ComputerSystem")["PrimaryOwnerName"] == "Rackspace"
56
+ logger.trace("Plugin Rackspace: has_rackspace_manufacturer? == true")
57
+ true
58
+ end
59
+ end
60
+
61
+ # Identifies the rackspace cloud
62
+ #
63
+ # === Return
64
+ # true:: If the rackspace cloud can be identified
65
+ # false:: Otherwise
66
+ def looks_like_rackspace?
67
+ hint?("rackspace") || has_rackspace_metadata? || has_rackspace_kernel? || has_rackspace_manufacturer?
68
+ end
69
+
70
+ # Names rackspace ip address
71
+ #
72
+ # === Parameters
73
+ # name<Symbol>:: Use :public_ip or :private_ip
74
+ # eth<Symbol>:: Interface name of public or private ip
75
+ def get_ip_address(name, eth)
76
+ network[:interfaces][eth][:addresses].each do |key, info|
77
+ if info["family"] == "inet"
78
+ rackspace[name] = key
79
+ break # break when we found an address
80
+ end
81
+ end
82
+ end
83
+
84
+ # Names rackspace ipv6 address for interface
85
+ #
86
+ # === Parameters
87
+ # name<Symbol>:: Use :public_ip or :private_ip
88
+ # eth<Symbol>:: Interface name of public or private ip
89
+ def get_global_ipv6_address(name, eth)
90
+ network[:interfaces][eth][:addresses].each do |key, info|
91
+ # check if we got an ipv6 address and if its in global scope
92
+ if info["family"] == "inet6" && info["scope"] == "Global"
93
+ rackspace[name] = key
94
+ break # break when we found an address
95
+ end
96
+ end
97
+ end
98
+
99
+ # Get the rackspace region
100
+ #
101
+ def get_region
102
+ so = shell_out("xenstore-ls vm-data/provider_data")
103
+ if so.exitstatus == 0
104
+ so.stdout.split("\n").each do |line|
105
+ rackspace[:region] = line.split[2].delete('\"') if /^region/.match?(line)
106
+ end
107
+ end
108
+ rescue Ohai::Exceptions::Exec
109
+ logger.trace("Plugin Rackspace: Unable to find xenstore-ls, cannot capture region information for Rackspace cloud")
110
+ nil
111
+ end
112
+
113
+ # Get the rackspace instance_id
114
+ #
115
+ def get_instance_id
116
+ so = shell_out("xenstore-read name")
117
+ if so.exitstatus == 0
118
+ rackspace[:instance_id] = so.stdout.gsub(/instance-/, "")
119
+ end
120
+ rescue Ohai::Exceptions::Exec
121
+ logger.trace("Plugin Rackspace: Unable to find xenstore-read, cannot capture instance ID information for Rackspace cloud")
122
+ nil
123
+ end
124
+
125
+ # Get the rackspace private networks
126
+ #
127
+ def get_private_networks
128
+ so = shell_out("xenstore-ls vm-data/networking")
129
+ if so.exitstatus == 0
130
+ networks = []
131
+ so.stdout.split("\n").map { |l| l.split("=").first.strip }.map do |item|
132
+ so = shell_out("xenstore-read vm-data/networking/#{item}")
133
+ if so.exitstatus == 0
134
+ networks.push(FFI_Yajl::Parser.new.parse(so.stdout))
135
+ else
136
+ logger.trace("Plugin Rackspace: Unable to capture custom private networking information for Rackspace cloud")
137
+ return false
138
+ end
139
+ end
140
+ # these networks are already known to ohai, and are not 'private networks'
141
+ networks.delete_if { |hash| hash["label"] == "private" }
142
+ networks.delete_if { |hash| hash["label"] == "public" }
143
+ end
144
+ rescue Ohai::Exceptions::Exec
145
+ logger.trace("Plugin Rackspace: Unable to capture custom private networking information for Rackspace cloud")
146
+ nil
147
+ end
148
+
149
+ collect_data do
150
+ require "resolv"
151
+
152
+ # Adds rackspace Mash
153
+ if looks_like_rackspace?
154
+ rackspace Mash.new
155
+ get_ip_address(:public_ip, :eth0)
156
+ get_ip_address(:private_ip, :eth1)
157
+ get_region
158
+ get_instance_id
159
+ # public_ip + private_ip are deprecated in favor of public_ipv4 and local_ipv4 to standardize.
160
+ rackspace[:public_ipv4] = rackspace[:public_ip]
161
+ get_global_ipv6_address(:public_ipv6, :eth0)
162
+ unless rackspace[:public_ip].nil?
163
+ rackspace[:public_hostname] = begin
164
+ Resolv.getname(rackspace[:public_ip])
165
+ rescue Resolv::ResolvError, Resolv::ResolvTimeout
166
+ rackspace[:public_ip]
167
+ end
168
+ end
169
+ rackspace[:local_ipv4] = rackspace[:private_ip]
170
+ get_global_ipv6_address(:local_ipv6, :eth1)
171
+ rackspace[:local_hostname] = hostname
172
+ private_networks = get_private_networks
173
+ rackspace[:private_networks] = private_networks if private_networks
174
+ end
175
+ end
176
+
177
+ end
@@ -1,41 +1,41 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Joseph Anthony Pasquale Holsten (<joseph@josephholsten.com>)
4
- # Copyright:: Copyright (c) 2013 Joseph Anthony Pasquale Holsten
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
- Ohai.plugin(:RootGroup) do
20
- provides "root_group"
21
-
22
- collect_data(:windows) do
23
- require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
24
-
25
- wmi = WmiLite::Wmi.new
26
- # Per http://support.microsoft.com/kb/243330 SID: S-1-5-32-544 is the
27
- # internal name for the Administrators group, which lets us work
28
- # properly in environments with a renamed or localized name for the
29
- # Administrators group.
30
- # Use LocalAccount=True because otherwise WMI will attempt to include
31
- # (unneeded) Active Directory groups by querying AD, which is a performance
32
- # and reliability issue since AD might not be reachable.
33
- groups = wmi.query("select * from Win32_Group where sid like 'S-1-5-32-544' and LocalAccount=True")
34
- windows_root_group_name = groups[0]["name"]
35
- root_group windows_root_group_name
36
- end
37
-
38
- collect_data(:default) do
39
- root_group Etc.getgrgid(Etc.getpwnam("root").gid).name
40
- end
41
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Joseph Anthony Pasquale Holsten (<joseph@josephholsten.com>)
4
+ # Copyright:: Copyright (c) 2013 Joseph Anthony Pasquale Holsten
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
+ Ohai.plugin(:RootGroup) do
20
+ provides "root_group"
21
+
22
+ collect_data(:windows) do
23
+ require "wmi-lite/wmi" unless defined?(WmiLite::Wmi)
24
+
25
+ wmi = WmiLite::Wmi.new
26
+ # Per http://support.microsoft.com/kb/243330 SID: S-1-5-32-544 is the
27
+ # internal name for the Administrators group, which lets us work
28
+ # properly in environments with a renamed or localized name for the
29
+ # Administrators group.
30
+ # Use LocalAccount=True because otherwise WMI will attempt to include
31
+ # (unneeded) Active Directory groups by querying AD, which is a performance
32
+ # and reliability issue since AD might not be reachable.
33
+ groups = wmi.query("select * from Win32_Group where sid like 'S-1-5-32-544' and LocalAccount=True")
34
+ windows_root_group_name = groups[0]["name"]
35
+ root_group windows_root_group_name
36
+ end
37
+
38
+ collect_data(:default) do
39
+ root_group Etc.getgrgid(Etc.getpwnam("root").gid).name
40
+ end
41
+ end