vagrant-winrm-file-download 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 533c81cb90827c3e2c7e88b5923cbfb4ea306d96b93722cebb12fc3616c8f8ef
4
+ data.tar.gz: 899ba3dd911a750f5e92509f0faa4dcd5173e343cc31ffd3d5fadd546afd5abe
5
+ SHA512:
6
+ metadata.gz: 1e58b2c50ba7e44965a0a820a0ecd3fca50915c4cc63f6ba7ce76fb350b84efc4f13984fb1030b00ff2a629d52d776e6704863e961484e5eabc710afdcac1fd3
7
+ data.tar.gz: 66a386946c3f66ff8ddfc7403517ba5b1b566ef1a1ce3b7608fd34efdea43f0d311c5e4dfd3e11b3febaa50b0bde1ac89b2e60c9611d4c28364deb1a8b90f58c
data/.gitignore ADDED
@@ -0,0 +1,25 @@
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
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ .vagrant
24
+ .idea
25
+ bin/
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem "vagrant", git: "https://github.com/mitchellh/vagrant.git"
7
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,12 @@
1
+ Copyright (c) Octopus Deploy and contributors. All rights reserved.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4
+ these files except in compliance with the License. You may obtain a copy of the
5
+ License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software distributed
10
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11
+ CONDITIONS OF ANY KIND, either express or implied. See the License for the
12
+ specific language governing permissions and limitations under the License.
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # Vagrant WinRM File Downloader Plugin
2
+
3
+ This is a super simple vagrant provisioner plugin that allows you to download files from the guest to the host.
4
+
5
+ ## Installation
6
+
7
+ ```vagrant plugin install vagrant-winrm-file-download```
8
+
9
+ ## Usage
10
+
11
+ In your Vagrantfile, add the following plugin and configure to your needs:
12
+
13
+ ```ruby
14
+ config.vm.provision "winrm-file-download" do |file|
15
+ file.source = 'c:\temp\foo.txt'
16
+ file.destination = 'c:\temp\foo-downloaded.txt'
17
+ end
18
+ ```
19
+
20
+ ## Uninstallation
21
+
22
+ ```vagrant plugin uninstall vagrant-dsc```
23
+
24
+ ## Development
25
+
26
+ Before getting started, read the Vagrant plugin [development basics](https://docs.vagrantup.com/v2/plugins/development-basics.html) and [packaging](https://docs.vagrantup.com/v2/plugins/packaging.html) documentation.
27
+
28
+ Development was done against:
29
+ * Ruby 2.6.4
30
+ * Bundler 1.17.2, and
31
+ * vagrant [master@9eac6ae62d6a](https://github.com/hashicorp/vagrant/commit/9eac6ae62d6ad7acdd173fabe558ba75156245b6), which is likely to be 2.2.6
32
+
33
+ ```
34
+ git clone git@github.com:OcotpusDeploy/vagrant-winrm-file-download.git
35
+ cd vagrant-winrm-file-download
36
+ bundle install
37
+ ```
38
+
39
+ Run tests:
40
+ ```
41
+ # tests are... not yet there
42
+ bundle exec rake spec
43
+ ```
44
+
45
+ Run Vagrant in context of current vagrant-dsc plugin:
46
+ ```
47
+ cd <directory>
48
+ bundle exec vagrant up
49
+ ```
50
+
51
+ ### Building a new version
52
+ 1. update the version number in the `lib/vagrant-winrm-file-download.rb`
53
+ 1. run `gem build .\vagrant-winrm-file-download.gemspec`
54
+
55
+ ## Contributing
56
+
57
+ 1. Create a github issue to discuss your idea
58
+ 1. Fork it ( https://github.com/[your-github-username]/vagrant-winrm-file-download/fork )
59
+ 1. Create your feature branch (`git checkout -b my-new-feature`)
60
+ 1. Commit your changes, including relevant tests (`git commit -am 'Add some feature'`)
61
+ 1. Squash commits & push to the branch (`git push origin my-new-feature`)
62
+ 1. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+ task :default => [:test]
4
+ # Remove 'install' task as the gem is installed to Vagrant, not to system
5
+ Rake::Task[:install].clear
6
+ namespace :test do
7
+ RSpec::Core::RakeTask.new('unit') do |task|
8
+ task.pattern = 'spec/**/*_spec.rb'
9
+ end
10
+ end
11
+ desc "Run all tests"
12
+ task :test => ['test:unit']
13
+ task :spec => :test
@@ -0,0 +1,22 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module WinRmFileDownload
5
+ class Config < Vagrant.plugin("2", :config)
6
+ attr_accessor :source
7
+ attr_accessor :destination
8
+
9
+ def validate(machine)
10
+ errors = _detected_errors
11
+
12
+ if !source
13
+ errors << "No source file specified"
14
+ end
15
+ if !destination
16
+ errors << "No destination path specified"
17
+ end
18
+ { "WinRm file download provisioner" => errors }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module WinRmFileDownload
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "winrm-file-download"
7
+ description <<-DESC
8
+ Provides support for downloading a file from the guest
9
+ to the host via WinRM.
10
+ DESC
11
+
12
+ config("winrm-file-download", :provisioner) do
13
+ require File.expand_path("../config", __FILE__)
14
+ Config
15
+ end
16
+
17
+ provisioner("winrm-file-download") do
18
+ require File.expand_path("../provisioner", __FILE__)
19
+ Provisioner
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,43 @@
1
+ module VagrantPlugins
2
+ module WinRmFileDownload
3
+ class Provisioner < Vagrant.plugin("2", :provisioner)
4
+ def provision
5
+ # this is pratically identical to https://github.com/hashicorp/vagrant/blob/9eac6ae62d6ad7acdd173fabe558ba75156245b6/plugins/provisioners/file/provisioner.rb
6
+ @machine.communicate.tap do |comm|
7
+ source = expand_guest_path(config.source)
8
+ destination = File.expand_path(config.destination)
9
+
10
+ # If the source is a directory determine if any path modifications
11
+ # need to be applied to the source for upload behavior. If the original
12
+ # source value ends with a "." or if the original source does not end
13
+ # with a "." but the original destination ends with a file separator
14
+ # then append a "." character to the new source. This ensures that
15
+ # the contents of the directory are uploaded to the destination and
16
+ # not folder itself.
17
+ if File.directory?(source)
18
+ if config.source.end_with?(".") ||
19
+ (!config.destination.end_with?(File::SEPARATOR) &&
20
+ !config.source.end_with?("#{File::SEPARATOR}."))
21
+ source = File.join(source, ".")
22
+ end
23
+ end
24
+
25
+ @machine.ui.detail("Downloading from #{source} on guest to #{destination} on host.")
26
+ # now download the file
27
+ comm.download(source, destination)
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ # Expand the guest path if the guest has the capability
34
+ def expand_guest_path(destination)
35
+ if machine.guest.capability?(:shell_expand_guest_path)
36
+ machine.guest.capability(:shell_expand_guest_path, destination)
37
+ else
38
+ destination
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,5 @@
1
+ module Vagrant
2
+ module WinRmFileDownload
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ require "pathname"
2
+
3
+ require "vagrant-winrm-file-download/plugin"
4
+
5
+ module VagrantPlugins
6
+ module WinRmFileDownload
7
+ lib_path = Pathname.new(File.expand_path("../vagrant-winrm-file-download", __FILE__))
8
+ autoload :Action, lib_path.join("action")
9
+ autoload :Errors, lib_path.join("errors")
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'vagrant-winrm-file-download/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "vagrant-winrm-file-download"
8
+ spec.version = Vagrant::WinRmFileDownload::VERSION
9
+ spec.authors = ["Matt Richardson"]
10
+ spec.email = ["matt.richardson@octopus.com"]
11
+ spec.summary = "WinRM file download Provisioner for Vagrant"
12
+ spec.description = "Provisioner plugin that downloads files from guest to host with Vagrant."
13
+ spec.homepage = "https://github.com/OctopusDeploy/vagrant-winrm-file-download"
14
+ spec.license = "Apache-2.0"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+ end
data/vagrantfile ADDED
@@ -0,0 +1,48 @@
1
+ # -*- mode: ruby -*-
2
+
3
+ # this is a sample file for using & testing the plugin
4
+
5
+ VAGRANT_FILE_API_VERSION = "2"
6
+
7
+ Vagrant.configure(VAGRANT_FILE_API_VERSION) do |config|
8
+
9
+ hostname = "vagrantdsc.local"
10
+ config.vm.guest = :windows
11
+ config.vm.communicator = :winrm
12
+
13
+ config.vm.allowed_synced_folder_types = [:winrm]
14
+ config.vm.synced_folder ".", "/vagrant", disabled: true
15
+
16
+ config.vm.provider "virtualbox" do |v, override|
17
+ v.gui = true
18
+ v.linked_clone = true
19
+ v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
20
+ v.customize ["modifyvm", :id, "--audio", "none"]
21
+ v.customize ["modifyvm", :id, "--vram", "32"]
22
+ override.vm.box = "OctopusDeploy/dsc-test-server-windows-server-1803"
23
+ override.vm.box_url = "https://s3-ap-southeast-2.amazonaws.com/octopus-vagrant-boxes/vagrant/json/OctopusDeploy/virtualbox/dsc-test-server-windows-server-1803.json"
24
+ override.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true
25
+ end
26
+
27
+ if Vagrant::Util::Platform.windows? then
28
+ config.vm.provider "hyperv" do |v, override|
29
+ override.vm.box = "OctopusDeploy/dsc-test-server-windows-server-1803"
30
+ override.vm.box_url = "https://s3-ap-southeast-2.amazonaws.com/octopus-vagrant-boxes/vagrant/json/OctopusDeploy/hyperv/dsc-test-server-windows-server-1803.json"
31
+ config.vm.network "public_network", bridge: "Default Switch"
32
+ v.memory = 2048
33
+ v.maxmemory = 2048
34
+ v.cpus = 2
35
+ override.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true
36
+ end
37
+ end
38
+
39
+ # create a temp file
40
+ config.vm.provision "shell", inline: "get-date | set-content -path 'c:\\temp\\foo.txt'"
41
+
42
+ # download it
43
+ config.vm.provision "winrm-file-download" do |winrm|
44
+ winrm.source = 'c:\temp\foo.txt'
45
+ winrm.destination = 'c:\temp\foo-downloaded.txt'
46
+ end
47
+
48
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-winrm-file-download
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Matt Richardson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-07-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Provisioner plugin that downloads files from guest to host with Vagrant.
14
+ email:
15
+ - matt.richardson@octopus.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".gitignore"
21
+ - Gemfile
22
+ - LICENSE.txt
23
+ - README.md
24
+ - Rakefile
25
+ - lib/vagrant-winrm-file-download.rb
26
+ - lib/vagrant-winrm-file-download/config.rb
27
+ - lib/vagrant-winrm-file-download/plugin.rb
28
+ - lib/vagrant-winrm-file-download/provisioner.rb
29
+ - lib/vagrant-winrm-file-download/version.rb
30
+ - vagrant-winrm-file-download.gemspec
31
+ - vagrantfile
32
+ homepage: https://github.com/OctopusDeploy/vagrant-winrm-file-download
33
+ licenses:
34
+ - Apache-2.0
35
+ metadata: {}
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubygems_version: 3.1.2
52
+ signing_key:
53
+ specification_version: 4
54
+ summary: WinRM file download Provisioner for Vagrant
55
+ test_files: []