vagrant-dsc 1.0.0 → 1.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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/development/Vagrantfile +13 -59
- data/lib/vagrant-dsc/provisioner.rb +17 -20
- data/lib/vagrant-dsc/templates/runner.ps1.erb +4 -6
- data/lib/vagrant-dsc/version.rb +1 -1
- data/spec/provisioner/provisioner_spec.rb +45 -25
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8240a3495c72f76f0e6401942afde084014bc466
|
4
|
+
data.tar.gz: 3e8f36d14b7ef86b7e556435e8fd3d151f2e0b62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24fa42974fa2cbf15b6d3e170a4f66a7dcc5b45f405f55a4f693fd93c2c550495f5d9f793adcfbe8749ee88d2d609d4a7f3bfa300723a40cc93a2e717415acbe
|
7
|
+
data.tar.gz: e5a2da9736b7bdcd84d10ae2bb5d2a33db9654b34c8c0b256e18e3f46575563e1e6bd2989eda3e266cc967ef4eaed13fe6f4c0829f6799822a8c4a4db737e4f8
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Vagrant DSC Plugin
|
2
2
|
|
3
3
|
[](https://travis-ci.org/mefellows/vagrant-dsc)
|
4
|
-
[](https://coveralls.io/r/mefellows/vagrant-dsc)
|
4
|
+
[](https://coveralls.io/r/mefellows/vagrant-dsc?branch=master)
|
5
5
|
[](http://badge.fury.io/rb/vagrant-dsc)
|
6
6
|
|
7
7
|
[Desired State Configuration](http://technet.microsoft.com/en-au/library/dn249912.aspx) provisioning plugin for Vagrant, enabling you to quickly configure & bootstrap a Windows Virtual Machine in a repeatable, reliable fashion - the Vagrant way.
|
@@ -33,7 +33,7 @@ In your Vagrantfile, add the following plugin and configure to your needs:
|
|
33
33
|
# Set of Parameters to pass to the DSC Configuration.
|
34
34
|
#
|
35
35
|
# To pass in flags, simply set the value to `nil`
|
36
|
-
dsc.configuration_params = {"machineName => "localhost", "-EnableDebug" => nil}
|
36
|
+
dsc.configuration_params = {"machineName" => "localhost", "-EnableDebug" => nil}
|
37
37
|
|
38
38
|
# Relative path to a folder containing a pre-generated MOF file.
|
39
39
|
#
|
data/development/Vagrantfile
CHANGED
@@ -10,66 +10,28 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|
10
10
|
# please see the online documentation at vagrantup.com.
|
11
11
|
|
12
12
|
# Every Vagrant virtual environment requires a box to build off of.
|
13
|
-
config.vm.box = "
|
13
|
+
config.vm.box = "kensykora/windows_2012_r2_standard"
|
14
14
|
|
15
15
|
config.vm.guest = :windows
|
16
16
|
config.vm.communicator = "winrm"
|
17
17
|
|
18
|
-
config.vm.network :forwarded_port, guest: 3389, host: 3389
|
19
18
|
config.vm.network :forwarded_port, guest: 5985, host: 5985, id: "winrm", auto_correct: true
|
20
|
-
config.vm.network :forwarded_port, guest: 80,
|
19
|
+
config.vm.network :forwarded_port, guest: 80, host: 8000, id: "web" # Port forward for IIS
|
20
|
+
config.vm.network :forwarded_port, guest: 8443, host: 443, id: "ssl" # Port forward for SSL IIS
|
21
21
|
|
22
22
|
config.vm.provider "virtualbox" do |v|
|
23
|
+
v.customize ["modifyvm", :id, "--vram", "128"]
|
23
24
|
v.gui = true
|
24
25
|
end
|
25
26
|
|
26
|
-
$script = <<SCRIPT
|
27
|
-
#
|
28
|
-
# Script that gets executed on the remote machine
|
29
|
-
#
|
30
|
-
|
31
|
-
function Write-BootstrapProgress
|
32
|
-
{
|
33
|
-
param($message)
|
34
|
-
Write-Host " ${message}"
|
35
|
-
}
|
36
|
-
|
37
|
-
# Install Choco if not already installed
|
38
|
-
|
39
|
-
if ( (Get-Command "choco" -errorAction SilentlyContinue) ) {
|
40
|
-
Write-BootstrapProgress "Chocolatey already installed. Skipping."
|
41
|
-
} else {
|
42
|
-
Write-BootstrapProgress "Installing Chocolatey"
|
43
|
-
$wc=new-object net.webclient; $wp=[system.net.WebProxy]::GetDefaultProxy(); $wp.UseDefaultCredentials=$true; $wc.Proxy=$wp; iex ($wc.DownloadString('https://chocolatey.org/install.ps1'))
|
44
|
-
# Add to path
|
45
|
-
$env:Path = $env:Path + ";C:\ProgramData\chocolatey\bin"
|
46
|
-
[Environment]::SetEnvironmentVariable( "Path", $env:Path, [System.EnvironmentVariableTarget]::Machine )
|
47
|
-
}
|
48
|
-
|
49
|
-
Write-BootstrapProgress "Installing required software"
|
50
|
-
if ( -Not (Get-Command "Install-Module" -errorAction SilentlyContinue) ) {
|
51
|
-
Write-BootstrapProgress "Installing PSGet"
|
52
|
-
(new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex
|
53
|
-
}
|
54
|
-
Install-Module Posh-Git
|
55
|
-
|
56
|
-
Write-BootstrapProgress "Installing required packages"
|
57
|
-
$packages = @(
|
58
|
-
"git.commandline"
|
59
|
-
"git"
|
60
|
-
"seek-dsc"
|
61
|
-
"NuGet.CommandLine"
|
62
|
-
"invokemsbuild"
|
63
|
-
)
|
64
|
-
|
65
|
-
Write-BootstrapProgress "Packages installed"
|
66
|
-
SCRIPT
|
67
|
-
|
68
|
-
# First pre-configure the machine with required software
|
69
|
-
config.vm.provision "shell", inline: $script
|
70
|
-
|
71
27
|
config.vm.provision "dsc" do |dsc|
|
72
|
-
|
28
|
+
|
29
|
+
# Set of module paths relative to the Vagrantfile dir.
|
30
|
+
#
|
31
|
+
# These paths are added to the DSC Configuration running
|
32
|
+
# environment to enable local modules to be addressed.
|
33
|
+
#
|
34
|
+
# @return [Array] Set of relative module paths.
|
73
35
|
dsc.module_path = ["manifests", "modules"]
|
74
36
|
|
75
37
|
# The path relative to `dsc.manifests_path` pointing to the Configuration file
|
@@ -81,12 +43,12 @@ SCRIPT
|
|
81
43
|
|
82
44
|
# Commandline arguments to the Configuration run
|
83
45
|
# Set of Parameters to pass to the DSC Configuration.
|
84
|
-
dsc.configuration_params = {
|
46
|
+
dsc.configuration_params = {"-MachineName" => "localhost"}
|
85
47
|
|
86
48
|
# Relative path to a pre-generated MOF file.
|
87
49
|
#
|
88
50
|
# Path is relative to the folder containing the Vagrantfile.
|
89
|
-
#dsc.
|
51
|
+
#dsc.mof_path = "mof"
|
90
52
|
|
91
53
|
# Relative path to the folder containing the root Configuration manifest file.
|
92
54
|
# Defaults to 'manifests'.
|
@@ -94,14 +56,6 @@ SCRIPT
|
|
94
56
|
# Path is relative to the folder containing the Vagrantfile.
|
95
57
|
# dsc.manifests_path = "manifests"
|
96
58
|
|
97
|
-
# Set of module paths relative to the Vagrantfile dir.
|
98
|
-
#
|
99
|
-
# These paths are added to the DSC Configuration running
|
100
|
-
# environment to enable local modules to be addressed.
|
101
|
-
#
|
102
|
-
# @return [Array] Set of relative module paths.
|
103
|
-
#dsc.module_path = []
|
104
|
-
|
105
59
|
# The type of synced folders to use when sharing the data
|
106
60
|
# required for the provisioner to work properly.
|
107
61
|
#
|
@@ -96,7 +96,9 @@ module VagrantPlugins
|
|
96
96
|
|
97
97
|
verify_dsc
|
98
98
|
|
99
|
-
|
99
|
+
write_dsc_runner_script(generate_dsc_runner_script)
|
100
|
+
|
101
|
+
run_dsc_apply
|
100
102
|
end
|
101
103
|
|
102
104
|
# Cleanup after a destroy action.
|
@@ -170,6 +172,7 @@ module VagrantPlugins
|
|
170
172
|
# @return [String] the Path to the uploaded location on the guest machine.
|
171
173
|
def write_dsc_runner_script(script)
|
172
174
|
guest_script_path = DSC_GUEST_RUNNER_PATH
|
175
|
+
# TODO: Get a counter in here in case of multiple runs
|
173
176
|
file = Tempfile.new(["vagrant-dsc-runner", "ps1"])
|
174
177
|
begin
|
175
178
|
file.write(script)
|
@@ -183,24 +186,9 @@ module VagrantPlugins
|
|
183
186
|
guest_script_path
|
184
187
|
end
|
185
188
|
|
186
|
-
# Runs the DSC Configuration
|
187
|
-
#
|
188
|
-
# Expects
|
189
|
+
# Runs the DSC Configuration on the guest machine.
|
189
190
|
def run_dsc_apply
|
190
|
-
|
191
|
-
# Check the DSC_GUEST_RUNNER_PATH exists?
|
192
|
-
|
193
|
-
# Set up Configuration arguments (hostname, manifest/module location, error levels ...)
|
194
|
-
|
195
|
-
# Where are the modules?
|
196
|
-
|
197
|
-
# Where is the manifest
|
198
|
-
|
199
|
-
# TODO: Get a counter in here in case of multiple runs
|
200
|
-
|
201
|
-
# Import starting point configuration into scope
|
202
|
-
|
203
|
-
command = ".\\'#{DSC_GUEST_RUNNER_PATH}'"
|
191
|
+
command = ". '#{DSC_GUEST_RUNNER_PATH}'"
|
204
192
|
|
205
193
|
@machine.ui.info(I18n.t(
|
206
194
|
"vagrant_dsc.running_dsc",
|
@@ -209,12 +197,21 @@ module VagrantPlugins
|
|
209
197
|
opts = {
|
210
198
|
elevated: true,
|
211
199
|
error_key: :ssh_bad_exit_status_muted,
|
212
|
-
good_exit:
|
200
|
+
good_exit: 0,
|
201
|
+
shell: :powershell
|
213
202
|
}
|
214
203
|
|
215
204
|
@machine.communicate.sudo(command, opts) do |type, data|
|
216
205
|
if !data.chomp.empty?
|
217
|
-
|
206
|
+
if [:stderr, :stdout].include?(type)
|
207
|
+
# Output the data with the proper color based on the stream.
|
208
|
+
# TODO: Seems the WinRM communicator or a bug in my powershell code
|
209
|
+
# precludes from errors coming back in the :stderr stream
|
210
|
+
color = type == :stdout ? :green : :red
|
211
|
+
@machine.ui.info(
|
212
|
+
data.chomp,
|
213
|
+
color: color, new_line: false, prefix: false)
|
214
|
+
end
|
218
215
|
end
|
219
216
|
end
|
220
217
|
end
|
@@ -23,13 +23,11 @@ echo "Running Configuration file: ${script}"
|
|
23
23
|
|
24
24
|
cd "<%= options[:temp_path] %>"
|
25
25
|
$StagingPath = $(Join-Path "<%= options[:temp_path] %>" "staging")
|
26
|
-
<%=options[:configuration_name]%> -
|
27
|
-
<% else %>
|
26
|
+
$response = <%=options[:configuration_name]%> -OutputPath $StagingPath <%= options[:parameters] %> 4>&1 5>&1 | Out-String
|
27
|
+
<% else %>
|
28
28
|
$StagingPath = "<%= options[:mof_path] %>"
|
29
29
|
<% end %>
|
30
30
|
|
31
31
|
# Start a DSC Configuration run
|
32
|
-
Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath
|
33
|
-
|
34
|
-
# Cleanup
|
35
|
-
del -Path $StagingPath -Recurse
|
32
|
+
$response += Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath 4>&1 5>&1 | Out-String
|
33
|
+
$response
|
data/lib/vagrant-dsc/version.rb
CHANGED
@@ -127,6 +127,7 @@ describe VagrantPlugins::DSC::Provisioner do
|
|
127
127
|
it "should allow reboot capability when capability exists" do
|
128
128
|
allow(communicator).to receive(:sudo)
|
129
129
|
allow(communicator).to receive(:test)
|
130
|
+
allow(communicator).to receive(:upload)
|
130
131
|
allow(subject).to receive(:verify_shared_folders).and_return(true)
|
131
132
|
allow(subject).to receive(:verify_dsc).and_return(true)
|
132
133
|
allow(subject).to receive(:run_dsc_apply).and_return(true)
|
@@ -139,6 +140,7 @@ describe VagrantPlugins::DSC::Provisioner do
|
|
139
140
|
it "should not allow reboot capability when capability does not exist" do
|
140
141
|
allow(communicator).to receive(:sudo)
|
141
142
|
allow(communicator).to receive(:test)
|
143
|
+
allow(communicator).to receive(:upload)
|
142
144
|
allow(subject).to receive(:verify_shared_folders).and_return(true)
|
143
145
|
allow(subject).to receive(:verify_dsc).and_return(true)
|
144
146
|
allow(subject).to receive(:run_dsc_apply).and_return(true)
|
@@ -150,6 +152,7 @@ describe VagrantPlugins::DSC::Provisioner do
|
|
150
152
|
|
151
153
|
it "should create temporary folders on the guest" do
|
152
154
|
allow(communicator).to receive(:test)
|
155
|
+
allow(communicator).to receive(:upload)
|
153
156
|
allow(subject).to receive(:verify_shared_folders).and_return(true)
|
154
157
|
allow(subject).to receive(:verify_dsc).and_return(true)
|
155
158
|
allow(subject).to receive(:run_dsc_apply).and_return(true)
|
@@ -162,9 +165,28 @@ describe VagrantPlugins::DSC::Provisioner do
|
|
162
165
|
subject.provision
|
163
166
|
end
|
164
167
|
|
168
|
+
it "should generate and write the runner script to the guest" do
|
169
|
+
allow(communicator).to receive(:test)
|
170
|
+
allow(communicator).to receive(:upload)
|
171
|
+
allow(subject).to receive(:verify_shared_folders).and_return(true)
|
172
|
+
allow(subject).to receive(:verify_dsc).and_return(true)
|
173
|
+
allow(subject).to receive(:run_dsc_apply).and_return(true)
|
174
|
+
allow(guest).to receive(:capability?)
|
175
|
+
allow(guest).to receive(:capability)
|
176
|
+
|
177
|
+
expect(communicator).to receive(:sudo).with("mkdir -p #{root_config.temp_dir}")
|
178
|
+
expect(communicator).to receive(:sudo).with("chmod 0777 #{root_config.temp_dir}")
|
179
|
+
expect(subject).to receive(:verify_dsc)
|
180
|
+
expect(subject).to receive(:write_dsc_runner_script)
|
181
|
+
expect(subject).to receive(:run_dsc_apply)
|
182
|
+
|
183
|
+
subject.provision
|
184
|
+
end
|
185
|
+
|
165
186
|
it "should ensure shared folders are properly configured" do
|
166
187
|
allow(communicator).to receive(:test)
|
167
188
|
allow(communicator).to receive(:sudo)
|
189
|
+
allow(communicator).to receive(:upload)
|
168
190
|
allow(subject).to receive(:verify_dsc).and_return(true)
|
169
191
|
allow(subject).to receive(:run_dsc_apply).and_return(true)
|
170
192
|
allow(guest).to receive(:capability?)
|
@@ -247,20 +269,14 @@ echo \"Running Configuration file: ${script}\"
|
|
247
269
|
|
248
270
|
cd \"/tmp/vagrant-dsc-1\"
|
249
271
|
$StagingPath = $(Join-Path \"/tmp/vagrant-dsc-1\" \"staging\")
|
250
|
-
|
272
|
+
$response = MyWebsite -OutputPath $StagingPath 4>&1 5>&1 | Out-String
|
251
273
|
|
252
274
|
# Start a DSC Configuration run
|
253
|
-
Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath
|
254
|
-
|
255
|
-
# Cleanup
|
256
|
-
del -Path $StagingPath -Recurse"
|
275
|
+
$response += Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath 4>&1 5>&1 | Out-String
|
276
|
+
$response"
|
257
277
|
|
258
278
|
expect(script).to eq(expect_script)
|
259
279
|
end
|
260
|
-
|
261
|
-
it "should skip MOF file generation if one already provided" do
|
262
|
-
|
263
|
-
end
|
264
280
|
end
|
265
281
|
|
266
282
|
context "with custom DSC Parameters" do
|
@@ -290,13 +306,11 @@ echo \"Running Configuration file: ${script}\"
|
|
290
306
|
|
291
307
|
cd \"/tmp/vagrant-dsc-1\"
|
292
308
|
$StagingPath = $(Join-Path \"/tmp/vagrant-dsc-1\" \"staging\")
|
293
|
-
|
309
|
+
$response = MyWebsite -OutputPath $StagingPath -Foo \"bar\" -ComputerName \"catz\" 4>&1 5>&1 | Out-String
|
294
310
|
|
295
311
|
# Start a DSC Configuration run
|
296
|
-
Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath
|
297
|
-
|
298
|
-
# Cleanup
|
299
|
-
del -Path $StagingPath -Recurse"
|
312
|
+
$response += Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath 4>&1 5>&1 | Out-String
|
313
|
+
$response"
|
300
314
|
|
301
315
|
expect(script).to eq(expect_script)
|
302
316
|
end
|
@@ -327,13 +341,11 @@ echo \"Running Configuration file: ${script}\"
|
|
327
341
|
|
328
342
|
cd \"/tmp/vagrant-dsc-1\"
|
329
343
|
$StagingPath = $(Join-Path \"/tmp/vagrant-dsc-1\" \"staging\")
|
330
|
-
|
344
|
+
$response = MyWebsite -OutputPath $StagingPath -FooFlag -BarFlag -FooParam \"FooVal\" 4>&1 5>&1 | Out-String
|
331
345
|
|
332
346
|
# Start a DSC Configuration run
|
333
|
-
Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath
|
334
|
-
|
335
|
-
# Cleanup
|
336
|
-
del -Path $StagingPath -Recurse"
|
347
|
+
$response += Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath 4>&1 5>&1 | Out-String
|
348
|
+
$response"
|
337
349
|
|
338
350
|
expect(script).to eq(expect_script)
|
339
351
|
end
|
@@ -365,10 +377,8 @@ echo \"Running Configuration file: ${script}\"
|
|
365
377
|
$StagingPath = \"staging\"
|
366
378
|
|
367
379
|
# Start a DSC Configuration run
|
368
|
-
Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath
|
369
|
-
|
370
|
-
# Cleanup
|
371
|
-
del -Path $StagingPath -Recurse"
|
380
|
+
$response += Start-DscConfiguration -Force -Wait -Verbose -Path $StagingPath 4>&1 5>&1 | Out-String
|
381
|
+
$response"
|
372
382
|
|
373
383
|
expect(script).to eq(expect_script)
|
374
384
|
end
|
@@ -397,9 +407,19 @@ del -Path $StagingPath -Recurse"
|
|
397
407
|
describe "Apply DSC" do
|
398
408
|
it "should invoke the DSC Runner and notify the User of provisioning status" do
|
399
409
|
expect(ui).to receive(:info).with(any_args).once
|
400
|
-
expect(ui).to receive(:info).with("provisioned!").once
|
410
|
+
expect(ui).to receive(:info).with("provisioned!", {color: :green, new_line: false, prefix: false}).once
|
401
411
|
allow(machine).to receive(:communicate).and_return(communicator)
|
402
|
-
expect(communicator).to receive(:sudo).with('
|
412
|
+
expect(communicator).to receive(:sudo).with('. ' + "'c:/tmp/vagrant-dsc-runner.ps1'",{:elevated=>true, :error_key=>:ssh_bad_exit_status_muted, :good_exit=>0, :shell=>:powershell}).and_yield(:stdout, "provisioned!")
|
413
|
+
|
414
|
+
subject.run_dsc_apply
|
415
|
+
end
|
416
|
+
|
417
|
+
it "should show error output in red" do
|
418
|
+
expect(ui).to receive(:info).with(any_args).once
|
419
|
+
expect(ui).to receive(:info).with("provisioned!", {color: :red, new_line: false, prefix: false}).once
|
420
|
+
allow(machine).to receive(:communicate).and_return(communicator)
|
421
|
+
expect(communicator).to receive(:sudo).with('. ' + "'c:/tmp/vagrant-dsc-runner.ps1'",{:elevated=>true, :error_key=>:ssh_bad_exit_status_muted, :good_exit=>0, :shell=>:powershell}).and_yield(:stderr, "provisioned!")
|
422
|
+
|
403
423
|
subject.run_dsc_apply
|
404
424
|
end
|
405
425
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-dsc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Fellows
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|