mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-16 17:15:55 +01:00
Add support to define macros as environment variables
Define and macro by setting as environment variable: EJABBERD_MACRO_ + macro name For example, if you configure in ejabberd.yml: define_macro: LOGLEVEL: 4 loglevel: LOGLEVEL You can define (and overwrite) that macro definition when starting ejabberd: EJABBERD_MACRO_LOGLEVEL=5 make relive
This commit is contained in:
parent
c72ba1f188
commit
39e37b6175
38
CONTAINER.md
38
CONTAINER.md
@ -234,6 +234,30 @@ Example usage (or check the [full example](#customized-example)):
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Macros in environment
|
||||||
|
|
||||||
|
ejabberd reads `EJABBERD_MACRO_*` environment variables
|
||||||
|
and uses them to define the `*`
|
||||||
|
[macros](https://docs.ejabberd.im/admin/configuration/file-format/#macros-in-configuration-file),
|
||||||
|
overwriting the corresponding macro definition if it was set in the configuration file.
|
||||||
|
|
||||||
|
For example, if you configure this in `ejabberd.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
acl:
|
||||||
|
admin:
|
||||||
|
user: ADMINJID
|
||||||
|
```
|
||||||
|
|
||||||
|
now you can define the admin account JID using an environment variable:
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- EJABBERD_MACRO_ADMINJID=admin@localhost
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the [full example](#customized-example) for other example.
|
||||||
|
|
||||||
|
|
||||||
### Clustering
|
### Clustering
|
||||||
|
|
||||||
When setting several containers to form a
|
When setting several containers to form a
|
||||||
@ -371,6 +395,7 @@ docker-compose up
|
|||||||
|
|
||||||
This example shows the usage of several customizations:
|
This example shows the usage of several customizations:
|
||||||
it uses a local configuration file,
|
it uses a local configuration file,
|
||||||
|
defines a configuration macro using an environment variable,
|
||||||
stores the mnesia database in a local path,
|
stores the mnesia database in a local path,
|
||||||
registers an account when it's created,
|
registers an account when it's created,
|
||||||
and checks the number of registered accounts every time it's started.
|
and checks the number of registered accounts every time it's started.
|
||||||
@ -381,6 +406,14 @@ wget https://raw.githubusercontent.com/processone/ejabberd/master/ejabberd.yml.e
|
|||||||
mv ejabberd.yml.example ejabberd.yml
|
mv ejabberd.yml.example ejabberd.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Use a macro in `ejabberd.yml` to set the served vhost, with `localhost` as default value:
|
||||||
|
```bash
|
||||||
|
define_macro:
|
||||||
|
XMPPHOST: localhost
|
||||||
|
hosts:
|
||||||
|
- XMPPHOST
|
||||||
|
```
|
||||||
|
|
||||||
Create the database directory and allow the container access to it:
|
Create the database directory and allow the container access to it:
|
||||||
```bash
|
```bash
|
||||||
mkdir database
|
mkdir database
|
||||||
@ -397,8 +430,9 @@ services:
|
|||||||
image: ghcr.io/processone/ejabberd
|
image: ghcr.io/processone/ejabberd
|
||||||
container_name: ejabberd
|
container_name: ejabberd
|
||||||
environment:
|
environment:
|
||||||
- CTL_ON_CREATE=register admin localhost asd
|
- EJABBERD_MACRO_XMPPHOST=example.com
|
||||||
- CTL_ON_START=registered_users localhost ;
|
- CTL_ON_CREATE=register admin example.com asd
|
||||||
|
- CTL_ON_START=registered_users example.com ;
|
||||||
status
|
status
|
||||||
ports:
|
ports:
|
||||||
- "5222:5222"
|
- "5222:5222"
|
||||||
|
2
mix.exs
2
mix.exs
@ -145,7 +145,7 @@ defmodule Ejabberd.MixProject do
|
|||||||
{:pkix, "~> 1.0"},
|
{:pkix, "~> 1.0"},
|
||||||
{:stringprep, ">= 1.0.26"},
|
{:stringprep, ">= 1.0.26"},
|
||||||
{:xmpp, "~> 1.9"},
|
{:xmpp, "~> 1.9"},
|
||||||
{:yconf, "~> 1.0"}]
|
{:yconf, git: "https://github.com/processone/yconf.git", ref: "9898754f16cbd4585a1c2061d72fa441ecb2e938", override: true}]
|
||||||
++ cond_deps()
|
++ cond_deps()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
2
mix.lock
2
mix.lock
@ -35,5 +35,5 @@
|
|||||||
"stun": {:hex, :stun, "1.2.15", "eec510af6509201ff97f1f2c87b7977c833bf29c04e985383370ec21f04e4ccf", [:rebar3], [{:fast_tls, "1.1.22", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.26", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "f6d8a541a29fd13f2ce658b676c0cc661262b96e045b52def1644b75ebc0edef"},
|
"stun": {:hex, :stun, "1.2.15", "eec510af6509201ff97f1f2c87b7977c833bf29c04e985383370ec21f04e4ccf", [:rebar3], [{:fast_tls, "1.1.22", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.26", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "f6d8a541a29fd13f2ce658b676c0cc661262b96e045b52def1644b75ebc0edef"},
|
||||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
|
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
|
||||||
"xmpp": {:hex, :xmpp, "1.9.0", "d92446bf51d36adda02db63b963fe6d4a1ede33e59b38a43d9b90afd20c25b74", [:rebar3], [{:ezlib, "~> 1.0.12", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "~> 1.1.19", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "~> 1.1.51", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "~> 6.0", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "~> 1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "~> 1.0.29", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "c1b91be74a9a9503afa6766f756477516920ffbfeea0c260c2fa171355f53c27"},
|
"xmpp": {:hex, :xmpp, "1.9.0", "d92446bf51d36adda02db63b963fe6d4a1ede33e59b38a43d9b90afd20c25b74", [:rebar3], [{:ezlib, "~> 1.0.12", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "~> 1.1.19", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "~> 1.1.51", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "~> 6.0", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "~> 1.0.25", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "~> 1.0.29", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "c1b91be74a9a9503afa6766f756477516920ffbfeea0c260c2fa171355f53c27"},
|
||||||
"yconf": {:hex, :yconf, "1.0.16", "d59521d66ff89f219411b6e9277cd6feec7cc6fce11554e67de02a8d0a470479", [:rebar3], [{:fast_yaml, "1.0.37", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "e947813273f38711c7b2e5a8e4acc9a51c7bbe854f744a345f60300b38586c89"},
|
"yconf": {:git, "https://github.com/processone/yconf.git", "9898754f16cbd4585a1c2061d72fa441ecb2e938", [ref: "9898754f16cbd4585a1c2061d72fa441ecb2e938"]},
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@
|
|||||||
{if_var_true, stun,
|
{if_var_true, stun,
|
||||||
{stun, "~> 1.2.12", {git, "https://github.com/processone/stun", {tag, "1.2.15"}}}},
|
{stun, "~> 1.2.12", {git, "https://github.com/processone/stun", {tag, "1.2.15"}}}},
|
||||||
{xmpp, "~> 1.9.0", {git, "https://github.com/processone/xmpp", {tag, "1.9.0"}}},
|
{xmpp, "~> 1.9.0", {git, "https://github.com/processone/xmpp", {tag, "1.9.0"}}},
|
||||||
{yconf, "~> 1.0.15", {git, "https://github.com/processone/yconf", {tag, "1.0.16"}}}
|
{yconf, ".*", {git, "https://github.com/processone/yconf", "9898754f16cbd4585a1c2061d72fa441ecb2e938"}}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
{gitonly_deps, [ejabberd_po]}.
|
{gitonly_deps, [ejabberd_po]}.
|
||||||
|
11
rebar.lock
11
rebar.lock
@ -25,7 +25,10 @@
|
|||||||
{<<"stun">>,{pkg,<<"stun">>,<<"1.2.15">>},0},
|
{<<"stun">>,{pkg,<<"stun">>,<<"1.2.15">>},0},
|
||||||
{<<"unicode_util_compat">>,{pkg,<<"unicode_util_compat">>,<<"0.7.0">>},1},
|
{<<"unicode_util_compat">>,{pkg,<<"unicode_util_compat">>,<<"0.7.0">>},1},
|
||||||
{<<"xmpp">>,{pkg,<<"xmpp">>,<<"1.9.0">>},0},
|
{<<"xmpp">>,{pkg,<<"xmpp">>,<<"1.9.0">>},0},
|
||||||
{<<"yconf">>,{pkg,<<"yconf">>,<<"1.0.16">>},0}]}.
|
{<<"yconf">>,
|
||||||
|
{git,"https://github.com/processone/yconf",
|
||||||
|
{ref,"9898754f16cbd4585a1c2061d72fa441ecb2e938"}},
|
||||||
|
0}]}.
|
||||||
[
|
[
|
||||||
{pkg_hash,[
|
{pkg_hash,[
|
||||||
{<<"base64url">>, <<"F8C7F2DA04CA9A5D0F5F50258F055E1D699F0E8BF4CFDB30B750865368403CF6">>},
|
{<<"base64url">>, <<"F8C7F2DA04CA9A5D0F5F50258F055E1D699F0E8BF4CFDB30B750865368403CF6">>},
|
||||||
@ -53,8 +56,7 @@
|
|||||||
{<<"stringprep">>, <<"46CF0FF631B3E7328F61F20B454D59428D87738F25D709798B5DCBB9B83C23F1">>},
|
{<<"stringprep">>, <<"46CF0FF631B3E7328F61F20B454D59428D87738F25D709798B5DCBB9B83C23F1">>},
|
||||||
{<<"stun">>, <<"EEC510AF6509201FF97F1F2C87B7977C833BF29C04E985383370EC21F04E4CCF">>},
|
{<<"stun">>, <<"EEC510AF6509201FF97F1F2C87B7977C833BF29C04E985383370EC21F04E4CCF">>},
|
||||||
{<<"unicode_util_compat">>, <<"BC84380C9AB48177092F43AC89E4DFA2C6D62B40B8BD132B1059ECC7232F9A78">>},
|
{<<"unicode_util_compat">>, <<"BC84380C9AB48177092F43AC89E4DFA2C6D62B40B8BD132B1059ECC7232F9A78">>},
|
||||||
{<<"xmpp">>, <<"D92446BF51D36ADDA02DB63B963FE6D4A1EDE33E59B38A43D9B90AFD20C25B74">>},
|
{<<"xmpp">>, <<"D92446BF51D36ADDA02DB63B963FE6D4A1EDE33E59B38A43D9B90AFD20C25B74">>}]},
|
||||||
{<<"yconf">>, <<"D59521D66FF89F219411B6E9277CD6FEEC7CC6FCE11554E67DE02A8D0A470479">>}]},
|
|
||||||
{pkg_hash_ext,[
|
{pkg_hash_ext,[
|
||||||
{<<"base64url">>, <<"F9B3ADD4731A02A9B0410398B475B33E7566A695365237A6BDEE1BB447719F5C">>},
|
{<<"base64url">>, <<"F9B3ADD4731A02A9B0410398B475B33E7566A695365237A6BDEE1BB447719F5C">>},
|
||||||
{<<"cache_tab">>, <<"8582B60A4A09B247EF86355BA9E07FCE9E11EDC0345A775C9171F971C72B6351">>},
|
{<<"cache_tab">>, <<"8582B60A4A09B247EF86355BA9E07FCE9E11EDC0345A775C9171F971C72B6351">>},
|
||||||
@ -81,6 +83,5 @@
|
|||||||
{<<"stringprep">>, <<"F6FC9B3384A03877830F89B2F38580CAF3F4A27448A4A333D6A8C3975C220B9A">>},
|
{<<"stringprep">>, <<"F6FC9B3384A03877830F89B2F38580CAF3F4A27448A4A333D6A8C3975C220B9A">>},
|
||||||
{<<"stun">>, <<"F6D8A541A29FD13F2CE658B676C0CC661262B96E045B52DEF1644B75EBC0EDEF">>},
|
{<<"stun">>, <<"F6D8A541A29FD13F2CE658B676C0CC661262B96E045B52DEF1644B75EBC0EDEF">>},
|
||||||
{<<"unicode_util_compat">>, <<"25EEE6D67DF61960CF6A794239566599B09E17E668D3700247BC498638152521">>},
|
{<<"unicode_util_compat">>, <<"25EEE6D67DF61960CF6A794239566599B09E17E668D3700247BC498638152521">>},
|
||||||
{<<"xmpp">>, <<"C1B91BE74A9A9503AFA6766F756477516920FFBFEEA0C260C2FA171355F53C27">>},
|
{<<"xmpp">>, <<"C1B91BE74A9A9503AFA6766F756477516920FFBFEEA0C260C2FA171355F53C27">>}]}
|
||||||
{<<"yconf">>, <<"E947813273F38711C7B2E5A8E4ACC9A51C7BBE854F744A345F60300B38586C89">>}]}
|
|
||||||
].
|
].
|
||||||
|
@ -516,8 +516,23 @@ read_file(File, Opts) ->
|
|||||||
Err
|
Err
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
get_additional_macros() ->
|
||||||
|
MacroStrings = lists:foldl(fun([$E, $J, $A, $B, $B, $E, $R, $D, $_, $M, $A, $C, $R, $O, $_ | MacroString], Acc) ->
|
||||||
|
[parse_macro_string(MacroString) | Acc];
|
||||||
|
(_, Acc) ->
|
||||||
|
Acc
|
||||||
|
end,
|
||||||
|
[],
|
||||||
|
os:getenv()),
|
||||||
|
{additional_macros, MacroStrings}.
|
||||||
|
|
||||||
|
parse_macro_string(MacroString) ->
|
||||||
|
[NameString, ValueString] = string:split(MacroString, "="),
|
||||||
|
{ok, [ValueDecoded]} = fast_yaml:decode(ValueString, [plain_as_atom]),
|
||||||
|
{list_to_atom(NameString), ValueDecoded}.
|
||||||
|
|
||||||
read_yaml_files(Files, Opts) ->
|
read_yaml_files(Files, Opts) ->
|
||||||
ParseOpts = [plain_as_atom | lists:flatten(Opts)],
|
ParseOpts = [plain_as_atom, get_additional_macros() | lists:flatten(Opts)],
|
||||||
lists:foldl(
|
lists:foldl(
|
||||||
fun(File, {ok, Y1}) ->
|
fun(File, {ok, Y1}) ->
|
||||||
case econf:parse(File, #{'_' => econf:any()}, ParseOpts) of
|
case econf:parse(File, #{'_' => econf:any()}, ParseOpts) of
|
||||||
|
Loading…
Reference in New Issue
Block a user