@@ -744,55 +744,57 @@ export const getTemplateExamples = async (
744
744
return response . data
745
745
}
746
746
747
- // This function mocks what the CLI is doing
747
+ // for creating a new template:
748
+ // 1. upload template tar or use the example ID
749
+ // 2. create template version
750
+ // 3. wait for it to complete
751
+ // 4. if the job failed with the missing parameter error then:
752
+ // a. prompt for params
753
+ // b. create template version again with the same file hash
754
+ // c. wait for it to complete
755
+ // 5.create template with the successful template version ID
748
756
// https://github.com/coder/coder/blob/b6703b11c6578b2f91a310d28b6a7e57f0069be6/cli/templatecreate.go#L169-L170
749
757
export const createValidTemplate = async (
750
758
organizationId : string ,
751
759
exampleId : string ,
752
760
// The template_version_id is calculated in the function
753
761
data : Omit < TypesGen . CreateTemplateRequest , "template_version_id" > ,
754
762
) : Promise < TypesGen . Template > => {
755
- // First template version is used to generate the parameters and default values
763
+ // Step 2.
756
764
let version = await createTemplateVersion ( organizationId , {
757
765
storage_method : "file" ,
758
766
example_id : exampleId ,
759
767
provisioner : "terraform" ,
760
768
tags : { } ,
761
769
} )
762
- console . log ( "Create version" )
763
-
764
- // Wait the version job to be completed
765
- const waitForJobToBeCompleted = async (
766
- templateVersion : TypesGen . TemplateVersion ,
767
- ) => {
768
- const version = await getTemplateVersion ( templateVersion . id )
769
- if ( [ "pending" , "running" ] . includes ( version . job . status ) ) {
770
- await waitForJobToBeCompleted ( version )
771
- }
772
- return version
770
+
771
+ // Step 3.
772
+ let status = version . job . status
773
+ while ( [ "pending" , "running" ] . includes ( status ) ) {
774
+ version = await getTemplateVersion ( version . id )
775
+ status = version . job . status
773
776
}
774
- version = await waitForJobToBeCompleted ( version )
775
- if ( version . job . status === "failed" ) {
776
- throw new Error ( "Version failed to be created" )
777
+ if ( status === "failed" ) {
778
+ console . error ( version . job . error )
779
+ throw new Error ( version . job . error )
777
780
}
778
781
779
- console . log ( "Completed" )
780
- // Get schema and create a new template version with the parameters
781
- const schema = await getTemplateVersionSchema ( version . id )
782
- version = await createTemplateVersion ( organizationId , {
783
- storage_method : "file" ,
784
- example_id : exampleId ,
785
- provisioner : "terraform" ,
786
- tags : { } ,
787
- parameter_values : schema . map ( ( parameter ) => ( {
788
- name : parameter . name ,
789
- source_scheme : parameter . default_source_scheme ,
790
- destination_scheme : parameter . default_destination_scheme ,
791
- source_value : parameter . default_source_value ,
792
- } ) ) ,
793
- } )
794
-
795
- // Create template
782
+ // // Get schema and create a new template version with the parameters
783
+ // const schema = await getTemplateVersionSchema(version.id)
784
+ // version = await createTemplateVersion(organizationId, {
785
+ // storage_method: "file",
786
+ // example_id: exampleId,
787
+ // provisioner: "terraform",
788
+ // tags: {},
789
+ // parameter_values: schema.map((parameter) => ({
790
+ // name: parameter.name,
791
+ // source_scheme: parameter.default_source_scheme,
792
+ // destination_scheme: parameter.default_destination_scheme,
793
+ // source_value: parameter.default_source_value,
794
+ // })),
795
+ // })
796
+
797
+ // Step 5.
796
798
const template = await createTemplate ( organizationId , {
797
799
...data ,
798
800
template_version_id : version . id ,
0 commit comments