public async Task CreateOrUpdateResourceAsync()

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));
        }