in custom-targets/infrastructure-manager/im-deployer/inframanager.go [76:107]
func createDeployment(ctx context.Context, client *config.Client, deployment *configpb.Deployment) (*configpb.Deployment, error) {
// Name is "projects/{project}/locations/{location}/deployments/{deployment}".
nameParts := strings.Split(deployment.Name, "/")
op, err := client.CreateDeployment(ctx, &configpb.CreateDeploymentRequest{
Parent: fmt.Sprintf("projects/%s/locations/%s", nameParts[1], nameParts[3]),
DeploymentId: nameParts[5],
Deployment: deployment,
})
if err != nil {
return nil, fmt.Errorf("error creating infrastructure manager deployment: %v", err)
}
fmt.Printf("Waiting on create Deployment operation %s\n", op.Name())
var d *configpb.Deployment
for {
time.Sleep(30 * time.Second)
pd, err := op.Poll(ctx)
if err != nil {
return nil, fmt.Errorf("error polling create deployment operation: %v", err)
}
if pd != nil {
d = pd
break
}
// If the operation isn't complete then get the Deployment to log the current state.
tempD, err := getDeployment(ctx, client, deployment.Name)
if err != nil {
return nil, fmt.Errorf("error getting deployment: %v", err)
}
fmt.Printf("Create operation still in progress, current Deployment state: %s\n", tempD.State)
}
return d, nil
}