1
1
import { exec } from '../../util/shell' ;
2
2
import { Werft } from "../../util/werft" ;
3
+ import * as VM from '../../vm/vm'
3
4
import { GCLOUD_SERVICE_ACCOUNT_PATH } from "./const" ;
5
+ import { JobConfig } from './job-config' ;
4
6
5
7
const phaseName = "prepare" ;
8
+ const prepareSlices = {
9
+ CONFIGURE_CORE_DEV : "Configuring core-dev access." ,
10
+ BOOT_VM : "Booting VM."
11
+ }
6
12
7
- export async function prepare ( werft : Werft ) {
13
+ export async function prepare ( werft : Werft , config : JobConfig ) {
8
14
werft . phase ( phaseName ) ;
9
15
try {
16
+ werft . log ( prepareSlices . CONFIGURE_CORE_DEV , prepareSlices . CONFIGURE_CORE_DEV )
10
17
compareWerftAndGitpodImage ( )
11
18
activateCoreDevServiceAccount ( )
12
19
configureDocker ( )
13
20
configureCoreDevAccess ( )
21
+ werft . done ( prepareSlices . CONFIGURE_CORE_DEV )
22
+
23
+ decideHarvesterVMCreation ( werft , config )
14
24
} catch ( err ) {
15
25
werft . fail ( phaseName , err ) ;
16
26
}
@@ -27,26 +37,51 @@ function compareWerftAndGitpodImage() {
27
37
}
28
38
29
39
function 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 ;
31
41
32
42
if ( rc != 0 ) {
33
43
throw new Error ( "Failed to activate core-dev service account." )
34
44
}
35
45
}
36
46
37
47
function 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 ;
40
50
41
51
if ( rcDocker != 0 || rcDockerRegistry != 0 ) {
42
52
throw new Error ( "Failed to configure docker with gcloud." )
43
53
}
44
54
}
45
55
46
56
function 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 ;
48
58
49
59
if ( rc != 0 ) {
50
60
throw new Error ( "Failed to get core-dev kubeconfig credentials." )
51
61
}
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