ohai 7.0.0.rc.1 → 7.0.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87c20193b00541eb3fa82ee6c3bcd45c78636a73
4
- data.tar.gz: fdc15bb6c846111f6208a280d1c0b6a0dd38e347
3
+ metadata.gz: 533f13f1b7eb1ff6e7dd001f5ca234c6332db38c
4
+ data.tar.gz: 440b071fec79b90937919a22f1182e717a41234e
5
5
  SHA512:
6
- metadata.gz: 6ae37b1d6f17e5b02669d1f511e2af2f7292c6a3a985c938fd498899131a267758a3c9feea5ddb94feb60c9ae70fe83bc3af05717546f9110063557bb23d29cd
7
- data.tar.gz: c940b03c17459ecb3190c1b801144017d888e38941512b5929d1ffab8bc78018d9067e9cb619d4987c6b92d7d20a0b56d972e1dc96e8bee60888a9cdfa662630
6
+ metadata.gz: 54ed83d812f3c567ba2da77867eedfe269d8914a200cac7922d6c7ff05a05e2ee95a27d5af6f06a26f94052bbf244ae3494f2bd682b6b746aa4f2cd1dc259c3f
7
+ data.tar.gz: b66322b8b5d3acf70e43f3efb39ae8a25da7b56cc3be84f5d2d46802908fb13bf908a9227852e51cbc7ffd876184d7e382eaf5f5d3600157e07cdcd37f6fea2b
@@ -207,7 +207,9 @@ Ohai.plugin(:Cloud) do
207
207
  def get_azure_values
208
208
  cloud[:vm_name] = azure["vm_name"]
209
209
  cloud[:public_ips] << azure['public_ip']
210
+ cloud[:public_ipv4] = azure['public_ip']
210
211
  cloud[:public_fqdn] = azure['public_fqdn']
212
+ cloud[:public_hostname] = azure['public_fqdn']
211
213
  cloud[:public_ssh_port] = azure['public_ssh_port'] if azure['public_ssh_port']
212
214
  cloud[:public_winrm_port] = azure['public_winrm_port'] if azure['public_winrm_port']
213
215
  cloud[:provider] = "azure"
