vagrant-skytap 0.1.11 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (342) hide show
  1. checksums.yaml +4 -4
  2. data/.byebug_history +242 -19
  3. data/CHANGELOG.md +9 -0
  4. data/README.md +30 -8
  5. data/Vagrantfile.rej +83 -0
  6. data/_patches-20160112/0 +388 -0
  7. data/_patches-20160112/1 +82 -0
  8. data/_patches-20160112/2 +239 -0
  9. data/_patches-20160112/COMPLETED-ABOVE-THIS-LINE +4 -0
  10. data/_patches-20160112/COMPLETED-BELOW-THIS-LINE +4 -0
  11. data/_patches-20160112/CR-ABOVE-THIS-LINE +4 -0
  12. data/_patches-20160112/CR-BELOW-THIS-LINE +4 -0
  13. data/_patches-20160112/WIP-ABOVE-THIS-LINE +4 -0
  14. data/_patches-20160112/WIP-BELOW-THIS-LINE +4 -0
  15. data/_patches-20160112/acceptance-test-runner +29 -0
  16. data/_patches-20160112/ansible-1 +92 -0
  17. data/_patches-20160112/cache-api-client-in-up +40 -0
  18. data/_patches-20160112/dead-code-in-actions +44 -0
  19. data/_patches-20160112/debug-changes +42 -0
  20. data/_patches-20160112/demo-rails-app +1276 -0
  21. data/_patches-20160112/eng-10166-halt-spec +40 -0
  22. data/_patches-20160112/eng-10256 +527 -0
  23. data/_patches-20160112/eng-10256-2 +162 -0
  24. data/_patches-20160112/eng-10256-ubuntu-testing +88 -0
  25. data/_patches-20160112/eng-10269-test-stuff +87 -0
  26. data/_patches-20160112/eng-10269-wtf +119 -0
  27. data/_patches-20160112/eng-10369 +143 -0
  28. data/_patches-20160112/eng-10369-tmp +60 -0
  29. data/_patches-20160112/eng-10919 +56 -0
  30. data/_patches-20160112/eng-11177-fix-actions-requires +44 -0
  31. data/_patches-20160112/eng-11442 +4 -0
  32. data/_patches-20160112/eng-11616 +403 -0
  33. data/_patches-20160112/eng-11616-2 +67 -0
  34. data/_patches-20160112/eng-11616-actual +184 -0
  35. data/_patches-20160112/eng-11625a +4 -0
  36. data/_patches-20160112/eng-11711 +85 -0
  37. data/_patches-20160112/eng-12232-command-spec +236 -0
  38. data/_patches-20160112/eng-12235 +83 -0
  39. data/_patches-20160112/eng-12235-override-refactor +140 -0
  40. data/_patches-20160112/eng-12240 +103 -0
  41. data/_patches-20160112/eng-12249 +40 -0
  42. data/_patches-20160112/eng-12301 +50 -0
  43. data/_patches-20160112/eng-12843 +95 -0
  44. data/_patches-20160112/env-source +112 -0
  45. data/_patches-20160112/frickin-vagrant-spec +163 -0
  46. data/_patches-20160112/gem-pre-version +14 -0
  47. data/_patches-20160112/gems-old +9 -0
  48. data/_patches-20160112/googles-specs +713 -0
  49. data/_patches-20160112/local-configs-ignore +61 -0
  50. data/_patches-20160112/misc +79 -0
  51. data/_patches-20160112/network-unreachable +31 -0
  52. data/_patches-20160112/new-boxfile +288 -0
  53. data/_patches-20160112/parallelization-maybe +198 -0
  54. data/_patches-20160112/read-state +23 -0
  55. data/_patches-20160112/refactor-to-use-public_address-cap +25 -0
  56. data/_patches-20160112/series +60 -0
  57. data/_patches-20160112/status +12 -0
  58. data/_patches-20160112/test-move-env-data +231 -0
  59. data/_patches-20160112/test-vagrantfile-vm1 +167 -0
  60. data/_patches-20160112/the_version_in_0.1.13.pre1 +598 -0
  61. data/_patches-20160112/vagrant-spec-mock-api +137 -0
  62. data/_patches-20160112/vagrant-vmware-plugin +233 -0
  63. data/_patches-20160112/vagrantfile +403 -0
  64. data/_patches-20160112/vagrantfile-for-acceptance-tests +29 -0
  65. data/_patches-20160112/vagrantfile-for-nick +95 -0
  66. data/_patches-20160112/vagrantfiles-to-forget-what-they-are-for +134 -0
  67. data/_patches-20160112/vm-vanished +42 -0
  68. data/_patches-20160112a/01 +148 -0
  69. data/_patches-20160112a/2 +239 -0
  70. data/_patches-20160112a/COMPLETED-ABOVE-THIS-LINE +4 -0
  71. data/_patches-20160112a/COMPLETED-BELOW-THIS-LINE +4 -0
  72. data/_patches-20160112a/CR-ABOVE-THIS-LINE +4 -0
  73. data/_patches-20160112a/CR-BELOW-THIS-LINE +4 -0
  74. data/_patches-20160112a/WIP-ABOVE-THIS-LINE +4 -0
  75. data/_patches-20160112a/WIP-BELOW-THIS-LINE +4 -0
  76. data/_patches-20160112a/acceptance-test-runner +29 -0
  77. data/_patches-20160112a/ansible-1 +92 -0
  78. data/_patches-20160112a/cache-api-client-in-up +40 -0
  79. data/_patches-20160112a/dead-code-in-actions +44 -0
  80. data/_patches-20160112a/debug-changes +42 -0
  81. data/_patches-20160112a/demo-rails-app +1276 -0
  82. data/_patches-20160112a/eng-10166-halt-spec +40 -0
  83. data/_patches-20160112a/eng-10256-ubuntu-testing +88 -0
  84. data/_patches-20160112a/eng-10269-test-stuff +87 -0
  85. data/_patches-20160112a/eng-10269-wtf +119 -0
  86. data/_patches-20160112a/eng-10369 +143 -0
  87. data/_patches-20160112a/eng-10369-tmp +60 -0
  88. data/_patches-20160112a/eng-10919 +56 -0
  89. data/_patches-20160112a/eng-11177-fix-actions-requires +44 -0
  90. data/_patches-20160112a/eng-11442 +4 -0
  91. data/_patches-20160112a/eng-11616 +403 -0
  92. data/_patches-20160112a/eng-11616-2 +67 -0
  93. data/_patches-20160112a/eng-11616-actual +184 -0
  94. data/_patches-20160112a/eng-11625a +4 -0
  95. data/_patches-20160112a/eng-11711 +85 -0
  96. data/_patches-20160112a/eng-12232-command-spec +236 -0
  97. data/_patches-20160112a/eng-12235 +83 -0
  98. data/_patches-20160112a/eng-12235-override-refactor +140 -0
  99. data/_patches-20160112a/eng-12240 +103 -0
  100. data/_patches-20160112a/eng-12249 +40 -0
  101. data/_patches-20160112a/eng-12301 +50 -0
  102. data/_patches-20160112a/eng-12843 +95 -0
  103. data/_patches-20160112a/env-source +112 -0
  104. data/_patches-20160112a/frickin-vagrant-spec +163 -0
  105. data/_patches-20160112a/gem-pre-version +14 -0
  106. data/_patches-20160112a/gems-old +9 -0
  107. data/_patches-20160112a/googles-specs +713 -0
  108. data/_patches-20160112a/local-configs-ignore +61 -0
  109. data/_patches-20160112a/misc +79 -0
  110. data/_patches-20160112a/network-unreachable +31 -0
  111. data/_patches-20160112a/new-boxfile +288 -0
  112. data/_patches-20160112a/parallelization-maybe +198 -0
  113. data/_patches-20160112a/read-state +23 -0
  114. data/_patches-20160112a/refactor-to-use-public_address-cap +25 -0
  115. data/_patches-20160112a/series +58 -0
  116. data/_patches-20160112a/status +14 -0
  117. data/_patches-20160112a/test-move-env-data +231 -0
  118. data/_patches-20160112a/test-vagrantfile-vm1 +167 -0
  119. data/_patches-20160112a/the_version_in_0.1.13.pre1 +612 -0
  120. data/_patches-20160112a/then-copy-the-newer-files +632 -0
  121. data/_patches-20160112a/vagrant-spec-mock-api +137 -0
  122. data/_patches-20160112a/vagrant-vmware-plugin +233 -0
  123. data/_patches-20160112a/vagrantfile +403 -0
  124. data/_patches-20160112a/vagrantfile-for-acceptance-tests +29 -0
  125. data/_patches-20160112a/vagrantfile-for-nick +95 -0
  126. data/_patches-20160112a/vagrantfiles-to-forget-what-they-are-for +134 -0
  127. data/_patches-20160112a/vm-vanished +42 -0
  128. data/_patches-20160113/COMPLETED-ABOVE-THIS-LINE +4 -0
  129. data/_patches-20160113/COMPLETED-BELOW-THIS-LINE +4 -0
  130. data/_patches-20160113/CR-ABOVE-THIS-LINE +4 -0
  131. data/_patches-20160113/CR-BELOW-THIS-LINE +4 -0
  132. data/_patches-20160113/WIP-ABOVE-THIS-LINE +4 -0
  133. data/_patches-20160113/WIP-BELOW-THIS-LINE +4 -0
  134. data/_patches-20160113/acceptance-test-runner +29 -0
  135. data/_patches-20160113/ansible-1 +92 -0
  136. data/_patches-20160113/cache-api-client-in-up +40 -0
  137. data/_patches-20160113/dead-code-in-actions +44 -0
  138. data/_patches-20160113/debug-changes +55 -0
  139. data/_patches-20160113/demo-rails-app +1276 -0
  140. data/_patches-20160113/eng-10166-halt-spec +40 -0
  141. data/_patches-20160113/eng-10256 +543 -0
  142. data/_patches-20160113/eng-10256-ubuntu-testing +88 -0
  143. data/_patches-20160113/eng-10269-test-stuff +87 -0
  144. data/_patches-20160113/eng-10269-wtf +119 -0
  145. data/_patches-20160113/eng-10369 +143 -0
  146. data/_patches-20160113/eng-10369-tmp +60 -0
  147. data/_patches-20160113/eng-10919 +56 -0
  148. data/_patches-20160113/eng-11177-fix-actions-requires +44 -0
  149. data/_patches-20160113/eng-11442 +4 -0
  150. data/_patches-20160113/eng-11616 +403 -0
  151. data/_patches-20160113/eng-11616-2 +67 -0
  152. data/_patches-20160113/eng-11616-actual +184 -0
  153. data/_patches-20160113/eng-11625a +4 -0
  154. data/_patches-20160113/eng-11711 +85 -0
  155. data/_patches-20160113/eng-12232-command-spec +236 -0
  156. data/_patches-20160113/eng-12235 +83 -0
  157. data/_patches-20160113/eng-12235-override-refactor +140 -0
  158. data/_patches-20160113/eng-12240 +103 -0
  159. data/_patches-20160113/eng-12249 +40 -0
  160. data/_patches-20160113/eng-12301 +50 -0
  161. data/_patches-20160113/eng-12720 +47 -0
  162. data/_patches-20160113/eng-12843 +95 -0
  163. data/_patches-20160113/env-source +112 -0
  164. data/_patches-20160113/frickin-vagrant-spec +163 -0
  165. data/_patches-20160113/gem-pre-version +14 -0
  166. data/_patches-20160113/gems-old +9 -0
  167. data/_patches-20160113/googles-specs +713 -0
  168. data/_patches-20160113/local-configs-ignore +61 -0
  169. data/_patches-20160113/misc +79 -0
  170. data/_patches-20160113/network-unreachable +31 -0
  171. data/_patches-20160113/new-boxfile +288 -0
  172. data/_patches-20160113/parallelization-maybe +198 -0
  173. data/_patches-20160113/read-state +23 -0
  174. data/_patches-20160113/refactor-to-use-public_address-cap +25 -0
  175. data/_patches-20160113/series +56 -0
  176. data/_patches-20160113/status +14 -0
  177. data/_patches-20160113/test-move-env-data +231 -0
  178. data/_patches-20160113/test-vagrantfile-vm1 +167 -0
  179. data/_patches-20160113/vagrant-spec-mock-api +137 -0
  180. data/_patches-20160113/vagrant-vmware-plugin +233 -0
  181. data/_patches-20160113/vagrantfile +403 -0
  182. data/_patches-20160113/vagrantfile-for-acceptance-tests +29 -0
  183. data/_patches-20160113/vagrantfile-for-nick +95 -0
  184. data/_patches-20160113/vagrantfiles-to-forget-what-they-are-for +134 -0
  185. data/_patches-20160113/vm-vanished +42 -0
  186. data/_patches-20160118/COMPLETED-ABOVE-THIS-LINE +4 -0
  187. data/_patches-20160118/COMPLETED-BELOW-THIS-LINE +4 -0
  188. data/_patches-20160118/CR-ABOVE-THIS-LINE +4 -0
  189. data/_patches-20160118/CR-BELOW-THIS-LINE +4 -0
  190. data/_patches-20160118/WIP-ABOVE-THIS-LINE +4 -0
  191. data/_patches-20160118/WIP-BELOW-THIS-LINE +4 -0
  192. data/_patches-20160118/acceptance-test-runner +29 -0
  193. data/_patches-20160118/ansible-1 +92 -0
  194. data/_patches-20160118/cache-api-client-in-up +40 -0
  195. data/_patches-20160118/dead-code-in-actions +44 -0
  196. data/_patches-20160118/debug-changes +55 -0
  197. data/_patches-20160118/demo-rails-app +1276 -0
  198. data/_patches-20160118/eng-10166-halt-spec +40 -0
  199. data/_patches-20160118/eng-10256 +554 -0
  200. data/_patches-20160118/eng-10256-cr +314 -0
  201. data/_patches-20160118/eng-10256-ubuntu-testing +88 -0
  202. data/_patches-20160118/eng-10269-test-stuff +87 -0
  203. data/_patches-20160118/eng-10269-wtf +119 -0
  204. data/_patches-20160118/eng-10369 +143 -0
  205. data/_patches-20160118/eng-10369-tmp +60 -0
  206. data/_patches-20160118/eng-10919 +56 -0
  207. data/_patches-20160118/eng-11177-fix-actions-requires +44 -0
  208. data/_patches-20160118/eng-11442 +4 -0
  209. data/_patches-20160118/eng-11616 +403 -0
  210. data/_patches-20160118/eng-11616-2 +67 -0
  211. data/_patches-20160118/eng-11616-actual +184 -0
  212. data/_patches-20160118/eng-11625a +4 -0
  213. data/_patches-20160118/eng-11711 +85 -0
  214. data/_patches-20160118/eng-12232-command-spec +236 -0
  215. data/_patches-20160118/eng-12235 +83 -0
  216. data/_patches-20160118/eng-12235-override-refactor +140 -0
  217. data/_patches-20160118/eng-12240 +103 -0
  218. data/_patches-20160118/eng-12249 +40 -0
  219. data/_patches-20160118/eng-12301 +50 -0
  220. data/_patches-20160118/eng-12720 +74 -0
  221. data/_patches-20160118/eng-12843 +95 -0
  222. data/_patches-20160118/eng-13040 +291 -0
  223. data/_patches-20160118/env-source +112 -0
  224. data/_patches-20160118/frickin-vagrant-spec +163 -0
  225. data/_patches-20160118/gem-pre-version +14 -0
  226. data/_patches-20160118/gems-old +9 -0
  227. data/_patches-20160118/googles-specs +713 -0
  228. data/_patches-20160118/local-configs-ignore +61 -0
  229. data/_patches-20160118/misc +79 -0
  230. data/_patches-20160118/network-unreachable +31 -0
  231. data/_patches-20160118/new-boxfile +288 -0
  232. data/_patches-20160118/parallelization-maybe +198 -0
  233. data/_patches-20160118/port-forwarding-processes +87 -0
  234. data/_patches-20160118/read-state +23 -0
  235. data/_patches-20160118/refactor-to-use-public_address-cap +25 -0
  236. data/_patches-20160118/series +59 -0
  237. data/_patches-20160118/status +13 -0
  238. data/_patches-20160118/test-move-env-data +231 -0
  239. data/_patches-20160118/test-vagrantfile-vm1 +167 -0
  240. data/_patches-20160118/vagrant-spec-mock-api +137 -0
  241. data/_patches-20160118/vagrant-vmware-plugin +233 -0
  242. data/_patches-20160118/vagrantfile +403 -0
  243. data/_patches-20160118/vagrantfile-for-acceptance-tests +29 -0
  244. data/_patches-20160118/vagrantfile-for-nick +95 -0
  245. data/_patches-20160118/vagrantfiles-to-forget-what-they-are-for +134 -0
  246. data/_patches-20160118/vm-vanished +42 -0
  247. data/_patches-20160118a/COMPLETED-ABOVE-THIS-LINE +4 -0
  248. data/_patches-20160118a/COMPLETED-BELOW-THIS-LINE +4 -0
  249. data/_patches-20160118a/CR-ABOVE-THIS-LINE +4 -0
  250. data/_patches-20160118a/CR-BELOW-THIS-LINE +4 -0
  251. data/_patches-20160118a/WIP-ABOVE-THIS-LINE +4 -0
  252. data/_patches-20160118a/WIP-BELOW-THIS-LINE +4 -0
  253. data/_patches-20160118a/acceptance-test-runner +29 -0
  254. data/_patches-20160118a/ansible-1 +92 -0
  255. data/_patches-20160118a/bar +189 -0
  256. data/_patches-20160118a/cache-api-client-in-up +40 -0
  257. data/_patches-20160118a/dead-code-in-actions +44 -0
  258. data/_patches-20160118a/debug-changes +55 -0
  259. data/_patches-20160118a/demo-rails-app +1276 -0
  260. data/_patches-20160118a/eng-10166-halt-spec +40 -0
  261. data/_patches-20160118a/eng-10256 +554 -0
  262. data/_patches-20160118a/eng-10256-cr +314 -0
  263. data/_patches-20160118a/eng-10256-ubuntu-testing +88 -0
  264. data/_patches-20160118a/eng-10269-test-stuff +87 -0
  265. data/_patches-20160118a/eng-10269-wtf +119 -0
  266. data/_patches-20160118a/eng-10369 +143 -0
  267. data/_patches-20160118a/eng-10369-tmp +60 -0
  268. data/_patches-20160118a/eng-10919 +56 -0
  269. data/_patches-20160118a/eng-11177-fix-actions-requires +44 -0
  270. data/_patches-20160118a/eng-11442 +4 -0
  271. data/_patches-20160118a/eng-11616 +403 -0
  272. data/_patches-20160118a/eng-11616-2 +67 -0
  273. data/_patches-20160118a/eng-11616-actual +184 -0
  274. data/_patches-20160118a/eng-11625a +4 -0
  275. data/_patches-20160118a/eng-11711 +85 -0
  276. data/_patches-20160118a/eng-12232-command-spec +236 -0
  277. data/_patches-20160118a/eng-12235 +83 -0
  278. data/_patches-20160118a/eng-12235-override-refactor +140 -0
  279. data/_patches-20160118a/eng-12240 +103 -0
  280. data/_patches-20160118a/eng-12249 +40 -0
  281. data/_patches-20160118a/eng-12301 +50 -0
  282. data/_patches-20160118a/eng-12720 +74 -0
  283. data/_patches-20160118a/eng-12843 +95 -0
  284. data/_patches-20160118a/eng-13040 +291 -0
  285. data/_patches-20160118a/env-source +112 -0
  286. data/_patches-20160118a/foo +169 -0
  287. data/_patches-20160118a/frickin-vagrant-spec +163 -0
  288. data/_patches-20160118a/gem-pre-version +14 -0
  289. data/_patches-20160118a/gems-old +9 -0
  290. data/_patches-20160118a/googles-specs +713 -0
  291. data/_patches-20160118a/guestport-madness +59 -0
  292. data/_patches-20160118a/local-configs-ignore +61 -0
  293. data/_patches-20160118a/misc +79 -0
  294. data/_patches-20160118a/network-unreachable +31 -0
  295. data/_patches-20160118a/new-boxfile +288 -0
  296. data/_patches-20160118a/parallelization-maybe +198 -0
  297. data/_patches-20160118a/port-forwarding-processes +87 -0
  298. data/_patches-20160118a/read-state +23 -0
  299. data/_patches-20160118a/refactor-to-use-public_address-cap +25 -0
  300. data/_patches-20160118a/series +62 -0
  301. data/_patches-20160118a/status +14 -0
  302. data/_patches-20160118a/test-move-env-data +231 -0
  303. data/_patches-20160118a/test-vagrantfile-vm1 +167 -0
  304. data/_patches-20160118a/vagrant-spec-mock-api +137 -0
  305. data/_patches-20160118a/vagrant-vmware-plugin +233 -0
  306. data/_patches-20160118a/vagrantfile +403 -0
  307. data/_patches-20160118a/vagrantfile-for-acceptance-tests +29 -0
  308. data/_patches-20160118a/vagrantfile-for-nick +95 -0
  309. data/_patches-20160118a/vagrantfiles-to-forget-what-they-are-for +134 -0
  310. data/_patches-20160118a/vm-vanished +42 -0
  311. data/lib/vagrant-skytap/action/clear_forwarded_ports.rb +19 -0
  312. data/lib/vagrant-skytap/action/forward_ports.rb +42 -0
  313. data/lib/vagrant-skytap/action/prepare_forwarded_port_collision_params.rb +37 -0
  314. data/lib/vagrant-skytap/action.rb +18 -0
  315. data/lib/vagrant-skytap/api/environment.rb +19 -4
  316. data/lib/vagrant-skytap/api/vm.rb +10 -6
  317. data/lib/vagrant-skytap/command/up.rb +7 -1
  318. data/lib/vagrant-skytap/errors.rb +4 -0
  319. data/lib/vagrant-skytap/hosts/bsd/cap/ssh_tunnel.rb +15 -0
  320. data/lib/vagrant-skytap/hosts/common/cap/ssh_tunnel.rb +183 -0
  321. data/lib/vagrant-skytap/hosts/linux/cap/ssh_tunnel.rb +15 -0
  322. data/lib/vagrant-skytap/hosts/windows/cap/ssh_tunnel.rb +27 -0
  323. data/lib/vagrant-skytap/model/forwarded_port.rb +78 -0
  324. data/lib/vagrant-skytap/plugin.rb +15 -0
  325. data/lib/vagrant-skytap/util/compile_forwarded_ports.rb +35 -0
  326. data/lib/vagrant-skytap/version.rb +1 -1
  327. data/locales/en.yml +3 -0
  328. data/spec/unit/environment_spec.rb +14 -2
  329. data/spec/unit/forwarded_port_spec.rb +45 -0
  330. data/spec/unit/hosts/common/cap/ssh_tunnel_spec.rb +180 -0
  331. data/spec/unit/prepare_collision_params_spec.rb +57 -0
  332. data/spec/unit/support/forwarded_ports/machines/vm1/skytap/id +1 -0
  333. data/spec/unit/support/forwarded_ports/machines/vm1/skytap/private_key +4 -0
  334. data/spec/unit/support/forwarded_ports/machines/vm1/skytap/tcp9000_tcp_9000_80.pid +1 -0
  335. data/spec/unit/support/forwarded_ports/machines/vm1/skytap/tcp9001_tcp_9001_81.pid +1 -0
  336. data/spec/unit/support/forwarded_ports/machines/vm1/virtualbox/id +1 -0
  337. data/spec/unit/support/forwarded_ports/machines/vm2/skytap/id +1 -0
  338. data/spec/unit/support/forwarded_ports/machines/vm2/skytap/tcp8080_tcp_8080_80.pid +1 -0
  339. data/spec/unit/support/forwarded_ports/machines/vm3/virtualbox/id +1 -0
  340. data/spec/unit/support/forwarded_ports/machines/vm4/skytap/id +1 -0
  341. data/spec/unit/support/forwarded_ports/machines/vm4/skytap/tcp8888_tcp_8888_80.pid +1 -0
  342. metadata +330 -2
