func createDeployment()

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
}