11require 'rspec/expectations'
22
3- RSpec ::Matchers . define :include_provisioner do |expected_provisioner , after :[ ] |
3+ RSpec ::Matchers . define :include_provisioner do |expected_provisioner , after : [ ] |
44
55 def provisioner_is_after? ( actual_provisioners , after , provisioner_index )
66 after_index = actual_provisioners . find_index do |provisioner |
@@ -58,72 +58,56 @@ def self.new_powershell_provisioner(command)
5858
5959 def inspect
6060 case @provisioner_type
61- when :powershell
62- return "Powershell provisioner with command: '#{ @command } '"
63- when :file
64- return "File Provisioner with source: '#{ @source } ' and destination: '#{ @destination } '"
61+ when :powershell
62+ return "Powershell provisioner with command: '#{ @command } '"
63+ when :file
64+ return "File Provisioner with source: '#{ @source } ' and destination: '#{ @destination } '"
6565 end
6666 end
6767
6868 def matches? ( actual_provisioner )
6969 case @provisioner_type
70- when :powershell
71- actual_provisioner [ 'type' ] == 'powershell' &&
72- actual_provisioner . has_key? ( 'inline' ) &&
73- actual_provisioner [ 'inline' ] . find do |script_line |
74- if @command . is_a? ( String )
75- script_line . eql? @command
76- elsif @command . is_a? ( Regexp )
77- script_line =~ @command
78- else
79- raise "provisioner command neither string nor regex"
70+ when :powershell
71+ actual_provisioner [ 'type' ] == 'powershell' &&
72+ actual_provisioner . has_key? ( 'inline' ) &&
73+ actual_provisioner [ 'inline' ] . find do |script_line |
74+ if @command . is_a? ( String )
75+ script_line . eql? @command
76+ elsif @command . is_a? ( Regexp )
77+ script_line =~ @command
78+ else
79+ raise "provisioner command neither string nor regex"
80+ end
8081 end
81- end
82- when :file
83- actual_provisioner [ 'type' ] == 'file' &&
84- actual_provisioner [ 'source' ] == @source &&
85- actual_provisioner [ 'destination' ] == @destination
86- else
87- false
82+ when :file
83+ actual_provisioner [ 'type' ] == 'file' &&
84+ actual_provisioner [ 'source' ] == @source &&
85+ actual_provisioner [ 'destination' ] == @destination
86+ else
87+ false
8888 end
8989 end
9090end
9191
92- describe 'provisioners' do
93- before ( :context ) do
94- stemcell_deps_dir = Dir . mktmpdir ( 'gcp' )
95- ENV [ 'STEMCELL_DEPS_DIR' ] = stemcell_deps_dir
96- @provisioners = Packer ::Config ::Aws . new (
97- aws_access_key : '' ,
98- aws_secret_key : '' ,
99- region : '' ,
100- output_directory : 'some-output-directory' ,
101- os : 'windows2012R2' ,
102- version : '1200.1.2' ,
103- vm_prefix : '' ,
104- mount_ephemeral_disk : false
105- ) . provisioners
106-
107- FileUtils . rm_rf ( stemcell_deps_dir )
108- ENV . delete ( 'STEMCELL_DEPS_DIR' )
109- end
92+ shared_examples "a standard provisioner" do |provisioner_config |
93+ let ( :provisioners ) { provisioner_config . provisioners }
11094
11195 it 'does not have nonsense provisioner' do
11296 nonsense_provisioner = TestProvisioner . new_powershell_provisioner ( 'some-garbage' )
113- expect ( @ provisioners) . not_to include_provisioner ( nonsense_provisioner ) , 'test matcher'
97+ expect ( provisioners ) . not_to include_provisioner ( nonsense_provisioner ) , 'test matcher'
11498 end
11599
116100 it 'uploads bosh ps-modules' do
117101 upload_bosh_ps_modules = TestProvisioner . new_file_provisioner ( 'build/bosh-psmodules.zip' , 'C:\provision\bosh-psmodules.zip' )
118- expect ( @ provisioners) . to include_provisioner ( upload_bosh_ps_modules )
102+ expect ( provisioners ) . to include_provisioner ( upload_bosh_ps_modules )
119103 end
120104
121105 it 'uploads the install-bosh-psmodules script' do
122106 upload_install_bosh_ps_modules = TestProvisioner . new_file_provisioner (
123107 'scripts/install-bosh-psmodules.ps1' ,
124108 'C:\provision\install-bosh-psmodules.ps1'
125109 )
126- expect ( @ provisioners) . to include_provisioner ( upload_install_bosh_ps_modules )
110+ expect ( provisioners ) . to include_provisioner ( upload_install_bosh_ps_modules )
127111 end
128112
129113 it 'runs install bosh ps modules after uploading zip file and install script' do
@@ -134,26 +118,26 @@ def matches?(actual_provisioner)
134118 'C:\provision\install-bosh-psmodules.ps1'
135119 )
136120
137- expect ( @ provisioners) . to include_provisioner ( install_modules_provisioner , after :[ upload_install_modules , upload_modules ] )
121+ expect ( provisioners ) . to include_provisioner ( install_modules_provisioner , after : [ upload_install_modules , upload_modules ] )
138122 end
139123
140124 it 'runs get-hotfix after windows updates are applied' do
141125 get_hotfix_prov = TestProvisioner . new_powershell_provisioner ( 'Get-HotFix > hotfixes.log' )
142126 wait_windows_update_prov = TestProvisioner . new_powershell_provisioner ( /Wait-WindowsUpdates -Password .+ -User Provisioner/ )
143- expect ( @ provisioners) . to include_provisioner ( get_hotfix_prov , after :[ wait_windows_update_prov ] )
144- # expect(@ provisioners).to include_provisioner(get_hotfix_prov)
127+ expect ( provisioners ) . to include_provisioner ( get_hotfix_prov , after : [ wait_windows_update_prov ] )
128+ # expect(provisioners).to include_provisioner(get_hotfix_prov)
145129
146- prov_index = @ provisioners. find_index do |p |
130+ prov_index = provisioners . find_index do |p |
147131 p [ 'type' ] == 'powershell' && p . has_key? ( 'inline' ) && p [ 'inline' ] . include? ( 'Get-HotFix > hotfixes.log' )
148132 end
149133 expect ( prov_index ) . not_to be_nil , 'Could not find Get-Hotfix provisioner'
150134
151135
152- hotfixes_applied_index = @ provisioners. find_index do |p |
136+ hotfixes_applied_index = provisioners . find_index do |p |
153137 p [ 'type' ] == 'powershell' && p . has_key? ( 'inline' ) && p [ 'inline' ] . include? ( 'Register-WindowsUpdatesTask' )
154138 end
155139
156- unregister_windows_index = @ provisioners. find_index do |p |
140+ unregister_windows_index = provisioners . find_index do |p |
157141 p [ 'type' ] == 'powershell' && p . has_key? ( 'inline' ) && p [ 'inline' ] . include? ( 'Unregister-WindowsUpdatesTask' )
158142 end
159143
@@ -163,16 +147,16 @@ def matches?(actual_provisioner)
163147
164148 it 'runs Unregister windows update after the post-RegisterWindowsUpdates windows-restart' do
165149 register_windows_updates_task_provisioner = TestProvisioner . new_powershell_provisioner ( 'Register-WindowsUpdatesTask' )
166- expect ( @ provisioners) . to include_provisioner ( register_windows_updates_task_provisioner ) , 'test matcher'
150+ expect ( provisioners ) . to include_provisioner ( register_windows_updates_task_provisioner ) , 'test matcher'
167151
168152
169153 # noinspection RubyInterpreter
170- register_updates_index = @ provisioners. find_index do |p |
154+ register_updates_index = provisioners . find_index do |p |
171155 p [ 'type' ] == 'powershell' && p . has_key? ( 'inline' ) && p [ 'inline' ] . include? ( 'Register-WindowsUpdatesTask' )
172156 end
173157 expect ( register_updates_index ) . not_to be_nil , 'Could not find RegisterWindowsUpdates provisioner'
174158
175- post_register_provisioners = @ provisioners[ ( register_updates_index + 1 ) ..-1 ]
159+ post_register_provisioners = provisioners [ ( register_updates_index + 1 ) ..-1 ]
176160
177161 prov_index = post_register_provisioners . find_index do |p |
178162 provisionerCommand = 'Unregister-WindowsUpdatesTask'
@@ -187,4 +171,63 @@ def matches?(actual_provisioner)
187171
188172 expect ( prov_index ) . to be > windows_restart_index , 'UnregisterWindowsUpdates not before windows-restart'
189173 end
174+ end
175+
176+ describe 'provisioners' do
177+ before ( :context ) do
178+ @stemcell_deps_dir = Dir . mktmpdir ( 'gcp' )
179+ ENV [ 'STEMCELL_DEPS_DIR' ] = @stemcell_deps_dir
180+ end
181+
182+ after ( :context ) do
183+ FileUtils . rm_rf ( @stemcell_deps_dir )
184+ ENV . delete ( 'STEMCELL_DEPS_DIR' )
185+ end
186+
187+ context 'aws' do
188+ standard_options = {
189+ aws_access_key : '' ,
190+ aws_secret_key : '' ,
191+ region : '' ,
192+ output_directory : 'some-output-directory' ,
193+ version : '' ,
194+ }
195+
196+ context '2012R2' do
197+ it_behaves_like "a standard provisioner" , Packer ::Config ::Aws . new (
198+ standard_options . merge ( os : 'windows2012R2' )
199+ )
200+ end
201+
202+ context '1803' do
203+ it_behaves_like "a standard provisioner" , Packer ::Config ::Aws . new (
204+ standard_options . merge ( os : 'windows1803' )
205+ )
206+ end
207+ end
208+
209+ context 'vsphere' do
210+ standard_options = {
211+ output_directory : 'output_directory' ,
212+ num_vcpus : 1 ,
213+ mem_size : 1000 ,
214+ product_key : 'key' ,
215+ organization : 'me' ,
216+ owner : 'me' ,
217+ administrator_password : 'password' ,
218+ source_path : 'source_path' ,
219+ version : '' ,
220+ enable_rdp : false ,
221+ new_password : 'new-password' ,
222+ http_proxy : nil ,
223+ https_proxy : nil ,
224+ bypass_list : nil ,
225+ }
226+
227+ context '2012R2' do
228+ it_behaves_like 'a standard provisioner' , Packer ::Config ::VSphere . new (
229+ standard_options . merge ( os : 'windows2012R2' )
230+ )
231+ end
232+ end
190233end
0 commit comments