Expand description

Configuration for a WASI application in an Enarx Keep

This crate provides Config, which can be used to with any serde deserializer. Its main purpose is to read an Enarx.toml configuration file.

extern crate toml;
use enarx_config::Config;
const CONFIG: &str = r#"
[[files]]
name = "LISTEN"
kind = "listen"
prot = "tls"
port = 12345
"#;

let config: Config = toml::from_str(CONFIG).unwrap();

Configure Enarx.toml

With the Enarx.toml configuration file, environment variables, arguments and pre-opened file descriptors can be passed to the WASM application.

Elements

All elements are optional.

env

env specifies the environment variables exported to the WASM application in a map.

Example
[env]
VAR1 = "var1"
VAR2 = "var2"

args

args specifies the arguments for the WASM application in an array.

Example
args = [
     "--argument1",
     "--argument2=foo"
]

steward

steward specifies the URL for the steward to contact for a TLS certificate.

Example
steward = "https://steward.example.com"

files

files specifies an array of file descriptor definitions to be pre-opened for the WASM application.

A files entry can contain the following sub elements.

kind

kind can be one of "null", "stdin","stdout", "stderr", "listen" or "connect".

name

Name of the file descriptor, exported in the FD_NAMES environment variable. The default name for kind "null", "stdin","stdout", "stderr" is the kind.

The FD_NAMES environment variable contains all name strings of the files array joined with “:”. The FD_COUNT environment variable contains the number of files elements.

prot

prot can be "tcp" or "tls" for kind = "connect" or kind = "listen".

"tls" is the default, if prot is not specified.

tls transparently wraps a TCP connection with the TLS protocol. For kind = "listen" every accepted connection is also wrapped with the TLS protocol.

host

host specifies the host to connect to for a kind = "connect"

addr

addr specifies the address to bind to for a kind = "listen".

Examples
addr = "::"          # bind to any interface IPv6 and IPv4 (the default, if not specified)
addr = "0.0.0.0"     # bind to any IPv4 interface
addr = "::1"         # bind to IPv6 localhost
addr = "127.0.0.1"   # bind to IPv4 localhost
addr = "192.168.1.1" # bind to a specific IPv4 address
port

port specifies the port to connect or bind to for kind = "connect" or kind = "listen". The default value is 443.

Example


args = [
     "--argument1",
     "--argument2=foo"
]

[env]
VAR1 = "var1"
VAR2 = "var2"

[[files]]
kind = "null"

[[files]]
kind = "stdout"

[[files]]
kind = "stderr"

[[files]]
name = "LISTEN"
kind = "listen"
prot = "tls" # or prot = "tcp"
port = 12345

[[files]]
name = "CONNECT"
kind = "connect"
prot = "tcp" # or prot = "tls"
host = "127.0.0.1"
port = 23456

This configuration files passes the environment VAR1=var1 VAR2=var2 and the arguments --argument1 --argument2=foo to the WASM application.

Additionally, five file descriptors are pre-opened:

  • 0: /dev/null
  • 1: /dev/stdout
  • 2: /dev/stderr
  • 3: a TCP listen socket bound to port 12345 on address ::, where every accepted connection is transparently wrapped with the TLS protocol
  • 4: a normal TCP stream socket connected to 127.0.0.1:23456

Additionally, the following environment variables are exported:

  • FD_COUNT=5
  • FD_NAMES=null:stdout:stderr:LISTEN:CONNECT

Structs

The configuration for an Enarx WASI application

Name assigned to a file descriptor

Enums

Parameters for a pre-opened file descriptor

Protocol to use for a connection

Constants

Configuration file template