@@ -0,0 +1,289 @@
1
+ #
2
+ # Author:: Cary Penniman (<cary@rightscale.com>)
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ Ohai.plugin(:CloudV2) do
18
+ provides "cloud_v2"
19
+
20
+ depends "ec2"
21
+ depends "gce"
22
+ depends "rackspace"
23
+ depends "eucalyptus"
24
+ depends "linode"
25
+ depends "openstack"
26
+ depends "azure"
27
+
28
+ # Class to help enforce the interface exposed to node[:cloud] (OHAI-542)
29
+ #
30
+ # cloud[:provider] - (String) the cloud provider the VM is running on.
31
+ #
32
+ # cloud[:public_hostname] - (String) a fully qualified hostname
33
+ # cloud[:local_hostname] - (String) a hostname resolvable on the internal (private) network
34
+ #
35
+ # cloud[:public_ipv4_addrs] - (Array) a list of all publicly accessible IPv4 addresses
36
+ # cloud[:local_ipv4_addrs] - (Array) a list of all private IPv4 addresses
37
+ # cloud[:public_ipv4] - (String) the first public IPv4 address detected
38
+ # cloud[:local_ipv4] - (String) the first private IPv4 address detected
39
+ #
40
+ # cloud[:public_ipv6_addrs] - (Array) a list of all publicly accessible IPv6 addresses
41
+ # cloud[:local_ipv6_addrs] - (Array) a list of all private IPv6 addresses
42
+ # cloud[:public_ipv6] - (String) the first public IPv6 address detected
43
+ # cloud[:local_ipv6] - (String) the first private IPv6 address detected
44
+ #
45
+ class CloudAttrs
46
+ attr_writer :provider, :public_hostname, :local_hostname
47
+
48
+ def initialize
49
+ @cloud = Mash.new
50
+ end
51
+
52
+ def add_ipv4_addr(ip, accessibility)
53
+ return if ip.nil? # just skip if ip is nil
54
+ ipaddr = validate_ip_addr(ip, :ipv4)
55
+
56
+ case accessibility
57
+ when :public
58
+ @cloud[:public_ipv4_addrs] ||= Array.new
59
+ @cloud[:public_ipv4_addrs] << ipaddr.to_s
60
+ when :private
61
+ @cloud[:local_ipv4_addrs] ||= Array.new
62
+ @cloud[:local_ipv4_addrs] << ipaddr.to_s
63
+ else
64
+ raise "ERROR: in valid accessibility param of '#{accessibility}'. must be :public or :private."
65
+ end
66
+ end
67
+
68
+ def add_ipv6_addr(ip, accessibility)
69
+ return if ip.nil? # just skip if ip is nil
70
+ ipaddr = validate_ip_addr(ip, :ipv6)
71
+
72
+ raise "ERROR: invalid ipv6 address of '#{ip}' detected. " unless ipaddr.ipv6?
73
+ case accessibility
74
+ when :public
75
+ @cloud[:public_ipv6_addrs] ||= Array.new
76
+ @cloud[:public_ipv6_addrs] << ipaddr.to_s
77
+ when :private
78
+ @cloud[:local_ipv6_addrs] ||= Array.new
79
+ @cloud[:local_ipv6_addrs] << ipaddr.to_s
80
+ else
81
+ raise "ERROR: in valid accessibility param of '#{accessibility}'. must be :public or :private."
82
+ end
83
+ end
84
+
85
+ def cloud_mash
86
+ @cloud[:provider] = @provider if @provider
87
+
88
+ @cloud[:public_hostname] = @public_hostname if @public_hostname
89
+ @cloud[:local_hostname] = @local_hostname if @local_hostname
90
+
91
+ @cloud[:public_ipv4] = @cloud[:public_ipv4_addrs][0] if @cloud[:public_ipv4_addrs]
92
+ @cloud[:local_ipv4] = @cloud[:local_ipv4_addrs][0] if @cloud[:local_ipv4_addrs]
93
+
94
+ @cloud[:public_ipv6] = @cloud[:public_ipv6_addrs][0] if @cloud[:public_ipv6_addrs]
95
+ @cloud[:local_ipv6] = @cloud[:local_ipv6_addrs][0] if @cloud[:local_ipv6_addrs]
96
+
97
+ # if empty, return nil
98
+ (@cloud.empty?) ? nil : @cloud
99
+ end
100
+
101
+ private
102
+
103
+ def validate_ip_addr(ip, address_family = :ipv4)
104
+ ipaddr = ""
105
+ begin
106
+ ipaddr = IPAddr.new(ip)
107
+ raise ArgumentError, "not valid #{address_family} address" unless (address_family == :ipv4) ? ipaddr.ipv4? : ipaddr.ipv6?
108
+ rescue ArgumentError => e
109
+ raise "ERROR: the ohai 'cloud' plugin failed with an IP address of '#{ip}' : #{e.message}"
110
+ end
111
+ ipaddr
112
+ end
113
+ end
114
+
115
+
116
+ #---------------------------------------
117
+ # Google Compute Engine (gce)
118
+ #--------------------------------------
119
+
120
+ def on_gce?
121
+ gce != nil
122
+ end
123
+
124
+ def get_gce_values
125
+ public_ips = gce['instance']['networkInterfaces'].collect do |interface|
126
+ if interface.has_key?('accessConfigs')
127
+ interface['accessConfigs'].collect{|ac| ac['externalIp']}
128
+ end
129
+ end.flatten.compact
130
+
131
+ private_ips = gce['instance']['networkInterfaces'].collect do |interface|
132
+ interface['ip']
133
+ end.compact
134
+
135
+ public_ips.each { |ipaddr| @cloud_attr_obj.add_ipv4_addr(ipaddr, :public) }
136
+ private_ips.each { |ipaddr| @cloud_attr_obj.add_ipv4_addr(ipaddr, :private) }
137
+ @cloud_attr_obj.local_hostname = gce['instance']['hostname']
138
+ @cloud_attr_obj.provider = "gce"
139
+ end
140
+
141
+ # ----------------------------------------
142
+ # ec2
143
+ # ----------------------------------------
144
+
145
+ # Is current cloud ec2?
146
+ #
147
+ # === Return
148
+ # true:: If ec2 Hash is defined
149
+ # false:: Otherwise
150
+ def on_ec2?
151
+ ec2 != nil
152
+ end
153
+
154
+ # Fill cloud hash with ec2 values
155
+ def get_ec2_values
156
+ @cloud_attr_obj.add_ipv4_addr(ec2['public_ipv4'], :public)
157
+ @cloud_attr_obj.add_ipv4_addr(ec2['local_ipv4'], :private)
158
+ @cloud_attr_obj.public_hostname = ec2['public_hostname']
159
+ @cloud_attr_obj.local_hostname = ec2['local_hostname']
160
+ @cloud_attr_obj.provider = "ec2"
161
+ end
162
+
163
+ # ----------------------------------------
164
+ # rackspace
165
+ # ----------------------------------------
166
+
167
+ # Is current cloud rackspace?
168
+ #
169
+ # === Return
170
+ # true:: If rackspace Hash is defined
171
+ # false:: Otherwise
172
+ def on_rackspace?
173
+ rackspace != nil
174
+ end
175
+
176
+ # Fill cloud hash with rackspace values
177
+ def get_rackspace_values
178
+ @cloud_attr_obj.add_ipv4_addr(rackspace['public_ipv4'], :public)
179
+ @cloud_attr_obj.add_ipv4_addr(rackspace['local_ipv4'], :private)
180
+ @cloud_attr_obj.add_ipv6_addr(rackspace['public_ipv6'], :public)
181
+ @cloud_attr_obj.add_ipv6_addr(rackspace['local_ipv6'], :private)
182
+ @cloud_attr_obj.public_hostname = rackspace['public_hostname']
183
+ @cloud_attr_obj.local_hostname = rackspace['local_hostname']
184
+ @cloud_attr_obj.provider = "rackspace"
185
+ end
186
+
187
+ # ----------------------------------------
188
+ # linode
189
+ # ----------------------------------------
190
+
191
+ # Is current cloud linode?
192
+ #
193
+ # === Return
194
+ # true:: If linode Hash is defined
195
+ # false:: Otherwise
196
+ def on_linode?
197
+ linode != nil
198
+ end
199
+
200
+ # Fill cloud hash with linode values
201
+ def get_linode_values
202
+ @cloud_attr_obj.add_ipv4_addr(linode['public_ip'], :public)
203
+ @cloud_attr_obj.add_ipv4_addr(linode['private_ip'], :private)
204
+ @cloud_attr_obj.public_hostname = linode['public_hostname']
205
+ @cloud_attr_obj.local_hostname = linode['local_hostname']
206
+ @cloud_attr_obj.provider = "linode"
207
+ end
208
+
209
+ # ----------------------------------------
210
+ # eucalyptus
211
+ # ----------------------------------------
212
+
213
+ # Is current cloud eucalyptus?
214
+ #
215
+ # === Return
216
+ # true:: If eucalyptus Hash is defined
217
+ # false:: Otherwise
218
+ def on_eucalyptus?
219
+ eucalyptus != nil
220
+ end
221
+
222
+ def get_eucalyptus_values
223
+ @cloud_attr_obj.add_ipv4_addr(eucalyptus['public_ipv4'], :public)
224
+ @cloud_attr_obj.add_ipv4_addr(eucalyptus['local_ipv4'], :private)
225
+ @cloud_attr_obj.public_hostname = eucalyptus['public_hostname']
226
+ @cloud_attr_obj.local_hostname = eucalyptus['local_hostname']
227
+ @cloud_attr_obj.provider = "eucalyptus"
228
+ end
229
+
230
+ # ----------------------------------------
231
+ # openstack
232
+ # ----------------------------------------
233
+
234
+ # Is current cloud openstack-based?
235
+ #
236
+ # === Return
237
+ # true:: If openstack Hash is defined
238
+ # false:: Otherwise
239
+ def on_openstack?
240
+ openstack != nil
241
+ end
242
+
243
+ # Fill cloud hash with openstack values
244
+ def get_openstack_values
245
+ @cloud_attr_obj.add_ipv4_addr(openstack['public_ipv4'], :public)
246
+ @cloud_attr_obj.add_ipv4_addr(openstack['local_ipv4'], :private)
247
+ @cloud_attr_obj.public_hostname = openstack['public_hostname']
248
+ @cloud_attr_obj.local_hostname = openstack['local_hostname']
249
+ @cloud_attr_obj.provider = "openstack"
250
+ end
251
+
252
+ # ----------------------------------------
253
+ # azure
254
+ # ----------------------------------------
255
+
256
+ # Is current cloud azure?
257
+ #
258
+ # === Return
259
+ # true:: If azure Hash is defined
260
+ # false:: Otherwise
261
+ def on_azure?
262
+ azure != nil
263
+ end
264
+
265
+ # Fill cloud hash with azure values
266
+ def get_azure_values
267
+ @cloud_attr_obj.add_ipv4_addr(azure['public_ip'], :public)
268
+ @cloud_attr_obj.add_ipv4_addr(azure['private_ip'], :private)
269
+ @cloud_attr_obj.public_hostname = azure['public_fqdn']
270
+ @cloud_attr_obj.provider = "azure"
271
+ end
272
+
273
+ collect_data do
274
+ require "ipaddr"
275
+
276
+ @cloud_attr_obj = CloudAttrs.new()
277
+
278
+ get_gce_values if on_gce?
279
+ get_ec2_values if on_ec2?
280
+ get_rackspace_values if on_rackspace?
281
+ get_linode_values if on_linode?
282
+ get_eucalyptus_values if on_eucalyptus?
283
+ get_openstack_values if on_openstack?
284
+ get_azure_values if on_azure?
285
+
286
+ # set node[:cloud] hash here
287
+ cloud_v2 @cloud_attr_obj.cloud_mash
288
+ end
289
+ end
@@ -0,0 +1,33 @@
1
+ #
2
+ # Authors:: Adam Jacob (<adam@opscode.com>)
3
+ # Richard Manyanza (<liseki@nyikacraftsmen.com>)
4
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
5
+ # Copyright:: Copyright (c) 2014 Richard Manyanza.
6
+ # License:: Apache License, Version 2.0
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+
21
+ require 'ohai/mixin/os'
22
+
23
+ Ohai.plugin(:OS) do
24
+ provides "os", "os_version"
25
+
26
+ collect_data(:freebsd) do
27
+ os collect_os
28
+
29
+ # This is __FreeBSD_version. See sys/param.h or
30
+ # http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html.
31
+ os_version shell_out("sysctl -n kern.osreldate").stdout.split($/)[0]
32
+ end
33
+ end
@@ -22,7 +22,7 @@ Ohai.plugin(:Java) do
22
22
 
