Elektra  0.8.20
Plugin: multifile

For some applications it is beneficially to have multiple configuration files. One way to achieve this, is to mount different files for the application.

In some situations we are not able to specify every configuration file with separate mounts because new configuration files might be created any time. Instead we want to include every configuration file matching a given pattern.

The multifile-resolver does so by calling resolver and storage plugins for each file matching a given pattern.

Plugin Configuration

Usage

kdb mount -R multifile -c storage="ini",pattern="*/*.ini",resolver="resolver" /path /mountpoint

kdb mount -R multifile -c storage="ini",pattern="*.ini",recursive=,resolver="resolver" /path /mountpoint

Examples

1 rm -rf ~/.config/multitest || $(exit 0)
2 mkdir -p ~/.config/multitest || $(exit 0)
3 
4 echo '[lo]' > ~/.config/multitest/lo.ini
5 echo 'addr = 127.0.0.1' >> ~/.config/multitest/lo.ini
6 echo 'Link encap = Loopback' >> ~/.config/multitest/lo.ini
7 
8 echo '[eth0]' > ~/.config/multitest/lan.ini
9 echo 'addr = 192.168.1.216' >> ~/.config/multitest/lan.ini
10 echo 'Link encap = Ethernet' >> ~/.config/multitest/lan.ini
11 
12 echo '[wlan0]' > ~/.config/multitest/wlan.ini
13 echo 'addr = 192.168.1.125' >> ~/.config/multitest/wlan.ini
14 echo 'Link encap = Ethernet' >> ~/.config/multitest/wlan.ini
15 
16 sudo kdb mount -R multifile -c storage="ini",pattern="*.ini",resolver="resolver" multitest user/multi
17 
18 kdb ls user/multi
19 #> user/multi/lan.ini/eth0
20 #> user/multi/lan.ini/eth0/Link encap
21 #> user/multi/lan.ini/eth0/addr
22 #> user/multi/lo.ini/lo
23 #> user/multi/lo.ini/lo/Link encap
24 #> user/multi/lo.ini/lo/addr
25 #> user/multi/wlan.ini/wlan0
26 #> user/multi/wlan.ini/wlan0/Link encap
27 #> user/multi/wlan.ini/wlan0/addr
28 
29 kdb set user/multi/lan.ini/eth0/addr 10.0.0.2
30 
31 kdb get user/multi/lan.ini/eth0/addr
32 #> 10.0.0.2
33 
34 echo '[testsection]' > ~/.config/multitest/test.ini
35 echo 'key = val' >> ~/.config/multitest/test.ini
36 
37 kdb ls user/multi
38 #> user/multi/lan.ini/eth0
39 #> user/multi/lan.ini/eth0/Link encap
40 #> user/multi/lan.ini/eth0/addr
41 #> user/multi/lo.ini/lo
42 #> user/multi/lo.ini/lo/Link encap
43 #> user/multi/lo.ini/lo/addr
44 #> user/multi/test.ini/testsection
45 #> user/multi/test.ini/testsection/key
46 #> user/multi/wlan.ini/wlan0
47 #> user/multi/wlan.ini/wlan0/Link encap
48 #> user/multi/wlan.ini/wlan0/addr
49 
50 kdb rm -r user/multi/test.ini
51 
52 stat ~/.config/multifile/test.ini
53 # RET:1
54 
55 sudo kdb umount user/multi

Recursive:

1 rm -rf ~/.config/multitest || $(exit 0)
2 mkdir -p ~/.config/multitest ~/.config/multitest/a/a1/a12 ~/.config/multitest/a/a2/a22 ~/.config/multitest/b/b1|| $(exit 0)
3 
4 echo "a1key = a1val" > ~/.config/multitest/a/a1/a12/testa1.file
5 echo "a2key = a2val" > ~/.config/multitest/a/a2/a22/testa2.file
6 echo "b1key = b1val" > ~/.config/multitest/b/b1/testb1.file
7 
8 sudo kdb mount -R multifile -c storage="ini",pattern="*.file",recursive=,resolver="resolver" multitest user/multi
9 
10 kdb ls user/multi
11 #> user/multi/a/a1/a12/testa1.file/a1key
12 #> user/multi/a/a2/a22/testa2.file/a2key
13 #> user/multi/b/b1/testb1.file/b1key
14 
15 rm -rf ~/.config/multitest
16 
17 sudo kdb umount user/multi

Limitations