in plugin-azure-server/src/main/kotlin/jetbrains/buildServer/clouds/azure/arm/connector/tasks/CreateDeploymentTaskImpl.kt [44:132]
override fun create(api: AzureApi, taskContext: AzureTaskContext, parameter: CreateDeploymentTaskParameter): Single<CreateDeploymentTaskDescriptor> {
if (TeamCityProperties.getBooleanOrTrue(TEAMCITY_CLOUDS_AZURE_TASKS_CTREATEDEPLOYMENT_USE_MILTITHREAD_POLLING)) {
val managerClient = api.deploymentsClient()
LOG.debug("Starting deployment. Name: ${parameter.deploymentName}, corellationId: [${taskContext.corellationId}]")
val service = managerClient.azureClient.retrofit().create(DeploymentService::class.java)
return managerClient
.azureClient
.putOrPatchAsync<DeploymentExtendedInner>(service.createOrUpdate(
parameter.groupName,
parameter.deploymentName,
api.subscriptionId(),
getDeploymentInner(parameter),
managerClient.apiVersion(),
managerClient.acceptLanguage(),
managerClient.userAgent()
)) {
taskContext.getDeferralSequence()
}
.concatMap {
val event = AzureTaskDeploymentStatusChangedEventArgs(
api,
it.id(),
it.name(),
it.properties().provisioningState(),
it.properties().providers(),
it.properties().dependencies(),
taskContext,
)
myNotifications
.raise(event)
.map { CreateDeploymentTaskDescriptor(event.instance) }
}
.onErrorResumeNext { throwable ->
if (throwable is CloudException &&
DEPLOYMENT_NOT_FOUND_CODE.equals(throwable.body()?.code(), ignoreCase = true) &&
VIRTUAL_MACHINES_RESOURCE_TYPE.equals(parameter.targetResourceType, ignoreCase = true)
) {
LOG.debug("Deployment has gone. Name: ${parameter.deploymentName}, corellationId: [${taskContext.corellationId}]")
val event = AzureTaskVirtualMachineCreated(
api,
taskContext,
ResourceUtils.constructResourceId(
api.subscriptionId(),
parameter.groupName,
VIRTUAL_MACHINES_PROVIDER_NAMESPACE,
VIRTUAL_MACHINES_RESOURCE_TYPE_SHORT,
parameter.deploymentName,
""),
)
myNotifications
.raise(event)
.map { CreateDeploymentTaskDescriptor(event.instance) }
} else {
Observable.error(throwable)
}
}
.toSingle()
} else {
return Utils.rootResource<Deployment>(
api
.deployments()
.define(parameter.deploymentName)
.withExistingResourceGroup(parameter.groupName)
.withTemplate(parameter.template)
.withParameters(parameter.params)
.withMode(DeploymentMode.INCREMENTAL)
.createAsync()
)
.concatMap {
val inner = it.inner()
val event = AzureTaskDeploymentStatusChangedEventArgs(
api,
inner.id(),
inner.name(),
inner.properties().provisioningState(),
inner.properties().providers(),
inner.properties().dependencies(),
taskContext
)
myNotifications
.raise(event)
.map { CreateDeploymentTaskDescriptor(event.instance) }
}
.toSingle()
}
}