23
23
  def get_java_info
24
24
  java = Mash.new
25
- so = shell_out("java -version")
25
+ so = shell_out("java -mx64m -version")
26
26
  if so.exitstatus == 0
27
27
  so.stderr.split(/\r?\n/).each do |line|
28
28
  case line
@@ -126,5 +126,33 @@ Ohai.plugin(:Virtualization) do
126
126
  end
127
127
  end
128
128
  end
129
+
130
+ # Detect LXC/Docker
131
+ #
132
+ # /proc/self/cgroup will look like this inside a docker container:
133
+ # <index #>:<subsystem>:/lxc/<hexadecimal container id>
134
+ #
135
+ # /proc/self/cgroup could have a name including alpha/digit/dashes
136
+ # <index #>:<subsystem>:/lxc/<named container id>
137
+ #
138
+ # /proc/self/cgroup could have a non-lxc cgroup name indicating other uses
139
+ # of cgroups. This is probably not LXC/Docker.
140
+ # <index #>:<subsystem>:/Charlie
141
+ #
142
+ # A host which supports cgroups, and has capacity to host lxc containers,
143
+ # will show the subsystems and root (/) namespace.
144
+ # <index #>:<subsystem>:/
145
+ #
146
+ # Full notes, https://tickets.opscode.com/browse/OHAI-551
147
+ # Kernel docs, https://www.kernel.org/doc/Documentation/cgroups
148
+ if File.exists?("/proc/self/cgroup")
149
+ if File.read("/proc/self/cgroup") =~ %r{^\d+:.+:/lxc/.+$}
150
+ virtualization[:system] = "lxc"
151
+ virtualization[:role] = "guest"
152
+ elsif File.read("/proc/self/cgroup") =~ %r{\d:.+:/$}
153
+ virtualization[:system] = "lxc"
154
+ virtualization[:role] = "host"
155
+ end
156
+ end
129
157
  end
