public override async Task RunAsync()

in src/Cli/func/Actions/KubernetesActions/KubernetesDeployAction.cs [132:245]


        public override async Task RunAsync()
        {
            (var resolvedImageName, var shouldBuild) = await ResolveImageName();
            TriggersPayload triggers = null;
            if (DryRun)
            {
                if (shouldBuild)
                {
                    // don't build on a --dry-run.
                    // read files from the local dir
                    triggers = await GetTriggersLocalFiles();
                }
                else
                {
                    triggers = await DockerHelpers.GetTriggersFromDockerImage(resolvedImageName);
                }
            }
            else if (BuildImage)
            {
                if (shouldBuild)
                {
                    await DockerHelpers.DockerBuild(resolvedImageName, Environment.CurrentDirectory);
                }

                // This needs to be fixed to run after the build.
                triggers = await DockerHelpers.GetTriggersFromDockerImage(resolvedImageName);
            }
            else
            {
                triggers = await GetTriggersLocalFiles();
            }

            (var resources, var funcKeys) = await KubernetesHelper.GetFunctionsDeploymentResources(
                Name,
                resolvedImageName,
                Namespace,
                triggers,
                _secretsManager.GetSecrets(),
                PullSecret,
                SecretsCollectionName,
                ConfigMapName,
                UseConfigMap,
                PollingInterval,
                CooldownPeriod,
                ServiceType,
                MinReplicaCount,
                MaxReplicaCount,
                KeysSecretCollectionName,
                MountFuncKeysAsContainerVolume,
                KedaVersion,
                KeySecretAnnotations);

            if (DryRun)
            {
                ColoredConsole.WriteLine(KubernetesHelper.SerializeResources(resources, OutputSerializationOptions.Yaml));
            }
            else
            {
                Task kubernetesTask = null;
                Task imageTask = (BuildImage && shouldBuild) ? DockerHelpers.DockerPush(resolvedImageName, false) : null;

                if (WriteConfigs)
                {
                    var yaml = KubernetesHelper.SerializeResources(resources, OutputSerializationOptions.Yaml);
                    kubernetesTask = File.WriteAllTextAsync(ConfigFile, yaml);
                    Console.Write($"Configuration written to {ConfigFile}");
                    return;
                }
                else
                {
                    Func<Task> resourceTaskFn = () =>
                    {
                        var serialized = KubernetesHelper.SerializeResources(resources, OutputSerializationOptions.Yaml);
                        return KubectlHelper.KubectlApply(serialized, showOutput: true, ignoreError: IgnoreErrors, @namespace: Namespace);
                    };

                    if (!await KubernetesHelper.NamespaceExists(Namespace))
                    {
                        kubernetesTask = KubernetesHelper.CreateNamespace(Namespace).ContinueWith((result) =>
                        {
                            return resourceTaskFn();
                        });
                    }
                    else
                    {
                        kubernetesTask = resourceTaskFn();
                    }
                }

                if (imageTask != null)
                {
                    await imageTask;
                }

                await kubernetesTask;

                var httpService = resources
                    .Where(i => i is ServiceV1)
                    .Cast<ServiceV1>()
                    .FirstOrDefault(s => s.Metadata.Name.Contains("http"));
                var httpDeployment = resources
                    .Where(i => i is DeploymentV1Apps)
                    .Cast<DeploymentV1Apps>()
                    .FirstOrDefault(d => d.Metadata.Name.Contains("http"));

                if (httpDeployment != null)
                {
                    await KubernetesHelper.WaitForDeploymentRollout(httpDeployment);

                    // Print the function keys message to the console
                    await KubernetesHelper.PrintFunctionsInfo(httpDeployment, httpService, funcKeys, triggers, ShowServiceFqdn);
                }
            }
        }