vagrant-plugin-dummy 0.0.1

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 (88) hide show
  1. data/.gitignore +20 -0
  2. data/Gemfile +11 -0
  3. data/README.md +24 -0
  4. data/Rakefile +15 -0
  5. data/lib/vagrant-plugin-dummy/communication/communicator.rb +51 -0
  6. data/lib/vagrant-plugin-dummy/errors.rb +13 -0
  7. data/lib/vagrant-plugin-dummy/guest/dummy.rb +48 -0
  8. data/lib/vagrant-plugin-dummy/monkey_patches/lib/vagrant/machine.rb +27 -0
  9. data/lib/vagrant-plugin-dummy/plugin.rb +100 -0
  10. data/lib/vagrant-plugin-dummy/version.rb +3 -0
  11. data/lib/vagrant-plugin-dummy.rb +24 -0
  12. data/locales/en.yml +8 -0
  13. data/oldgit/FETCH_HEAD +4 -0
  14. data/oldgit/HEAD +1 -0
  15. data/oldgit/ORIG_HEAD +1 -0
  16. data/oldgit/config +12 -0
  17. data/oldgit/description +1 -0
  18. data/oldgit/hooks/applypatch-msg.sample +15 -0
  19. data/oldgit/hooks/commit-msg.sample +24 -0
  20. data/oldgit/hooks/post-update.sample +8 -0
  21. data/oldgit/hooks/pre-applypatch.sample +14 -0
  22. data/oldgit/hooks/pre-commit.sample +50 -0
  23. data/oldgit/hooks/pre-rebase.sample +169 -0
  24. data/oldgit/hooks/prepare-commit-msg.sample +36 -0
  25. data/oldgit/hooks/update.sample +128 -0
  26. data/oldgit/index +0 -0
  27. data/oldgit/info/exclude +6 -0
  28. data/oldgit/logs/HEAD +13 -0
  29. data/oldgit/logs/refs/heads/dummy-master +1 -0
  30. data/oldgit/logs/refs/heads/master +2 -0
  31. data/oldgit/logs/refs/heads/vagrant-1.2 +3 -0
  32. data/oldgit/logs/refs/remotes/origin/HEAD +1 -0
  33. data/oldgit/logs/refs/remotes/origin/chef-schtasks +1 -0
  34. data/oldgit/logs/refs/remotes/origin/master +2 -0
  35. data/oldgit/logs/refs/remotes/origin/vagrant-1.2 +3 -0
  36. data/oldgit/logs/refs/remotes/origin/winrm-2.0 +1 -0
  37. data/oldgit/objects/pack/pack-829e113048479ca488917c38a7779511189ee623.idx +0 -0
  38. data/oldgit/objects/pack/pack-829e113048479ca488917c38a7779511189ee623.pack +0 -0
  39. data/oldgit/objects/pack/pack-9d783f03b5d312d0eb7c60c232336524cf240841.idx +0 -0
  40. data/oldgit/objects/pack/pack-9d783f03b5d312d0eb7c60c232336524cf240841.pack +0 -0
  41. data/oldgit/objects/pack/pack-fc30e147a30fce4b4b0e300c3cdb4743945456d4.idx +0 -0
  42. data/oldgit/objects/pack/pack-fc30e147a30fce4b4b0e300c3cdb4743945456d4.pack +0 -0
  43. data/oldgit/packed-refs +9 -0
  44. data/oldgit/refs/heads/dummy-master +1 -0
  45. data/oldgit/refs/heads/master +1 -0
  46. data/oldgit/refs/heads/vagrant-1.2 +1 -0
  47. data/oldgit/refs/remotes/origin/chef-schtasks +1 -0
  48. data/oldgit/refs/remotes/origin/master +1 -0
  49. data/oldgit/refs/remotes/origin/vagrant-1.2 +1 -0
  50. data/oldgit/refs/remotes/origin/winrm-2.0 +1 -0
  51. data/spec/vagrant-windows/config_spec.rb +58 -0
  52. data/spec/vagrant-windows/guestnetwork_spec.rb +48 -0
  53. data/spec/vagrant-windows/helper_spec.rb +38 -0
  54. data/spec/vagrant-windows/winrmcommunicator_spec.rb +27 -0
  55. data/vagrant-plugin-dummy.gemspec +53 -0
  56. data/windows/communication/guestnetwork.rb +133 -0
  57. data/windows/communication/winrmcommunicator.rb +120 -0
  58. data/windows/communication/winrmfinder.rb +45 -0
  59. data/windows/communication/winrmshell.rb +141 -0
  60. data/windows/config/windows.rb +35 -0
  61. data/windows/config/winrm.rb +51 -0
  62. data/windows/errors.rb +27 -0
  63. data/windows/guest/cap/change_host_name.rb +14 -0
  64. data/windows/guest/cap/configure_networks.rb +69 -0
  65. data/windows/guest/cap/halt.rb +22 -0
  66. data/windows/guest/cap/mount_virtualbox_shared_folder.rb +17 -0
  67. data/windows/guest/cap/mount_vmware_shared_folder.rb +15 -0
  68. data/windows/guest/windows.rb +71 -0
  69. data/windows/helper.rb +19 -0
  70. data/windows/monkey_patches/lib/vagrant/machine.rb +32 -0
  71. data/windows/monkey_patches/plugins/providers/virtualbox/action/share_folders.rb +44 -0
  72. data/windows/monkey_patches/plugins/providers/virtualbox/driver/version_4_2.rb +20 -0
  73. data/windows/monkey_patches/plugins/provisioners/chef/provisioner/chef_client.rb +1 -0
  74. data/windows/monkey_patches/plugins/provisioners/chef/provisioner/chef_solo.rb +106 -0
  75. data/windows/monkey_patches/plugins/provisioners/puppet/provisioner/puppet.rb +101 -0
  76. data/windows/monkey_patches/plugins/provisioners/puppet/provisioner/puppet_server.rb +1 -0
  77. data/windows/monkey_patches/plugins/provisioners/shell/provisioner.rb +89 -0
  78. data/windows/plugin.rb +129 -0
  79. data/windows/scripts/cheftask.ps1.erb +47 -0
  80. data/windows/scripts/cheftask.xml.erb +45 -0
  81. data/windows/scripts/cheftaskrun.ps1.erb +16 -0
  82. data/windows/scripts/command_alias.ps1 +36 -0
  83. data/windows/scripts/mount_volume.virtualbox.ps1.erb +49 -0
  84. data/windows/scripts/mount_volume.vmware.ps1.erb +49 -0
  85. data/windows/scripts/set_work_network.ps1 +6 -0
  86. data/windows/scripts/winrs_v3_get_adapters.ps1 +11 -0
  87. data/windows/version.rb +3 -0
  88. metadata +207 -0
