in cli_tools/common/image/importer/api_inflater.go [242:323]
func (inflater *apiInflater) getCalculateChecksumWorkflow(diskURI string, daisyPrefix string) *daisy.Workflow {
w := daisy.New()
w.Name = daisyPrefix + "-disk-checksum"
checksumScript := checksumScriptConst
w.Steps = map[string]*daisy.Step{
"create-disks": {
CreateDisks: &daisy.CreateDisks{
{
Disk: compute.Disk{
Name: "disk-${NAME}",
SourceImage: "projects/compute-image-import/global/images/debian-9-worker-v20230926",
Type: "pd-ssd",
},
},
},
},
"create-instance": {
CreateInstances: &daisy.CreateInstances{
Instances: []*daisy.Instance{
{
Instance: compute.Instance{
Name: "inst-${NAME}",
Disks: []*compute.AttachedDisk{
{Source: "disk-${NAME}"},
{Source: diskURI, Mode: "READ_ONLY"},
},
MachineType: "n1-highcpu-4",
Metadata: &compute.Metadata{
Items: []*compute.MetadataItems{
{
Key: "startup-script",
Value: &checksumScript,
},
},
},
NetworkInterfaces: []*compute.NetworkInterface{
{
AccessConfigs: []*compute.AccessConfig{},
Network: inflater.request.Network,
Subnetwork: inflater.request.Subnet,
},
},
ServiceAccounts: []*compute.ServiceAccount{
{
Email: "${compute_service_account}",
Scopes: []string{"https://www.googleapis.com/auth/devstorage.read_write"},
},
},
},
},
},
},
},
"wait-for-checksum": {
WaitForInstancesSignal: &daisy.WaitForInstancesSignal{
{
Name: "inst-${NAME}",
SerialOutput: &daisy.SerialOutput{
Port: 1,
SuccessMatch: "Checksum calculated.",
StatusMatch: "Checksum:",
},
},
},
},
}
w.Dependencies = map[string][]string{
"create-instance": {"create-disks"},
"wait-for-checksum": {"create-instance"},
}
// Calculate checksum within 20min.
env := inflater.request.EnvironmentSettings()
env.Timeout = "20m"
env.ApplyToWorkflow(w)
computeServiceAccount := "default"
if inflater.request.ComputeServiceAccount != "" {
computeServiceAccount = inflater.request.ComputeServiceAccount
}
w.AddVar("compute_service_account", computeServiceAccount)
return w
}