@@ -211,7 +211,7 @@ opsman-configuration:
211211 "--private-ip-address" , "10.0.0.3" ,
212212 "--storage-sku" , "Standard_LRS" ,
213213 "--image" , "/some/resource/id/image" ,
214- "--tags" , "Project=ECommerce CostCenter=00123 Team=Web" ,
214+ "--tags" , "Project=ECommerce" , " CostCenter=00123" , " Team=Web" ,
215215 },
216216 {
217217 "storage" , "blob" , "delete-batch" ,
@@ -227,6 +227,68 @@ opsman-configuration:
227227 }
228228 })
229229
230+ It ("passes multiple tags as separate arguments" , func () {
231+ const configWithMultipleTags = `
232+ opsman-configuration:
233+ azure:
234+ vm_name: vm-name
235+ subscription_id: subscription
236+ resource_group: rg
237+ tenant_id: tenant
238+ client_id: client
239+ client_secret: secret
240+ location: %s
241+ public_ip: 1.2.3.4
242+ private_ip: 10.0.0.3
243+ container: opsman_container
244+ boot_disk_size: 200
245+ network_security_group: nsg
246+ subnet_id: /subscriptions/sub-guid/resourceGroups/network-resource-group/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/sub1
247+ storage_account: account
248+ storage_key: key
249+ ssh_public_key: asdfasdfs
250+ cloud_name: AzureGermanCloud
251+ tags: "foo 'bar=single quote' \"key=double quote\" key1=\"value\" key2=value2 key3=\"value with spaces\" key4='value with single quotes' key5=simple key6=\"quoted=equals\" key7='single=equals'"
252+ `
253+ setupCommand (configWithMultipleTags )
254+ status , stateInfo , err := command .CreateVM ()
255+ Expect (err ).ToNot (HaveOccurred ())
256+ Expect (status ).To (Equal (vmmanagers .Success ))
257+ Expect (stateInfo ).To (Equal (vmmanagers.StateInfo {IAAS : "azure" , ID : "vm-name" }))
258+
259+ // Find the vm create command call
260+ var vmCreateArgs []interface {}
261+ for i := 0 ; i < runner .ExecuteWithEnvVarsCallCount (); i ++ {
262+ _ , args := runner .ExecuteWithEnvVarsArgsForCall (i )
263+ if len (args ) > 0 && args [0 ] == "vm" && args [1 ] == "create" {
264+ vmCreateArgs = args
265+ break
266+ }
267+ }
268+ Expect (vmCreateArgs ).ToNot (BeNil ())
269+
270+ // Verify that tags are passed as separate arguments
271+ Expect (vmCreateArgs ).To (ContainElement ("--tags" ))
272+
273+ // Test key without value
274+ Expect (vmCreateArgs ).To (ContainElement ("foo" ))
275+
276+ // Test simple key=value pairs
277+ Expect (vmCreateArgs ).To (ContainElement ("key2=value2" ))
278+ Expect (vmCreateArgs ).To (ContainElement ("key5=simple" ))
279+
280+ // Test single quotes
281+ Expect (vmCreateArgs ).To (ContainElement ("bar=single quote" ))
282+ Expect (vmCreateArgs ).To (ContainElement ("key4=value with single quotes" ))
283+ Expect (vmCreateArgs ).To (ContainElement ("key7=single=equals" ))
284+
285+ // Test double quotes
286+ Expect (vmCreateArgs ).To (ContainElement ("key=double quote" ))
287+ Expect (vmCreateArgs ).To (ContainElement ("key1=value" ))
288+ Expect (vmCreateArgs ).To (ContainElement ("key3=value with spaces" ))
289+ Expect (vmCreateArgs ).To (ContainElement ("key6=quoted=equals" ))
290+ })
291+
230292 Context ("DEPRECATED tests" , func () {
231293 const configWithManagedDiskAndUnmanagedDiskStrTemplateDEPRECATED = `
232294opsman-configuration:
0 commit comments