public CreateFunctionAction(ITemplatesManager templatesManager, ISecretsManager secretsManager) { _templatesManager = templatesManager; _secretsManager = secretsManager; _templates = new Lazy <IEnumerable <Template> >(() => { return(_templatesManager.Templates.Result); }); _initAction = new InitAction(_templatesManager, _secretsManager); }
public async override Task RunAsync() { if (Console.IsOutputRedirected || Console.IsInputRedirected) { if (string.IsNullOrEmpty(TemplateName) || string.IsNullOrEmpty(FunctionName)) { ColoredConsole .Error .WriteLine(ErrorColor("Running with stdin\\stdout redirected. Command must specify --template, and --name explicitly.")) .WriteLine(ErrorColor("See 'func help function' for more details")); return; } } var templates = await _templatesManager.Templates; templates = templates.Concat(_templatesManager.PythonTemplates); var language = _secretsManager.GetSecrets().FirstOrDefault(s => s.Key.Equals(Constants.FunctionsLanguageSetting, StringComparison.OrdinalIgnoreCase)).Value; if (string.IsNullOrWhiteSpace(language)) { ColoredConsole.Write("Select a language: "); language = Language ?? SelectionMenuHelper.DisplaySelectionWizard(templates.Select(t => t.Metadata.Language).Distinct()); ColoredConsole.WriteLine(TitleColor(language)); language = InitAction.NormalizeLanguage(language); _secretsManager.SetSecret(Constants.FunctionsLanguageSetting, language); ColoredConsole .WriteLine(WarningColor("Starting from 2.0.1-beta.26 it's required to set a language for your project in your settings")) .WriteLine(WarningColor($"'{language}' has been set in your local.settings.json")); } if (language.Equals("csharp", StringComparison.OrdinalIgnoreCase)) { language = "C#"; } ColoredConsole.Write("Select a template: "); var name = TemplateName ?? SelectionMenuHelper.DisplaySelectionWizard(templates.Where(t => t.Metadata.Language.Equals(language, StringComparison.OrdinalIgnoreCase)).Select(t => t.Metadata.Name).Distinct()); ColoredConsole.WriteLine(TitleColor(name)); var template = templates.FirstOrDefault(t => t.Metadata.Name.Equals(name, StringComparison.OrdinalIgnoreCase) && t.Metadata.Language.Equals(language, StringComparison.OrdinalIgnoreCase)); if (template == null) { ColoredConsole.Error.WriteLine(ErrorColor($"Can't find template \"{name}\" in \"{language}\"")); } else { ColoredConsole.Write($"Function name: [{template.Metadata.DefaultFunctionName}] "); var functionName = FunctionName ?? Console.ReadLine(); functionName = string.IsNullOrEmpty(functionName) ? template.Metadata.DefaultFunctionName : functionName; await _templatesManager.Deploy(functionName, template); } }