in src/Azure.Deployments.Extensibility.Extensions.Kubernetes/KubernetesExtension.cs [68:91]
public async Task<IResult> CreateOrUpdateResourceAsync(HttpContext httpContext, ResourceSpecification resourceSpecification, CancellationToken cancellationToken)
{
this.resourceSpecificationValidator.ValidateAndThrow(resourceSpecification);
var groupVersionKind = ModelMapper.MapToGroupVersionKind(resourceSpecification.Type, resourceSpecification.ApiVersion);
var k8sObject = new K8sObject(groupVersionKind, resourceSpecification.Properties);
using var client = await this.k8sClientFactory.CreateAsync(resourceSpecification.Config);
var api = await new K8sApiDiscovery(client).FindApiAsync(groupVersionKind, cancellationToken);
// Do config ID checksum validation if one is supplied.
if (resourceSpecification.ConfigId is not null
&& (await api.GetObjectAsync(K8sObjectIdentifiers.Create(k8sObject), cancellationToken)) is not null
&& !TryMatchConfigurationId(resourceSpecification.ConfigId, CalculateConfigId(client), out var configIdErrorResult))
{
return configIdErrorResult;
}
k8sObject = await api.PatchObjectAsync(k8sObject, dryRun: false, cancellationToken);
var configId = CalculateConfigId(client);
return Results.Ok(ModelMapper.MapToResource(K8sObjectIdentifiers.Create(k8sObject), k8sObject, configId));
}