rouster 0.57 → 0.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ca887947fd8eb61d347ebb19f562d4ab6f79cf79
4
- data.tar.gz: 424047f4ad62c0b279baa71d503045096416b37f
3
+ metadata.gz: d37f795615a19e7523b738d759e48f3e61fdc81c
4
+ data.tar.gz: 898b4400f00d4675061d9dd5e0716fc9a7ec21ce
5
5
  SHA512:
6
- metadata.gz: 90856a137433d2c34a2f2f7e3977c748bb8457f96049c0111b650ab6f5e0520380f74406b20b7a274f01bc8c8b1341b5d0c6fd345cec5960db718b76c6b9a55c
7
- data.tar.gz: e6f9d8b1400e684cf89451a4ac2d46ace2f3642927a7b70cb666ed03e2475b250c45a82c68174f8ce1cebf252ec2b2ccb07546b69193ecbf2568d3cad3858e18
6
+ metadata.gz: 7442ac64dc582dbc03be7aaecc9f481ca7f9d1d0c43608faab5ea3f947ae4a696a0ab1c6d2467223b289e09faa762adfbdd24db8e2d5f8949f174f35922a73d4
7
+ data.tar.gz: 13e407ab375276b8bf8c2054008668d2471e2be685224b3da62424cd6d92ff83ee3ceddadb6e0388db7df715d5ea654753dece45c374d2ce2348b302f3a26c4e
data/.gitignore CHANGED
@@ -5,3 +5,5 @@ doc/*
5
5
  *tmp*
6
6
  *.gem
7
7
  .rakeTasks
8
+ *raiden*
9
+ .project
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ ruby '2.0.0'
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'json'
6
+ gem 'log4r', '~> 1.1.9'
7
+ gem 'net-scp'
8
+ gem 'net-ssh'
9
+
10
+ group :development do
11
+ gem 'test-unit', '~> 3.0.0'
12
+ end
13
+
14
+ group :aws do
15
+ gem 'fog'
16
+ end
@@ -0,0 +1,67 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ builder (3.2.2)
5
+ excon (0.40.0)
6
+ fog (1.24.0)
7
+ fog-brightbox
8
+ fog-core (~> 1.23)
9
+ fog-json
10
+ fog-radosgw (>= 0.0.2)
11
+ fog-sakuracloud (>= 0.0.4)
12
+ fog-softlayer
13
+ ipaddress (~> 0.5)
14
+ nokogiri (~> 1.5, >= 1.5.11)
15
+ fog-brightbox (0.5.1)
16
+ fog-core (~> 1.22)
17
+ fog-json
18
+ inflecto
19
+ fog-core (1.24.0)
20
+ builder
21
+ excon (~> 0.38)
22
+ formatador (~> 0.2)
23
+ mime-types
24
+ net-scp (~> 1.1)
25
+ net-ssh (>= 2.1.3)
26
+ fog-json (1.0.0)
27
+ multi_json (~> 1.0)
28
+ fog-radosgw (0.0.3)
29
+ fog-core (>= 1.21.0)
30
+ fog-json
31
+ fog-xml (>= 0.0.1)
32
+ fog-sakuracloud (0.1.1)
33
+ fog-core
34
+ fog-json
35
+ fog-softlayer (0.3.20)
36
+ fog-core
37
+ fog-json
38
+ fog-xml (0.1.0)
39
+ fog-core
40
+ nokogiri (~> 1.5, >= 1.5.11)
41
+ formatador (0.2.5)
42
+ inflecto (0.0.2)
43
+ ipaddress (0.8.0)
44
+ json (1.8.1)
45
+ log4r (1.1.10)
46
+ mime-types (2.4.1)
47
+ mini_portile (0.6.0)
48
+ multi_json (1.10.1)
49
+ net-scp (1.2.1)
50
+ net-ssh (>= 2.6.5)
51
+ net-ssh (2.9.1)
52
+ nokogiri (1.6.3.1)
53
+ mini_portile (= 0.6.0)
54
+ power_assert (0.1.4)
55
+ test-unit (3.0.2)
56
+ power_assert
57
+
58
+ PLATFORMS
59
+ ruby
60
+
61
+ DEPENDENCIES
62
+ fog
63
+ json
64
+ log4r (~> 1.1.9)
65
+ net-scp
66
+ net-ssh
67
+ test-unit (~> 3.0.0)
data/README.md CHANGED
@@ -29,10 +29,24 @@ The first implementation of Rouster was in Perl, called [Salesforce::Vagrant](ht
29
29
  * log4r
30
30
  * net-scp
31
31
  * net-ssh
32
+ * fog (only if using AWS)
32
33
 
33
34
  Note: Rouster should work exactly the same on Windows as it does on \*nix and OSX (minus rouster/deltas.rb functionality, at least currently),
34
35
  but no real testing has been done to confirm this. Please file issues as appropriate.
35
36
 
37
+ ### From-source local usage (latest)
38
+
39
+ ```sh
40
+ git clone https://github.com/chorankates/rouster.git
41
+ cd rouster
42
+ bundle install # use :aws to pull in fog
43
+ ...
44
+ irb(main):001:0> require './path_helper.rb'
45
+ => true
46
+ irb(main):002:0> require 'rouster'
47
+ => true
48
+ ```
49
+
36
50
  ### From-source installation (latest)
37
51
 
38
52
  ```sh
@@ -40,6 +54,9 @@ git clone https://github.com/chorankates/rouster.git
40
54
  cd rouster
41
55
  rake buildgem
42
56
  gem install rouster-<version>.gem
57
+ ...
58
+ irb(main):001:0> require 'rouster'
59
+ => true
43
60
  ```
44
61
 
45
62
  ### pre-built gem installation (stable)
@@ -130,6 +147,56 @@ app.get('/tmp/foo')
130
147
  app.destroy()
131
148
  ```
132
149
 
150
+ ### advanced instantiation (passthroughs!)
151
+
152
+ detailed options in ```examples/passthrough.rb``` and ```examples/aws.rb```
153
+
154
+ since Rouster only requires an SSH connection to control a machine, why stop at Vagrant?
155
+
156
+ ```rb
157
+ require 'rouster'
158
+ require 'rouster/plugins/aws'
159
+
160
+ # control the machine rouster itself is running on
161
+ local = Rouster.new(:name => 'local', :passthrough => { :type => :local } }
162
+
163
+ # control a remote machine
164
+ remote = Rouster.new(
165
+ :name => 'remote',
166
+ :passthrough => {
167
+ :type => :remote,
168
+ :host => 'foo.bar.com',
169
+ :user => 'keanu',
170
+ :key => '/path/to/private/key',
171
+ }
172
+
173
+ :sudo => true, # false by default, enabling requires that sshd is not enforcing 'requiretty'
174
+ )
175
+
176
+ # control a running EC2 instance
177
+ aws_already_running = Rouster.new(
178
+ :name => 'cloudy',
179
+ :passthrough => {
180
+ :type => :aws,
181
+ :instance => 'your-instance-id',
182
+ :keypair => 'your-keypair-name',
183
+ }
184
+ )
185
+
186
+ # start and control an EC2 instance
187
+ aws_start_me_up = Rouster.new(
188
+ :name => 'bgates',
189
+ :passthrough => {
190
+ :type => :aws,
191
+ :ami => 'your-ami-id',
192
+ :security_groups => 'your-security-groups',
193
+ :key_id => 'your-aws-key-id', # defaults to ${AWS_ACCESS_KEY_ID}
194
+ :secret_key => 'your-aws-secret-key', # defaults to ${AWS_SECRET_ACCESS_KEY}
195
+ }
196
+ )
197
+
198
+ ```
199
+
133
200
  ### functional puppet test
134
201
 
135
202
  ```rb
@@ -173,6 +240,116 @@ end
173
240
  ## Base Methods
174
241
 
175
242
  ```rb
176
- irb(main):003:0> (Rouster.new(:name => 'app').methods - Object.methods).sort
177
- => [:_run, :_vm, :check_key_permissions, :connect_ssh_tunnel, :deltas, :destroy, :dir, :exitcode, :facter, :facts, :file, :generate_unique_mac, :get, :get_catalog, :get_groups, :get_output, :get_packages, :get_ports, :get_puppet_errors, :get_puppet_notices, :get_services, :get_ssh_info, :get_users, :is_available_via_ssh?, :is_dir?, :is_executable?, :is_file?, :is_group?, :is_in_file?, :is_in_path?, :is_package?, :is_passthrough?, :is_port_active?, :is_port_open?, :is_process_running?, :is_readable?, :is_service?, :is_service_running?, :is_user?, :is_user_in_group?, :is_writeable?, :log, :os_type, :output, :parse_catalog, :parse_ls_string, :passthrough, :put, :rebuild, :remove_existing_certs, :restart, :run, :run_puppet, :sshkey, :status, :sudo, :suspend, :traverse_up, :up, :uses_sudo?, :vagrantfile, :verbosity]
243
+ irb(main):001:0> require './path_helper.rb'
244
+ => true
245
+ irb(main):002:0> require 'rouster'
246
+ => true
247
+ irb(main):003:0> pp (Rouster.new(:name => 'app').methods - Object.methods).sort
248
+ => [
249
+ [:_run,
250
+ :cache,
251
+ :cache_timeout,
252
+ :check_key_permissions,
253
+ :connect_ssh_tunnel,
254
+ :deltas,
255
+ :destroy,
256
+ :dir,
257
+ :dirs,
258
+ :disconnect_ssh_tunnel,
259
+ :exitcode,
260
+ :facts,
261
+ :facts=,
262
+ :file,
263
+ :files,
264
+ :generate_unique_mac,
265
+ :get,
266
+ :get_crontab,
267
+ :get_groups,
268
+ :get_output,
269
+ :get_packages,
270
+ :get_ports,
271
+ :get_services,
272
+ :get_ssh_info,
273
+ :get_users,
274
+ :halt,
275
+ :is_available_via_ssh?,
276
+ :is_dir?,
277
+ :is_executable?,
278
+ :is_file?,
279
+ :is_group?,
280
+ :is_in_file?,
281
+ :is_in_path?,
282
+ :is_package?,
283
+ :is_passthrough?,
284
+ :is_port_active?,
285
+ :is_port_open?,
286
+ :is_process_running?,
287
+ :is_readable?,
288
+ :is_service?,
289
+ :is_service_running?,
290
+ :is_symlink?,
291
+ :is_user?,
292
+ :is_user_in_group?,
293
+ :is_vagrant_running?,
294
+ :is_writeable?,
295
+ :logger,
296
+ :os_type,
297
+ :output,
298
+ :package,
299
+ :parse_ls_string,
300
+ :passthrough,
301
+ :put,
302
+ :rebuild,
303
+ :restart,
304
+ :retries,
305
+ :run,
306
+ :sandbox_available?,
307
+ :sandbox_commit,
308
+ :sandbox_off,
309
+ :sandbox_on,
310
+ :sandbox_rollback,
311
+ :sshkey,
312
+ :status,
313
+ :suspend,
314
+ :traverse_up,
315
+ :unittest,
316
+ :up,
317
+ :uses_sudo?,
318
+ :vagrant,
319
+ :vagrantbinary,
320
+ :vagrantfile]
321
+ ]
322
+ ```
323
+
324
+ ## AWS methods
325
+ ```rb
326
+ irb(main):001:0> require './path_helper.rb'
327
+ => true
328
+ irb(main):002:0> require 'rouster'
329
+ => true
330
+ irb(main):003:0> require 'rouster/plugins/aws'
331
+ => true
332
+ irb(main):004:0> pp (Rouster.new(:name => 'aws', :passthrough => { :type => :aws }).methods - Object.methods).sort
333
+ => [
334
+ ...
335
+ :aws_bootstrap,
336
+ :aws_connect,
337
+ :aws_connect_to_elb,
338
+ :aws_describe_instance,
339
+ :aws_destroy,
340
+ :aws_get_ami,
341
+ :aws_get_hostname,
342
+ :aws_get_instance,
343
+ :aws_get_ip,
344
+ :aws_get_metadata,
345
+ :aws_get_url,
346
+ :aws_get_userdata,
347
+ :aws_status,
348
+ :ec2,
349
+ :elb,
350
+ :elb_connect,
351
+ :find_ssh_elb,
352
+ :instance_data,
353
+ ...
354
+ ]
178
355
  ```
data/Rakefile CHANGED
@@ -24,12 +24,15 @@ task :examples do
24
24
  end
25
25
  end
26
26
 
27
+ task :vdestroy do
28
+ sh 'vagrant destroy -f'
29
+ end
30
+
27
31
  task :reek do
28
- sh "reek lib/**/*.rb"
32
+ sh 'reek lib/**/*.rb'
29
33
  end
30
34
 
31
- Rake::TestTask.new do |t|
32
- t.name = 'test'
35
+ Rake::TestTask.new(:test => :vdestroy) do |t|
33
36
  t.libs << 'lib'
34
37
  t.test_files = FileList['test/**/test_*.rb']
35
38
  t.verbose = true
@@ -42,15 +45,13 @@ Rake::TestTask.new do |t|
42
45
  t.verbose = true
43
46
  end
44
47
 
45
- Rake::TestTask.new do |t|
46
- t.name = 'functional'
48
+ Rake::TestTask.new(:functional => :vdestroy) do |t|
47
49
  t.libs << 'lib'
48
50
  t.test_files = FileList['test/functional/**/test_*.rb']
49
51
  t.verbose = true
50
52
  end
51
53
 
52
- Rake::TestTask.new do |t|
53
- t.name = 'deltas'
54
+ Rake::TestTask.new(:deltas => :vdestroy) do |t|
54
55
  t.libs << 'lib'
55
56
  t.test_files = FileList['test/functional/deltas/test_*.rb']
56
57
  t.verbose = true
@@ -1,19 +1,34 @@
1
1
  # stripped down example piab Vagrantfile for rouster
2
2
 
3
- #box_url = 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210.box'
4
- #box_name = 'ubuntu12'
5
- box_url = 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box'
6
- box_name = 'centos6'
3
+ boxes = {
4
+ :ppm => {
5
+ :box_name => 'centos6',
6
+ :box_url => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box',
7
+ },
8
+ :app => {
9
+ :box_name => 'centos6',
10
+ :box_url => 'http://puppet-vagrant-boxes.puppetlabs.com/centos-64-x64-vbox4210.box',
11
+ },
7
12
 
8
- boxes = [:ppm, :app]
13
+ :ubuntu12 => {
14
+ :box_name => 'ubuntu12',
15
+ :box_url => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-server-12042-x64-vbox4210.box',
16
+ },
17
+
18
+ :ubuntu13 => {
19
+ :box_name => 'ubuntu13',
20
+ :box_url => 'http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-1310-x64-virtualbox-puppet.box',
21
+ },
22
+
23
+ }
9
24
 