130
158
  end
@@ -18,5 +18,5 @@
18
18
 
19
19
  module Ohai
20
20
  OHAI_ROOT = File.expand_path(File.dirname(__FILE__))
21
- VERSION = '7.0.0.rc.1'
21
+ VERSION = '7.0.0.rc.2'
22
22
  end
@@ -165,6 +165,7 @@ describe Ohai::System, "plugin cloud" do
165
165
  @plugin[:azure]['public_ip'] = "174.129.150.8"
166
166
  @plugin.run
167
167
  @plugin[:cloud][:public_ips][0].should == @plugin[:azure]['public_ip']
168
+ @plugin[:cloud][:public_ipv4].should == @plugin[:azure]['public_ip']
168
169
  end
169
170
 
170
171
  it "populates cloud vm_name" do
@@ -177,6 +178,7 @@ describe Ohai::System, "plugin cloud" do
177
178
  @plugin[:azure]['public_fqdn'] = "linux-vm-svc.cloudapp.net"
178
179
  @plugin.run
179
180
  @plugin[:cloud][:public_fqdn].should == @plugin[:azure]['public_fqdn']
181
+ @plugin[:cloud][:public_hostname].should == @plugin[:azure]['public_fqdn']
180
182
  end
181
183
 
182
184
  it "populates cloud public_ssh_port" do
