Open dienummer opened 6 months ago
Oops. Ran into this issue also. I guess the hack/workaround is to create a script that writes a uniqe lnd.conf
for each deployment?
It's correct that the text about the env variable parameter expansion is a bit misleading. But it's actually only meant for the datadir
variable, not for the whole file. But any field that takes a directory or file path can use environment variables.
And any password field also allows expansion, although with a slightly extended syntax: https://github.com/lightningnetwork/lnd/pull/8310
So in short, anything that isn't a path/directory or password value doesn't support environment variable expansion.
Oops. Ran into this issue also. I guess the hack/workaround is to create a script that writes a uniqe lnd.conf for each deployment?
I would suggest using command line flags for the dynamic parts. You can mix a configuration file and command line flags, IIRC command line flags take precedence. So have everything general in the config file and then use node-specific values in flags, such as ports, paths and so on.
Background
sample-lnd.conf
contains the statement "Environment variables are expanded so they may be used" near the top of the file: https://github.com/lightningnetwork/lnd/blob/2b74a34301fe4a90b2b4f02b075bc93c938fe410/sample-lnd.conf#L24However, this is only true for path-type variables, which call
CleanAndExpandPath
when they are parsed: https://github.com/lightningnetwork/lnd/blob/7af195768aa3e06ec447615ce25dd32343d8bd59/config.go#L1749, and for the special case of the rpc user and rpc password, parsed bysupplyEnvValue
https://github.com/lightningnetwork/lnd/blob/7af195768aa3e06ec447615ce25dd32343d8bd59/config.go#L1951https://github.com/lightningnetwork/lnd/blob/7af195768aa3e06ec447615ce25dd32343d8bd59/config.go#L1831-L1834
It could be extremely important to allow env var substitution also for backend RPC hostname, ZMQ host and port, etc. when running in a container orchestration system or other professional setup.
In general, storing critical elements of the config in the environment is preferred (https://12factor.net/config)
Your environment
lnd
:v0.17.4-beta
uname -a
on *Nix)Linux ubuntu 6.8.0-22-generic #22-Ubuntu SMP PREEMPT_DYNAMIC Thu Apr 4 22:30:32 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
btcd
,bitcoind
, or other backend26.1
Steps to reproduce
N/A; see https://github.com/lightningnetwork/lnd/blob/7af195768aa3e06ec447615ce25dd32343d8bd59/config.go and in particular review lines https://github.com/lightningnetwork/lnd/blob/7af195768aa3e06ec447615ce25dd32343d8bd59/config.go#L927-L945 which are distinct from non-path type config settings (with the exception of RPCuser and RPCpass, which are the only other elements parsed from environment)
Expected behaviour
I expect env var expansion / substitution to work for all config settings so that I can more easily deploy LND in a professionally-managed container orchestration setup.
I would also expect that RPCUser and RPCPass config item env var expansion be documented.
Actual behaviour
Documentation suggests any config item could undergo variable expansion.
Only path-type vars, plus RPCUser and RPCPass undergo env var substitution.
Documentation does not mention that RPCUser and RPCPass undergo env var substitution.