vagrant-multi-putty 1.2.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.sw[op]
data/README.md CHANGED
@@ -17,9 +17,9 @@ $ vagrant plugin install vagrant-multi-putty
17
17
  ### Putty Binary
18
18
  Download: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
19
19
 
20
- Download the putty executable for your platform and place it's location on your
21
- PATH variable. Seek your operating system manual for instructions on how to
22
- modify your PATH variable.
20
+ Download the putty executable for your platform and add it's location to your
21
+ PATH environment variable. Seek your operating system manual for instructions
22
+ on how to modify your PATH variable.
23
23
 
24
24
  ### SSH Private Key conversion using PuTTYgen
25
25
  Download: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
@@ -37,7 +37,7 @@ or convert a private key of your own.
37
37
  5. Save the key using the filename of "insecure_private_key.ppk".
38
38
 
39
39
  Note: If you do not explicity set the config.putty.private_key_path variable,
40
- you need to convert the insecure_private_key and store it with the a ".ppk"
40
+ you need to convert the insecure_private_key and store it with a ".ppk"
41
41
  extension. The vagrant-multi-putty plugin appends this extension automatically.
42
42
 
43
43
  ## Configuration
@@ -53,12 +53,38 @@ vagrant-multi-putty:
53
53
  All other config.ssh options should work for vagrant-multi-putty just like they
54
54
  do for vagrant ssh.
55
55
 
56
- There are currently two additional configuration parameters available:
56
+ There are currently a few additional configuration parameters available:
57
57
 
58
58
  * config.putty.username: Overrides the username set with
59
59
  config.ssh.username.
60
60
  * config.putty.private_key_path: Used to explicity set the path to the
61
61
  private key variable.
62
+ * config.putty.modal: change vagrant-multi-putty to use modal window mode.
63
+ Execute putty and block the terminal until all putty processes have exited.
64
+ Can be set on the command line with -m or --modal. This is false by default.
65
+ * config.putty.after_modal: Configure a post hook block that will be called
66
+ once all child putty processes have exited and modal mode is enabled. The
67
+ default block is empty.
68
+
69
+ #### Example usage of after_modal post hook
70
+ This is an example which uses the the win32-activate gem written by nazoking. This
71
+ only works on windows since win32-activate uses the win32 API.
72
+
73
+ Github Page: https://github.com/nazoking/win32-activate
74
+
75
+ After all putty windows are closed, the terminal window used to run the 'vagrant putty'
76
+ command will be brought into focus and placed on top of all open windows.
77
+ ```
78
+ Vagrant.configure("2") do |config|
79
+ # always modal mode
80
+ config.putty.modal = true
81
+ # set hook.
82
+ config.putty.after_modal do
83
+ require 'win32/activate'
84
+ Win32::Activate.active
85
+ end
86
+ end
87
+ ```
62
88
 
63
89
  ## Usage
64
90
  Basic usage:
@@ -5,7 +5,7 @@ require 'optparse'
5
5
  module VagrantMultiPutty
6
6
  class Command < Vagrant.plugin(2, :command)
7
7
  def execute
8
- options = {}
8
+ options = {:modal => @env.config_global.putty.modal }
9
9
  opts = OptionParser.new do |opts|
10
10
  opts.banner = "Usage: vagrant putty [vm-name...] [-- extra putty args]"
11
11
 
@@ -13,6 +13,10 @@ module VagrantMultiPutty
13
13
  options[:plain_auth] = p
14
14
  end
15
15
 
16
+ opts.on("-m", "--modal", "Block until all spawned putty processes have exited") do |m|
17
+ options[:modal] = m
18
+ end
19
+
16
20
  opts.separator ""
17
21
  end
18
22
 
@@ -33,13 +37,21 @@ module VagrantMultiPutty
33
37
  # detach the process from vagrant.
34
38
  with_target_vms(argv) do |vm|
35
39
  @logger.info("Launching putty session to: #{vm.name}")
36
- putty_connect(vm, putty_args, plain_auth=options[:plain_auth])
40
+ putty_connect(vm, putty_args, options)
41
+ end
42
+
43
+ if options[:modal]
44
+ Process.wait(0, Process::WNOHANG)
45
+ @env.config_global.putty.after_modal_hook.call
37
46
  end
47
+
38
48
  return 0
39
49
  end
40
50
 