@@ -0,0 +1,292 @@
1
+ #
2
+ # Author:: Cary Penniman (<cary@rightscale.com>)
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
19
+ require 'ipaddr'
20
+
21
+ describe "CloudAttrs object" do
22
+ before(:each) do
23
+ @plugin = get_plugin("cloud_v2")
24
+ end
25
+
26
+ let(:cloud_node) do
27
+ {"public_ipv4_addrs"=>["1.2.3.1"],
28
+ "local_ipv4_addrs"=>["1.2.4.1"],
29
+ "public_ipv6_addrs"=>["3ffe:505:2::1"],
30
+ "local_ipv6_addrs"=>["3ffe:506:2::1"],
31
+ "public_ipv4"=>"1.2.3.1",
32
+ "local_ipv4"=>"1.2.4.1",
33
+ "public_ipv6"=>"3ffe:505:2::1",
34
+ "local_ipv6"=>"3ffe:506:2::1",
35
+ "public_hostname"=>"myhost.somewhere.com",
36
+ "local_hostname"=>"my-localhost",
37
+ "provider"=>"my_awesome_cloud"
38
+ }
39
+ end
40
+
41
+ it "populates cloud mash" do
42
+ @cloud_attr_obj = ::CloudAttrs.new()
43
+ @cloud_attr_obj.add_ipv4_addr("1.2.3.1", :public)
44
+ @cloud_attr_obj.add_ipv4_addr("1.2.4.1", :private)
45
+ @cloud_attr_obj.add_ipv6_addr("3ffe:505:2::1", :public)
46
+ @cloud_attr_obj.add_ipv6_addr("3ffe:506:2::1", :private)
47
+ @cloud_attr_obj.public_hostname = "myhost.somewhere.com"
48
+ @cloud_attr_obj.local_hostname = "my-localhost"
49
+ @cloud_attr_obj.provider = "my_awesome_cloud"
50
+ @cloud_attr_obj.cloud_mash.should == cloud_node
51
+ end
52
+
53
+ it "throws exception with a bad ipv4 address" do
54
+ @cloud_attr_obj = ::CloudAttrs.new()
55
+ lambda { @cloud_attr_obj.add_ipv6_addr("somebogusstring", :public) }.should raise_error
56
+ end
57
+
58
+ it "throws exception with a bad ipv6 address" do
59
+ @cloud_attr_obj = ::CloudAttrs.new()
60
+ lambda { @cloud_attr_obj.add_ipv6_addr("FEED:B0B:DEAD:BEEF", :public) }.should raise_error
61
+ end
62
+
63
+ it "throws exception with ipv6 address passed to ipv4" do
64
+ @cloud_attr_obj = ::CloudAttrs.new()
65
+ lambda { @cloud_attr_obj.add_ipv4_addr("3ffe:506:2::1", :public) }.should raise_error
66
+ end
67
+
68
+ it "throws exception with ipv4 address passed to ipv6" do
69
+ @cloud_attr_obj = ::CloudAttrs.new()
70
+ lambda { @cloud_attr_obj.add_ipv6_addr("1.2.3.4", :public) }.should raise_error
71
+ end
72
+
73
+
74
+ end
75
+
76
+ describe Ohai::System, "plugin cloud" do
77
+ before(:each) do
78
+ @plugin = get_plugin("cloud_v2")
79
+ end
80
+
81
+ describe "with no cloud mashes" do
82
+ it "doesn't populate the cloud data" do
83
+ @plugin[:ec2] = nil
84
+ @plugin[:rackspace] = nil
85
+ @plugin[:eucalyptus] = nil
86
+ @plugin[:linode] = nil
87
+ @plugin[:azure] = nil
88
+ @plugin[:gce] = nil
89
+ @plugin.run
90
+ @plugin[:cloud_v2].should be_nil
91
+ end
92
+ end
93
+
94
+ describe "with EC2 mash" do
95
+ before do
96
+ @plugin[:ec2] = Mash.new()
97
+ end
98
+
99
+ it "populates cloud public ip" do
100
+ @plugin[:ec2]['public_ipv4'] = "174.129.150.8"
101
+ @plugin.run
102
+ @plugin[:cloud_v2][:public_ipv4_addrs][0].should == @plugin[:ec2]['public_ipv4']
103
+ end
104
+
105
+ it "populates cloud private ip" do
106
+ @plugin[:ec2]['local_ipv4'] = "10.252.42.149"
107
+ @plugin.run
108
+ @plugin[:cloud_v2][:local_ipv4_addrs][0].should == @plugin[:ec2]['local_ipv4']
109
+ end
110
+
111
+ it "populates cloud provider" do
112
+ @plugin.run
113
+ @plugin[:cloud_v2][:provider].should == "ec2"
114
+ end
115
+ end
116
+
117
+ describe "with GCE mash" do
118
+ before do
119
+ @plugin[:gce] = Mash.new()
120
+ @plugin[:gce]['instance'] = Mash.new()
121
+ @plugin[:gce]['instance']['networkInterfaces'] = [
122
+ {
123
+ "accessConfigs" => [ {"externalIp" => "8.35.198.173", "type"=>"ONE_TO_ONE_NAT"} ],
124
+ "ip" => "10.240.0.102",
125
+ "network"=> "projects/foo/networks/default"
126
+ }
127
+ ]
128
+ end
129
+
130
+ it "populates cloud public ip" do
131
+ @plugin.run
132
+ @plugin[:cloud_v2][:public_ipv4_addrs][0].should == "8.35.198.173"
133
+ end
134
+
135
+ it "populates cloud private ip" do
136
+ @plugin.run
137
+ @plugin[:cloud_v2][:local_ipv4_addrs][0].should == "10.240.0.102"
138
+ end
139
+
140
+ it "populates cloud provider" do
141
+ @plugin.run
142
+ @plugin[:cloud_v2][:provider].should == "gce"
143
+ end
144
+ end
145
+
146
+ describe "with rackspace" do
147
+ before do
148
+ @plugin[:rackspace] = Mash.new()
149
+ end
150
+
151
+ it "populates cloud public ip" do
152
+ @plugin[:rackspace][:public_ipv4] = "174.129.150.8"
153
+ @plugin.run
154
+ @plugin[:cloud_v2][:public_ipv4].should == @plugin[:rackspace][:public_ipv4]
155
+ end
156
+
157
+ it "populates cloud public ipv6" do
158
+ @plugin[:rackspace][:public_ipv6] = "2a00:1a48:7805:111:e875:efaf:ff08:75"
159
+ @plugin.run
160
+ @plugin[:cloud_v2][:public_ipv6].should == @plugin[:rackspace][:public_ipv6]
161
+ end
162
+
163
+ it "populates cloud private ip" do
164
+ @plugin[:rackspace][:local_ipv4] = "10.252.42.149"
165
+ @plugin.run
166
+ @plugin[:cloud_v2][:local_ipv4].should == @plugin[:rackspace][:local_ipv4]
167
+ end
168
+
169
+ it "populates cloud private ipv6" do
170
+ @plugin[:rackspace][:local_ipv6] = "2a00:1a48:7805:111:e875:efaf:ff08:75"
171
+ @plugin.run
172
+ @plugin[:cloud_v2][:local_ipv6].should == @plugin[:rackspace][:local_ipv6]
173
+ end
174
+
175
+ it "populates first cloud public ip" do
176
+ @plugin[:rackspace][:public_ipv4] = "174.129.150.8"
177
+ @plugin.run
178
+ @plugin[:cloud_v2][:public_ipv4_addrs].first.should == @plugin[:rackspace][:public_ipv4]
179
+ end
180
+
181
+ it "populates first cloud public ip" do
182
+ @plugin[:rackspace][:local_ipv4] = "174.129.150.8"
183
+ @plugin.run
184
+ @plugin[:cloud_v2][:local_ipv4_addrs].first.should == @plugin[:rackspace][:local_ipv4]
185
+ end
186
+
187
+ it "populates cloud provider" do
188
+ @plugin.run
189
+ @plugin[:cloud_v2][:provider].should == "rackspace"
190
+ end
191
+ end
192
+
193
+ describe "with linode mash" do
194
+ before do
195
+ @plugin[:linode] = Mash.new()
196
+ end
197
+
198
+ it "populates cloud public ip" do
199
+ @plugin[:linode]['public_ip'] = "174.129.150.8"
200
+ @plugin.run
201
+ @plugin[:cloud_v2][:public_ipv4_addrs][0].should == @plugin[:linode][:public_ip]
202
+ end
203
+
204
+ it "populates cloud private ip" do
205
+ @plugin[:linode]['private_ip'] = "10.252.42.149"
206
+ @plugin.run
207
+ @plugin[:cloud_v2][:local_ipv4_addrs][0].should == @plugin[:linode][:private_ip]
208
+ end
209
+
210
+ it "populates first cloud public ip" do
211
+ @plugin[:linode]['public_ip'] = "174.129.150.8"
212
+ @plugin.run
213
+ @plugin[:cloud_v2][:public_ipv4_addrs].first.should == @plugin[:linode][:public_ip]
214
+ end
215
+
216
+ it "populates cloud provider" do
217
+ @plugin.run
218
+ @plugin[:cloud_v2][:provider].should == "linode"
219
+ end
220
+ end
221
+
222
+ describe "with eucalyptus mash" do
223
+ before do
224
+ @plugin[:eucalyptus] = Mash.new()
225
+ end
226
+
227
+ it "populates cloud public ip" do
228
+ @plugin[:eucalyptus]['public_ipv4'] = "174.129.150.8"
229
+ @plugin.run
230
+ @plugin[:cloud_v2][:public_ipv4_addrs][0].should == @plugin[:eucalyptus]['public_ipv4']
231
+ end
232
+
233
+ it "populates cloud private ip" do
234
+ @plugin[:eucalyptus]['local_ipv4'] = "10.252.42.149"
235
+ @plugin.run
236
+ @plugin[:cloud_v2][:local_ipv4_addrs][0].should == @plugin[:eucalyptus]['local_ipv4']
237
+ end
238
+
239
+ it "populates cloud provider" do
240
+ @plugin.run
241
+ @plugin[:cloud_v2][:provider].should == "eucalyptus"
242
+ end
243
+ end
244
+
245
+ describe "with Azure mash" do
246
+ before do
247
+ @plugin[:azure] = Mash.new()
248
+ end
249
+
250
+ it "populates cloud public ip" do
251
+ @plugin[:azure]['public_ip'] = "174.129.150.8"
252
+ @plugin.run
253
+ @plugin[:cloud_v2][:public_ipv4_addrs][0].should == @plugin[:azure]['public_ip']
254
+ end
255
+
256
+ it "doesn't populates cloud vm_name" do
257
+ @plugin[:azure]['vm_name'] = "linux-vm"
258
+ @plugin.run
259
+ @plugin[:cloud_v2][:vm_name].should_not == @plugin[:azure]['vm_name']
260
+ end
261
+
262
+ it "populates cloud public_hostname" do
263
+ @plugin[:azure]['public_fqdn'] = "linux-vm-svc.cloudapp.net"
264
+ @plugin.run
265
+ @plugin[:cloud_v2][:public_hostname].should == @plugin[:azure]['public_fqdn']
266
+ end
267
+
268
+ it "doesn't populate cloud public_ssh_port" do
269
+ @plugin[:azure]['public_ssh_port'] = "22"
270
+ @plugin.run
271
+ @plugin[:cloud_v2][:public_ssh_port].should be_nil
272
+ end
273
+
274
+ it "should not populate cloud public_ssh_port when winrm is used" do
275
+ @plugin[:azure]['public_winrm_port'] = "5985"
276
+ @plugin.run
277
+ @plugin[:cloud_v2][:public_ssh_port].should be_nil
278
+ end
279
+
280
+ it "populates cloud public_winrm_port" do
281
+ @plugin[:azure]['public_winrm_port'] = "5985"
282
+ @plugin.run
283
+ @plugin[:cloud_v2][:public_winrm_port].should be_nil
284
+ end
285
+
286
+ it "populates cloud provider" do
287
+ @plugin.run
288
+ @plugin[:cloud_v2][:provider].should == "azure"
289
+ end
290
+ end
291
+
292
+ end
@@ -0,0 +1,33 @@
1
+ #
2
+ # Author:: Richard Manyanza (<liseki@nyikacraftsmen.com>)
3
+ # Copyright:: Copyright (c) 2014 Richard Manyanza.
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
+
20
+ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper.rb')
21
+
22
+ describe Ohai::System, "FreeBSD plugin os" do
23
+ before(:each) do
24
+ @plugin = get_plugin("freebsd/os")
25
+ @plugin.stub(:shell_out).with("sysctl -n kern.osreldate").and_return(mock_shell_out(0, "902001\n", ""))
26
+ @plugin.stub(:collect_os).and_return(:freebsd)
27
+ end
28
+
29
+ it "should set os_version to __FreeBSD_version" do
30
+ @plugin.run
31
+ @plugin[:os_version].should == "902001"
32
+ end
33
+ end
@@ -28,11 +28,11 @@ describe Ohai::System, "plugin java (Java5 Client VM)" do
28
28
  shared_examples_for "when the JRE is installed" do
