public async Task PreviewResourceCreateOrUpdateAsync()

in src/Azure.Deployments.Extensibility.Extensions.Kubernetes/KubernetesExtension.cs [34:66]


        public async Task<IResult> PreviewResourceCreateOrUpdateAsync(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);

            var configId = CalculateConfigId(client);

            // Do config ID checksum validation if one is supplied. 
            if (resourceSpecification.ConfigId is not null && !TryMatchConfigurationId(resourceSpecification.ConfigId, configId, out var configIdErrorResult))
            {
                return configIdErrorResult;
            }
            
            if (api.Namespaced && (k8sObject.Namespace ?? client.DefaultNamespace) is { } @namespace)
            {
                if (await client.GetNamespaceAsync(@namespace, cancellationToken: cancellationToken) is null)
                {
                    // Namespace does not exist. Perform client-side dry run.
                    k8sObject.Metadata["namespace"] = @namespace;
                    
                    return Results.Ok(ModelMapper.MapToResource(K8sObjectIdentifiers.Create(k8sObject), k8sObject, configId));
                }
            }

            k8sObject = await api.PatchObjectAsync(k8sObject, dryRun: true, cancellationToken);

            return Results.Ok(ModelMapper.MapToResource(K8sObjectIdentifiers.Create(k8sObject), k8sObject, configId));
        }