10
25
  Vagrant::Config.run do |config|
11
- boxes.each do |box|
26
+ boxes.each_pair do |box,hash|
12
27
  config.vm.define box do |worker|
13
28
 
14
- worker.vm.box = box_name
15
- worker.vm.box_url = box_url
16
- worker.vm.host_name = box.to_s
29
+ worker.vm.box = hash[:box_name]
30
+ worker.vm.box_url = hash[:box_url]
31
+ worker.vm.host_name = hash[:box_name]
17
32
  worker.vm.network :hostonly, sprintf('10.0.1.%s', rand(253).to_i + 2)
18
33
  worker.ssh.forward_agent = true
19
34
 
@@ -0,0 +1,85 @@
1
+ require sprintf('%s/../%s', File.dirname(File.expand_path(__FILE__)), 'path_helper')
2
+
3
+ require 'rouster'
4
+ require 'plugins/aws' # brings in fog and some helpers
5
+
6
+ aws_already_running = Rouster.new(
7
+ :name => 'aws-already-running',
8
+ :passthrough => {
9
+ :type => :aws,
10
+ :instance => 'your-instance-id',
11
+ :key => sprintf('%s/.ssh/id_rsa-aws', ENV['HOME'])
12
+ },
13
+ :verbosity => 1,
14
+ )
15
+
16
+ a = aws_already_running.run('ls -l /etc/hosts; who')
17
+
18
+ aws = Rouster.new(
19
+ :name => 'aws-testing',
20
+ :sudo => false,
21
+ :passthrough => {
22
+ # all required settings
23
+ :type => :aws,
24
+ :keypair => 'your-keypair-name',
25
+ :security_groups => 'integration-testing',
26
+ :key => sprintf('%s/.ssh/id_rsa-aws', ENV['HOME']),
27
+ :userdata => 'foo',
28
+
29
+ # optional, setting to be explicit
30
+ :ami => 'your-ami-id',
31
+ :dns_propagation_sleep => 20,
32
+ :min_count => 1, # TODO don't know how to actually handle multiple machines.. just do the same thing on all of the hosts?
33
+ :max_count => 1,
34
+ :region => 'us-west-2',
35
+ :size => 't1.micro',
36
+ :ssh_port => 22,
37
+ :user => 'ec2-user',
38
+
39
+ :key_id => ENV['AWS_ACCESS_KEY_ID'],
40
+ :secret_key => ENV['AWS_SECRET_ACCESS_KEY'],
41
+ },
42
+ :sshtunnel => false,
43
+ :verbosity => 1,
44
+ )
45
+
46
+ p "up(): #{aws.up}"
47
+
48
+ aws_clone = Rouster.new(
49
+ :name => 'aws-testing-clone',
50
+ :passthrough => {
51
+ :type => :aws,
52
+ :key => sprintf('%s/.ssh/id_rsa-aws', ENV['HOME']),
53
+ :instance => aws.aws_get_instance,
54
+ },
55
+ :verbosity => 1,
56
+ )
57
+
58
+ [ aws, aws_already_running, aws_clone ].each do |a|
59
+ p "aws_get_ami: #{a.aws_get_ami}"
60
+ p "aws_get_instance: #{a.aws_get_instance}"
61
+
62
+ p "status: #{a.status}"
63
+ p "aws_status: #{a.aws_status}" # TODO merge this into status
64
+
65
+ p "aws_get_ip(:internal, :public): #{a.aws_get_ip(:internal, :public)}"
66
+ p "aws_get_ip(:internal, :private): #{a.aws_get_ip(:internal, :private)}"
67
+ p "aws_get_ip(:aws, :public): #{a.aws_get_ip(:aws, :public)}"
68
+ p "aws_get_ip(:aws, :private): #{a.aws_get_ip(:aws, :private)}"
69
+
70
+ p "aws_get_hostname(:internal, :public): #{a.aws_get_hostname(:internal, :public)}"
71
+ p "aws_get_hostname(:internal, :private): #{a.aws_get_hostname(:internal, :private)}"
72
+ p "aws_get_hostname(:aws, :public): #{a.aws_get_hostname(:aws, :public)}"
73
+ p "aws_get_hostname(:aws, :private): #{a.aws_get_hostname(:aws, :private)}"
74
+
75
+ p "run(uptime): #{a.run('uptime')}"
76
+ p "get(/etc/hosts): #{a.get('/etc/hosts')}"
77
+ p "put(/etc/hosts, /tmp): #{a.put('/etc/hosts', '/tmp')}"
78
+
79
+ p "aws_get_userdata: #{a.aws_get_userdata}"
80
+ p "aws_get_metadata: #{a.aws_get_metadata}"
81
+
82
+ p 'DBGZ' if nil?
83
+ end
84
+
85
+ exit