41
- def putty_connect(vm, args, plain_auth=False)
51
+ def putty_connect(vm, args, options={})
52
+ # This isn't called by vagrant automatically.
42
53
  vm.config.putty.finalize!
54
+
43
55
  ssh_info = vm.ssh_info
44
56
  # If ssh_info is nil, the machine is not ready for ssh.
45
57
  raise Vagrant::Errors::SSHNotReady if ssh_info.nil?
@@ -50,20 +62,20 @@ module VagrantMultiPutty
50
62
  @logger.debug("Putty Private Key: #{pk_path}")
51
63
 
52
64
  # Load options from machine ssh_info.
53
- options = [ssh_info[:host]]
65
+ ssh_options = [ssh_info[:host]]
54
66
  # config.putty.username overrides the machines ssh_info username.
55
- options += ["-l", vm.config.putty.username || ssh_info[:username]]
56
- options += ["-P", ssh_info[:port].to_s]
57
- options += ["-i", pk_path] if !plain_auth
58
- options += ["-X"] if ssh_info[:forward_x11]
59
- options += ["-A"] if ssh_info[:forward_agent]
67
+ ssh_options += ["-l", vm.config.putty.username || ssh_info[:username]]
68
+ ssh_options += ["-P", ssh_info[:port].to_s]
69
+ ssh_options += ["-i", pk_path] unless options[:plain_auth]
70
+ ssh_options += ["-X"] if ssh_info[:forward_x11]
71
+ ssh_options += ["-A"] if ssh_info[:forward_agent]
60
72
 
61
73
  # Add in additional args from the command line.
62
- options.concat(args) if !args.nil?
74
+ ssh_options.concat(args) if !args.nil?
63
75
 
64
76
  # Spawn putty and detach it so we can move on.
65
77
  @logger.debug("Putty cmd line options: #{options.to_s}")
66
- pid = spawn("putty", *options)
78
+ pid = spawn("putty", *ssh_options)
67
79
  @logger.debug("Putty Child Pid: #{pid}")
68
80
  Process.detach(pid)
69
81
  end
@@ -1,16 +1,30 @@
1
1
  module VagrantMultiPutty
2
2
  class PuttyConfig < Vagrant.plugin(2, :config)
3
- attr_accessor :username
4
- attr_accessor :private_key_path
3
+ attr_accessor :username
4
+ attr_accessor :private_key_path
5
+ attr_accessor :after_modal_hook
6
+ attr_accessor :modal
5
7
 
6
- def initialize
7
- @username = UNSET_VALUE
8
- @private_key_path = UNSET_VALUE
9
- end
8
+ def after_modal &proc
9
+ @after_modal_hook = proc
10
+ end
10
11
 
11
- def finalize!
12
- @username = nil if @username == UNSET_VALUE
13
- @private_key_path = nil if @private_key_path == UNSET_VALUE
14
- end
12
+ def initialize
13
+ @username = UNSET_VALUE
14
+ @private_key_path = UNSET_VALUE
15
+ @after_modal_hook = UNSET_VALUE
16
+ @modal = UNSET_VALUE
17
+ end
18
+
19
+ def finalize!
20
+ @username = nil if @username == UNSET_VALUE
21
+ @private_key_path = nil if @private_key_path == UNSET_VALUE
22
+ @after_modal_hook = Proc{ } if @after_modal_hook == UNSET_VALUE
23
+ @modal = false if @modal == UNSET_VALUE
24
+ end
25
+
26
+ def validate(machine)
27
+ {}
28
+ end
15
29
  end
16
30
  end
@@ -1,3 +1,3 @@
1
1
  module VagrantMultiPutty
2
- VERSION = "1.2.0"
2
+ VERSION = "1.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-multi-putty
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-20 00:00:00.000000000 Z
12
+ date: 2013-11-01 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Vagrant plugin to allow VM ssh with PuTTY (multi-vm supported)
15
15
  email:
@@ -18,6 +18,7 @@ executables: []
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
+ - .gitignore
21
22
  - Gemfile
22
23
  - LICENSE
23
24
  - README.md
@@ -41,6 +42,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
41
42
  - - ! '>='
42
43
  - !ruby/object:Gem::Version
43
44
  version: '0'
45
+ segments:
46
+ - 0
47
+ hash: -108176497
44
48
  required_rubygems_version: !ruby/object:Gem::Requirement
45
49
  none: false
46
50
  requirements: