@@ -403,6 +403,111 @@ func TestTemplatePush(t *testing.T) {
403
403
assert .NotEqual (t , template .ActiveVersionID , templateVersions [1 ].ID )
404
404
})
405
405
406
+ t .Run ("ProvisionerTags" , func (t * testing.T ) {
407
+ t .Parallel ()
408
+
409
+ t .Run ("ChangeTags_SameKeyValues" , func (t * testing.T ) {
410
+ t .Parallel ()
411
+
412
+ // Start the tagged provisioner
413
+ client := coderdtest .New (t , & coderdtest.Options {
414
+ IncludeProvisionerDaemon : true ,
415
+ ProvisionerDaemonTags : map [string ]string {
416
+ "docker" : "true" ,
417
+ },
418
+ })
419
+ owner := coderdtest .CreateFirstUser (t , client )
420
+ templateAdmin , _ := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID , rbac .RoleTemplateAdmin ())
421
+
422
+ // Create the template with initial tagged template version.
423
+ templateVersion := coderdtest .CreateTemplateVersion (t , client , owner .OrganizationID , nil , func (ctvr * codersdk.CreateTemplateVersionRequest ) {
424
+ ctvr .ProvisionerTags = map [string ]string {
425
+ "docker" : "true" ,
426
+ }
427
+ })
428
+ templateVersion = coderdtest .AwaitTemplateVersionJobCompleted (t , client , templateVersion .ID )
429
+ template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , templateVersion .ID )
430
+
431
+ // Push new template version without provisioner tags. CLI should reuse tags from the previous version.
432
+ source := clitest .CreateTemplateVersionSource (t , & echo.Responses {
433
+ Parse : echo .ParseComplete ,
434
+ ProvisionApply : echo .ApplyComplete ,
435
+ })
436
+ inv , root := clitest .New (t , "templates" , "push" , template .Name , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ), "--name" , template .Name ,
437
+ "--provisioner-tag" , "docker=true" )
438
+ clitest .SetupConfig (t , templateAdmin , root )
439
+ pty := ptytest .New (t ).Attach (inv )
440
+
441
+ execDone := make (chan error )
442
+ go func () {
443
+ execDone <- inv .Run ()
444
+ }()
445
+
446
+ matches := []struct {
447
+ match string
448
+ write string
449
+ }{
450
+ {match : "Upload" , write : "yes" },
451
+ }
452
+ for _ , m := range matches {
453
+ pty .ExpectMatch (m .match )
454
+ pty .WriteLine (m .write )
455
+ }
456
+
457
+ require .NoError (t , <- execDone )
458
+ })
459
+
460
+ t .Run ("DoNotChangeTags" , func (t * testing.T ) {
461
+ t .Parallel ()
462
+
463
+ // Start the tagged provisioner
464
+ client := coderdtest .New (t , & coderdtest.Options {
465
+ IncludeProvisionerDaemon : true ,
466
+ ProvisionerDaemonTags : map [string ]string {
467
+ "docker" : "true" ,
468
+ },
469
+ })
470
+ owner := coderdtest .CreateFirstUser (t , client )
471
+ templateAdmin , _ := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID , rbac .RoleTemplateAdmin ())
472
+
473
+ // Create the template with initial tagged template version.
474
+ templateVersion := coderdtest .CreateTemplateVersion (t , client , owner .OrganizationID , nil , func (ctvr * codersdk.CreateTemplateVersionRequest ) {
475
+ ctvr .ProvisionerTags = map [string ]string {
476
+ "docker" : "true" ,
477
+ }
478
+ })
479
+ templateVersion = coderdtest .AwaitTemplateVersionJobCompleted (t , client , templateVersion .ID )
480
+ template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , templateVersion .ID )
481
+
482
+ // Push new template version without provisioner tags. CLI should reuse tags from the previous version.
483
+ source := clitest .CreateTemplateVersionSource (t , & echo.Responses {
484
+ Parse : echo .ParseComplete ,
485
+ ProvisionApply : echo .ApplyComplete ,
486
+ })
487
+ inv , root := clitest .New (t , "templates" , "push" , template .Name , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ), "--name" , template .Name )
488
+ clitest .SetupConfig (t , templateAdmin , root )
489
+ pty := ptytest .New (t ).Attach (inv )
490
+
491
+ execDone := make (chan error )
492
+ go func () {
493
+ execDone <- inv .Run ()
494
+ }()
495
+
496
+ matches := []struct {
497
+ match string
498
+ write string
499
+ }{
500
+ {match : "Upload" , write : "yes" },
501
+ }
502
+ for _ , m := range matches {
503
+ pty .ExpectMatch (m .match )
504
+ pty .WriteLine (m .write )
505
+ }
506
+
507
+ require .NoError (t , <- execDone )
508
+ })
509
+ })
510
+
406
511
t .Run ("Variables" , func (t * testing.T ) {
407
512
t .Parallel ()
408
513
0 commit comments