@@ -0,0 +1,314 @@
1
+ # HG changeset patch
2
+ # Parent 330807f4d3365968e3172a68423b8ad5d9ff74c5
3
+ ENG-10256 fixes based on CR
4
+
5
+ diff -r 330807f4d336 lib/vagrant-skytap/action/clear_forwarded_ports.rb
6
+ --- a/lib/vagrant-skytap/action/clear_forwarded_ports.rb Fri Jan 15 15:39:01 2016 -0800
7
+ +++ b/lib/vagrant-skytap/action/clear_forwarded_ports.rb Mon Jan 18 13:37:48 2016 -0800
8
+ @@ -8,7 +8,7 @@
9
+
10
+ def call(env)
11
+ env[:ui].info I18n.t("vagrant.actions.vm.clear_forward_ports.deleting")
12
+ - env[:host].capability(:kill_forwarded_ports, env)
13
+ + env[:host].capability(:kill_forwarded_ports, env[:machine])
14
+
15
+ @app.call(env)
16
+ end
17
+ diff -r 330807f4d336 lib/vagrant-skytap/action/forward_ports.rb
18
+ --- a/lib/vagrant-skytap/action/forward_ports.rb Fri Jan 15 15:39:01 2016 -0800
19
+ +++ b/lib/vagrant-skytap/action/forward_ports.rb Mon Jan 18 13:37:48 2016 -0800
20
+ @@ -21,7 +21,7 @@
21
+
22
+ # Warn if we're port forwarding to any privileged ports...
23
+ env[:forwarded_ports].each do |fp|
24
+ - if fp.host_port <= 1024
25
+ + if fp.privileged_host_port?
26
+ env[:ui].warn I18n.t("vagrant.actions.vm.forward_ports.privileged_ports")
27
+ break
28
+ end
29
+ @@ -35,12 +35,12 @@
30
+
31
+ def forward_ports
32
+ @env[:forwarded_ports].each do |fp|
33
+ - unless fp.guest_port == 22 && fp.host_port == 2222
34
+ + unless fp.internal_ssh_port?
35
+ @env[:ui].detail(I18n.t("vagrant.actions.vm.forward_ports.forwarding_entry",
36
+ adapter: fp.adapter,
37
+ guest_port: fp.guest_port,
38
+ host_port: fp.host_port))
39
+ - @env[:host].capability(:start_ssh_tunnel, fp, @env)
40
+ + @env[:host].capability(:start_ssh_tunnel, fp, @env[:machine], @env)
41
+ end
42
+ end
43
+ end
44
+ diff -r 330807f4d336 lib/vagrant-skytap/hosts/common/cap/ssh_tunnel.rb
45
+ --- a/lib/vagrant-skytap/hosts/common/cap/ssh_tunnel.rb Fri Jan 15 15:39:01 2016 -0800
46
+ +++ b/lib/vagrant-skytap/hosts/common/cap/ssh_tunnel.rb Mon Jan 18 13:37:48 2016 -0800
47
+ @@ -1,9 +1,10 @@
48
+ +# unused libs?
49
+ require "pathname"
50
+ require "tmpdir"
51
+ -require 'childprocess'
52
+ require "vagrant/util/subprocess"
53
+ +require "vagrant/util/safe_chdir"
54
+ +require "vagrant-skytap/models/forwarded_port"
55
+ require 'log4r'
56
+ -require "vagrant/util/safe_chdir"
57
+
58
+ module VagrantPlugins
59
+ module Skytap
60
+ @@ -15,76 +16,96 @@
61
+ raise NotImplementedError
62
+ end
63
+
64
+ - def start_ssh_tunnel(env, fp, env_hash)
65
+ + # Create an ssh tunnel for the current machine
66
+ + # using the given [ForwardedPort] object.
67
+ + #
68
+ + # @return [Vagrant::Util::Subprocess::Result]
69
+ + def start_ssh_tunnel(env, fp, machine, env_hash)
70
+ logger = create_logger
71
+ - machine = env_hash[:machine]
72
+ - pidfile = pidfile_name(fp)
73
+ +
74
+ + # just in case there's something left over
75
+ + env.host.capability(:kill_ssh_tunnel, fp, machine)
76
+ +
77
+ + args = ssh_args(fp, machine, env_hash[:machine_ssh_info])
78
+ + vars = autossh_environment_variables(fp, machine)
79
+ + args << {env: vars}
80
+ + # ensure that we delete or overwrite any existing pidfile
81
+ + Vagrant::Util::Subprocess.execute("autossh", "-f", *args)
82
+ + end
83
+ +
84
+ + # Kill the autossh process for the given [ForwardedPort]
85
+ + # (after confirming that it's not stale)
86
+ + #
87
+ + # @return [Vagrant::Util::Subprocess::Result]
88
+ + def kill_ssh_tunnel(env, fp, machine)
89
+ + logger = create_logger
90
+ + pidfile = fp.pidfile_name
91
+ pid = read_pid(machine.data_dir.join(pidfile))
92
+ -
93
+ - if pid && autossh_pid?(pid)
94
+ - logger.info("An autossh process already exists with pid #{pid}.")
95
+ + if pid && autossh_pid?(env, pid)
96
+ + Vagrant::Util::Subprocess.execute("kill", pid.to_s)
97
+ else
98
+ - args = ssh_args(fp, env_hash)
99
+ - vars = autossh_environment_variables(pidfile, env_hash)
100
+ - args << {env: vars}
101
+ - Vagrant::Util::Subprocess.execute("autossh", "-f", *args)
102
+ + logger.info("Cleaning up stale autossh pidfile #{pidfile}.")
103
+ + result = Vagrant::Util::Subprocess.execute("rm", machine.data_dir.join(pidfile).to_s)
104
+ + puts result.inspect
105
+ + false
106
+ end
107
+ end
108
+
109
+ - def kill_forwarded_ports(env, env_hash)
110
+ - get_pidfiles_for_machine(env_hash[:machine]).each do |pidfile|
111
+ - kill_ssh_tunnel(env, pidfile, env_hash)
112
+ + # Convenience method which kills all autossh
113
+ + # processes for the given machine
114
+ + #
115
+ + # @return [Array] A list of the pidfiles which were
116
+ + # killed.
117
+ + def kill_forwarded_ports(env, machine)
118
+ + get_fp_for_machine(machine).each do |fp|
119
+ + env.host.capability(:kill_ssh_tunnel, fp, machine)
120
+ end
121
+ + # delete *.pid?
122
+ end
123
+
124
+ - def kill_ssh_tunnel(env, pidfile, env_hash)
125
+ - logger = create_logger
126
+ - machine = env_hash[:machine]
127
+ - pid = read_pid(machine.data_dir.join(pidfile))
128
+ - if pid && autossh_pid?(pid)
129
+ - Vagrant::Util::Subprocess.execute("kill", pid.to_s)
130
+ - else
131
+ - logger.info("Cleaning up stale autossh pidfile #{pidfile}.")
132
+ - Vagrant::Util::Subprocess.execute("rm", pidfile)
133
+ - end
134
+ - end
135
+ -
136
+ -
137
+ - def pidfile_name(fp)
138
+ - "#{fp.protocol}#{fp.host_port}.pid"
139
+ - end
140
+ -
141
+ + # Reads the pid from the given pidfile_path (full
142
+ + # path, not relative to the machine data_dir)
143
+ + #
144
+ + # @return [Integer], or nil if not found.
145
+ def read_pid(pidfile_path)
146
+ File.read(pidfile_path).presence.try(:to_i) if File.exist?(pidfile_path)
147
+ end
148
+
149
+ - def get_pidfiles_for_machine(machine)
150
+ + # Reads all the pidfiles from the machine's data_dir.
151
+ + # TODO make this return [ForwardedPort] objects
152
+ + #
153
+ + # @return [Array] of [ForwardedPort] objects
154
+ + def get_fp_for_machine(machine)
155
+ pidfiles = []
156
+ Vagrant::Util::SafeChdir.safe_chdir(machine.data_dir) do
157
+ pidfiles = Dir.glob("*.pid")
158
+ end
159
+ - pidfiles
160
+ + pidfiles.collect do |pidfile|
161
+ + pidfile =~ /(\w+)(\d+)\.pid/
162
+ + protocol, hostport, guestport = $1, $2, nil
163
+ + ForwardedPort.new("#{protocol}#{hostport}", hostport, guestport, protocol: protocol)
164
+ + end
165
+ end
166
+
167
+ - # Checks that the pid is actually an autossh process (and not
168
+ - # something else using a recycled pid).
169
+ - def autossh_pid?(pid)
170
+ - # get_comm_for_pid(pid) == 'autossh'
171
+ - true
172
+ + # Determines whether the given pid corresponds to a running
173
+ + # autossh process.
174
+ + #
175
+ + # @return [Boolean]
176
+ + def autossh_pid?(env, pid)
177
+ + begin
178
+ + env.host.capability(:get_comm_for_pid, pid) == 'autossh'
179
+ + rescue NotImplementedError, Vagrant::Errors::CapabilityNotFound => ex
180
+ + create_logger.info("Could not confirm that the given pid corresponds to a running autossh process.")
181
+ + false
182
+ + end
183
+ end
184
+
185
+ - # Get the command, minus any arguments, for the given
186
+ - # pid. This probably needs to be overridden per host cap
187
+ - def get_comm_for_pid(pid)
188
+ - result = Vagrant::Util::Subprocess.execute("ps", "-p", pid.to_s, "-o", "comm")
189
+ - result.stdout.split("\n").last
190
+ - end
191
+ -
192
+ - # these args seem to work on MacOS and Ubuntu ...
193
+ - # untested on other implementations
194
+ - def ssh_args(fp, env_hash)
195
+ - machine = env_hash[:machine]
196
+ - ssh_info = env_hash[:machine_ssh_info]
197
+ + # Gets the args to be passed to ssh for the given
198
+ + # [ForwardedPort] on the given machine.
199
+ + #
200
+ + # @return [Array]
201
+ + def ssh_args(fp, machine, ssh_info)
202
+ + # TODO read ssh_info without having to pass it in
203
+ ssh_options = {
204
+ "ServerAliveInterval" => 10,
205
+ "ServerAliveCountMax" => 3,
206
+ @@ -103,10 +124,13 @@
207
+ args << "#{ssh_info[:username]}@#{ssh_info[:host]}"
208
+ end
209
+
210
+ - def autossh_environment_variables(pidfile, env_hash, monitoring_port = 0)
211
+ - machine = env_hash[:machine]
212
+ + # Gets the environment variables to be set when calling
213
+ + # autossh.
214
+ + #
215
+ + # @return [Hash]
216
+ + def autossh_environment_variables(fp, machine, monitoring_port = 0)
217
+ {
218
+ - "AUTOSSH_PIDFILE" => machine.data_dir.join(pidfile).to_s,
219
+ + "AUTOSSH_PIDFILE" => machine.data_dir.join(fp.pidfile_name).to_s,
220
+ "AUTOSSH_PORT" => monitoring_port,
221
+ }
222
+ end
223
+ diff -r 330807f4d336 lib/vagrant-skytap/hosts/darwin/cap/ssh_tunnel.rb
224
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
225
+ +++ b/lib/vagrant-skytap/hosts/darwin/cap/ssh_tunnel.rb Mon Jan 18 13:37:48 2016 -0800
226
+ @@ -0,0 +1,44 @@
227
+ +require "vagrant-skytap/hosts/common/cap/ssh_tunnel"
228
+ +
229
+ +module VagrantPlugins
230
+ + module Skytap
231
+ + module HostDarwin
232
+ + module Cap
233
+ + class SSHTunnel < VagrantPlugins::Skytap::HostCommon::Cap::SSHTunnel
234
+ + class << self
235
+ + def create_logger
236
+ + Log4r::Logger.new("vagrant::hosts::darwin")
237
+ + end
238
+ +
239
+ +# def start_ssh_tunnel(*args)
240
+ +# debugger
241
+ +# raise NotImplementedError
242
+ +# end
243
+ +#
244
+ +# def kill_ssh_tunnel(*args)
245
+ +# debugger
246
+ +# raise NotImplementedError
247
+ +# end
248
+ +#
249
+ +# def kill_forwarded_ports(*args)
250
+ +# debugger
251
+ +# raise NotImplementedError
252
+ +# end
253
+ +
254
+ + # Gets the name of the executable for the given pid.
255
+ + #
256
+ + # @return [String]
257
+ + def get_comm_for_pid(pid)
258
+ + logger = create_logger
259
+ + debugger
260
+ + result = Vagrant::Util::Subprocess.execute("ps", "-p", pid.to_s, "-o", "comm")
261
+ + logger.info result.inspect
262
+ + logger.info result.stdout
263
+ + result.stdout.split("\n").last
264
+ + end
265
+ + end
266
+ + end
267
+ + end
268
+ + end
269
+ + end
270
+ +end
271
+ diff -r 330807f4d336 lib/vagrant-skytap/hosts/ubuntu/cap/ssh_tunnel.rb
272
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
273
+ +++ b/lib/vagrant-skytap/hosts/ubuntu/cap/ssh_tunnel.rb Mon Jan 18 13:37:48 2016 -0800
274
+ @@ -0,0 +1,15 @@
275
+ +require "vagrant-skytap/hosts/common/cap/ssh_tunnel"
276
+ +
277
+ +module VagrantPlugins
278
+ + module Skytap
279
+ + module HostUbuntu
280
+ + module Cap
281
+ + class SSHTunnel < VagrantPlugins::Skytap::HostCommon::Cap::SSHTunnel
282
+ + def self.create_logger
283
+ + Log4r::Logger.new("vagrant::hosts::ubuntu")
284
+ + end
285
+ + end
286
+ + end
287
+ + end
288
+ + end
289
+ +end
290
+ diff -r 330807f4d336 lib/vagrant-skytap/model/forwarded_port.rb
291
+ --- a/lib/vagrant-skytap/model/forwarded_port.rb Fri Jan 15 15:39:01 2016 -0800
292
+ +++ b/lib/vagrant-skytap/model/forwarded_port.rb Mon Jan 18 13:37:48 2016 -0800
293
+ @@ -64,6 +64,21 @@
294
+ def correct_host_port(new_port)
295
+ @host_port = new_port
296
+ end
297
+ +
298
+ + # Returns a filename suitable for use as a pidfile.
299
+ + #
300
+ + # @return [String]
301
+ + def pidfile_name
302
+ + "#{protocol}#{host_port}.pid"
303
+ + end
304
+ +
305
+ + def privileged_host_port?
306
+ + host_port <= 1024
307
+ + end
308
+ +
309
+ + def internal_ssh_port?
310
+ + guest_port == 22 && host_port == 2222
311
+ + end
312
+ end
313
+ end
314
+ end
@@ -0,0 +1,88 @@
1
+ # HG changeset patch
2
+ # Parent 9b3dc8dd5d19d0effc35672a8e3bbeb50ef381a8
3
+ DO NOT COMMIT. Vagrantfile for testing on Ubuntu VM.
4
+
5
+ diff -r 9b3dc8dd5d19 eng-10256/Vagrantfile
6
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7
+ +++ b/eng-10256/Vagrantfile Wed Jan 06 15:54:52 2016 -0800
8
+ @@ -0,0 +1,44 @@
9
+ +# Vagrantfile for creating an Ubuntu "master" VM with Vagrant installed
10
+ +
11
+ +SKYTAP_PROVIDER_GEM_PATH = "../vagrant-skytap-0.1.13.pre1.gem"
12
+ +
13
+ +$script_install_packages = <<SCRIPT
14
+ + sudo apt-get update
15
+ + sudo apt-get install -y autossh lynx-cur
16
+ +SCRIPT
17
+ +
18
+ +$script_vagrant = <<SCRIPT
19
+ + which vagrant
20
+ + if [ $? -ne 0 ]; then
21
+ + wget https://releases.hashicorp.com/vagrant/1.8.0/vagrant_1.8.0_x86_64.deb -q0
22
+ + dpkg -i vagrant_1.8.0_x86_64.deb
23
+ + fi
24
+ +SCRIPT
25
+ +
26
+ +Vagrant.configure(2) do |config|
27
+ + config.vm.box = "skytap/empty"
28
+ + config.vm.synced_folder ".", "/vagrant", disabled: true
29
+ +
30
+ + config.vm.provider :skytap do |skytap, override|
31
+ + skytap.username = "username"
32
+ + skytap.api_token = "00BADBEE"
33
+ + skytap.vpn_url = "/vpns/vpn-711360"
34
+ + end
35
+ +
36
+ + config.vm.define "vm1" do |box|
37
+ + box.vm.provider :skytap do |box|
38
+ + box.vm_url = "/vms/6869434"
39
+ + end
40
+ +
41
+ + box.ssh.username = "skytap"
42
+ + box.ssh.password = "ChangeMe!"
43
+ +
44
+ + box.vm.provision "shell", inline: "touch this_is_master"
45
+ + box.vm.provision "shell", inline: $script_install_packages
46
+ + box.vm.provision "shell", inline: $script_vagrant
47
+ + box.vm.provision "file", source: "vagrantfile_master", destination: "project/Vagrantfile"
48
+ +
49
+ + box.vm.provision "file", source: SKYTAP_PROVIDER_GEM_PATH, destination: "vagrant-skytap.gem"
50
+ + box.vm.provision "shell", inline: "vagrant plugin install vagrant-skytap.gem", privileged: false
51
+ + end
52
+ +end
53
+ diff -r 9b3dc8dd5d19 eng-10256/vagrantfile_master
54
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
55
+ +++ b/eng-10256/vagrantfile_master Wed Jan 06 15:54:52 2016 -0800
56
+ @@ -0,0 +1,32 @@
57
+ +# Vagrantfile for creating Ubuntu "slave" VM
58
+ +# This should be run on the "master" VM
59
+ +
60
+ +$script_install_packages = <<SCRIPT
61
+ + sudo apt-get update
62
+ + sudo apt-get install -y apache2 lynx-cur
63
+ +SCRIPT
64
+ +
65
+ +Vagrant.configure(2) do |config|
66
+ + config.vm.box = "skytap/empty"
67
+ + config.vm.synced_folder ".", "/vagrant", disabled: true
68
+ +
69
+ + config.vm.provider :skytap do |skytap, override|
70
+ + skytap.username = "username"
71
+ + skytap.api_token = "00BADBEE"
72
+ + skytap.vpn_url = "/vpns/vpn-711360"
73
+ + end
74
+ +
75
+ + config.vm.define "vm1" do |box|
76
+ + box.vm.provider :skytap do |box|
77
+ + box.vm_url = "/vms/6869434"
78
+ + end
79
+ + box.ssh.username = "skytap"
80
+ + box.ssh.password = "ChangeMe!"
81
+ +
82
+ + box.vm.provision "shell", inline: "touch this_is_slave"
83
+ + box.vm.provision "shell", inline: $script_install_packages
84
+ +
85
+ + box.vm.network :forwarded_port, guest: 80, host: 8080
86
+ + end
87
+ +end
88
+ +
@@ -0,0 +1,87 @@
1
+ # HG changeset patch
2
+ # Parent 6547dde950c57c1f4694245d8a41ab5a5a8b7d28
3
+ improvements to tests for ENG-10269. sighhhhhhh. This will not be ready when the main patch is ready, just live with it.
4
+
5
+ diff -r 6547dde950c5 lib/vagrant-skytap/action/read_state.rb
6
+ --- a/lib/vagrant-skytap/action/read_state.rb Wed Nov 25 18:56:41 2015 -0800
7
+ +++ b/lib/vagrant-skytap/action/read_state.rb Mon Nov 30 11:51:41 2015 -0800
8
+ @@ -17,6 +17,7 @@
9
+ end
10
+
11
+ def call(env)
12
+ + debugger
13
+ env[:machine_state_id] = read_state(env[:machine])
14
+
15
+ @app.call(env)
16
+ diff -r 6547dde950c5 spec/acceptance/provider/up_spec.rb
17
+ --- a/spec/acceptance/provider/up_spec.rb Wed Nov 25 18:56:41 2015 -0800
18
+ +++ b/spec/acceptance/provider/up_spec.rb Mon Nov 30 11:51:41 2015 -0800
19
+ @@ -19,6 +19,15 @@
20
+ it 'should bring up the machine and halt it' do
21
+ status("Test: machine can be brought up, parallel by default")
22
+ up_result = execute("vagrant", "up")
23
+ +
24
+ + # up_result.stderr =~ /REST API call: PUT .*multiselect.*\[(.*)\]/
25
+ + # (byebug) $1
26
+ + # "\"7677382\""
27
+ + # assert exactly one match with two separate ids
28
+ + # could we make rest calls from this test? or get by without?
29
+ + #multiselect should occur once
30
+ + # vagrant status output?
31
+ +
32
+ expect(up_result).to exit_with(0)
33
+
34
+ status("Test: machine is running after up")
35
+ @@ -30,6 +39,10 @@
36
+ it 'should bring up the machine and halt it' do
37
+ status("Test: machine can be brought up no parallel")
38
+ up_result = execute("vagrant", "up", "--no-parallel")
39
+ +
40
+ +# up_result.stderr =~ /REST API call: PUT .*multiselect.*\[(.*)\]/
41
+ + # assert no match
42
+ +
43
+ expect(up_result).to exit_with(0)
44
+
45
+ status("Test: machine is running after up")
46
+ @@ -37,4 +50,10 @@
47
+ expect(echo_result).to exit_with(0)
48
+ expect(echo_result.stdout).to match(/foo\n$/)
49
+ end
50
+ +
51
+ + # what else to test?
52
+ + # 2 new vms. Provisioners should run on both.
53
+ + # Only one runstate API call should be made by default.
54
+ + # 2 vms, one new, one already running.
55
+ + # Parallelness should be discernible in the output.
56
+ end
57
+ diff -r 6547dde950c5 spec/acceptance/skeletons/generic/Vagrantfile
58
+ --- a/spec/acceptance/skeletons/generic/Vagrantfile Wed Nov 25 18:56:41 2015 -0800
59
+ +++ b/spec/acceptance/skeletons/generic/Vagrantfile Mon Nov 30 11:51:41 2015 -0800
60
+ @@ -2,14 +2,20 @@
61
+ config.vm.box = "skytap/empty"
62
+
63
+ config.vm.provider :skytap do |skytap, override|
64
+ - skytap.username = "user"
65
+ - skytap.api_token = "9999999999999999999999"
66
+ - skytap.base_url = "https://example.com/"
67
+ + skytap.vm_url = "/vms/7285844"
68
+ + skytap.vpn_url = "/vpns/vpn-711360"
69
+ +# skytap.vpn_url = "/vpns/vpn-3195669"
70
+ end
71
+
72
+ - config.vm.define "vm1" do |ubuntu|
73
+ - ubuntu.vm.provider :skytap do |box|
74
+ - box.vm_url = "https://example.com/vms/1"
75
+ - end
76
+ + config.vm.define "vm1" do |vm1|
77
+ + vm1.ssh.username = "skytap"
78
+ + vm1.ssh.password = "ChangeMe!"
79
+ + vm1.vm.provision "shell", inline: "echo '****** HALLO EVERYONE this is vm1 ******'"
80
+ + end
81
+ +
82
+ + config.vm.define "vm2" do |vm2|
83
+ + vm2.ssh.username = "skytap"
84
+ + vm2.ssh.password = "ChangeMe!"
85
+ + vm2.vm.provision "shell", inline: "echo '****** HALLO EVERYONE this is vm2 ******'"
86
+ end
87
+ end
@@ -0,0 +1,119 @@
1
+ # HG changeset patch
2
+ # Parent b774dc85ccd962a862c877e9a4c3fe3684c344e5
3
+ ENG-10269 parallel halt operation
4
+
5
+ diff -r b774dc85ccd9 lib/vagrant-skytap/action/fetch_environment.rb
6
+ --- a/lib/vagrant-skytap/action/fetch_environment.rb Mon Nov 16 15:45:01 2015 -0800
7
+ +++ b/lib/vagrant-skytap/action/fetch_environment.rb Mon Nov 16 15:45:23 2015 -0800
8
+ @@ -21,6 +21,7 @@
9
+ rescue Errors::DoesNotExist => ex
10
+ @logger.info("Ignoring missing environment '#{props['url']}'.")
11
+ end
12
+ + # env[:environment_fetched] = true # this might be useful, come back to it
13
+ end
14
+ end
15
+
16
+ diff -r b774dc85ccd9 lib/vagrant-skytap/action/stop_vm.rb
17
+ --- a/lib/vagrant-skytap/action/stop_vm.rb Mon Nov 16 15:45:01 2015 -0800
18
+ +++ b/lib/vagrant-skytap/action/stop_vm.rb Mon Nov 16 15:45:23 2015 -0800
19
+ @@ -24,17 +24,36 @@
20
+ end
21
+
22
+ def call(env)
23
+ - vm = env[:environment].current_vm
24
+ - if env[:force_halt]
25
+ - vm.poweroff!
26
+ + # Is this stale, I wonder?
27
+ + case state = env[:machine_state_id]
28
+ + when :not_created
29
+ + env[:ui].info(I18n.t("vagrant_skytap.not_created"))
30
+ + when :stopped
31
+ + env[:ui].info(I18n.t("vagrant_skytap.already_status", :status => "stopped"))
32
+ + when :suspended
33
+ + if env[:force_halt]
34
+ + stop = true
35
+ + else
36
+ + env[:ui].info(I18n.t("vagrant_skytap.cannot_halt_if_suspended"))
37
+ + end
38
+ else
39
+ - begin
40
+ - vm.stop!
41
+ - rescue Errors::InstanceReadyTimeout
42
+ - @logger.info(I18n.t("vagrant_skytap.graceful_halt_vm_failed"))
43
+ + stop = true
44
+ + end
45
+ +
46
+ + if stop
47
+ + vm = env[:environment].current_vm
48
+ + if env[:force_halt]
49
+ vm.poweroff!
50
+ + else
51
+ + begin
52
+ + vm.stop!
53
+ + rescue Errors::InstanceReadyTimeout
54
+ + @logger.info(I18n.t("vagrant_skytap.graceful_halt_vm_failed"))
55
+ + vm.poweroff!
56
+ + end
57
+ end
58
+ end
59
+ +
60
+ @app.call(env)
61
+ end
62
+ end
63
+ diff -r b774dc85ccd9 lib/vagrant-skytap/command/halt.rb
64
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
65
+ +++ b/lib/vagrant-skytap/command/halt.rb Mon Nov 16 15:45:23 2015 -0800
66
+ @@ -0,0 +1,41 @@
67
+ +require 'optparse'
68
+ +
69
+ +module VagrantPlugins
70
+ + module Skytap
71
+ + module Command
72
+ + class Halt < Vagrant.plugin("2", :command)
73
+ + def self.synopsis
74
+ + "stops the vagrant machine (hi mom)"
75
+ + end
76
+ +
77
+ + def execute
78
+ + options = {}
79
+ + options[:force] = false
80
+ +
81
+ + opts = OptionParser.new do |o|
82
+ + o.banner = "Usage: vagrant halt [options] [name]"
83
+ + o.separator ""
84
+ + o.separator "Options:"
85
+ + o.separator ""
86
+ +
87
+ + o.on("-f", "--force", "Force shut down (equivalent of pulling power)") do |f|
88
+ + options[:force] = f
89
+ + end
90
+ + end
91
+ +
92
+ + # Parse the options
93
+ + argv = parse_options(opts)
94
+ + return if !argv
95
+ +
96
+ + @logger.debug("Halt command: #{argv.inspect} #{options.inspect}")
97
+ + with_target_vms(argv, reverse: true) do |vm|
98
+ + vm.action(:halt, force_halt: options[:force])
99
+ + end
100
+ +
101
+ + # Success, exit status 0
102
+ + 0
103
+ + end
104
+ + end
105
+ + end
106
+ + end
107
+ +end
108
+ diff -r b774dc85ccd9 locales/en.yml
109
+ --- a/locales/en.yml Mon Nov 16 15:45:01 2015 -0800
110
+ +++ b/locales/en.yml Mon Nov 16 15:45:23 2015 -0800
111
+ @@ -42,6 +42,8 @@
112
+ The environment could not be halted gracefully. Forcing halt.
113
+ graceful_halt_vm_failed: |-
114
+ The VM could not be halted gracefully. Forcing halt.
115
+ + cannot_halt_if_suspended: |-
116
+ + A suspended VM cannot be halted without the --force flag.
117
+
118
+ config:
119
+ username_required: