Skip to content

Commit 3a00054

Browse files
committed
support global environment variables
1 parent a21562c commit 3a00054

File tree

16 files changed

+214
-25
lines changed

16 files changed

+214
-25
lines changed

api/client/project_api_client.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ func (impl *ProjectAPIClient) SetUser(ctx context.Context, token *api.Token, use
3030
return
3131
}
3232

33+
// Change global environment
34+
func (impl *ProjectAPIClient) SetEnvironment(ctx context.Context, token *api.Token, env api.Environment) (reply *api.Settings, err error) {
35+
err = client.CallHTTP(ctx, impl.BaseURL, "ProjectAPI.SetEnvironment", atomic.AddUint64(&impl.sequence, 1), &reply, token, env)
36+
return
37+
}
38+
3339
// Get all templates without filtering
3440
func (impl *ProjectAPIClient) AllTemplates(ctx context.Context, token *api.Token) (reply []*api.TemplateStatus, err error) {
3541
err = client.CallHTTP(ctx, impl.BaseURL, "ProjectAPI.AllTemplates", atomic.AddUint64(&impl.sequence, 1), &reply, token)

api/handlers/project_api.go

Lines changed: 22 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/interface.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,16 @@ type File struct {
3939
}
4040

4141
type Settings struct {
42-
User string `json:"user"` // effective user (user for run apps)
43-
PublicKey string `json:"public_key,omitempty"` // optional public RSA key for SSH
42+
User string `json:"user"` // effective user (user for run apps)
43+
PublicKey string `json:"public_key,omitempty"` // optional public RSA key for SSH
44+
Environment map[string]string `json:"environment,omitempty"` // global environment
4445
}
4546

47+
type Environment struct {
48+
Environment map[string]string `json:"environment,omitempty"` // global environment
49+
}
50+
51+
// API for lambdas
4652
type LambdaAPI interface {
4753
// Upload content from .tar.gz archive to app and call Install handler (if defined)
4854
Upload(ctx context.Context, token *Token, uid string, tarGz []byte) (bool, error)
@@ -78,11 +84,14 @@ type LambdaAPI interface {
7884
Unlink(ctx context.Context, token *Token, alias string) (*application.App, error)
7985
}
8086

87+
// API for global project
8188
type ProjectAPI interface {
8289
// Get global configuration
8390
Config(ctx context.Context, token *Token) (*Settings, error)
8491
// Change effective user
8592
SetUser(ctx context.Context, token *Token, user string) (*Settings, error)
93+
// Change global environment
94+
SetEnvironment(ctx context.Context, token *Token, env Environment) (*Settings, error)
8695
// Get all templates without filtering
8796
AllTemplates(ctx context.Context, token *Token) ([]*TemplateStatus, error)
8897
// List available apps (lambdas) in a project

api/services/project_srv.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,20 @@ func (srv *projectSrv) CreateFromTemplate(ctx context.Context, token *api.Token,
4848

4949
func (srv *projectSrv) Config(ctx context.Context, token *api.Token) (*api.Settings, error) {
5050
return &api.Settings{
51-
User: srv.project.RunnerUser(),
52-
PublicKey: string(srv.project.PublicKey()),
51+
User: srv.project.RunnerUser(),
52+
PublicKey: string(srv.project.PublicKey()),
53+
Environment: srv.project.GlobalEnvironment(),
5354
}, nil
5455
}
5556

57+
func (srv *projectSrv) SetEnvironment(ctx context.Context, token *api.Token, env api.Environment) (*api.Settings, error) {
58+
err := srv.project.SetGlobalEnvironment(env.Environment)
59+
if err != nil {
60+
return nil, err
61+
}
62+
return srv.Config(ctx, token)
63+
}
64+
5665
func (srv *projectSrv) SetUser(ctx context.Context, token *api.Token, user string) (*api.Settings, error) {
5766
err := srv.project.ChangeUser(user)
5867
if err != nil {

application/handler.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (project *Project) Handler(ctx context.Context, tracker stats.Recorder) (ht
3636
}
3737

3838
start := time.Now()
39-
app.Run(ctx, tracker, writer, request)
39+
app.Run(ctx, tracker, project.config.Environment, writer, request)
4040
end := time.Now()
4141
log.Println("[INFO]", "("+appName+")", end.Sub(start))
4242
}, nil
@@ -60,15 +60,19 @@ func (project *Project) HandlerAlias(ctx context.Context, tracker stats.Recorder
6060
}
6161

6262
start := time.Now()
63-
app.Run(ctx, tracker, writer, request)
63+
app.Run(ctx, tracker, project.config.Environment, writer, request)
6464
end := time.Now()
6565
log.Println("[INFO]", "("+appName+")", end.Sub(start))
6666
}, nil
6767
}
6868

6969
// Run application with parameters defined in manifest in directory
7070
//
71-
func (app *App) Run(ctx context.Context, tracker stats.Recorder, w http.ResponseWriter, r *http.Request) {
71+
func (app *App) Run(ctx context.Context,
72+
tracker stats.Recorder,
73+
env map[string]string,
74+
w http.ResponseWriter,
75+
r *http.Request) {
7276
defer r.Body.Close()
7377

7478
var record = stats.Record{
@@ -141,6 +145,9 @@ func (app *App) Run(ctx context.Context, tracker stats.Recorder, w http.Response
141145
}
142146

143147
var environments = os.Environ()
148+
for header, mapped := range env {
149+
environments = append(environments, header+"="+mapped)
150+
}
144151
for header, mapped := range app.Manifest.InputHeaders {
145152
environments = append(environments, mapped+"="+r.Header.Get(header))
146153
}

application/project.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ func OpenProject(location string, defaultConfig ProjectConfig) (*Project, error)
4343
}
4444

4545
type ProjectConfig struct {
46-
User string `json:"user"` // user that will be used for jobs
47-
UnTar []string `json:"untar,omitempty"` // custom tar zxf command
48-
Tar []string `json:"tar,omitempty"` // custom tar zcf command
46+
User string `json:"user"` // user that will be used for jobs
47+
UnTar []string `json:"untar,omitempty"` // custom tar zxf command
48+
Tar []string `json:"tar,omitempty"` // custom tar zcf command
49+
Environment map[string]string `json:"environment,omitempty"` // global environment
4950
}
5051

5152
func (cfg *ProjectConfig) UnTarCommand() []string {
@@ -169,6 +170,19 @@ func (project *Project) ChangeUser(user string) error {
169170
return project.config.WriteFile(project.configFile)
170171
}
171172

173+
func (project *Project) GlobalEnvironment() map[string]string {
174+
project.configLock.Lock()
175+
defer project.configLock.Unlock()
176+
return project.config.Environment
177+
}
178+
179+
func (project *Project) SetGlobalEnvironment(env map[string]string) error {
180+
project.configLock.Lock()
181+
defer project.configLock.Unlock()
182+
project.config.Environment = env
183+
return project.config.WriteFile(project.configFile)
184+
}
185+
172186
// Gets encoded public key if exists. Otherwise returns nil
173187
func (project *Project) PublicKey() []byte {
174188
if project.publicKey == nil {

assets/bindata.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:f67b8fdccc653efc4dc795e7d3e45d59cc7cb563ce8dfdcf1e3eb778c420fd4f
3-
size 4845295
2+
oid sha256:d3a9cdf56405262e24c6f3cddcf44b0fa5d8db14acc85eaf40978c5846756435
3+
size 4848219

clients/js/lambda_api.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export class LambdaAPIError extends Error {
88

99
export class LambdaAPI {
1010
/**
11-
optional public RSA key for SSH
11+
API for lambdas
1212
**/
1313

1414
// Create new API handler to LambdaAPI.

clients/js/project_api.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export class ProjectAPIError extends Error {
88

99
export class ProjectAPI {
1010
/**
11-
Remove link
11+
API for global project
1212
**/
1313

1414
// Create new API handler to ProjectAPI.
@@ -44,6 +44,18 @@ export class ProjectAPI {
4444
}));
4545
}
4646

47+
/**
48+
Change global environment
49+
**/
50+
async setEnvironment(token, env){
51+
return (await this.__call('SetEnvironment', {
52+
"jsonrpc" : "2.0",
53+
"method" : "ProjectAPI.SetEnvironment",
54+
"id" : this.__next_id(),
55+
"params" : [token, env]
56+
}));
57+
}
58+
4759
/**
4860
Get all templates without filtering
4961
**/

clients/python/lambda_api.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
from dataclasses import dataclass
44

5-
from base64 import decodebytes, encodebytes
65
from typing import Any, List, Optional
6+
from base64 import decodebytes, encodebytes
77

88

99

@@ -208,7 +208,7 @@ def from_json(method: str, payload: dict) -> 'LambdaAPIError':
208208

209209
class LambdaAPIClient:
210210
"""
211-
optional public RSA key for SSH
211+
API for lambdas
212212
"""
213213

214214
def __init__(self, base_url: str = 'https://127.0.0.1:3434/u/', session: Optional[client.ClientSession] = None):
@@ -482,7 +482,7 @@ async def _invoke(self, request):
482482

483483
class LambdaAPIBatch:
484484
"""
485-
optional public RSA key for SSH
485+
API for lambdas
486486
"""
487487

488488
def __init__(self, client: LambdaAPIClient, size: int = 10):

0 commit comments

Comments
 (0)