- infos = Information about the multifile plugin is in keys below
- infos/author = Thomas thoma.nosp@m.s.wa.nosp@m.ser@l.nosp@m.ibel.nosp@m.ektra.nosp@m..org
- infos/licence = BSD
- infos/needs =
- infos/provides = resolver storage
- infos/recommends =
- infos/placements = getresolver setresolver commit rollback getstorage setstorage
- infos/status = maintained conformant compatible specific shelltest tested configurable
- infos/metadata =
- infos/description = mounts multiple files within a directory
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
recursive: If present, fts (3) will be used to traverse the directory tree and fnmatch to match pattern to the filename. If not present, glob (3) with pattern will be used on the directory
pattern: The pattern to be used to match configuration files.
storage: The storage plugin to use.
resolver: The resolver plugin to use.
- 'child/<configname>': configuration passed to the child backends,
child/ part gets removed.
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)
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
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
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
16 sudo kdb mount -R multifile -c storage="ini",pattern="*.ini",resolver="resolver" multitest 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
29 kdb set user/multi/lan.ini/eth0/addr 10.0.0.2
31 kdb get user/multi/lan.ini/eth0/addr
34 echo '[testsection]' > ~/.config/multitest/test.ini
35 echo 'key = val' >> ~/.config/multitest/test.ini
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
50 kdb rm -r user/multi/test.ini
52 stat ~/.config/multifile/test.ini
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)
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
8 sudo kdb mount -R multifile -c storage="ini",pattern="*.file",recursive=,resolver="resolver" multitest 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
15 rm -rf ~/.config/multitest
17 sudo kdb umount user/multi
Limitations
- You cannot get rid of the configuration file name.