@@ -403,6 +403,135 @@ 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" , func (t * testing.T ) {
410
+ t .Parallel ()
411
+
412
+ // Start the first provisioner
413
+ client , provisionerDocker , api := coderdtest .NewWithAPI (t , & coderdtest.Options {
414
+ IncludeProvisionerDaemon : true ,
415
+ ProvisionerDaemonTags : map [string ]string {
416
+ "docker" : "true" ,
417
+ },
418
+ })
419
+ defer provisionerDocker .Close ()
420
+
421
+ // Start the second provisioner
422
+ provisionerFoobar := coderdtest .NewTaggedProvisionerDaemon (t , api , "provisioner-foobar" , map [string ]string {
423
+ "foobar" : "foobaz" ,
424
+ })
425
+ defer provisionerFoobar .Close ()
426
+
427
+ owner := coderdtest .CreateFirstUser (t , client )
428
+ templateAdmin , _ := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID , rbac .RoleTemplateAdmin ())
429
+
430
+ // Create the template with initial tagged template version.
431
+ templateVersion := coderdtest .CreateTemplateVersion (t , client , owner .OrganizationID , nil , func (ctvr * codersdk.CreateTemplateVersionRequest ) {
432
+ ctvr .ProvisionerTags = map [string ]string {
433
+ "docker" : "true" ,
434
+ }
435
+ })
436
+ templateVersion = coderdtest .AwaitTemplateVersionJobCompleted (t , client , templateVersion .ID )
437
+ template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , templateVersion .ID )
438
+
439
+ // Push new template version without provisioner tags. CLI should reuse tags from the previous version.
440
+ source := clitest .CreateTemplateVersionSource (t , & echo.Responses {
441
+ Parse : echo .ParseComplete ,
442
+ ProvisionApply : echo .ApplyComplete ,
443
+ })
444
+ inv , root := clitest .New (t , "templates" , "push" , template .Name , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ), "--name" , template .Name ,
445
+ "--provisioner-tag" , "foobar=foobaz" )
446
+ clitest .SetupConfig (t , templateAdmin , root )
447
+ pty := ptytest .New (t ).Attach (inv )
448
+
449
+ execDone := make (chan error )
450
+ go func () {
451
+ execDone <- inv .Run ()
452
+ }()
453
+
454
+ matches := []struct {
455
+ match string
456
+ write string
457
+ }{
458
+ {match : "Upload" , write : "yes" },
459
+ }
460
+ for _ , m := range matches {
461
+ pty .ExpectMatch (m .match )
462
+ pty .WriteLine (m .write )
463
+ }
464
+
465
+ require .NoError (t , <- execDone )
466
+
467
+ // Verify template version tags
468
+ template , err := client .Template (context .Background (), template .ID )
469
+ require .NoError (t , err )
470
+
471
+ templateVersion , err = client .TemplateVersion (context .Background (), template .ActiveVersionID )
472
+ require .NoError (t , err )
473
+ require .EqualValues (t , map [string ]string {"foobar" : "foobaz" , "owner" : "" , "scope" : "organization" }, templateVersion .Job .Tags )
474
+ })
475
+
476
+ t .Run ("DoNotChangeTags" , func (t * testing.T ) {
477
+ t .Parallel ()
478
+
479
+ // Start the tagged provisioner
480
+ client := coderdtest .New (t , & coderdtest.Options {
481
+ IncludeProvisionerDaemon : true ,
482
+ ProvisionerDaemonTags : map [string ]string {
483
+ "docker" : "true" ,
484
+ },
485
+ })
486
+ owner := coderdtest .CreateFirstUser (t , client )
487
+ templateAdmin , _ := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID , rbac .RoleTemplateAdmin ())
488
+
489
+ // Create the template with initial tagged template version.
490
+ templateVersion := coderdtest .CreateTemplateVersion (t , client , owner .OrganizationID , nil , func (ctvr * codersdk.CreateTemplateVersionRequest ) {
491
+ ctvr .ProvisionerTags = map [string ]string {
492
+ "docker" : "true" ,
493
+ }
494
+ })
495
+ templateVersion = coderdtest .AwaitTemplateVersionJobCompleted (t , client , templateVersion .ID )
496
+ template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , templateVersion .ID )
497
+
498
+ // Push new template version without provisioner tags. CLI should reuse tags from the previous version.
499
+ source := clitest .CreateTemplateVersionSource (t , & echo.Responses {
500
+ Parse : echo .ParseComplete ,
501
+ ProvisionApply : echo .ApplyComplete ,
502
+ })
503
+ inv , root := clitest .New (t , "templates" , "push" , template .Name , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ), "--name" , template .Name )
504
+ clitest .SetupConfig (t , templateAdmin , root )
505
+ pty := ptytest .New (t ).Attach (inv )
506
+
507
+ execDone := make (chan error )
508
+ go func () {
509
+ execDone <- inv .Run ()
510
+ }()
511
+
512
+ matches := []struct {
513
+ match string
514
+ write string
515
+ }{
516
+ {match : "Upload" , write : "yes" },
517
+ }
518
+ for _ , m := range matches {
519
+ pty .ExpectMatch (m .match )
520
+ pty .WriteLine (m .write )
521
+ }
522
+
523
+ require .NoError (t , <- execDone )
524
+
525
+ // Verify template version tags
526
+ template , err := client .Template (context .Background (), template .ID )
527
+ require .NoError (t , err )
528
+
529
+ templateVersion , err = client .TemplateVersion (context .Background (), template .ActiveVersionID )
530
+ require .NoError (t , err )
531
+ require .EqualValues (t , map [string ]string {"docker" : "true" , "owner" : "" , "scope" : "organization" }, templateVersion .Job .Tags )
532
+ })
533
+ })
534
+
406
535
t .Run ("Variables" , func (t * testing.T ) {
407
536
t .Parallel ()
408
537
0 commit comments