vagrant-multi-putty 1.2.0 → 1.4.0

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.
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: