@@ -20,9 +20,10 @@ import (
2020
2121// Environment variables describing the stack. 
2222var  (
23+ ElasticsearchAPIKeyEnv  =  environment .WithElasticPackagePrefix ("ELASTICSEARCH_API_KEY" )
2324ElasticsearchHostEnv  =  environment .WithElasticPackagePrefix ("ELASTICSEARCH_HOST" )
24- ElasticsearchUsernameEnv  =  environment .WithElasticPackagePrefix ("ELASTICSEARCH_USERNAME" )
2525ElasticsearchPasswordEnv  =  environment .WithElasticPackagePrefix ("ELASTICSEARCH_PASSWORD" )
26+ ElasticsearchUsernameEnv  =  environment .WithElasticPackagePrefix ("ELASTICSEARCH_USERNAME" )
2627KibanaHostEnv  =  environment .WithElasticPackagePrefix ("KIBANA_HOST" )
2728CACertificateEnv  =  environment .WithElasticPackagePrefix ("CA_CERT" )
2829)
@@ -38,60 +39,70 @@ func ShellInit(elasticStackProfile *profile.Profile, shellType string) (string,
3839if  err  !=  nil  {
3940return  "" , nil 
4041}
42+ return  shellInitWithConfig (config , shellType )
43+ }
4144
42- // NOTE: to add new env vars, the template need to be adjusted 
43- t , err  :=  initTemplate (shellType )
45+ func   shellInitWithConfig ( config   * InitConfig ,  shellType   string ) ( string ,  error ) { 
46+ pattern , err  :=  selectPattern (shellType )
4447if  err  !=  nil  {
4548return  "" , fmt .Errorf ("cannot get shell init template: %w" , err )
4649}
4750
48- return  fmt .Sprintf (t ,
49- ElasticsearchHostEnv , config .ElasticsearchHostPort ,
50- ElasticsearchUsernameEnv , config .ElasticsearchUsername ,
51- ElasticsearchPasswordEnv , config .ElasticsearchPassword ,
52- KibanaHostEnv , config .KibanaHostPort ,
53- CACertificateEnv , config .CACertificatePath ,
54- ), nil 
51+ template  :=  genTemplate (pattern )
52+ return  template ([]generatorEnvVar {
53+ {ElasticsearchAPIKeyEnv , config .ElasticsearchAPIKey },
54+ {ElasticsearchHostEnv , config .ElasticsearchHostPort },
55+ {ElasticsearchUsernameEnv , config .ElasticsearchUsername },
56+ {ElasticsearchPasswordEnv , config .ElasticsearchPassword },
57+ {KibanaHostEnv , config .KibanaHostPort },
58+ {CACertificateEnv , config .CACertificatePath },
59+ }), nil 
60+ }
61+ 
62+ type  generatorEnvVar  struct  {
63+ name  string 
64+ value  string 
5565}
5666
5767const  (
5868// shell init code for POSIX compliant shells. 
5969// IEEE POSIX Shell and Tools portion of the IEEE POSIX specification (IEEE Standard 1003.1) 
60- posixTemplate  =  `export %s=%s 
61- export %s=%s 
62- export %s=%s 
63- export %s=%s 
64- export %s=%s` 
70+ posixPattern  =  `export %s=%s` 
6571
6672// fish shell init code. 
6773// fish shell is similar but not compliant to POSIX. 
68- fishTemplate  =  `set -x %s %s; 
69- set -x %s %s; 
70- set -x %s %s; 
71- set -x %s %s; 
72- set -x %s %s;` 
74+ fishPattern  =  `set -x %s %s;` 
7375
7476// PowerShell init code. 
7577// Output to be evaluated with `elastic-package stack shellinit | Invoke-Expression 
76- powershellTemplate  =  `$Env:%s="%s"; 
77- $Env:%s="%s"; 
78- $Env:%s="%s"; 
79- $Env:%s="%s"; 
80- $Env:%s="%s";` 
78+ powershellPattern  =  `$Env:%s="%s";` 
8179)
8280
81+ func  genTemplate (pattern  string ) func ([]generatorEnvVar ) string  {
82+ return  func (vars  []generatorEnvVar ) string  {
83+ var  builder  strings.Builder 
84+ for  i , v  :=  range  vars  {
85+ fmt .Fprintf (& builder , pattern , v .name , v .value )
86+ if  i  <  len (vars )- 1  {
87+ builder .WriteString ("\n " )
88+ }
89+ }
90+ return  builder .String ()
91+ }
92+ }
93+ 
8394// availableShellTypes list all available values for s in initTemplate 
8495var  availableShellTypes  =  []string {"bash" , "dash" , "fish" , "sh" , "zsh" , "pwsh" , "powershell" }
8596
86- // InitTemplate  returns code templates  for shell initialization  
87- func  initTemplate (s  string ) (string , error ) {
97+ // SelectPattern  returns the patterns to generate list of environment variables  for each shell.  
98+ func  selectPattern (s  string ) (string , error ) {
8899switch  s  {
89100case  "bash" , "dash" , "sh" , "zsh" :
90- return  posixTemplate , nil 
101+ return  posixPattern , nil 
91102case  "fish" :
92- return  fishTemplate , nil 
103+ return  fishPattern , nil 
93104case  "pwsh" , "powershell" :
94- return  powershellTemplate , nil 
105+ return  powershellPattern , nil 
95106default :
96107return  "" , errors .New ("shell type is unknown, should be one of "  +  strings .Join (availableShellTypes , ", " ))
97108}
0 commit comments