Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 521803f

Browse files
committed
Fix create template from example id
1 parent ca606a4 commit 521803f

File tree

2 files changed

+44
-34
lines changed

2 files changed

+44
-34
lines changed

site/src/api/api.ts

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -744,55 +744,57 @@ export const getTemplateExamples = async (
744744
return response.data
745745
}
746746

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
748756
// https://github.com/coder/coder/blob/b6703b11c6578b2f91a310d28b6a7e57f0069be6/cli/templatecreate.go#L169-L170
749757
export const createValidTemplate = async (
750758
organizationId: string,
751759
exampleId: string,
752760
// The template_version_id is calculated in the function
753761
data: Omit<TypesGen.CreateTemplateRequest, "template_version_id">,
754762
): Promise<TypesGen.Template> => {
755-
// First template version is used to generate the parameters and default values
763+
// Step 2.
756764
let version = await createTemplateVersion(organizationId, {
757765
storage_method: "file",
758766
example_id: exampleId,
759767
provisioner: "terraform",
760768
tags: {},
761769
})
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
773776
}
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)
777780
}
778781

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.
796798
const template = await createTemplate(organizationId, {
797799
...data,
798800
template_version_id: version.id,

site/src/xServices/createTemplate/createTemplateXService.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { createValidTemplate, getTemplateExamples } from "api/api"
22
import { Template, TemplateExample } from "api/typesGenerated"
3+
import { displayError } from "components/GlobalSnackbar/utils"
34
import { assign, createMachine } from "xstate"
45

56
interface CreateTemplateContext {
@@ -73,7 +74,7 @@ export const createTemplateMachine = createMachine(
7374
},
7475
onError: {
7576
target: "idle",
76-
actions: ["assignError"],
77+
actions: ["displayError"],
7778
},
7879
},
7980
},
@@ -111,6 +112,13 @@ export const createTemplateMachine = createMachine(
111112
actions: {
112113
assignError: assign({ error: (_, { data }) => data }),
113114
assignStarterTemplate: assign({ starterTemplate: (_, { data }) => data }),
115+
displayError: (_, { data }) => {
116+
if (data instanceof Error) {
117+
displayError(data.message)
118+
return
119+
}
120+
console.warn(`data is not an Error`)
121+
},
114122
},
115123
guards: {
116124
isExampleProvided: ({ exampleId }) => Boolean(exampleId),

0 commit comments

Comments
 (0)