@@ -0,0 +1,36 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to prepare the commit log message.
4
+ # Called by "git commit" with the name of the file that has the
5
+ # commit message, followed by the description of the commit
6
+ # message's source. The hook's purpose is to edit the commit
7
+ # message file. If the hook fails with a non-zero status,
8
+ # the commit is aborted.
9
+ #
10
+ # To enable this hook, rename this file to "prepare-commit-msg".
11
+
12
+ # This hook includes three examples. The first comments out the
13
+ # "Conflicts:" part of a merge commit.
14
+ #
15
+ # The second includes the output of "git diff --name-status -r"
16
+ # into the message, just before the "git status" output. It is
17
+ # commented because it doesn't cope with --amend or with squashed
18
+ # commits.
19
+ #
20
+ # The third example adds a Signed-off-by line to the message, that can
21
+ # still be edited. This is rarely a good idea.
22
+
23
+ case "$2,$3" in
24
+ merge,)
25
+ /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
26
+
27
+ # ,|template,)
28
+ # /usr/bin/perl -i.bak -pe '
29
+ # print "\n" . `git diff --cached --name-status -r`
30
+ # if /^#/ && $first++ == 0' "$1" ;;
31
+
32
+ *) ;;
33
+ esac
34
+
35
+ # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
36
+ # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
@@ -0,0 +1,128 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to blocks unannotated tags from entering.
4
+ # Called by "git receive-pack" with arguments: refname sha1-old sha1-new
5
+ #
6
+ # To enable this hook, rename this file to "update".
7
+ #
8
+ # Config
9
+ # ------
10
+ # hooks.allowunannotated
11
+ # This boolean sets whether unannotated tags will be allowed into the
12
+ # repository. By default they won't be.
13
+ # hooks.allowdeletetag
14
+ # This boolean sets whether deleting tags will be allowed in the
15
+ # repository. By default they won't be.
16
+ # hooks.allowmodifytag
17
+ # This boolean sets whether a tag may be modified after creation. By default
18
+ # it won't be.
19
+ # hooks.allowdeletebranch
20
+ # This boolean sets whether deleting branches will be allowed in the
21
+ # repository. By default they won't be.
22
+ # hooks.denycreatebranch
23
+ # This boolean sets whether remotely creating branches will be denied
24
+ # in the repository. By default this is allowed.
25
+ #
26
+
27
+ # --- Command line
28
+ refname="$1"
29
+ oldrev="$2"
30
+ newrev="$3"
31
+
32
+ # --- Safety check
33
+ if [ -z "$GIT_DIR" ]; then
34
+ echo "Don't run this script from the command line." >&2
35
+ echo " (if you want, you could supply GIT_DIR then run" >&2
36
+ echo " $0 <ref> <oldrev> <newrev>)" >&2
37
+ exit 1
38
+ fi
39
+
40
+ if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
41
+ echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
42
+ exit 1
43
+ fi
44
+
45
+ # --- Config
46
+ allowunannotated=$(git config --bool hooks.allowunannotated)
47
+ allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
48
+ denycreatebranch=$(git config --bool hooks.denycreatebranch)
49
+ allowdeletetag=$(git config --bool hooks.allowdeletetag)
50
+ allowmodifytag=$(git config --bool hooks.allowmodifytag)
51
+
52
+ # check for no description
53
+ projectdesc=$(sed -e '1q' "$GIT_DIR/description")
54
+ case "$projectdesc" in
55
+ "Unnamed repository"* | "")
56
+ echo "*** Project description file hasn't been set" >&2
57
+ exit 1
58
+ ;;
59
+ esac
60
+
61
+ # --- Check types
62
+ # if $newrev is 0000...0000, it's a commit to delete a ref.
63
+ zero="0000000000000000000000000000000000000000"
64
+ if [ "$newrev" = "$zero" ]; then
65
+ newrev_type=delete
66
+ else
67
+ newrev_type=$(git cat-file -t $newrev)
68
+ fi
69
+
70
+ case "$refname","$newrev_type" in
71
+ refs/tags/*,commit)
72
+ # un-annotated tag
73
+ short_refname=${refname##refs/tags/}
74
+ if [ "$allowunannotated" != "true" ]; then
75
+ echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
76
+ echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
77
+ exit 1
78
+ fi
79
+ ;;
80
+ refs/tags/*,delete)
81
+ # delete tag
82
+ if [ "$allowdeletetag" != "true" ]; then
83
+ echo "*** Deleting a tag is not allowed in this repository" >&2
84
+ exit 1
85
+ fi
86
+ ;;
87
+ refs/tags/*,tag)
88
+ # annotated tag
89
+ if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
90
+ then
91
+ echo "*** Tag '$refname' already exists." >&2
92
+ echo "*** Modifying a tag is not allowed in this repository." >&2
93
+ exit 1
94
+ fi
95
+ ;;
96
+ refs/heads/*,commit)
97
+ # branch
98
+ if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
99
+ echo "*** Creating a branch is not allowed in this repository" >&2
100
+ exit 1
101
+ fi
102
+ ;;
103
+ refs/heads/*,delete)
104
+ # delete branch
105
+ if [ "$allowdeletebranch" != "true" ]; then
106
+ echo "*** Deleting a branch is not allowed in this repository" >&2
107
+ exit 1
108
+ fi
109
+ ;;
110
+ refs/remotes/*,commit)
111
+ # tracking branch
112
+ ;;
113
+ refs/remotes/*,delete)
114
+ # delete tracking branch
115
+ if [ "$allowdeletebranch" != "true" ]; then
116
+ echo "*** Deleting a tracking branch is not allowed in this repository" >&2
117
+ exit 1
118
+ fi
119
+ ;;
120
+ *)
121
+ # Anything else (is there anything else?)
122
+ echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
123
+ exit 1
124
+ ;;
125
+ esac
126
+
127
+ # --- Finished
128
+ exit 0
data/oldgit/index ADDED
Binary file
@@ -0,0 +1,6 @@
1
+ # git ls-files --others --exclude-from=.git/info/exclude
2
+ # Lines that start with '#' are comments.
3
+ # For a project mostly in C, the following would be a good set of
4
+ # exclude patterns (uncomment them if you want to use them):
5
+ # *.[oa]
6
+ # *~
data/oldgit/logs/HEAD ADDED
@@ -0,0 +1,13 @@
1
+ 0000000000000000000000000000000000000000 5a67f142b4cc3a0faa74861d20e350495d33ac1a Bryan Bishop <kanzure@gmail.com> 1374786892 -0500 clone: from https://github.com/WinRb/vagrant-windows.git
2
+ 5a67f142b4cc3a0faa74861d20e350495d33ac1a af2bead0eda037b8f5f4033c2942f6a597204864 Bryan Bishop <kanzure@gmail.com> 1374786940 -0500 checkout: moving from master to origin/vagrant-1.2
3
+ af2bead0eda037b8f5f4033c2942f6a597204864 af2bead0eda037b8f5f4033c2942f6a597204864 Bryan Bishop <kanzure@gmail.com> 1374786952 -0500 checkout: moving from af2bead0eda037b8f5f4033c2942f6a597204864 to vagrant-1.2
4
+ af2bead0eda037b8f5f4033c2942f6a597204864 a72f90691991ff92fbcbbf5ca5142735e42f6609 Bryan Bishop <kanzure@gmail.com> 1377480141 -0500 merge origin/vagrant-1.2: Fast-forward
5
+ a72f90691991ff92fbcbbf5ca5142735e42f6609 5a67f142b4cc3a0faa74861d20e350495d33ac1a Bryan Bishop <kanzure@gmail.com> 1378825564 -0500 checkout: moving from vagrant-1.2 to master
6
+ 5a67f142b4cc3a0faa74861d20e350495d33ac1a a72f90691991ff92fbcbbf5ca5142735e42f6609 Bryan Bishop <kanzure@gmail.com> 1378825575 -0500 checkout: moving from master to vagrant-1.2
7
+ a72f90691991ff92fbcbbf5ca5142735e42f6609 b4c93197e40d3c2b38d06f316bfb1fd5f0a120de Bryan Bishop <kanzure@gmail.com> 1378825580 -0500 merge origin/vagrant-1.2: Fast-forward
8
+ b4c93197e40d3c2b38d06f316bfb1fd5f0a120de 5a67f142b4cc3a0faa74861d20e350495d33ac1a Bryan Bishop <kanzure@gmail.com> 1378825632 -0500 checkout: moving from vagrant-1.2 to master
9
+ 5a67f142b4cc3a0faa74861d20e350495d33ac1a b4c93197e40d3c2b38d06f316bfb1fd5f0a120de Bryan Bishop <kanzure@gmail.com> 1378825935 -0500 checkout: moving from master to vagrant-1.2
10
+ b4c93197e40d3c2b38d06f316bfb1fd5f0a120de 5a67f142b4cc3a0faa74861d20e350495d33ac1a Bryan Bishop <kanzure@gmail.com> 1378825958 -0500 checkout: moving from vagrant-1.2 to master
11
+ 5a67f142b4cc3a0faa74861d20e350495d33ac1a a98d27d5b4f16de29bd3bf9c486d25b14d5960c3 Bryan Bishop <kanzure@gmail.com> 1378825961 -0500 merge origin/master: Fast-forward
12
+ a98d27d5b4f16de29bd3bf9c486d25b14d5960c3 b4c93197e40d3c2b38d06f316bfb1fd5f0a120de Bryan Bishop <kanzure@gmail.com> 1378825967 -0500 checkout: moving from master to vagrant-1.2
13
+ b4c93197e40d3c2b38d06f316bfb1fd5f0a120de b4c93197e40d3c2b38d06f316bfb1fd5f0a120de Bryan Bishop <kanzure@gmail.com> 1378826075 -0500 checkout: moving from vagrant-1.2 to dummy-master
@@ -0,0 +1 @@
1
+ 0000000000000000000000000000000000000000 b4c93197e40d3c2b38d06f316bfb1fd5f0a120de Bryan Bishop <kanzure@gmail.com> 1378826075 -0500 branch: Created from HEAD
@@ -0,0 +1,2 @@
1
+ 0000000000000000000000000000000000000000 5a67f142b4cc3a0faa74861d20e350495d33ac1a Bryan Bishop <kanzure@gmail.com> 1374786892 -0500 clone: from https://github.com/WinRb/vagrant-windows.git
2
+ 5a67f142b4cc3a0faa74861d20e350495d33ac1a a98d27d5b4f16de29bd3bf9c486d25b14d5960c3 Bryan Bishop <kanzure@gmail.com> 1378825961 -0500 merge origin/master: Fast-forward
@@ -0,0 +1,3 @@
1
+ 0000000000000000000000000000000000000000 af2bead0eda037b8f5f4033c2942f6a597204864 Bryan Bishop <kanzure@gmail.com> 1374786952 -0500 branch: Created from refs/remotes/origin/vagrant-1.2
2
+ af2bead0eda037b8f5f4033c2942f6a597204864 a72f90691991ff92fbcbbf5ca5142735e42f6609 Bryan Bishop <kanzure@gmail.com> 1377480141 -0500 merge origin/vagrant-1.2: Fast-forward
3
+ a72f90691991ff92fbcbbf5ca5142735e42f6609 b4c93197e40d3c2b38d06f316bfb1fd5f0a120de Bryan Bishop <kanzure@gmail.com> 1378825580 -0500 merge origin/vagrant-1.2: Fast-forward
@@ -0,0 +1 @@
1
+ 0000000000000000000000000000000000000000 5a67f142b4cc3a0faa74861d20e350495d33ac1a Bryan Bishop <kanzure@gmail.com> 1374786892 -0500 clone: from https://github.com/WinRb/vagrant-windows.git
@@ -0,0 +1 @@
1
+ 0000000000000000000000000000000000000000 10332b013b911516b20c344f933aadafefc9b752 Bryan Bishop <kanzure@raichu.austin.rr.com> 1374786936 -0500 fetch origin: storing head
@@ -0,0 +1,2 @@
1
+ 0000000000000000000000000000000000000000 5a67f142b4cc3a0faa74861d20e350495d33ac1a Bryan Bishop <kanzure@raichu.austin.rr.com> 1374786936 -0500 fetch origin: storing head
2
+ 5a67f142b4cc3a0faa74861d20e350495d33ac1a a98d27d5b4f16de29bd3bf9c486d25b14d5960c3 Bryan Bishop <kanzure@gmail.com> 1377480129 -0500 fetch origin: fast-forward
@@ -0,0 +1,3 @@
1
+ 0000000000000000000000000000000000000000 af2bead0eda037b8f5f4033c2942f6a597204864 Bryan Bishop <kanzure@raichu.austin.rr.com> 1374786936 -0500 fetch origin: storing head
2
+ af2bead0eda037b8f5f4033c2942f6a597204864 a72f90691991ff92fbcbbf5ca5142735e42f6609 Bryan Bishop <kanzure@gmail.com> 1377480129 -0500 fetch origin: fast-forward
3
+ a72f90691991ff92fbcbbf5ca5142735e42f6609 b4c93197e40d3c2b38d06f316bfb1fd5f0a120de Bryan Bishop <kanzure@gmail.com> 1378825571 -0500 fetch origin: fast-forward
@@ -0,0 +1 @@
1
+ 0000000000000000000000000000000000000000 f09f1b803ab437ec9e31d28560df03add6944308 Bryan Bishop <kanzure@raichu.austin.rr.com> 1374786936 -0500 fetch origin: storing head
@@ -0,0 +1,9 @@
1
+ 86e18c3696e7ee39c19e895bcf16c860ab89b3cc refs/tags/v0.0.1
2
+ 48d1706053b6702cf180ac6fd997f760a515e5ad refs/tags/v0.0.2
3
+ 98dfabf6c25d0f24d36634662acdc2a563c416f0 refs/tags/v0.0.3
4
+ c00b69089693056bb7952fbcfd8b7cda26cc9728 refs/tags/v0.1.0
5
+ ce69096b1048d88b73bd4cf5fe29351b65e393da refs/tags/v0.1.1
6
+ 7ee35a495d657dfb96969a2a206f6a133ea0bb91 refs/tags/v0.1.2
7
+ 8cbe67806ba30a85a05d9eeaf1377dc819d98595 refs/tags/v1.0.0
8
+ 5ac529b73f7f1e2329c1458b0fe200ea1fafd55b refs/tags/v1.0.1
9
+ 6aa287ee9dfd18704446c6fedbdf653cd5add783 refs/tags/v1.0.3
@@ -0,0 +1 @@
1
+ b4c93197e40d3c2b38d06f316bfb1fd5f0a120de
@@ -0,0 +1 @@
1
+ a98d27d5b4f16de29bd3bf9c486d25b14d5960c3
@@ -0,0 +1 @@
1
+ b4c93197e40d3c2b38d06f316bfb1fd5f0a120de
@@ -0,0 +1 @@
1
+ 10332b013b911516b20c344f933aadafefc9b752
@@ -0,0 +1 @@
1
+ a98d27d5b4f16de29bd3bf9c486d25b14d5960c3
@@ -0,0 +1 @@
1
+ b4c93197e40d3c2b38d06f316bfb1fd5f0a120de
@@ -0,0 +1 @@
1
+ f09f1b803ab437ec9e31d28560df03add6944308
@@ -0,0 +1,58 @@
1
+ require "vagrant-windows/config/windows"
2
+ require "vagrant-windows/config/winrm"
3
+
4
+ describe VagrantWindows::Config::Windows do
5
+ let(:instance) { described_class.new }
6
+
7
+ describe "defaults" do
8
+ subject do
9
+ instance.tap do |o|
10
+ o.finalize!
11
+ end
12
+ end
13
+
14
+ its("halt_timeout") { should == 30 }
15
+ its("halt_check_interval") { should == 1 }
16
+ end
17
+
18
+ describe "overriding defaults" do
19
+ [:halt_timeout, :halt_check_interval].each do |attribute|
20
+ it "should not default #{attribute} if overridden" do
21
+ instance.send("#{attribute}=".to_sym, 10)
22
+ instance.finalize!
23
+ instance.send(attribute).should == 10
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ describe VagrantWindows::Config::WinRM do
31
+ let(:instance) { described_class.new }
32
+
33
+ describe "defaults" do
34
+ subject do
35
+ instance.tap do |o|
36
+ o.finalize!
37
+ end
38
+ end
39
+
40
+ its("username") { should == "vagrant" }
41
+ its("password") { should == "vagrant" }
42
+ its("host") { should == "localhost" }
43
+ its("port") { should == 5985 }
44
+ its("guest_port") { should == 5985 }
45
+ its("max_tries") { should == 20 }
46
+ its("timeout") { should == 1800 }
47
+ end
48
+
49
+ describe "overriding defaults" do
50
+ [:username, :password, :host, :port, :guest_port, :max_tries, :timeout].each do |attribute|
51
+ it "should not default #{attribute} if overridden" do
52
+ instance.send("#{attribute}=".to_sym, 10)
53
+ instance.finalize!
54
+ instance.send(attribute).should == 10
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,48 @@
1
+ require "vagrant-windows/communication/guestnetwork"
2
+ require "vagrant-windows/communication/winrmshell"
3
+
4
+ describe VagrantWindows::Communication::GuestNetwork do
5
+
6
+ before(:all) do
7
+ # This test requires you already have a running Windows Server 2008 R2 Vagrant VM
8
+ # Not ideal, but you have to start somewhere
9
+ @shell = VagrantWindows::Communication::WinRMShell.new("localhost", "vagrant", "vagrant")
10
+ @guestnetwork = VagrantWindows::Communication::GuestNetwork.new(@shell)
11
+ end
12
+
13
+ describe "wsman_version" do
14
+ it "network_adapters" do
15
+ nics = @guestnetwork.network_adapters()
16
+ #puts nics.pretty_inspect()
17
+
18
+ expect(nics.count).to be >= 1
19
+ nic = nics[0]
20
+
21
+ expect(nic.has_key?(:mac_address)).to be_true
22
+ expect(nic.has_key?(:net_connection_id)).to be_true
23
+ expect(nic.has_key?(:interface_index)).to be_true
24
+ expect(nic.has_key?(:index)).to be_true
25
+
26
+ expect(nic[:mac_address]).to match(/^([0-9A-F]{2}[:]){5}([0-9A-F]{2})$/)
27
+ Integer(nic[:interface_index])
28
+ Integer(nic[:index])
29
+ end
30
+
31
+ it "should configure DHCP for adapter" do
32
+ nics = @guestnetwork.network_adapters()
33
+ @guestnetwork.configure_dhcp_interface(nics[0][:index], nics[0][:net_connection_id])
34
+ expect(@guestnetwork.is_dhcp_enabled(nics[0][:index])).to be_true
35
+ end
36
+
37
+ it "should configure static IP for adapter" do
38
+ nics = @guestnetwork.network_adapters()
39
+ @guestnetwork.configure_static_interface(nics[1][:index], nics[1][:net_connection_id], "192.168.0.100", "255.255.255.0")
40
+ expect(@guestnetwork.is_dhcp_enabled(nics[1][:index])).to be_false
41
+ end
42
+
43
+ it "should configure all networks to work mode" do
44
+ @guestnetwork.set_all_networks_to_work()
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,38 @@
1
+ require "vagrant-windows/helper"
2
+
3
+ describe VagrantWindows::Helper do
4
+
5
+ class DummyHelper
6
+ include VagrantWindows::Helper
7
+ end
8
+
9
+ before(:all) do
10
+ @dummy = DummyHelper.new
11
+ end
12
+
13
+ describe "win_friendly_path" do
14
+ it "should replace slashes with backslashes" do
15
+ @dummy.win_friendly_path('c:/tmp/dir').should eq('c:\\tmp\\dir')
16
+ end
17
+
18
+ it "should prepend c: drive if not drive specified" do
19
+ @dummy.win_friendly_path('/tmp/dir').should eq('c:\\tmp\\dir')
20
+ end
21
+
22
+ it "should return nil if no path specified" do
23
+ @dummy.win_friendly_path(nil).should be_nil
24
+ end
25
+ end
26
+
27
+ describe "win_friendly_share_id" do
28
+ it "should use share id if present" do
29
+ @dummy.win_friendly_share_id('sharename').should eq('sharename')
30
+ end
31
+
32
+ it "should use last folder name in guest_path" do
33
+ @dummy.win_friendly_share_id('/tmp/folder/sharename').should eq('tmp_folder_sharename')
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,27 @@
1
+ require "vagrant-windows/communication/guestnetwork"
2
+ require "vagrant-windows/communication/winrmshell"
3
+
4
+ describe VagrantWindows::Communication::WinRMCommunicator do
5
+
6
+ before(:all) do
7
+ # This test requires you already have a running Windows Server 2008 R2 Vagrant VM
8
+ # Not ideal, but you have to start somewhere
9
+ @shell = VagrantWindows::Communication::WinRMShell.new("localhost", "vagrant", "vagrant")
10
+ @communicator = VagrantWindows::Communication::WinRMCommunicator.new({})
11
+ @communicator.set_winrmshell(@shell)
12
+ end
13
+
14
+ describe "execute" do
15
+ it "should return 1" do
16
+ expect(@communicator.execute("exit 1")).to eq(1)
17
+ end
18
+
19
+ it "should return 1 with block" do
20
+ exit_code = @communicator.sudo("exit 1", {}) do |type, line|
21
+ puts line
22
+ end
23
+ expect(exit_code).to eq(1)
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,53 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/vagrant-plugin-dummy/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Bryan Bishop"]
6
+ gem.email = ["kanzure@gmail.com"]
7
+ gem.description = %q{Dummy Guest Support for Vagrant}
8
+ gem.summary = %q{A small gem that adds dummy guest support to vagrant, basically no vagrant features}
9
+ gem.homepage = "https://github.com/kanzure/vagrant-plugin-dummy"
10
+
11
+ # The following block of code determines the files that should be included
12
+ # in the gem. It does this by reading all the files in the directory where
13
+ # this gemspec is, and parsing out the ignored files from the gitignore.
14
+ # Note that the entire gitignore(5) syntax is not supported, specifically
15
+ # the "!" syntax, but it should mostly work correctly.
16
+ root_path = File.dirname(__FILE__)
17
+ all_files = Dir.chdir(root_path) { Dir.glob("**/{*,.*}") }
18
+ all_files.reject! { |file| [".", ".."].include?(File.basename(file)) }
19
+ gitignore_path = File.join(root_path, ".gitignore")
20
+ gitignore = File.readlines(gitignore_path)
21
+ gitignore.map! { |line| line.chomp.strip }
22
+ gitignore.reject! { |line| line.empty? || line =~ /^(#|!)/ }
23
+
24
+ unignored_files = all_files.reject do |file|
25
+ # Ignore any directories, the gemspec only cares about files
26
+ next true if File.directory?(file)
27
+
28
+ # Ignore any paths that match anything in the gitignore. We do
29
+ # two tests here:
30
+ #
31
+ # - First, test to see if the entire path matches the gitignore.
32
+ # - Second, match if the basename does, this makes it so that things
33
+ # like '.DS_Store' will match sub-directories too (same behavior
34
+ # as git).
35
+ #
36
+ gitignore.any? do |ignore|
37
+ File.fnmatch(ignore, file, File::FNM_PATHNAME) ||
38
+ File.fnmatch(ignore, File.basename(file), File::FNM_PATHNAME)
39
+ end
40
+ end
41
+
42
+ gem.files = unignored_files
43
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
44
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
45
+ gem.name = "vagrant-plugin-dummy"
46
+ gem.require_paths = ["lib"]
47
+ gem.version = VagrantPluginDummy::VERSION
48
+
49
+ gem.add_development_dependency "rake"
50
+ gem.add_development_dependency "rspec-core", "~> 2.12.2"
51
+ gem.add_development_dependency "rspec-expectations", "~> 2.12.1"
52
+ gem.add_development_dependency "rspec-mocks", "~> 2.12.1"
53
+ end
@@ -0,0 +1,133 @@
1
+ require 'log4r'
2
+ require_relative '../../vagrant-windows'
3
+ require_relative '../communication/winrmshell'
4
+ require_relative '../errors'
5
+
6
+ module VagrantWindows
7
+ module Communication
8
+
9
+ # Manages the remote Windows guest network
10
+ class GuestNetwork
11
+
12
+ PS_GET_WSMAN_VER = '((test-wsman).productversion.split(" ") | select -last 1).split("\.")[0]'
13
+ WQL_NET_ADAPTERS_V2 = 'SELECT * FROM Win32_NetworkAdapter WHERE MACAddress IS NOT NULL'
14
+
15
+ attr_reader :logger
16
+ attr_reader :winrmshell
17
+
18
+ def initialize(winrmshell)
19
+ @logger = Log4r::Logger.new("vagrant_windows::communication::winrmshell")
20
+ @logger.debug("initializing WinRMShell")
21
+ @winrmshell = winrmshell
22
+ end
23
+
24
+ # Returns an array of all NICs on the guest. Each array entry is a
25
+ # Hash of the NICs properties.
26
+ #
27
+ # @return [Array]
28
+ def network_adapters()
29
+ wsman_version() == 2? network_adapters_v2_winrm() : network_adapters_v3_winrm()
30
+ end
31
+
32
+ # Checks to see if the specified NIC is currently configured for DHCP.
33
+ #
34
+ # @return [Boolean]
35
+ def is_dhcp_enabled(nic_index)
36
+ has_dhcp_enabled = false
37
+ cmd = "Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter \"Index=#{nic_index} and DHCPEnabled=True\""
38
+ @winrmshell.powershell(cmd) do |type, line|
39
+ has_dhcp_enabled = !line.nil?
40
+ end
41
+ @logger.debug("NIC #{nic_index} has DHCP enabled: #{has_dhcp_enabled}")
42
+ has_dhcp_enabled
43
+ end
44
+
45
+ # Configures the specified interface for DHCP
46
+ #
47
+ # @param [Integer] The interface index.
48
+ # @param [String] The unique name of the NIC, such as 'Local Area Connection'.
49
+ def configure_dhcp_interface(nic_index, net_connection_id)
50
+ @logger.info("Configuring NIC #{net_connection_id} for DHCP")
51
+ if !is_dhcp_enabled(nic_index)
52
+ netsh = "netsh interface ip set address \"#{net_connection_id}\" dhcp"
53
+ @winrmshell.powershell(netsh)
54
+ end
55
+ end
56
+
57
+ # Configures the specified interface using a static address
58
+ #
59
+ # @param [Integer] The interface index.
60
+ # @param [String] The unique name of the NIC, such as 'Local Area Connection'.
61
+ # @param [String] The static IP address to assign to the specified NIC.
62
+ # @param [String] The network mask to use with the static IP.
63
+ def configure_static_interface(nic_index, net_connection_id, ip, netmask)
64
+ @logger.info("Configuring NIC #{net_connection_id} using static ip #{ip}")
65
+ #netsh interface ip set address "Local Area Connection 2" static 192.168.33.10 255.255.255.0
66
+ netsh = "netsh interface ip set address \"#{net_connection_id}\" static #{ip} #{netmask}"
67
+ @winrmshell.powershell(netsh)
68
+ end
69
+
70
+ # Sets all networks on the guest to 'Work Network' mode. This is
71
+ # to allow guest access from the host via a private IP on Win7
72
+ # https://github.com/WinRb/vagrant-windows/issues/63
73
+ def set_all_networks_to_work()
74
+ @logger.info("Setting all networks to 'Work Network'")
75
+ command = VagrantWindows.load_script("set_work_network.ps1")
76
+ @winrmshell.powershell(command)
77
+ end
78
+
79
+
80
+ protected
81
+
82
+ # Checks the WinRS version on the guest. Usually 2 on Windows 7/2008
83
+ # and 3 on Windows 8/2012.
84
+ #
85
+ # @return [Integer]
86
+ def wsman_version()
87
+ @logger.debug("querying WSMan version")
88
+ version = ''
89
+ @winrmshell.powershell(PS_GET_WSMAN_VER) do |type, line|
90
+ version = version + "#{line}" if type == :stdout && !line.nil?
91
+ end
92
+ @logger.debug("wsman version: #{version}")
93
+ Integer(version)
94
+ end
95
+
96
+ # Returns an array of all NICs on the guest. Each array entry is a
97
+ # Hash of the NICs properties. This method should only be used on
98
+ # guests that have WinRS version 2.
99
+ #
100
+ # @return [Array]
101
+ def network_adapters_v2_winrm()
102
+ @logger.debug("querying network adapters")
103
+ # Get all NICs that have a MAC address
104
+ # http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx
105
+ adapters = @winrmshell.wql(WQL_NET_ADAPTERS_V2)[:win32_network_adapter]
106
+ @logger.debug("#{adapters.inspect}")
107
+ return adapters
108
+ end
109
+
110
+ # Returns an array of all NICs on the guest. Each array entry is a
111
+ # Hash of the NICs properties. This method should only be used on
112
+ # guests that have WinRS version 3.
113
+ #
114
+ # This method is a workaround until the WinRM gem supports WinRS version 3.
115
+ #
116
+ # @return [Array]
117
+ def network_adapters_v3_winrm()
118
+ winrs_v3_get_adapters_ps1 = VagrantWindows.load_script("winrs_v3_get_adapters.ps1")
119
+ output = ''
120
+ @winrmshell.powershell(winrs_v3_get_adapters_ps1) do |type, line|
121
+ output = output + "#{line}" if type == :stdout && !line.nil?
122
+ end
123
+ adapters = []
124
+ JSON.parse(output).each do |nic|
125
+ adapters << nic.inject({}){ |memo,(k,v)| memo[k.to_sym] = v; memo }
126
+ end
127
+ @logger.debug("#{adapters.inspect}")
128
+ return adapters
129
+ end
130
+
131
+ end #GuestNetwork class
132
+ end
133
+ end