baton 0.3.6

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 (49) hide show
  1. data/.gitignore +19 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +6 -0
  4. data/COPYING +8 -0
  5. data/Gemfile +10 -0
  6. data/Guardfile +6 -0
  7. data/README.md +77 -0
  8. data/Rakefile +10 -0
  9. data/baton.gemspec +30 -0
  10. data/bin/batonize +60 -0
  11. data/lib/baton.rb +13 -0
  12. data/lib/baton/api.rb +27 -0
  13. data/lib/baton/channel.rb +47 -0
  14. data/lib/baton/configuration.rb +63 -0
  15. data/lib/baton/consumer.rb +89 -0
  16. data/lib/baton/consumer_manager.rb +67 -0
  17. data/lib/baton/logging.rb +18 -0
  18. data/lib/baton/observer.rb +74 -0
  19. data/lib/baton/server.rb +68 -0
  20. data/lib/baton/service.rb +55 -0
  21. data/lib/baton/templates/gem/Gemfile.tt +5 -0
  22. data/lib/baton/templates/gem/LICENSE.tt +22 -0
  23. data/lib/baton/templates/gem/README.md.tt +29 -0
  24. data/lib/baton/templates/gem/Rakefile.tt +6 -0
  25. data/lib/baton/templates/gem/bin/gem-monitor.tt +10 -0
  26. data/lib/baton/templates/gem/bin/gem.tt +12 -0
  27. data/lib/baton/templates/gem/config/gem.cfg.tt +4 -0
  28. data/lib/baton/templates/gem/gem.gemspec.tt +22 -0
  29. data/lib/baton/templates/gem/gitignore.tt +17 -0
  30. data/lib/baton/templates/gem/lib/baton/gem.rb.tt +15 -0
  31. data/lib/baton/templates/gem/lib/baton/gem/gem-api.rb.tt +17 -0
  32. data/lib/baton/templates/gem/lib/baton/gem/gem-consumer.rb.tt +26 -0
  33. data/lib/baton/templates/gem/lib/baton/gem/gem-monitor.rb.tt +32 -0
  34. data/lib/baton/templates/gem/lib/baton/gem/version.rb.tt +7 -0
  35. data/lib/baton/version.rb +3 -0
  36. data/spec/baton/baton_spec.rb +13 -0
  37. data/spec/baton/configuration_spec.rb +54 -0
  38. data/spec/baton/consumer_manager_spec.rb +72 -0
  39. data/spec/baton/consumer_spec.rb +63 -0
  40. data/spec/baton/server_spec.rb +64 -0
  41. data/spec/fixtures/config.cfg +4 -0
  42. data/spec/fixtures/facts.json +1776 -0
  43. data/spec/fixtures/file +1 -0
  44. data/spec/fixtures/file.sum +1 -0
  45. data/spec/fixtures/invalid_facts.json +1774 -0
  46. data/spec/fixtures/invalid_file +1 -0
  47. data/spec/fixtures/invalid_file.sum +1 -0
  48. data/spec/spec_helper.rb +12 -0
  49. metadata +236 -0
@@ -0,0 +1,17 @@
1
+ require "baton"
2
+ require "baton/api"
3
+ require "json"
4
+
5
+ module Baton
6
+ class <%= config[:constant_array].last %>API < Baton::API
7
+
8
+ # TODO - delete the dummy api method and add your own api
9
+ # at this point, you can call methods on your project to
10
+ # return meaningful responses (deploy status, for example)
11
+ def self.dummy(env)
12
+ message = {type: "dummy"}
13
+ publish(message.to_json, "#{env}")
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,26 @@
1
+ module Baton
2
+ class <%= config[:constant_array].last %>Consumer < Baton::Consumer
3
+
4
+ def process_message(message)
5
+ # TODO - listen to message types related to your gem
6
+ case message["type"]
7
+ when "dummy"
8
+ logger.info "received message dummy for #{consumer_name}: #{message}"
9
+ notify(attributes)
10
+ else
11
+ raise Exception, "Unknown message type for #{consumer_name}: #{message}"
12
+ end
13
+ end
14
+
15
+ def routing_key
16
+ # TODO - use a routing key that makes sense to your gem
17
+ "#{server.environment}"
18
+ end
19
+
20
+ def attributes
21
+ # TODO - define what output attributes should be sent to listeners
22
+ {type: "<%= config[:name] %>-response"}.merge(server.attributes)
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,32 @@
1
+ require "baton"
2
+ require "amqp"
3
+ require "json"
4
+ require "eventmachine"
5
+
6
+ module Baton
7
+ class <%= config[:constant_array].last %>Monitor
8
+ include Baton::Logging
9
+
10
+ def self.run
11
+ monitor = <%= config[:constant_array].last %>Monitor.new
12
+ monitor.run
13
+ end
14
+
15
+ def run
16
+ logger.info "Starting <%= config[:name] %> monitor v#{Baton::VERSION}"
17
+ EM.run do
18
+ connection = AMQP.connect(Baton.configuration.connection_opts)
19
+
20
+ channel = AMQP::Channel.new(connection)
21
+ queue = channel.queue("<%= config[:name] %>-monitor")
22
+ exchange_out = channel.direct(Baton.configuration.exchange_out)
23
+
24
+ queue.bind(exchange_out).subscribe do |payload|
25
+ logger.info "Message read: #{payload}"
26
+ #TODO Do something with the payload here
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,7 @@
1
+ <%- config[:constant_array].each_with_index do |c,i| -%>
2
+ <%= ' '*i %>module <%= c %>
3
+ <%- end -%>
4
+ <%= ' '*config[:constant_array].size %>VERSION = "0.0.1"
5
+ <%- (config[:constant_array].size-1).downto(0) do |i| -%>
6
+ <%= ' '*i %>end
7
+ <%- end -%>
@@ -0,0 +1,3 @@
1
+ module Baton
2
+ VERSION = "0.3.6"
3
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+ require "baton"
3
+
4
+ describe Baton do
5
+ describe ".configure" do
6
+ it "will allow configuration by passing a block in" do
7
+ Baton.configure do |c|
8
+ c.pusher_key = "foo"
9
+ end
10
+ Baton.configuration.pusher_key.should eq("foo")
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,54 @@
1
+ require "spec_helper"
2
+ require "baton/configuration"
3
+
4
+ describe Baton::Configuration do
5
+ describe "#config_path=" do
6
+ context "given config file available" do
7
+ before(:each) do
8
+ subject.config_path = "#{File.dirname(__FILE__)}/../fixtures/config.cfg"
9
+ end
10
+
11
+ it "will set the host" do
12
+ subject.host.should eq("fromconfig.com")
13
+ end
14
+
15
+ it "will set the vhost" do
16
+ subject.vhost.should eq("fromconfig")
17
+ end
18
+
19
+ it "will set the user" do
20
+ subject.user.should eq("fromconfiguser")
21
+ end
22
+
23
+ it "will set the password" do
24
+ subject.password.should eq("fromconfigpass")
25
+ end
26
+ end
27
+
28
+ context "given a non existing file" do
29
+ it "will log an erorr" do
30
+ subject.logger.should_receive(:error).with("Could not find a baton configuration file at bad_path")
31
+ subject.config_path = "bad_path"
32
+ end
33
+ end
34
+ end
35
+
36
+ describe "#connection_opts" do
37
+ before(:each) do
38
+ subject.config_path = "#{File.dirname(__FILE__)}/../fixtures/config.cfg"
39
+ end
40
+
41
+ context "give a config file" do
42
+ it "will return a config hash" do
43
+ subject.connection_opts.should eq({:host=>"fromconfig.com", :vhost=>"fromconfig", :user=>"fromconfiguser", :password=>"fromconfigpass", :pass=>"fromconfigpass"})
44
+ end
45
+ end
46
+
47
+ context "given one of the configuration options is nil" do
48
+ it "will not be returned in the config hash" do
49
+ subject.vhost = nil
50
+ subject.connection_opts.should eq({:host=>"fromconfig.com", :user=>"fromconfiguser", :password=>"fromconfigpass", :pass=>"fromconfigpass"})
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,72 @@
1
+ require "spec_helper"
2
+ require "baton"
3
+ require "baton/consumer"
4
+ require "baton/consumer_manager"
5
+ require "baton/server"
6
+ require "ostruct"
7
+
8
+ describe Baton::ConsumerManager do
9
+
10
+ before :each do
11
+ Baton::Server.any_instance.stub(:facts).and_return({
12
+ "fqdn" => "camac.dsci.it",
13
+ "chef_environment" => "production"
14
+ })
15
+ server = Baton::Server.new
16
+ @consumer = Baton::Consumer.new("camac", server)
17
+ end
18
+
19
+ subject {
20
+ Baton::ConsumerManager.new(@consumer, nil, mock_exchange({:direct => true}), mock_exchange({:direct => true}))
21
+ }
22
+
23
+ let(:metadata) do
24
+ obj = OpenStruct.new
25
+ obj.content_type = "application/json"
26
+ obj
27
+ end
28
+
29
+ let(:payload) do
30
+ JSON({"type" => "message type" })
31
+ end
32
+
33
+ describe "#start" do
34
+ it "will subscribe to a queue using the correct routing key" do
35
+ subject.exchange_in.stub(:name)
36
+ allow_message_expectations_on_nil
37
+ queue = mock("queue")
38
+ queue.should_receive(:bind).with(subject.exchange_in, routing_key: "camac.production")
39
+ queue.should_receive(:subscribe)
40
+ subject.channel.stub(:queue).and_return(queue)
41
+ subject.start
42
+ end
43
+ end
44
+
45
+ describe "#handle_message" do
46
+ include FakeFS::SpecHelpers
47
+
48
+ context "given a message" do
49
+ it "should forward the payload to the consumer" do
50
+ subject.consumer.should_receive(:handle_message).with(payload)
51
+ subject.handle_message(metadata, payload)
52
+ end
53
+
54
+ it "should call process_message on the consumer" do
55
+ subject.consumer.should_receive(:process_message)
56
+ subject.handle_message(metadata, payload)
57
+ end
58
+ end
59
+ end
60
+
61
+ describe "#update" do
62
+ context "given a message is sent to the consumer and the consumer notifies" do
63
+ it "should trigger update with a message" do
64
+ @consumer.stub(:process_message) do |message|
65
+ @consumer.notify("message from consumer")
66
+ end
67
+ subject.should_receive(:update)
68
+ subject.handle_message(metadata, payload)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,63 @@
1
+ require "spec_helper"
2
+ require "baton"
3
+ require "baton/consumer"
4
+ require "baton/server"
5
+ require 'ostruct'
6
+
7
+ describe Baton::Consumer do
8
+
9
+ before :each do
10
+ Baton::Server.any_instance.stub(:facts).and_return({
11
+ "fqdn" => "camac.dsci.it",
12
+ "chef_environment" => "production"
13
+ })
14
+ @server = Baton::Server.new
15
+ end
16
+
17
+ let(:payload) do
18
+ JSON({"type" => "message type" })
19
+ end
20
+
21
+ subject {
22
+ Baton::Consumer.new("deploy-consumer", @server)
23
+ }
24
+
25
+ describe "#routing_key" do
26
+ context "given an instance of Baton::Consumer" do
27
+ it "should return a routing key" do
28
+ subject.routing_key.should eq("deploy-consumer.production")
29
+ end
30
+ end
31
+ end
32
+
33
+ describe "#exception_notifier" do
34
+ context "given a block that doesn't raise an error" do
35
+ it "should not raise an error" do
36
+ expect{
37
+ subject.exception_notifier do
38
+ a = 1
39
+ end
40
+ }.to_not raise_error
41
+ end
42
+ end
43
+
44
+ context "given a block that raises an error" do
45
+ it "should catch the error notify" do
46
+ subject.should_receive(:notify_error)
47
+ subject.exception_notifier do
48
+ raise
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "#handle_message" do
55
+ context "given a payload" do
56
+ it "should call process_message" do
57
+ subject.should_receive(:process_message).with(JSON.parse(payload))
58
+ subject.handle_message(payload)
59
+ end
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+ require "baton/server"
3
+
4
+ describe Baton::Server do
5
+
6
+ describe "#configure" do
7
+ context "given a facts file" do
8
+ before :each do
9
+ Baton::Server.any_instance.stub(:facts_path).and_return("#{File.dirname(__FILE__)}/../fixtures/facts.json")
10
+ end
11
+
12
+ it "will set the fqdn" do
13
+ subject.fqdn.should eq("build-prod-i-722b0004.dsci.it")
14
+ end
15
+
16
+ it "will set the environment" do
17
+ subject.environment.should eq("production")
18
+ end
19
+
20
+ it "will set the apps" do
21
+ subject.app_names.first.should eq("octobutler")
22
+ end
23
+ end
24
+
25
+ context "given an invalid facts file" do
26
+ before :each do
27
+ Baton::Server.any_instance.stub(:facts_path).and_return("#{File.dirname(__FILE__)}/../fixtures/invalid_facts.json")
28
+ end
29
+
30
+ it "will raise an exception" do
31
+ expect{subject.configure}.to raise_error(JSON::ParserError)
32
+ end
33
+ end
34
+
35
+ context "given a facts file doesn't exist" do
36
+ before :each do
37
+ Baton::Server.any_instance.stub(:facts_path).and_return("/foo/bar")
38
+ end
39
+
40
+ it "will raise an exception" do
41
+ expect{subject.configure}.to raise_error(Errno::ENOENT)
42
+ end
43
+ end
44
+
45
+ context "given the required facts are not available" do
46
+ before(:each) do
47
+ Baton::Server.any_instance.stub(:facts).and_return({})
48
+ subject.configure
49
+ end
50
+
51
+ it "will default the fqdn to an empty string" do
52
+ subject.fqdn.should be_empty
53
+ end
54
+
55
+ it "will default environment to development" do
56
+ subject.environment.should eq("development")
57
+ end
58
+
59
+ it "will default apps to an empty array" do
60
+ subject.app_names.should be_empty
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,4 @@
1
+ RABBIT_HOST: fromconfig.com
2
+ RABBIT_VHOST: fromconfig
3
+ RABBIT_USER: fromconfiguser
4
+ RABBIT_PASS: fromconfigpass
@@ -0,0 +1,1776 @@
1
+ {
2
+ "dmi": {
3
+ "dmidecode_version": "2.9"
4
+ },
5
+ "keys": {
6
+ "ssh": {
7
+ "host_dsa_public": "AAAAB3NzaC1kc3MAAACBANeoX28hbkZw4GdMSX+9l2ae9cZLU4nmlWQ+Co/e+JXGqdsQxRTEEy+Sk2vtKkDZryd8fMHhrEiaU+o3ZHEeL5XGmYIyRVxrbAfCJjSmigALhi2hzNm6i5ycari8C8Z7hMGr60QRnQoIVWtZMg9KvbLhfzQxa+QDsZowBLZVkkEDAAAAFQCYzfGphnUzfamoCk84xoYk7hxLZwAAAIAsiJ4oDY2e3lA2cK6VOCkDirghauhpanaJY1g1htlKS6B2LGWy3BQs/O6Jpsrhn5QvEk37j71IyMkjexiUM7aaG+NHx8qtDf0Ld9EEMH9NG3eIkpoyLWPi5yYFlSi7w+wVnDCzfX7RyeQh/0X+PwkZPrjcvB7+rRLoP073EjWskAAAAIEAsi5nDDa1PAkAnN0WczZv/mHc1AuX2Ru6lHfem6t119oTgy9nl3P/th+ggFCzDb6JDnPExndpd/skX+AgQtSP/DWHUhinlEipjSQtEircw5fVdhm0t3Y95csKk5G7NrQ+WCOEdaAnfRL2nz6vIg9X4CY8Otow7I2EJBK35ULadkg=",
8
+ "host_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQDmyLXaLdhuB0Fg2OYF7OIWZecK+oU2EzPAJiIRHyKECEvhqWyxPyLXwQe17J1LClK6RQ4IjJsIIzwdxDnMGj40NBa277RtOnTjCxqqlO/cE2pTXTsc79RIWeEddMjnI5lyIEzO4013PA1rHZsrxItQYXTGNVhUz3UcLYMDgtBbBKDUDmX0KgdpJJBBOy1NivcJNg1AaW+98XhyxE8w90O2Mp5dLVhztLNzpM6BdZCAMt+OYzIARVRuLK1kOilU7I9682VivXcyF8862jRimha6vl4FfbIyDQ4SlgquBPqAMvhRGsmD+zmg4wjHZJchzAWDTsAaL17PCp90p8FL7dlR"
9
+ }
10
+ },
11
+ "kernel": {
12
+ "modules": {
13
+ "msdos": {
14
+ "size": "17333",
15
+ "refcount": "0"
16
+ },
17
+ "ufs": {
18
+ "size": "75815",
19
+ "refcount": "0"
20
+ },
21
+ "fat": {
22
+ "size": "61374",
23
+ "refcount": "2"
24
+ },
25
+ "libcrc32c": {
26
+ "size": "12644",
27
+ "refcount": "1"
28
+ },
29
+ "btrfs": {
30
+ "size": "550402",
31
+ "refcount": "0"
32
+ },
33
+ "exportfs": {
34
+ "size": "12998",
35
+ "refcount": "1"
36
+ },
37
+ "xfs": {
38
+ "size": "819034",
39
+ "refcount": "0"
40
+ },
41
+ "vfat": {
42
+ "size": "21708",
43
+ "refcount": "0"
44
+ },
45
+ "zlib_deflate": {
46
+ "size": "27074",
47
+ "refcount": "1"
48
+ },
49
+ "raid1": {
50
+ "size": "30596",
51
+ "refcount": "1"
52
+ },
53
+ "acpiphp": {
54
+ "size": "24097",
55
+ "refcount": "0"
56
+ }
57
+ },
58
+ "machine": "x86_64",
59
+ "name": "Linux",
60
+ "os": "GNU/Linux",
61
+ "version": "#42-Ubuntu SMP Mon Apr 11 04:06:34 UTC 2011",
62
+ "release": "2.6.38-8-virtual"
63
+ },
64
+ "trebuchet": [
65
+ "octobutler"
66
+ ],
67
+ "platform_version": "11.04",
68
+ "fqdn": "build-prod-i-722b0004.dsci.it",
69
+ "filesystem": {
70
+ "proc": {
71
+ "mount_options": [
72
+ "rw",
73
+ "noexec",
74
+ "nosuid",
75
+ "nodev"
76
+ ],
77
+ "fs_type": "proc",
78
+ "mount": "/proc"
79
+ },
80
+ "/dev/xvdh": {
81
+ "kb_size": "258030980",
82
+ "kb_available": "207732596",
83
+ "mount_options": [
84
+ "rw",
85
+ "user_xattr",
86
+ "acl"
87
+ ],
88
+ "fs_type": "ext4",
89
+ "mount": "/srv/artifacts",
90
+ "percent_used": "16%",
91
+ "kb_used": "37191184"
92
+ },
93
+ "none": {
94
+ "kb_size": "3822980",
95
+ "kb_available": "3822980",
96
+ "mount_options": [
97
+ "rw",
98
+ "noexec",
99
+ "nosuid",
100
+ "nodev"
101
+ ],
102
+ "fs_type": "tmpfs",
103
+ "mount": "/var/lock",
104
+ "percent_used": "0%",
105
+ "kb_used": "0"
106
+ },
107
+ "/dev/xvda1": {
108
+ "kb_size": "10321208",
109
+ "kb_available": "1912864",
110
+ "mount": "/",
111
+ "percent_used": "81%",
112
+ "kb_used": "7884068"
113
+ },
114
+ "rootfs": {
115
+ "mount_options": [
116
+ "rw"
117
+ ],
118
+ "fs_type": "rootfs",
119
+ "mount": "/"
120
+ },
121
+ "/dev/md0": {
122
+ "kb_size": "51605044",
123
+ "kb_available": "25579232",
124
+ "mount_options": [
125
+ "rw",
126
+ "user_xattr",
127
+ "acl"
128
+ ],
129
+ "fs_type": "ext4",
130
+ "mount": "/srv",
131
+ "percent_used": "48%",
132
+ "kb_used": "23404428"
133
+ },
134
+ "/dev/xvdb": {
135
+ "kb_size": "433455904",
136
+ "kb_available": "411067052",
137
+ "mount_options": [
138
+ "rw",
139
+ "_netdev"
140
+ ],
141
+ "fs_type": "ext3",
142
+ "mount": "/mnt",
143
+ "percent_used": "1%",
144
+ "kb_used": "370548"
145
+ },
146
+ "/dev/disk/by-label/uec-rootfs": {
147
+ "mount_options": [
148
+ "rw",
149
+ "relatime",
150
+ "barrier=1",
151
+ "data=ordered"
152
+ ],
153
+ "fs_type": "ext4",
154
+ "mount": "/"
155
+ }
156
+ },
157
+ "command": {
158
+ "ps": "ps -ef"
159
+ },
160
+ "ipaddress": "10.49.127.51",
161
+ "memory": {
162
+ "dirty": "40kB",
163
+ "vmalloc_used": "24244kB",
164
+ "page_tables": "13324kB",
165
+ "buffers": "280020kB",
166
+ "slab_unreclaim": "29768kB",
167
+ "vmalloc_chunk": "34359714040kB",
168
+ "nfs_unstable": "0kB",
169
+ "slab": "417608kB",
170
+ "inactive": "2031824kB",
171
+ "total": "7645964kB",
172
+ "vmalloc_total": "34359738367kB",
173
+ "free": "822004kB",
174
+ "commit_limit": "3822980kB",
175
+ "anon_pages": "1653640kB",
176
+ "writeback": "0kB",
177
+ "cached": "4298884kB",
178
+ "swap": {
179
+ "total": "0kB",
180
+ "free": "0kB",
181
+ "cached": "0kB"
182
+ },
183
+ "committed_as": "1806992kB",
184
+ "bounce": "0kB",
185
+ "slab_reclaimable": "387840kB",
186
+ "mapped": "35280kB",
187
+ "active": "4198020kB"
188
+ },
189
+ "idletime_seconds": 39960709,
190
+ "counters": {
191
+ "network": {
192
+ "interfaces": {
193
+ "lo": {
194
+ "tx": {
195
+ "bytes": "56836935509",
196
+ "packets": "110809386",
197
+ "collisions": "0",
198
+ "queuelen": "0",
199
+ "errors": "0",
200
+ "carrier": "0",
201
+ "overrun": "0",
202
+ "drop": "0"
203
+ },
204
+ "rx": {
205
+ "bytes": "56836935509",
206
+ "packets": "110809386",
207
+ "errors": "0",
208
+ "overrun": "0",
209
+ "drop": "0",
210
+ "frame": "0"
211
+ }
212
+ },
213
+ "eth0": {
214
+ "tx": {
215
+ "bytes": "51057244883",
216
+ "packets": "43867081",
217
+ "collisions": "0",
218
+ "queuelen": "1000",
219
+ "errors": "0",
220
+ "carrier": "0",
221
+ "overrun": "0",
222
+ "drop": "0"
223
+ },
224
+ "rx": {
225
+ "bytes": "14606504973",
226
+ "packets": "52098210",
227
+ "errors": "0",
228
+ "overrun": "0",
229
+ "drop": "0",
230
+ "frame": "0"
231
+ }
232
+ }
233
+ }
234
+ }
235
+ },
236
+ "chef_environment": "Production",
237
+ "domain": "dsci.it",
238
+ "os": "linux",
239
+ "idletime": "462 days 12 hours 11 minutes 49 seconds",
240
+ "virtualization": {
241
+
242
+ },
243
+ "lsb": {
244
+ "codename": "natty",
245
+ "id": "Ubuntu",
246
+ "description": "\"Ubuntu 11.04\"",
247
+ "release": "11.04"
248
+ },
249
+ "network": {
250
+ "default_interface": "eth0",
251
+ "interfaces": {
252
+ "lo": {
253
+ "flags": [
254
+ "UP",
255
+ "LOOPBACK",
256
+ "RUNNING"
257
+ ],
258
+ "addresses": {
259
+ "::1": {
260
+ "scope": "Node",
261
+ "prefixlen": "128",
262
+ "family": "inet6"
263
+ },
264
+ "127.0.0.1": {
265
+ "netmask": "255.0.0.0",
266
+ "family": "inet"
267
+ }
268
+ },
269
+ "mtu": "16436",
270
+ "encapsulation": "Loopback"
271
+ },
272
+ "eth0": {
273
+ "flags": [
274
+ "UP",
275
+ "BROADCAST",
276
+ "RUNNING",
277
+ "MULTICAST"
278
+ ],
279
+ "number": "0",
280
+ "addresses": {
281
+ "10.49.127.51": {
282
+ "netmask": "255.255.254.0",
283
+ "broadcast": "10.49.127.255",
284
+ "family": "inet"
285
+ },
286
+ "12:31:3c:04:7c:c5": {
287
+ "family": "lladdr"
288
+ },
289
+ "fe80::1031:3cff:fe04:7cc5": {
290
+ "scope": "Link",
291
+ "prefixlen": "64",
292
+ "family": "inet6"
293
+ }
294
+ },
295
+ "mtu": "1500",
296
+ "type": "eth",
297
+ "arp": {
298
+ "10.49.126.1": "fe:ff:ff:ff:ff:ff"
299
+ },
300
+ "encapsulation": "Ethernet"
301
+ }
302
+ },
303
+ "default_gateway": "10.49.126.1"
304
+ },
305
+ "current_user": "c.vilhena",
306
+ "ohai_time": 1322580299.92025,
307
+ "chef_packages": {
308
+ "ohai": {
309
+ "ohai_root": "/usr/lib/ruby/1.8/ohai",
310
+ "version": "0.6.4"
311
+ },
312
+ "chef": {
313
+ "version": "0.10.4",
314
+ "chef_root": "/usr/lib/ruby/vendor_ruby"
315
+ }
316
+ },
317
+ "os_version": "2.6.38-8-virtual",
318
+ "languages": {
319
+ "java": {
320
+ "hotspot": {
321
+ "name": "Java HotSpot(TM) 64-Bit Server VM",
322
+ "build": "20.1-b02, mixed mode"
323
+ },
324
+ "runtime": {
325
+ "name": "Java(TM) SE Runtime Environment",
326
+ "build": "1.6.0_26-b03"
327
+ },
328
+ "version": "1.6.0_26"
329
+ },
330
+ "perl": {
331
+ "version": "5.10.1",
332
+ "archname": "x86_64-linux-gnu-thread-multi"
333
+ },
334
+ "python": {
335
+ "version": "2.7.1+",
336
+ "builddate": "Apr 11 2011, 18:13:53"
337
+ },
338
+ "ruby": {
339
+ "target_os": "linux",
340
+ "bin_dir": "/usr/bin",
341
+ "target_vendor": "pc",
342
+ "host_vendor": "pc",
343
+ "ruby_bin": "/usr/bin/ruby1.8",
344
+ "target_cpu": "x86_64",
345
+ "version": "1.8.7",
346
+ "host_os": "linux-gnu",
347
+ "target": "x86_64-pc-linux-gnu",
348
+ "release_date": "2010-08-16",
349
+ "host_cpu": "x86_64",
350
+ "host": "x86_64-pc-linux-gnu",
351
+ "gems_dir": "/var/lib/gems/1.8",
352
+ "platform": "x86_64-linux"
353
+ }
354
+ },
355
+ "cpu": {
356
+ "real": 0,
357
+ "total": 2,
358
+ "0": {
359
+ "flags": [
360
+ "fpu",
361
+ "de",
362
+ "tsc",
363
+ "msr",
364
+ "pae",
365
+ "cx8",
366
+ "sep",
367
+ "cmov",
368
+ "pat",
369
+ "clflush",
370
+ "mmx",
371
+ "fxsr",
372
+ "sse",
373
+ "sse2",
374
+ "ss",
375
+ "ht",
376
+ "syscall",
377
+ "nx",
378
+ "lm",
379
+ "constant_tsc",
380
+ "rep_good",
381
+ "nopl",
382
+ "nonstop_tsc",
383
+ "aperfmperf",
384
+ "pni",
385
+ "ssse3",
386
+ "cx16",
387
+ "sse4_1",
388
+ "sse4_2",
389
+ "popcnt",
390
+ "hypervisor",
391
+ "lahf_lm",
392
+ "dts"
393
+ ],
394
+ "model": "26",
395
+ "model_name": "Intel(R) Xeon(R) CPU E5507 @ 2.27GHz",
396
+ "family": "6",
397
+ "mhz": "2266.746",
398
+ "vendor_id": "GenuineIntel",
399
+ "cache_size": "4096 KB",
400
+ "stepping": "5"
401
+ },
402
+ "1": {
403
+ "flags": [
404
+ "fpu",
405
+ "de",
406
+ "tsc",
407
+ "msr",
408
+ "pae",
409
+ "cx8",
410
+ "sep",
411
+ "cmov",
412
+ "pat",
413
+ "clflush",
414
+ "mmx",
415
+ "fxsr",
416
+ "sse",
417
+ "sse2",
418
+ "ss",
419
+ "ht",
420
+ "syscall",
421
+ "nx",
422
+ "lm",
423
+ "constant_tsc",
424
+ "rep_good",
425
+ "nopl",
426
+ "nonstop_tsc",
427
+ "aperfmperf",
428
+ "pni",
429
+ "ssse3",
430
+ "cx16",
431
+ "sse4_1",
432
+ "sse4_2",
433
+ "popcnt",
434
+ "hypervisor",
435
+ "lahf_lm",
436
+ "dts"
437
+ ],
438
+ "model": "26",
439
+ "model_name": "Intel(R) Xeon(R) CPU E5507 @ 2.27GHz",
440
+ "family": "6",
441
+ "mhz": "2266.746",
442
+ "vendor_id": "GenuineIntel",
443
+ "cache_size": "4096 KB",
444
+ "stepping": "5"
445
+ }
446
+ },
447
+ "uptime": "118 days 04 hours 42 minutes 04 seconds",
448
+ "hostname": "build-prod-i-722b0004",
449
+ "etc": {
450
+ "group": {
451
+ "k.thaney": {
452
+ "gid": 1070,
453
+ "members": [
454
+
455
+ ]
456
+ },
457
+ "central": {
458
+ "gid": 1505,
459
+ "members": [
460
+ "j.griffin",
461
+ "c.vilhena",
462
+ "k.thaney",
463
+ "g.gurnhill",
464
+ "a.myers",
465
+ "a.smout",
466
+ "e.pitt",
467
+ "s.peck",
468
+ "t.hannay",
469
+ "c.wuhrer",
470
+ "s.laqua"
471
+ ]
472
+ },
473
+ "testuser": {
474
+ "gid": 1059,
475
+ "members": [
476
+
477
+ ]
478
+ },
479
+ "thom": {
480
+ "gid": 1002,
481
+ "members": [
482
+
483
+ ]
484
+ },
485
+ "sasl": {
486
+ "gid": 45,
487
+ "members": [
488
+
489
+ ]
490
+ },
491
+ "kmem": {
492
+ "gid": 15,
493
+ "members": [
494
+
495
+ ]
496
+ },
497
+ "github": {
498
+ "gid": 1060,
499
+ "members": [
500
+
501
+ ]
502
+ },
503
+ "artifactory": {
504
+ "gid": 999,
505
+ "members": [
506
+
507
+ ]
508
+ },
509
+ "openldap": {
510
+ "gid": 108,
511
+ "members": [
512
+
513
+ ]
514
+ },
515
+ "lp": {
516
+ "gid": 7,
517
+ "members": [
518
+
519
+ ]
520
+ },
521
+ "dip": {
522
+ "gid": 30,
523
+ "members": [
524
+
525
+ ]
526
+ },
527
+ "l.thomson": {
528
+ "gid": 1073,
529
+ "members": [
530
+
531
+ ]
532
+ },
533
+ "c.vilhena": {
534
+ "gid": 1066,
535
+ "members": [
536
+
537
+ ]
538
+ },
539
+ "test": {
540
+ "gid": 1503,
541
+ "members": [
542
+
543
+ ]
544
+ },
545
+ "adminR": {
546
+ "gid": 1001,
547
+ "members": [
548
+
549
+ ]
550
+ },
551
+ "www-data": {
552
+ "gid": 33,
553
+ "members": [
554
+
555
+ ]
556
+ },
557
+ "steve": {
558
+ "gid": 1055,
559
+ "members": [
560
+
561
+ ]
562
+ },
563
+ "jgoller": {
564
+ "gid": 1058,
565
+ "members": [
566
+
567
+ ]
568
+ },
569
+ "news": {
570
+ "gid": 9,
571
+ "members": [
572
+
573
+ ]
574
+ },
575
+ "ssh": {
576
+ "gid": 106,
577
+ "members": [
578
+
579
+ ]
580
+ },
581
+ "sudo": {
582
+ "gid": 27,
583
+ "members": [
584
+
585
+ ]
586
+ },
587
+ "w.roe": {
588
+ "gid": 1063,
589
+ "members": [
590
+
591
+ ]
592
+ },
593
+ "cdrom": {
594
+ "gid": 24,
595
+ "members": [
596
+
597
+ ]
598
+ },
599
+ "list": {
600
+ "gid": 38,
601
+ "members": [
602
+
603
+ ]
604
+ },
605
+ "uucp": {
606
+ "gid": 10,
607
+ "members": [
608
+
609
+ ]
610
+ },
611
+ "refinery": {
612
+ "gid": 1088,
613
+ "members": [
614
+
615
+ ]
616
+ },
617
+ "a.smout": {
618
+ "gid": 1075,
619
+ "members": [
620
+
621
+ ]
622
+ },
623
+ "g.gurnhill": {
624
+ "gid": 1071,
625
+ "members": [
626
+
627
+ ]
628
+ },
629
+ "e.adie": {
630
+ "gid": 1068,
631
+ "members": [
632
+
633
+ ]
634
+ },
635
+ "voice": {
636
+ "gid": 22,
637
+ "members": [
638
+
639
+ ]
640
+ },
641
+ "netdev": {
642
+ "gid": 109,
643
+ "members": [
644
+
645
+ ]
646
+ },
647
+ "shadow": {
648
+ "gid": 42,
649
+ "members": [
650
+
651
+ ]
652
+ },
653
+ "o.nightingale": {
654
+ "gid": 1087,
655
+ "members": [
656
+
657
+ ]
658
+ },
659
+ "octobutler": {
660
+ "gid": 1083,
661
+ "members": [
662
+
663
+ ]
664
+ },
665
+ "root": {
666
+ "gid": 0,
667
+ "members": [
668
+
669
+ ]
670
+ },
671
+ "metrics": {
672
+ "gid": 1501,
673
+ "members": [
674
+ "dhagon",
675
+ "jgoller",
676
+ "j.petimar",
677
+ "c.trasande",
678
+ "w.roe",
679
+ "m.szomszor",
680
+ "t.hunger"
681
+ ]
682
+ },
683
+ "games": {
684
+ "gid": 60,
685
+ "members": [
686
+
687
+ ]
688
+ },
689
+ "l.hawizy": {
690
+ "gid": 1064,
691
+ "members": [
692
+
693
+ ]
694
+ },
695
+ "c.trasande": {
696
+ "gid": 1062,
697
+ "members": [
698
+
699
+ ]
700
+ },
701
+ "adm": {
702
+ "gid": 4,
703
+ "members": [
704
+
705
+ ]
706
+ },
707
+ "crontab": {
708
+ "gid": 102,
709
+ "members": [
710
+
711
+ ]
712
+ },
713
+ "o.legg": {
714
+ "gid": 1086,
715
+ "members": [
716
+
717
+ ]
718
+ },
719
+ "automata": {
720
+ "gid": 1504,
721
+ "members": [
722
+ "github",
723
+ "octobutler",
724
+ "refinery"
725
+ ]
726
+ },
727
+ "jsiddle": {
728
+ "gid": 1053,
729
+ "members": [
730
+
731
+ ]
732
+ },
733
+ "src": {
734
+ "gid": 40,
735
+ "members": [
736
+
737
+ ]
738
+ },
739
+ "staff": {
740
+ "gid": 50,
741
+ "members": [
742
+
743
+ ]
744
+ },
745
+ "gnats": {
746
+ "gid": 41,
747
+ "members": [
748
+
749
+ ]
750
+ },
751
+ "operator": {
752
+ "gid": 37,
753
+ "members": [
754
+
755
+ ]
756
+ },
757
+ "fuse": {
758
+ "gid": 104,
759
+ "members": [
760
+
761
+ ]
762
+ },
763
+ "m.gorodnitsky": {
764
+ "gid": 1085,
765
+ "members": [
766
+
767
+ ]
768
+ },
769
+ "s.peck": {
770
+ "gid": 1077,
771
+ "members": [
772
+
773
+ ]
774
+ },
775
+ "redis": {
776
+ "gid": 113,
777
+ "members": [
778
+
779
+ ]
780
+ },
781
+ "daemon": {
782
+ "gid": 1,
783
+ "members": [
784
+
785
+ ]
786
+ },
787
+ "proxy": {
788
+ "gid": 13,
789
+ "members": [
790
+
791
+ ]
792
+ },
793
+ "surechem": {
794
+ "gid": 1500,
795
+ "members": [
796
+ "ahinton",
797
+ "jsiddle",
798
+ "rkoks",
799
+ "l.hawizy",
800
+ "e.piveteau",
801
+ "j.stevenson",
802
+ "n.goncharoff"
803
+ ]
804
+ },
805
+ "t.hunger": {
806
+ "gid": 1091,
807
+ "members": [
808
+
809
+ ]
810
+ },
811
+ "n.goncharoff": {
812
+ "gid": 1082,
813
+ "members": [
814
+
815
+ ]
816
+ },
817
+ "a.myers": {
818
+ "gid": 1074,
819
+ "members": [
820
+
821
+ ]
822
+ },
823
+ "jetty": {
824
+ "gid": 111,
825
+ "members": [
826
+
827
+ ]
828
+ },
829
+ "disk": {
830
+ "gid": 6,
831
+ "members": [
832
+
833
+ ]
834
+ },
835
+ "landscape": {
836
+ "gid": 107,
837
+ "members": [
838
+
839
+ ]
840
+ },
841
+ "tty": {
842
+ "gid": 5,
843
+ "members": [
844
+
845
+ ]
846
+ },
847
+ "sys": {
848
+ "gid": 3,
849
+ "members": [
850
+
851
+ ]
852
+ },
853
+ "m.szomszor": {
854
+ "gid": 1089,
855
+ "members": [
856
+
857
+ ]
858
+ },
859
+ "j.stevenson": {
860
+ "gid": 1081,
861
+ "members": [
862
+
863
+ ]
864
+ },
865
+ "e.pitt": {
866
+ "gid": 1076,
867
+ "members": [
868
+
869
+ ]
870
+ },
871
+ "j.petimar": {
872
+ "gid": 1061,
873
+ "members": [
874
+
875
+ ]
876
+ },
877
+ "bpickles": {
878
+ "gid": 1054,
879
+ "members": [
880
+
881
+ ]
882
+ },
883
+ "man": {
884
+ "gid": 12,
885
+ "members": [
886
+
887
+ ]
888
+ },
889
+ "s.laqua": {
890
+ "gid": 1084,
891
+ "members": [
892
+
893
+ ]
894
+ },
895
+ "m.hahnel": {
896
+ "gid": 1072,
897
+ "members": [
898
+
899
+ ]
900
+ },
901
+ "plugdev": {
902
+ "gid": 46,
903
+ "members": [
904
+
905
+ ]
906
+ },
907
+ "tape": {
908
+ "gid": 26,
909
+ "members": [
910
+
911
+ ]
912
+ },
913
+ "rkoks": {
914
+ "gid": 1052,
915
+ "members": [
916
+
917
+ ]
918
+ },
919
+ "ahinton": {
920
+ "gid": 1051,
921
+ "members": [
922
+
923
+ ]
924
+ },
925
+ "t.hannay": {
926
+ "gid": 1078,
927
+ "members": [
928
+
929
+ ]
930
+ },
931
+ "ntp": {
932
+ "gid": 112,
933
+ "members": [
934
+
935
+ ]
936
+ },
937
+ "floppy": {
938
+ "gid": 25,
939
+ "members": [
940
+
941
+ ]
942
+ },
943
+ "users": {
944
+ "gid": 100,
945
+ "members": [
946
+
947
+ ]
948
+ },
949
+ "fax": {
950
+ "gid": 21,
951
+ "members": [
952
+
953
+ ]
954
+ },
955
+ "syslog": {
956
+ "gid": 103,
957
+ "members": [
958
+
959
+ ]
960
+ },
961
+ "n.ali": {
962
+ "gid": 1090,
963
+ "members": [
964
+
965
+ ]
966
+ },
967
+ "research-tools": {
968
+ "gid": 1506,
969
+ "members": [
970
+ "e.adie",
971
+ "s.scott",
972
+ "m.hahnel",
973
+ "l.thomson",
974
+ "m.gorodnitsky"
975
+ ]
976
+ },
977
+ "j.griffin": {
978
+ "gid": 1065,
979
+ "members": [
980
+
981
+ ]
982
+ },
983
+ "dhagon": {
984
+ "gid": 1057,
985
+ "members": [
986
+
987
+ ]
988
+ },
989
+ "mlocate": {
990
+ "gid": 105,
991
+ "members": [
992
+
993
+ ]
994
+ },
995
+ "bin": {
996
+ "gid": 2,
997
+ "members": [
998
+
999
+ ]
1000
+ },
1001
+ "video": {
1002
+ "gid": 44,
1003
+ "members": [
1004
+
1005
+ ]
1006
+ },
1007
+ "irc": {
1008
+ "gid": 39,
1009
+ "members": [
1010
+
1011
+ ]
1012
+ },
1013
+ "libuuid": {
1014
+ "gid": 101,
1015
+ "members": [
1016
+
1017
+ ]
1018
+ },
1019
+ "admin": {
1020
+ "gid": 110,
1021
+ "members": [
1022
+ "steve",
1023
+ "thom",
1024
+ "adminR"
1025
+ ]
1026
+ },
1027
+ "newbamboo": {
1028
+ "gid": 1502,
1029
+ "members": [
1030
+ "bpickles",
1031
+ "o.legg",
1032
+ "o.nightingale",
1033
+ "n.ali"
1034
+ ]
1035
+ },
1036
+ "nogroup": {
1037
+ "gid": 65534,
1038
+ "members": [
1039
+
1040
+ ]
1041
+ },
1042
+ "e.piveteau": {
1043
+ "gid": 1080,
1044
+ "members": [
1045
+
1046
+ ]
1047
+ },
1048
+ "s.scott": {
1049
+ "gid": 1069,
1050
+ "members": [
1051
+
1052
+ ]
1053
+ },
1054
+ "rubygems": {
1055
+ "gid": 998,
1056
+ "members": [
1057
+
1058
+ ]
1059
+ },
1060
+ "riak": {
1061
+ "gid": 1507,
1062
+ "members": [
1063
+
1064
+ ]
1065
+ },
1066
+ "hubot": {
1067
+ "gid": 995,
1068
+ "members": [
1069
+
1070
+ ]
1071
+ },
1072
+ "utmp": {
1073
+ "gid": 43,
1074
+ "members": [
1075
+
1076
+ ]
1077
+ },
1078
+ "c.wuhrer": {
1079
+ "gid": 1079,
1080
+ "members": [
1081
+
1082
+ ]
1083
+ },
1084
+ "dialout": {
1085
+ "gid": 20,
1086
+ "members": [
1087
+
1088
+ ]
1089
+ },
1090
+ "mail": {
1091
+ "gid": 8,
1092
+ "members": [
1093
+
1094
+ ]
1095
+ },
1096
+ "backup": {
1097
+ "gid": 34,
1098
+ "members": [
1099
+
1100
+ ]
1101
+ },
1102
+ "audio": {
1103
+ "gid": 29,
1104
+ "members": [
1105
+
1106
+ ]
1107
+ }
1108
+ },
1109
+ "passwd": {
1110
+ "thom": {
1111
+ "dir": "/home/thom",
1112
+ "gid": 1002,
1113
+ "gecos": "Thom May",
1114
+ "uid": 1002,
1115
+ "shell": "/bin/zsh"
1116
+ },
1117
+ "testuser": {
1118
+ "dir": "/home/testuser",
1119
+ "gid": 1059,
1120
+ "gecos": "Test User",
1121
+ "uid": 1059,
1122
+ "shell": "/bin/bash"
1123
+ },
1124
+ "jenkins": {
1125
+ "dir": "/var/lib/jenkins",
1126
+ "gid": 65534,
1127
+ "gecos": "",
1128
+ "uid": 105,
1129
+ "shell": "/bin/bash"
1130
+ },
1131
+ "k.thaney": {
1132
+ "dir": "/home/k.thaney",
1133
+ "gid": 1070,
1134
+ "gecos": "Kaitlin Thaney",
1135
+ "uid": 1070,
1136
+ "shell": "/bin/bash"
1137
+ },
1138
+ "artifactory": {
1139
+ "dir": "/srv/artifactory/",
1140
+ "gid": 999,
1141
+ "gecos": "",
1142
+ "uid": 999,
1143
+ "shell": "/bin/sh"
1144
+ },
1145
+ "lp": {
1146
+ "dir": "/var/spool/lpd",
1147
+ "gid": 7,
1148
+ "gecos": "lp",
1149
+ "uid": 7,
1150
+ "shell": "/bin/sh"
1151
+ },
1152
+ "github": {
1153
+ "dir": "/home/github",
1154
+ "gid": 1060,
1155
+ "gecos": "Github Push Access",
1156
+ "uid": 1060,
1157
+ "shell": "/bin/bash"
1158
+ },
1159
+ "adminR": {
1160
+ "dir": "/home/adminR",
1161
+ "gid": 1001,
1162
+ "gecos": "",
1163
+ "uid": 1001,
1164
+ "shell": "/bin/bash"
1165
+ },
1166
+ "www-data": {
1167
+ "dir": "/var/www",
1168
+ "gid": 33,
1169
+ "gecos": "www-data",
1170
+ "uid": 33,
1171
+ "shell": "/bin/sh"
1172
+ },
1173
+ "c.vilhena": {
1174
+ "dir": "/home/c.vilhena",
1175
+ "gid": 1066,
1176
+ "gecos": "Carlos Vilhena",
1177
+ "uid": 1066,
1178
+ "shell": "/bin/bash"
1179
+ },
1180
+ "steve": {
1181
+ "dir": "/home/steve",
1182
+ "gid": 1055,
1183
+ "gecos": "Steven Mohapi-Banks",
1184
+ "uid": 1055,
1185
+ "shell": "/bin/bash"
1186
+ },
1187
+ "l.thomson": {
1188
+ "dir": "/home/l.thomson",
1189
+ "gid": 1073,
1190
+ "gecos": "Laura Thomson",
1191
+ "uid": 1073,
1192
+ "shell": "/bin/bash"
1193
+ },
1194
+ "news": {
1195
+ "dir": "/var/spool/news",
1196
+ "gid": 9,
1197
+ "gecos": "news",
1198
+ "uid": 9,
1199
+ "shell": "/bin/sh"
1200
+ },
1201
+ "nobody": {
1202
+ "dir": "/nonexistent",
1203
+ "gid": 65534,
1204
+ "gecos": "nobody",
1205
+ "uid": 65534,
1206
+ "shell": "/bin/sh"
1207
+ },
1208
+ "jgoller": {
1209
+ "dir": "/home/jgoller",
1210
+ "gid": 1058,
1211
+ "gecos": "Johannes Goller",
1212
+ "uid": 1058,
1213
+ "shell": "/bin/bash"
1214
+ },
1215
+ "w.roe": {
1216
+ "dir": "/home/w.roe",
1217
+ "gid": 1063,
1218
+ "gecos": "Will Roe",
1219
+ "uid": 1063,
1220
+ "shell": "/bin/zsh"
1221
+ },
1222
+ "list": {
1223
+ "dir": "/var/list",
1224
+ "gid": 38,
1225
+ "gecos": "Mailing List Manager",
1226
+ "uid": 38,
1227
+ "shell": "/bin/sh"
1228
+ },
1229
+ "uucp": {
1230
+ "dir": "/var/spool/uucp",
1231
+ "gid": 10,
1232
+ "gecos": "uucp",
1233
+ "uid": 10,
1234
+ "shell": "/bin/sh"
1235
+ },
1236
+ "refinery": {
1237
+ "dir": "/home/refinery",
1238
+ "gid": 1088,
1239
+ "gecos": "Access to google refine",
1240
+ "uid": 1088,
1241
+ "shell": "/bin/bash"
1242
+ },
1243
+ "a.smout": {
1244
+ "dir": "/home/a.smout",
1245
+ "gid": 1075,
1246
+ "gecos": "Alex Smout",
1247
+ "uid": 1075,
1248
+ "shell": "/bin/bash"
1249
+ },
1250
+ "e.adie": {
1251
+ "dir": "/home/e.adie",
1252
+ "gid": 1068,
1253
+ "gecos": "Euan Adie",
1254
+ "uid": 1068,
1255
+ "shell": "/bin/bash"
1256
+ },
1257
+ "g.gurnhill": {
1258
+ "dir": "/home/g.gurnhill",
1259
+ "gid": 1071,
1260
+ "gecos": "Georgina Gurnhill",
1261
+ "uid": 1071,
1262
+ "shell": "/bin/bash"
1263
+ },
1264
+ "o.nightingale": {
1265
+ "dir": "/home/o.nightingale",
1266
+ "gid": 1087,
1267
+ "gecos": "Oliver Nightingale",
1268
+ "uid": 1087,
1269
+ "shell": "/bin/bash"
1270
+ },
1271
+ "octobutler": {
1272
+ "dir": "/home/octobutler",
1273
+ "gid": 1083,
1274
+ "gecos": "The Octobutler Uploader",
1275
+ "uid": 1083,
1276
+ "shell": "/bin/bash"
1277
+ },
1278
+ "root": {
1279
+ "dir": "/root",
1280
+ "gid": 0,
1281
+ "gecos": "root",
1282
+ "uid": 0,
1283
+ "shell": "/bin/bash"
1284
+ },
1285
+ "sshd": {
1286
+ "dir": "/var/run/sshd",
1287
+ "gid": 65534,
1288
+ "gecos": "",
1289
+ "uid": 102,
1290
+ "shell": "/usr/sbin/nologin"
1291
+ },
1292
+ "games": {
1293
+ "dir": "/usr/games",
1294
+ "gid": 60,
1295
+ "gecos": "games",
1296
+ "uid": 5,
1297
+ "shell": "/bin/sh"
1298
+ },
1299
+ "l.hawizy": {
1300
+ "dir": "/home/l.hawizy",
1301
+ "gid": 1064,
1302
+ "gecos": "Lezan Hawizy",
1303
+ "uid": 1064,
1304
+ "shell": "/bin/bash"
1305
+ },
1306
+ "c.trasande": {
1307
+ "dir": "/home/c.trasande",
1308
+ "gid": 1062,
1309
+ "gecos": "Caitlin Trasande",
1310
+ "uid": 1062,
1311
+ "shell": "/bin/bash"
1312
+ },
1313
+ "jsiddle": {
1314
+ "dir": "/home/jsiddle",
1315
+ "gid": 1053,
1316
+ "gecos": "James Siddle",
1317
+ "uid": 1053,
1318
+ "shell": "/bin/bash"
1319
+ },
1320
+ "sync": {
1321
+ "dir": "/bin",
1322
+ "gid": 65534,
1323
+ "gecos": "sync",
1324
+ "uid": 4,
1325
+ "shell": "/bin/sync"
1326
+ },
1327
+ "o.legg": {
1328
+ "dir": "/home/o.legg",
1329
+ "gid": 1086,
1330
+ "gecos": "Olly Legg",
1331
+ "uid": 1086,
1332
+ "shell": "/bin/zsh"
1333
+ },
1334
+ "gnats": {
1335
+ "dir": "/var/lib/gnats",
1336
+ "gid": 41,
1337
+ "gecos": "Gnats Bug-Reporting System (admin)",
1338
+ "uid": 41,
1339
+ "shell": "/bin/sh"
1340
+ },
1341
+ "redis": {
1342
+ "dir": "/var/lib/redis",
1343
+ "gid": 113,
1344
+ "gecos": "redis server,,,",
1345
+ "uid": 107,
1346
+ "shell": "/bin/false"
1347
+ },
1348
+ "daemon": {
1349
+ "dir": "/usr/sbin",
1350
+ "gid": 1,
1351
+ "gecos": "daemon",
1352
+ "uid": 1,
1353
+ "shell": "/bin/sh"
1354
+ },
1355
+ "m.gorodnitsky": {
1356
+ "dir": "/home/m.gorodnitsky",
1357
+ "gid": 1085,
1358
+ "gecos": "Michael Gorodnitsky",
1359
+ "uid": 1085,
1360
+ "shell": "/bin/zsh"
1361
+ },
1362
+ "proxy": {
1363
+ "dir": "/bin",
1364
+ "gid": 13,
1365
+ "gecos": "proxy",
1366
+ "uid": 13,
1367
+ "shell": "/bin/sh"
1368
+ },
1369
+ "s.peck": {
1370
+ "dir": "/home/s.peck",
1371
+ "gid": 1077,
1372
+ "gecos": "Sebastian Peck",
1373
+ "uid": 1077,
1374
+ "shell": "/bin/bash"
1375
+ },
1376
+ "t.hunger": {
1377
+ "dir": "/home/t.hunger",
1378
+ "gid": 1091,
1379
+ "gecos": "Tom Hunger",
1380
+ "uid": 1091,
1381
+ "shell": "/bin/bash"
1382
+ },
1383
+ "jetty": {
1384
+ "dir": "/usr/share/jetty",
1385
+ "gid": 111,
1386
+ "gecos": "",
1387
+ "uid": 104,
1388
+ "shell": "/bin/false"
1389
+ },
1390
+ "n.goncharoff": {
1391
+ "dir": "/home/n.goncharoff",
1392
+ "gid": 1082,
1393
+ "gecos": "Nicko Goncharoff",
1394
+ "uid": 1082,
1395
+ "shell": "/bin/bash"
1396
+ },
1397
+ "landscape": {
1398
+ "dir": "/var/lib/landscape",
1399
+ "gid": 107,
1400
+ "gecos": "",
1401
+ "uid": 103,
1402
+ "shell": "/bin/false"
1403
+ },
1404
+ "sys": {
1405
+ "dir": "/dev",
1406
+ "gid": 3,
1407
+ "gecos": "sys",
1408
+ "uid": 3,
1409
+ "shell": "/bin/sh"
1410
+ },
1411
+ "a.myers": {
1412
+ "dir": "/home/a.myers",
1413
+ "gid": 1074,
1414
+ "gecos": "Amarjit Myers",
1415
+ "uid": 1074,
1416
+ "shell": "/bin/bash"
1417
+ },
1418
+ "m.szomszor": {
1419
+ "dir": "/home/m.szomszor",
1420
+ "gid": 1089,
1421
+ "gecos": "Martin Szomszor",
1422
+ "uid": 1089,
1423
+ "shell": "/bin/bash"
1424
+ },
1425
+ "e.pitt": {
1426
+ "dir": "/home/e.pitt",
1427
+ "gid": 1076,
1428
+ "gecos": "Elizabeth Pitt",
1429
+ "uid": 1076,
1430
+ "shell": "/bin/bash"
1431
+ },
1432
+ "j.petimar": {
1433
+ "dir": "/home/j.petimar",
1434
+ "gid": 1061,
1435
+ "gecos": "Josh Petimar",
1436
+ "uid": 1061,
1437
+ "shell": "/bin/bash"
1438
+ },
1439
+ "man": {
1440
+ "dir": "/var/cache/man",
1441
+ "gid": 12,
1442
+ "gecos": "man",
1443
+ "uid": 6,
1444
+ "shell": "/bin/sh"
1445
+ },
1446
+ "bpickles": {
1447
+ "dir": "/home/bpickles",
1448
+ "gid": 1054,
1449
+ "gecos": "Ben Pickles",
1450
+ "uid": 1054,
1451
+ "shell": "/bin/bash"
1452
+ },
1453
+ "j.stevenson": {
1454
+ "dir": "/home/j.stevenson",
1455
+ "gid": 1081,
1456
+ "gecos": "Janice Stevenson",
1457
+ "uid": 1081,
1458
+ "shell": "/bin/bash"
1459
+ },
1460
+ "s.laqua": {
1461
+ "dir": "/home/s.laqua",
1462
+ "gid": 1084,
1463
+ "gecos": "Sven Laqua",
1464
+ "uid": 1084,
1465
+ "shell": "/bin/bash"
1466
+ },
1467
+ "rkoks": {
1468
+ "dir": "/home/rkoks",
1469
+ "gid": 1052,
1470
+ "gecos": "Richard Koks",
1471
+ "uid": 1052,
1472
+ "shell": "/bin/bash"
1473
+ },
1474
+ "m.hahnel": {
1475
+ "dir": "/home/m.hahnel",
1476
+ "gid": 1072,
1477
+ "gecos": "Mark Hahnel",
1478
+ "uid": 1072,
1479
+ "shell": "/bin/bash"
1480
+ },
1481
+ "ahinton": {
1482
+ "dir": "/home/ahinton",
1483
+ "gid": 1051,
1484
+ "gecos": "Andrew Hinton",
1485
+ "uid": 1051,
1486
+ "shell": "/bin/bash"
1487
+ },
1488
+ "ntp": {
1489
+ "dir": "/home/ntp",
1490
+ "gid": 112,
1491
+ "gecos": "",
1492
+ "uid": 106,
1493
+ "shell": "/bin/false"
1494
+ },
1495
+ "t.hannay": {
1496
+ "dir": "/home/t.hannay",
1497
+ "gid": 1078,
1498
+ "gecos": "Timo Hannay",
1499
+ "uid": 1078,
1500
+ "shell": "/bin/bash"
1501
+ },
1502
+ "syslog": {
1503
+ "dir": "/home/syslog",
1504
+ "gid": 103,
1505
+ "gecos": "",
1506
+ "uid": 101,
1507
+ "shell": "/bin/false"
1508
+ },
1509
+ "n.ali": {
1510
+ "dir": "/home/n.ali",
1511
+ "gid": 1090,
1512
+ "gecos": "Najaf Ali",
1513
+ "uid": 1090,
1514
+ "shell": "/bin/bash"
1515
+ },
1516
+ "dhagon": {
1517
+ "dir": "/home/dhagon",
1518
+ "gid": 1057,
1519
+ "gecos": "Dan Hagon",
1520
+ "uid": 1057,
1521
+ "shell": "/bin/bash"
1522
+ },
1523
+ "bin": {
1524
+ "dir": "/bin",
1525
+ "gid": 2,
1526
+ "gecos": "bin",
1527
+ "uid": 2,
1528
+ "shell": "/bin/sh"
1529
+ },
1530
+ "irc": {
1531
+ "dir": "/var/run/ircd",
1532
+ "gid": 39,
1533
+ "gecos": "ircd",
1534
+ "uid": 39,
1535
+ "shell": "/bin/sh"
1536
+ },
1537
+ "libuuid": {
1538
+ "dir": "/var/lib/libuuid",
1539
+ "gid": 101,
1540
+ "gecos": "",
1541
+ "uid": 100,
1542
+ "shell": "/bin/sh"
1543
+ },
1544
+ "j.griffin": {
1545
+ "dir": "/home/j.griffin",
1546
+ "gid": 1065,
1547
+ "gecos": "John Griffin",
1548
+ "uid": 1065,
1549
+ "shell": "/bin/zsh"
1550
+ },
1551
+ "rubygems": {
1552
+ "dir": "/home/rubygems",
1553
+ "gid": 998,
1554
+ "gecos": "",
1555
+ "uid": 998,
1556
+ "shell": "/bin/sh"
1557
+ },
1558
+ "s.scott": {
1559
+ "dir": "/home/s.scott",
1560
+ "gid": 1069,
1561
+ "gecos": "Steve Scott",
1562
+ "uid": 1069,
1563
+ "shell": "/bin/bash"
1564
+ },
1565
+ "riak": {
1566
+ "dir": "/var/lib/riak",
1567
+ "gid": 1507,
1568
+ "gecos": "",
1569
+ "uid": 996,
1570
+ "shell": "/bin/bash"
1571
+ },
1572
+ "hubot": {
1573
+ "dir": "/srv/hubot",
1574
+ "gid": 995,
1575
+ "gecos": "",
1576
+ "uid": 995,
1577
+ "shell": "/bin/sh"
1578
+ },
1579
+ "e.piveteau": {
1580
+ "dir": "/home/e.piveteau",
1581
+ "gid": 1080,
1582
+ "gecos": "Elisabeth Piveteau",
1583
+ "uid": 1080,
1584
+ "shell": "/bin/bash"
1585
+ },
1586
+ "mail": {
1587
+ "dir": "/var/mail",
1588
+ "gid": 8,
1589
+ "gecos": "mail",
1590
+ "uid": 8,
1591
+ "shell": "/bin/sh"
1592
+ },
1593
+ "backup": {
1594
+ "dir": "/var/backups",
1595
+ "gid": 34,
1596
+ "gecos": "backup",
1597
+ "uid": 34,
1598
+ "shell": "/bin/sh"
1599
+ },
1600
+ "c.wuhrer": {
1601
+ "dir": "/home/c.wuhrer",
1602
+ "gid": 1079,
1603
+ "gecos": "Carla Wuhrer",
1604
+ "uid": 1079,
1605
+ "shell": "/bin/bash"
1606
+ }
1607
+ }
1608
+ },
1609
+ "ec2": {
1610
+ "public_hostname": "ec2-46-51-173-84.eu-west-1.compute.amazonaws.com",
1611
+ "placement_availability_zone": "eu-west-1a",
1612
+ "block_device_mapping_root": "/dev/sda1",
1613
+ "public_keys_0_openssh_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClf735t+X0H25rXoeHOKuCV55AHJ32v8WIgYrDK/a3lnRo/v12BAisu9PDQT3iGKHW6souHNykuO4obQNeSexCvZ1u785RzrYeVYvZwezexxx6qYKoBb4PcvLxmA+2nFMvuuQFGPQCgGw2+f5x1hpRfB5kKVhmfjoqkD88sdLKl07ONzlyVFVkGnzxdQR3X383wV1yN7fY1MSQ4dtRNZ1zFp4Pkno8UZDsDxh1naDreFYm24S32wVRiEwp1884S3S2KPxzvbmFZv+0guG1q0cTQpV33tPgvhD3+AUafqefGVON/As9PVt2QZLS57d1oW1LjoZ5ssOX9CGmeUGToMEf centralkey\n",
1614
+ "profile": "default-paravirtual",
1615
+ "instance_id": "i-722b0004",
1616
+ "instance_type": "m1.large",
1617
+ "block_device_mapping_ephemeral0": "sdb",
1618
+ "local_ipv4": "10.49.127.51",
1619
+ "block_device_mapping_ephemeral1": "sdc",
1620
+ "kernel_id": "aki-4feec43b",
1621
+ "local_hostname": "ip-10-49-127-51.eu-west-1.compute.internal",
1622
+ "reservation_id": "r-4ce88e3a",
1623
+ "public_ipv4": "46.51.173.84",
1624
+ "hostname": "ip-10-49-127-51.eu-west-1.compute.internal",
1625
+ "ami_id": "ami-619ea915",
1626
+ "userdata": null,
1627
+ "block_device_mapping_ami": "sda1",
1628
+ "security_groups": [
1629
+ "Web"
1630
+ ],
1631
+ "ami_manifest_path": "ubuntu-images-eu/ubuntu-natty-11.04-amd64-server-20110426.manifest.xml",
1632
+ "ami_launch_index": "0"
1633
+ },
1634
+ "macaddress": "12:31:3c:04:7c:c5",
1635
+ "block_device": {
1636
+ "xvdf": {
1637
+ "size": "104857600",
1638
+ "removable": "0"
1639
+ },
1640
+ "ram13": {
1641
+ "size": "131072",
1642
+ "removable": "0"
1643
+ },
1644
+ "ram0": {
1645
+ "size": "131072",
1646
+ "removable": "0"
1647
+ },
1648
+ "xvdg": {
1649
+ "size": "104857600",
1650
+ "removable": "0"
1651
+ },
1652
+ "loop0": {
1653
+ "size": "0",
1654
+ "removable": "0"
1655
+ },
1656
+ "ram14": {
1657
+ "size": "131072",
1658
+ "removable": "0"
1659
+ },
1660
+ "ram1": {
1661
+ "size": "131072",
1662
+ "removable": "0"
1663
+ },
1664
+ "xvdh": {
1665
+ "size": "524288000",
1666
+ "removable": "0"
1667
+ },
1668
+ "xvda1": {
1669
+ "size": "20971520",
1670
+ "removable": "0"
1671
+ },
1672
+ "loop1": {
1673
+ "size": "0",
1674
+ "removable": "0"
1675
+ },
1676
+ "ram15": {
1677
+ "size": "131072",
1678
+ "removable": "0"
1679
+ },
1680
+ "ram2": {
1681
+ "size": "131072",
1682
+ "removable": "0"
1683
+ },
1684
+ "md0": {
1685
+ "size": "104855408",
1686
+ "removable": "0"
1687
+ },
1688
+ "loop2": {
1689
+ "size": "0",
1690
+ "removable": "0"
1691
+ },
1692
+ "ram3": {
1693
+ "size": "131072",
1694
+ "removable": "0"
1695
+ },
1696
+ "loop3": {
1697
+ "size": "0",
1698
+ "removable": "0"
1699
+ },
1700
+ "ram4": {
1701
+ "size": "131072",
1702
+ "removable": "0"
1703
+ },
1704
+ "loop4": {
1705
+ "size": "0",
1706
+ "removable": "0"
1707
+ },
1708
+ "ram5": {
1709
+ "size": "131072",
1710
+ "removable": "0"
1711
+ },
1712
+ "xvdb": {
1713
+ "size": "880732160",
1714
+ "removable": "0"
1715
+ },
1716
+ "loop5": {
1717
+ "size": "0",
1718
+ "removable": "0"
1719
+ },
1720
+ "ram6": {
1721
+ "size": "131072",
1722
+ "removable": "0"
1723
+ },
1724
+ "xvdc": {
1725
+ "size": "880732160",
1726
+ "removable": "0"
1727
+ },
1728
+ "loop6": {
1729
+ "size": "0",
1730
+ "removable": "0"
1731
+ },
1732
+ "ram10": {
1733
+ "size": "131072",
1734
+ "removable": "0"
1735
+ },
1736
+ "ram7": {
1737
+ "size": "131072",
1738
+ "removable": "0"
1739
+ },
1740
+ "loop7": {
1741
+ "size": "0",
1742
+ "removable": "0"
1743
+ },
1744
+ "ram11": {
1745
+ "size": "131072",
1746
+ "removable": "0"
1747
+ },
1748
+ "ram8": {
1749
+ "size": "131072",
1750
+ "removable": "0"
1751
+ },
1752
+ "ram12": {
1753
+ "size": "131072",
1754
+ "removable": "0"
1755
+ },
1756
+ "ram9": {
1757
+ "size": "131072",
1758
+ "removable": "0"
1759
+ }
1760
+ },
1761
+ "uptime_seconds": 10212124,
1762
+ "cloud": {
1763
+ "public_hostname": "ec2-46-51-173-84.eu-west-1.compute.amazonaws.com",
1764
+ "public_ips": [
1765
+ "46.51.173.84"
1766
+ ],
1767
+ "local_ipv4": "10.49.127.51",
1768
+ "private_ips": [
1769
+ "10.49.127.51"
1770
+ ],
1771
+ "local_hostname": "ip-10-49-127-51.eu-west-1.compute.internal",
1772
+ "public_ipv4": "46.51.173.84",
1773
+ "provider": "ec2"
1774
+ },
1775
+ "platform": "ubuntu"
1776
+ }