29
29
  before do
30
30
  @stderr = "java version \"1.5.0_16\"\nJava(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284)\nJava HotSpot(TM) Client VM (build 1.5.0_16-133, mixed mode, sharing)"
31
- @plugin.stub(:shell_out).with("java -version").and_return(mock_shell_out(0, "", @stderr))
31
+ @plugin.stub(:shell_out).with("java -mx64m -version").and_return(mock_shell_out(0, "", @stderr))
32
32
  end
33
33
 
34
- it "should run java -version" do
35
- @plugin.should_receive(:shell_out).with("java -version").and_return(mock_shell_out(0, "", @stderr))
34
+ it "should run java -mx64m -version" do
35
+ @plugin.should_receive(:shell_out).with("java -mx64m -version").and_return(mock_shell_out(0, "", @stderr))
36
36
  @plugin.run
37
37
  end
38
38
 
@@ -63,7 +63,7 @@ describe Ohai::System, "plugin java (Java5 Client VM)" do
63
63
 
64
64
  it "should not set the languages[:java] tree up if java command fails" do
65
65
  @stderr = "Some error output here"
66
- @plugin.stub(:shell_out).with("java -version").and_return(mock_shell_out(1, "", @stderr))
66
+ @plugin.stub(:shell_out).with("java -mx64m -version").and_return(mock_shell_out(1, "", @stderr))
67
67
  @plugin.run
