/ Framework / KubernetesWorkflow / WorkflowCreator.cs
WorkflowCreator.cs
 1  using Logging;
 2  using Utils;
 3  
 4  namespace KubernetesWorkflow
 5  {
 6      public class WorkflowCreator
 7      {
 8          private readonly NumberSource numberSource = new NumberSource(0);
 9          private readonly NumberSource containerNumberSource = new NumberSource(0);
10          private readonly K8sCluster cluster;
11          private readonly ILog log;
12          private readonly Configuration configuration;
13          private readonly string k8sNamespace;
14  
15          public WorkflowCreator(ILog log, Configuration configuration)
16          {
17              this.log = log;
18              this.configuration = configuration;
19              cluster = new K8sCluster(configuration);
20              k8sNamespace = configuration.KubernetesNamespace.ToLowerInvariant();
21          }
22  
23          public IStartupWorkflow CreateWorkflow(string? namespaceOverride = null)
24          {
25              var workflowNumberSource = new WorkflowNumberSource(numberSource.GetNextNumber(),
26                                                                      containerNumberSource);
27  
28              return new StartupWorkflow(log, workflowNumberSource, cluster, GetNamespace(namespaceOverride));
29          }
30  
31          private string GetNamespace(string? namespaceOverride)
32          {
33              if (namespaceOverride != null)
34              {
35                  if (!configuration.AllowNamespaceOverride) throw new Exception("Namespace override is not allowed.");
36                  return namespaceOverride;
37              }
38              return k8sNamespace;
39          }
40      }
41  }