11import { exec } from '../../util/shell' ;
22import { Werft } from "../../util/werft" ;
3+ import * as VM from '../../vm/vm'
34import { GCLOUD_SERVICE_ACCOUNT_PATH } from "./const" ;
5+ import { JobConfig } from './job-config' ;
46
57const phaseName = "prepare" ;
8+ const prepareSlices = {
9+ CONFIGURE_CORE_DEV : "Configuring core-dev access." ,
10+ BOOT_VM : "Booting VM."
11+ }
612
7- export async function prepare ( werft : Werft ) {
13+ export async function prepare ( werft : Werft , config : JobConfig ) {
814 werft . phase ( phaseName ) ;
915 try {
16+ werft . log ( prepareSlices . CONFIGURE_CORE_DEV , prepareSlices . CONFIGURE_CORE_DEV )
1017 compareWerftAndGitpodImage ( )
1118 activateCoreDevServiceAccount ( )
1219 configureDocker ( )
1320 configureCoreDevAccess ( )
21+ werft . done ( prepareSlices . CONFIGURE_CORE_DEV )
22+
23+ decideHarvesterVMCreation ( werft , config )
1424 } catch ( err ) {
1525 werft . fail ( phaseName , err ) ;
1626 }
@@ -27,26 +37,51 @@ function compareWerftAndGitpodImage() {
2737}
2838
2939function activateCoreDevServiceAccount ( ) {
30- const rc = exec ( `gcloud auth activate-service-account --key-file "${ GCLOUD_SERVICE_ACCOUNT_PATH } "` , { slice : phaseName } ) . code ;
40+ const rc = exec ( `gcloud auth activate-service-account --key-file "${ GCLOUD_SERVICE_ACCOUNT_PATH } "` , { slice : prepareSlices . CONFIGURE_CORE_DEV } ) . code ;
3141
3242 if ( rc != 0 ) {
3343 throw new Error ( "Failed to activate core-dev service account." )
3444 }
3545}
3646
3747function configureDocker ( ) {
38- const rcDocker = exec ( "gcloud auth configure-docker --quiet" , { slice : phaseName } ) . code ;
39- const rcDockerRegistry = exec ( "gcloud auth configure-docker europe-docker.pkg.dev --quiet" , { slice : phaseName } ) . code ;
48+ const rcDocker = exec ( "gcloud auth configure-docker --quiet" , { slice : prepareSlices . CONFIGURE_CORE_DEV } ) . code ;
49+ const rcDockerRegistry = exec ( "gcloud auth configure-docker europe-docker.pkg.dev --quiet" , { slice : prepareSlices . CONFIGURE_CORE_DEV } ) . code ;
4050
4151 if ( rcDocker != 0 || rcDockerRegistry != 0 ) {
4252 throw new Error ( "Failed to configure docker with gcloud." )
4353 }
4454}
4555
4656function configureCoreDevAccess ( ) {
47- const rc = exec ( 'gcloud container clusters get-credentials core-dev --zone europe-west1-b --project gitpod-core-dev' , { slice : phaseName } ) . code ;
57+ const rc = exec ( 'gcloud container clusters get-credentials core-dev --zone europe-west1-b --project gitpod-core-dev' , { slice : prepareSlices . CONFIGURE_CORE_DEV } ) . code ;
4858
4959 if ( rc != 0 ) {
5060 throw new Error ( "Failed to get core-dev kubeconfig credentials." )
5161 }
52- }
62+ }
63+
64+ function decideHarvesterVMCreation ( werft : Werft , config : JobConfig ) {
65+ if ( config . withVM && ! VM . vmExists ( { name : config . previewEnvironment . destname } ) ) {
66+ prepareVM ( werft , config )
67+ } else {
68+ werft . currentPhaseSpan . setAttribute ( "werft.harvester.created_vm" , false )
69+ }
70+ werft . done ( prepareSlices . BOOT_VM )
71+ }
72+
73+ function prepareVM ( werft : Werft , config : JobConfig ) {
74+ if ( config . cleanSlateDeployment ) {
75+ werft . log ( prepareSlices . BOOT_VM , "Cleaning previously created VM" )
76+ VM . deleteVM ( { name : config . previewEnvironment . destname } )
77+ }
78+ createVM ( werft , config , prepareSlices . BOOT_VM )
79+ }
80+
81+ // createVM only triggers the VM creation.
82+ // Readiness is not guaranted.
83+ function createVM ( werft : Werft , config : JobConfig , slice : string ) {
84+ werft . log ( slice , 'Booting VM' )
85+ VM . startVM ( { name : config . previewEnvironment . destname } )
86+ werft . currentPhaseSpan . setAttribute ( "werft.harvester.created_vm" , true )
87+ }
0 commit comments