68
68
  @plugin[:languages].should_not have_key(:java)
69
69
  end
@@ -73,11 +73,11 @@ describe Ohai::System, "plugin java (Java5 Client VM)" do
73
73
 
74
74
  before(:each) do
75
75
  @stderr = "java version \"1.6.0_22\"\nJava(TM) 2 Runtime Environment (build 1.6.0_22-b04)\nJava HotSpot(TM) Server VM (build 17.1-b03, mixed mode)"
76
- @plugin.stub(:shell_out).with("java -version").and_return(mock_shell_out(0, "", @stderr))
76
+ @plugin.stub(:shell_out).with("java -mx64m -version").and_return(mock_shell_out(0, "", @stderr))
77
77
  end
78
78
 
79
- it "should run java -version" do
80
- @plugin.should_receive(:shell_out).with("java -version").and_return(mock_shell_out(0, "", @stderr))
79
+ it "should run java -mx64m -version" do
80
+ @plugin.should_receive(:shell_out).with("java -mx64m -version").and_return(mock_shell_out(0, "", @stderr))
81
81
  @plugin.run
82
82
  end
83
83
 
@@ -108,7 +108,7 @@ describe Ohai::System, "plugin java (Java5 Client VM)" do
108
108
 
109
109
  it "should not set the languages[:java] tree up if java command fails" do
110
110
  @stderr = "Some error output here"
111
- @plugin.stub(:shell_out).with("java -version").and_return(mock_shell_out(0, "", @stderr))
111
+ @plugin.stub(:shell_out).with("java -mx64m -version").and_return(mock_shell_out(0, "", @stderr))
112
112
  @plugin.run
113
113
  @plugin[:languages].should_not have_key(:java)
114
114
  end
@@ -159,7 +159,7 @@ describe Ohai::System, "plugin java (Java5 Client VM)" do
159
159
  end
160
160
 
161
161
  it "does not attempt to get java info" do
162
- @plugin.should_not_receive(:shell_out).with("java -version")
162
+ @plugin.should_not_receive(:shell_out).with("java -mx64m -version")
163
163
  @plugin.run
164
164
  @plugin[:languages].should_not have_key(:java)
165
165
  end
@@ -32,6 +32,7 @@ describe Ohai::System, "Linux virtualization platform" do
32
32
  File.stub(:exists?).with("/proc/self/status").and_return(false)
33
33
  File.stub(:exists?).with("/proc/bc/0").and_return(false)
34
34
  File.stub(:exists?).with("/proc/vz").and_return(false)
35
+ File.stub(:exists?).with("/proc/self/cgroup").and_return(false)
35
36
  end
36
37
 
37
38
  describe "when we are checking for xen" do
@@ -262,6 +263,85 @@ VBOX
262
263
  end
263
264
  end
264
265
 
