3.1. string evaluation
within the config file strings are used for all values. these
value-strings will be evaluated while the config file is read. strings can
optionally be delimited by double-quotes " - most of the time this is
not necessary, but sometimes they help the config-parser to get things
right.
the evaluation will replace %()-references to defines sections with their
values. example:
defines
my_name: flo
message: Hello %(my_name)
here message will evaluate to the string Hello flo.
Quoted strings can contain # characters. In unquoted single-line values,
# starts a trailing line comment, so a literal hash must be quoted:
defines
literal_hash: "foo#bar"
trailing_comment: foo # this comment is ignored
these %()-references can not only refer to user-defined defines, but
also to builtin-defines, builtin-functions and user-functions.
3.1.1. builtin-defines
- manager
HOST_OR_IP:PORTof managers TCP-listening-socket- instance_name
name of this ln_manager instance as defined by the
instance_name:-field of theinstance-section described below.- hostname
hostname as reported from
socket.gethostname()(host where manager runs)- CURDIR
directory-name of this config file
- CURRENT
filename of this config file
- _PROCESS
display-name of currently(/or last)-defined
process-section- _FULL_PROCESS
full name of currently(/or last)-defined
process-section- LN_LD_LIBRARY_PATH
LD_LIBRARY_PATHas used by the ln_manager itself- LN_PYTHONPATH
PYTHONPATHas used by the ln_manager itself- LN_PYTHON
filename of python executable used by the ln_manager itself
- LN_PREFIX
prefix where ln_manager was installed to. (e.g.
/usr/localor/usror somewhere in your conan-cache)- LN_SHARE_DIR
share-directoy of ln_manager
- LN_BASE_MANAGER
base_dir of the ln_manager itself
3.1.2. builtin-functions
Note
todo: ifeq?
- env
%(env NAME[, DEFAULT_VALUE])read value from ln_managers environment. if there is no variable of that name, returnDEFAULT_VALUEif specified. ifDEFAULT_VALUEis not specified a error will be generated if that variable does not exist. example:%(env "HOME")will evaluate to the contents of the HOME environment variable of the ln_manager’s environment. it will throw an error if that variable does not exist…- ifip
%(ifip IFNAME)will query the system’s network interfaceIFNAMEand returns it’s (first) IPv4 in dottet-decimal form. (uses linux SIOCGIFADDR ioctl)- shell
%(shell CMD)executes a shell command via/bin/sh -c "CMD"and evaluates to the produced output on stdout. example:%(shell date)will evaluate to the ln_managers systems current date in some locale’s representation.- realpath
%(realpath PATH)will evaluate to the return-value of python’sos.path.realpath(PATH)- dirname
%(dirname PATH)will evaluate to the return-value of python’sos.path.dirname(PATH)- basename
%(basename PATH)will evaluate to the return-value of python’sos.path.basename(PATH)- subst
%(subst SEARCH, REPLACE, HAYSTACK)will evaluate to HAYSTACK but with all occourances of SEARCH replaced by REPLACE. example:%(substr "World", "Flo", "Hello World")will evaluate toHello Flo.- substring
%(substring STR, START[, N])will evaluate to the sub-string of STR, skipping the first START-characters. if N is provided only N-characters will be returned (at most). example:%(substring "Hello World", 6, 3)will evaluate toWor.- length
%(substring STR)will evaluate to the length of STR- strip
%(strip STR)will evaluate to STR but with leading and trailing whitespace removed- findstring
%(findstring SEARCH, HAYSTACK)will evaluate to SEARCH if HAYSTACK contains SEARCH, otherwise it evaluates to the empty string. (similar to make’s$(findstring find,in))- ifndef
%(ifndef DEFINE, IF_NOT_DEFINED)will evaluate to IF_NOT_DEFINED in case DEFINE is not a known define, otherwise to the value of DEFINE:
defines
known_define: 42
message: answer is %(ifndef "known_define", "unknown")!
%(message) will evaluate to answer is 42!.
This is a string-evaluation function. It is separate from the line-level config syntax
ifdef SOME_DEFINE: key: value/ifndef SOME_DEFINE: key: valuedescribed in conditional config lines: ifdef and ifndef.
- ifexists
%(ifexists PATHNAME, IF_TRUE, IF_FALSE)checks if PATHNAME exists on manager’s filesystem and evaluates to either IF_TRUE or IF_FALSE. (uses the python functionos.path.exists())- get_port_from_string
%(get_port_from_string ARGS...)will evaluate to a fixed port number between 1024 and 65535, depending on the value of ARGS….- get_host_ifip
%(get_host_ifip NODENAME, IFNAME)will evaluate to the ip-address of named node (can be a node-name or a host-name) and interface. example:
hosts
host1: eth0:192.168.0.1, eth1:192.168.1.1
host2: eth0:192.168.0.2, eth1:192.168.1.2
node_map
rthost: host2
defines
ip10: %(get_host_ifip "host1", "eth0")
# -> 192.168.0.1
ip21: %(get_host_ifip "rthost", "eth1")
# -> 192.168.1.2
3.1.3. runtime-variables
aside from the above %()-defines which are substituted when the config file is read, there are also some so-called
runtime-variables of the form $(NAME). these are substituted only shortly before the command is executed and they
can only be use in some contexts: in the command:-string of a process or within a value of an environment:-variable.
these runtime-variables exist:
$(ARCH)some string describing this hosts architecture. provided by the ln_daemon running on that host. can be configured via the
arch:key in a hosts-line.$(gui_*)some environment variable from (a possible remote) ln_manager gui. only selected env-vars are available.
$(DISPLAY)$(XAUTHORITY)values of the corresponding env-vars of the remote-gui or local manager gui. you probably want to use the forward_x11-flag instead.
$(gui_ip)ip-address of a connected remote gui.
$(manager_host)host-part of the instance-config
manager:directive. This is usually empty in portable configs; you probably want to use$(LN_MANAGER)instead.$(manager_port)listening port of the ln-manager (on the host where the manager is running). you probably want to use
$(LN_MANAGER)instead.$(LN_MANAGER)computed
ip-address:portwhere to reach this ln_manager. this is usually automatically provided to all processes via theLN_MANAGERenvironment-variable.