266
+ describe "when we are checking for lxc" do
267
+ it "should set lxc guest if /proc/self/cgroup exist and there are /lxc/<hexadecimal> mounts" do
268
+ self_cgroup=<<-CGROUP
269
+ 8:blkio:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
270
+ 7:net_cls:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
271
+ 6:freezer:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
272
+ 5:devices:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
273
+ 4:memory:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
274
+ 3:cpuacct:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
275
+ 2:cpu:/lxc/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
276
+ 1:cpuset:/
277
+ CGROUP
278
+ File.should_receive(:exists?).with("/proc/self/cgroup").and_return(true)
279
+ File.stub(:read).with("/proc/self/cgroup").and_return(self_cgroup)
280
+ @plugin.run
281
+ @plugin[:virtualization][:system].should == "lxc"
282
+ @plugin[:virtualization][:role].should == "guest"
283
+ end
284
+
285
+ it "should set lxc guest if /proc/self/cgroup exist and there are /lxc/<name> mounts" do
286
+ self_cgroup=<<-CGROUP
287
+ 8:blkio:/lxc/vanilla
288
+ 7:net_cls:/lxc/vanilla
289
+ 6:freezer:/lxc/vanilla
290
+ 5:devices:/lxc/vanilla
291
+ 4:memory:/lxc/vanilla
292
+ 3:cpuacct:/lxc/vanilla
293
+ 2:cpu:/lxc/vanilla
294
+ 1:cpuset:/lxc/vanilla
295
+ CGROUP
296
+ File.should_receive(:exists?).with("/proc/self/cgroup").and_return(true)
297
+ File.stub(:read).with("/proc/self/cgroup").and_return(self_cgroup)
298
+ @plugin.run
299
+ @plugin[:virtualization][:system].should == "lxc"
300
+ @plugin[:virtualization][:role].should == "guest"
301
+ end
302
+
303
+ it "should set not set anyting if /proc/self/cgroup exist and the cgroup is named arbitrarily, it isn't necessarily lxc." do
304
+ self_cgroup=<<-CGROUP
305
+ 8:blkio:/Charlie
306
+ 7:net_cls:/Charlie
307
+ 6:freezer:/Charlie
308
+ 5:devices:/Charlie
309
+ 4:memory:/Charlie
310
+ 3:cpuacct:/Charlie
311
+ 2:cpu:/Charlie
312
+ 1:cpuset:/Charlie
313
+ CGROUP
314
+ File.should_receive(:exists?).with("/proc/self/cgroup").and_return(true)
315
+ File.stub(:read).with("/proc/self/cgroup").and_return(self_cgroup)
316
+ @plugin.run
317
+ @plugin[:virtualization].should == {}
318
+ end
319
+
320
+ it "should set lxc host if /proc/self/cgroup only has / mounts" do
321
+ self_cgroup=<<-CGROUP
322
+ 8:blkio:/
323
+ 7:net_cls:/
324
+ 6:freezer:/
325
+ 5:devices:/
326
+ 4:memory:/
327
+ 3:cpuacct:/
328
+ 2:cpu:/
329
+ 1:cpuset:/
330
+ CGROUP
331
+ File.should_receive(:exists?).with("/proc/self/cgroup").and_return(true)
332
+ File.stub(:read).with("/proc/self/cgroup").and_return(self_cgroup)
333
+ @plugin.run
334
+ @plugin[:virtualization][:system].should == "lxc"
335
+ @plugin[:virtualization][:role].should == "host"
336
+ end
337
+
338
+ it "should not set virtualization if /proc/self/cgroup isn't there" do
339
+ File.should_receive(:exists?).with("/proc/self/cgroup").and_return(false)
340
+ @plugin.run
341
+ @plugin[:virtualization].should == {}
342
+ end
343
+ end
344
+
265
345
  it "should not set virtualization if no tests match" do
266
346
  @plugin.run
267
347
  @plugin[:virtualization].should == {}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ohai
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.0.rc.1
4
+ version: 7.0.0.rc.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-30 00:00:00.000000000 Z
11
+ date: 2014-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mime-types
@@ -250,6 +250,7 @@ files:
250
250
  - lib/ohai/plugins/c.rb
251
251
  - lib/ohai/plugins/chef.rb
252
252
  - lib/ohai/plugins/cloud.rb
253
+ - lib/ohai/plugins/cloud_v2.rb
253
254
  - lib/ohai/plugins/command.rb
254
255
  - lib/ohai/plugins/darwin/cpu.rb
255
256
  - lib/ohai/plugins/darwin/filesystem.rb
@@ -264,6 +265,7 @@ files:
264
265
  - lib/ohai/plugins/freebsd/filesystem.rb
265
266
  - lib/ohai/plugins/freebsd/memory.rb
266
267
  - lib/ohai/plugins/freebsd/network.rb
268
+ - lib/ohai/plugins/freebsd/os.rb
267
269
  - lib/ohai/plugins/freebsd/platform.rb
268
270
  - lib/ohai/plugins/freebsd/virtualization.rb
269
271
  - lib/ohai/plugins/gce.rb
@@ -382,6 +384,7 @@ files:
382
384
  - spec/unit/plugins/c_spec.rb
383
385
  - spec/unit/plugins/chef_spec.rb
384
386
  - spec/unit/plugins/cloud_spec.rb
387
+ - spec/unit/plugins/cloud_v2_spec.rb
385
388
  - spec/unit/plugins/darwin/cpu_spec.rb
386
389
  - spec/unit/plugins/darwin/hostname_spec.rb
387
390
  - spec/unit/plugins/darwin/kernel_spec.rb
@@ -396,6 +399,7 @@ files:
396
399
  - spec/unit/plugins/fail_spec.rb
397
400
  - spec/unit/plugins/freebsd/hostname_spec.rb
398
401
  - spec/unit/plugins/freebsd/kernel_spec.rb
402
+ - spec/unit/plugins/freebsd/os_spec.rb
399
403
  - spec/unit/plugins/freebsd/platform_spec.rb
400
404
  - spec/unit/plugins/freebsd/virtualization_spec.rb
401
405
  - spec/unit/plugins/gce_spec.rb