This repository has been archived by the owner on Oct 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 123
/
METADATA.ini
1263 lines (1020 loc) · 33.4 KB
/
METADATA.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#
# SpecElektra is a specification language that describes content
# of KDB (the global key database).
#
# Put simply, SpecElektra (i.e. configuration in the spec: namespace)
# allows you to describe how the configuration of the system looks
# like. For example, it allows you to describe which configuration
# files in which formats are present on the system.
#
# SpecElektra does not have built-in keywords, instead it is
# completely extensible by metadata interpreted by Elektra's plugins.
#
# Any of Elektra's supported configuration formats that are able
# to write metadata can be used for SpecElektra.
#
#
# This document describes all metadata and specification values available
# in SpecElektra.
#
# If your plugin/tool/API uses metadata, please add it here.
#
# Some parts of this file are already used by tools:
#
# 1. It can be mounted with the ni plugin, see scripts/mount-info
# 2. It is checked for consistency with contracts of plugins, see
# tests/shell/check_meta.sh
#
#
# METADATA.ini meta-specification (description how to parse/use this file):
#
# [the name of the metakey]
# type = (<CORBA type>|enum <enum>|regex <regular expression>) the type of the metavalue
# status = (implemented|proposed|idea|deprecated|unclear) the current state of this metadata entry
# usedby/api = the API methods which use the metakey (space separated)
# usedby/plugin = the plugins which use the metakey (space separated)
# usedby/tool = the tools which use the metakey (space separated)
# description = explains what the metadata is about
# note = give additional notes for that metakey
# example = give additional examples how the metakey might look like
#
# Nearly all of the metadata is automatically used by `spec-mount` thus
# `spec-mount` is not listed in usedby/tool.
#
#
#
# To mount this file you can use:
#
# kdb mount-info
#
# and keys will be below:
#
# kdb export system:/info/elektra/metadata/#0
#
# for example, to get the type of type:
#
# kdb meta-get system:/info/elektra/metadata/#0/type type
#
# Note that the ni plugin does not preserve comments nor order,
# so it is not suitable to write to this file.
#
[]
filename = METADATA.ini
version/major = 0
version/minor = 6
#
# Important metadata often used in configuration files
# and not used in specifications.
#
[order]
type = long
status = implemented
usedby/plugin = hosts augeas toml
usedby/api = elektraKeyCmpOrder
description = "Relative order in the KeySet if non-alphabetical order
is needed. This metadata is only to preserve order as found in
the file. It is an hint to allow complete reconstruction as it
was before.
Keys without order metadata or keys with same order, yield
implementation-defined ordering.
When some knowledge about desired ordering exists, e.g. when
key sets are merged, the keys should to be reordered to avoid
this."
note = "This will rarely used within specifications, but is directly
derived from configuration files.
I.e. only storage plugins set and get this property."
[comment/#]
status = implemented
usedby/plugin = hosts
type = string
description = "A comment preceding or in-line with a key.
- #0 is the inline comment (in the same line).
- The comment numbering starts from top (#1) to bottom (#n).
- The comment directly above the key is the last entry in the array (#n).
- The topmost comment belonging to the key is (#1).
Comment keys that are not above any key (comments in the last
lines of files) are added to the parentkey.
The array of comments allows:
- to structure comments, which are not line-based
- to restore formatting, including:
- inline comments
- spaces before comments
- empty lines
- to distinguish between different kinds of comments
- to tag every comment, which increases extensibility
The plugin need to take care that only valid characters are
present in the comment.
E.g. on line-based comments, no newlines must be present."
note = "If used within specifications it refers to the specification, not
the key. Use `description` to refer to the key."
[comment/#/start]
status= implemented
usedby/plugin= hosts
type= string
description= "Determines the character(s) used to start this comment.
This metakey is empty if its an empty line/comment.
The default on absence of this key is plugin-specific.
Some comment start character should be assumed then.
The plugin needs to make sure that every comment is actually
commented out. An error needs to be emitted if there is no
start symbol that will be recognized as comment."
example= ;
[comment/#/space]
status= implemented
usedby/plugin= hosts
type= string
description="The spaces/tabs used between a comment and the beginning of the
line or after end of payload data (for inline comments).
If no start key is present, only space and no comment is present.
The plugin needs to make sure that all spaces present are allowed.
An error needs to be emitted if non-ignored spaces are present."
example=
[internal/<plugin>/*]
status= implemented
usedby/plugin=
description="Internal metadata that must be ignored by other plugins.
It is useful for reconstruction of information about keys between
kdbGet and kdbSet.
Always avoid to use it if there is any other metadata that
can be used instead.
For example, if a type can be represented with the CORBA
type system, metadata `type` should be used.
Only if a type cannot be represented, e.g., the `toml`
plugin would use `internal/toml/type`."
#
# Needed for specification of key access (ksLookup by spec)
#
[fallback/#]
type=key name
status=implemented
usedby/api= ksLookup
description="When a key was looked up unsuccessfully, keys in this
array will be tried instead."
[override/#]
type=key name
usedby/api= ksLookup
status=implemented
description=Keys in this array will be preferred over the key itself
[namespace/#]
type=namespace
status=implemented
usedby/api= ksLookup
description="Typically all namespaces are cascaded one after the other
in the built-in order.
Using this metadata you can avoid that some namespaces are used or
can change the order."
[default]
usedby/tool = ksLookup web
status = implemented
usedby/api = ksLookup
description = "The default value will be used if no other value could
be found.
Make sure for your application that the default is sane and secure."
[context]
status=implemented
usedby/api=getenv
description="use /env/layer and internal information to facilitate
a context-aware lookup"
[callback/_]
status=reserved
usedby/tool=kdb
usedby/api=getenv
description="reserved meta information that will be preserved during the whole
chain of ksLookup() callback calls"
#
# Basic information about keys
#
[type]
type= "enum
short
unsigned_short
long
unsigned_long
long_long
unsigned_long_long
float
double
long_double
char
boolean
octet
any
string"
status= implemented
usedby/plugin= range type
description="Defines the type of the value, as specified in CORBA
Unlike check/type, type is also used for code generation and within the APIs.
The range plugin uses type as fallback, if check/type is not specified."
example= any
[array]
type = array-index
status = implemented
description = "Array keys have only keys conforming to Elektra’s arrays convention as subkeys.
Within specifications, it means that the key is an array.
Outside of specifications:
If the metavalue is empty, the array is empty (no subkeys).
Otherwise the metavalue contains the last element.
See also doc/tutorials/arrays.md"
example = #5
#
# Needed for mounting by specification
#
[mountpoint]
type = string
status = implemented
usedby/tool = mount-spec
description = "Indicates that the key represents a mount point.
The value is the filename that should be used for the configuration file
defined by the specification."
example = default.ecf
[infos]
type= string
status= implemented
usedby/tool= mount-spec
description= "infos about the mount point
See CONTRACT.ini for individual infos (usedby is tagged with spec).
hint of application developer that the key actually needs
a specific plugin (that cannot be derived by other metadata)
"needs" means that it is semantically absolutely necessary and
required that such a plugin exists.
Without the plugin the application might break.
If the plugin is optional and only nice to have, use recommends
instead."
note= "It is generally preferred that other metadata will be used to
deduce the needs of the specification, e.g. use check/validation
metadata instead of as given above."
[config/needs]
type= string
status= implemented
description= "indicate that the mount point needs some
configuration for plugins in order to work.
See CONTRACT.ini for details."
#
# Needed for specification of command line options and environment variables
#
[args]
type= "enum
remaining
indexed"
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "collect the remaining command line arguments.
must be set on an array key (basename = '#'), if 'remaining' is used
must be specified on a key in the 'spec' namespace"
[args/index]
type= long
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "the index to use for 'args = indexed'
must be specified on a key in the 'spec' namespace"
[command]
type= string
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "introduces a sub-command
must be specified on a key in the 'spec' namespace"
[opt]
type= char
status= implemented
usedby/tool= gen
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set a short command line option for this key.
Per default an option is required, to have an argument.
short options will be preferred over long options and
environment variables
an option can only be specified on a single key
if the key with this metadata is an array (basename = '#'),
the option can be repeated an all occurrences will be
collected into the given array
must be specified on a key in the 'spec' namespace"
[opt/long]
type= string
status= implemented
usedby/tool= gen
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set a long command line option for this key.
Per default an option is required, to have an argument.
short options will be preferred over long options;
long options will be preferred over environment variables
an option can only be specified on a single key
if the key with this metadata is an array (basename = '#'),
the option can be repeated an all occurrences will be
collected into the given array
must be specified on a key in the 'spec' namespace"
[opt/arg]
type= "enum
required
optional
none"
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set the argument mode of this option;
will be ignored, if neither 'opt' nor 'opt/long' are set
if set to 'optional' only long options using the '--name=value'
syntax can be used to specify an argument, all other kinds
of options behave as if 'none' were set
if set to 'none' the key will be set to \"1\" or 'opt/flagvalue'
must be specified on a key in the 'spec' namespace"
[opt/flagvalue]
type= string
status= implemented
usedby/plugin= gopts
useby/api= elektraGetOpts kdbopts.h
description= "set the flag-value of this option
will be ignored, if neither 'opt' nor 'opt/long' are set
'opt/arg' must be set to 'none' or 'optional', if the option
does not have an argument instead of the default \"1\" the
given value will be used
must be specified on a key in the 'spec' namespace"
[opt/help]
type= string
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set the help message for this key
will be ignored, if neither 'opt' nor 'opt/long' are set
overrides the 'description' metadata
must be specified on a key in the 'spec' namespace"
[opt/hidden]
type= string
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "hides this option from the help message, if set to 1
will be ignored, if neither 'opt' nor 'opt/long' are set
must be specified on a key in the 'spec' namespace"
[opt/#]
type= char
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set multiple short command line options for this key.
only one of these options can be used at the same time
otherwise the same as 'opt'"
[opt/#/long]
type= string
status= implemented
usedby/tool= gen
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set a long command line option for this key.
only one of these options can be used at the same time
otherwise the same as 'opt/long'"
[opt/#/arg]
type= "enum
required
optional
none"
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set the argument mode for option at index #
will be ignored, if neither 'opt/#' nor 'opt/#/long' are set for
the same index
otherwise the same as 'opt/arg'"
[opt/#/flagvalue]
type= string
status= implemented
usedby/plugin= gopts
useby/api= elektraGetOpts kdbopts.h
description= "set the flag-value for option at index #
will be ignored, if neither 'opt/#' nor 'opt/#/long' are set for
the same index
otherwise the same as 'opt/flagvalue'"
[opt/#/hidden]
type= string
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "hides option at index # from the help message, if set to 1
will be ignored, if neither 'opt' nor 'opt/long' are set
must be specified on a key in the 'spec' namespace"
[env]
type= regex [^=]+
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set an environment variable for this key.
the value of the given environment variable will be
assigned to this key.
short and long options will be preferred over environment
variables
environment variables can only be specified on a single key
if the key with this metadata is an array (basename = '#'),
the environment variable's value will be split at the character
';' on Windows and at ':' on any other OS and the result is
collected into the given array
must be specified on a key in the 'spec' namespace"
[env/#]
type= regex [^=]+
status= implemented
usedby/plugin= gopts
usedby/api= elektraGetOpts kdbopts.h
description= "set multiple environment variables for this key.
only one of these variables can be used at the same time.
otherwise the same as 'env'"
#
# Needed for documentation
#
[see/#]
status= implemented
description = "Pointer to other configuration settings which should also
be considered to be changed if this configuration setting is changed."
usedby/tool= gen
[rationale]
status= idea
description= "Information why this configuration setting exists
and in which scenarios it should be considered to be removed"
[requirement]
status= idea
description= "Information based on which requirement the configuration
setting exists. Gives hints when to reevaluate the configuration
setting."
[description]
usedby/tool = web
usedby/plugin = getopts
usedby/api = elektraGetOpts kdbopts.h
description = "This is information provided from the developer/maintainer
for administrators.
It is not written directly in the configuration files but is instead
in the spec: namespace.
elektraGetOpts and the getopts plugin use this information in the help
message, if 'opt/help' is not provided."
note = For information in other namespaces, use `comment/#` instead.
[example]
usedby/tool = web
description = "It is always good to have an example.
The example is only for documentation unlike the default
which will be used if nothing else is given.
Make sure that using all the examples give an overall
valid configuration."
#
# Information about the key's name
#
[rename/toupper]
type = string
status = implemented
usedby/plugin = rename
description = rename key name to uppercase
[rename/tolower]
type= string
status= implemented
usedby/plugin= rename
description=rename key name to lowercase
[rename/cut]
type= string
status= implemented
usedby/plugin= rename
description=cut out a common name
[rename/to]
type= string
status= implemented
usedby/plugin= rename
description=use a different name instead of the cut out name
[origname]
type= string
status= implemented
usedby/plugin= rename
description= "stores the original name of the key as it was before the
rename operation"
#
# Spec Plugin
#
[conflict/get/member]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for member conflicts in kdbGet, see spec plugin README
[conflict/get/invalid]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for invalid conflicts in kdbGet, see spec plugin README
[conflict/get/count]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for count conflicts in kdbGet, see spec plugin README
[conflict/get/collision]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for collision conflicts in kdbGet, see spec plugin README
[conflict/get/missing]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for missing key conflicts in kdbGet, see spec plugin README
[conflict/get/range]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for range conflicts in kdbGet, see spec plugin README
[conflict/set/member]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for member conflicts in kdbSet, see spec plugin README
[conflict/set/invalid]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for invalid conflicts in kdbSet, see spec plugin README
[conflict/set/count]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for count conflicts in kdbSet, see spec plugin README
[conflict/set/collision]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for collision conflicts in kdbSet, see spec plugin README
[conflict/set/missing]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for missing key conflicts in kdbSet, see spec plugin README
[conflict/set/range]
type = "enum
ERROR
WARNING
INFO"
status = implemented
description = sets the conflict handling for range conflicts in kdbSet, see spec plugin README
[array/min]
type = array-index
status = implemented
description = Sets the minimum element of an array. See also spec plugin README.
example = #1
[array/max]
type = array-index
status = implemented
description = Sets the maximum element of an array. See also spec plugin README.
example = #_10
[require]
type = empty
status = implemented
usedby/pluign = spec
description = "Requires the key to be present. See also spec plugin README.
Cannot be used together with `default`.
If possible, prefer `default`, as it is more user-friendly."
note = "Used to be called `required`.
Not to be confused to `required` for `opt/arg`."
#
# Error and Warnings
#
[error]
status = implemented
description = an error, see doc/dev/error-handling.md
[warnings/#]
status = implemented
description = a number of warnings, see doc/dev/error-handling.md
#
# Validation/Checks about the key's value
#
[check/type]
type= "enum
short
unsigned_short
long
unsigned_long
long_long
unsigned_long_long
float
double
long_double
char
boolean
octet
any
empty
FSType
string"
status= implemented
usedby/plugin= range type
usedby/tool = web
description= "defines the type of the value, as specified in CORBA
(except of 2: wchar, wstring; and 4 additions: any, empty, FSType, string).
enum is implemented by check/enum/#
FSType is deprecated
Unlike type, check/type is *only* used for validation.
Tools with support for `check/type`, should also always check for `type`.
The type plugin prefers `check/type` if it is present.
The range plugin uses type as fallback, if check/type is not specified."
example = any
[check/range]
status= implemented
usedby/plugin= range
usedby/tool = web
description= range checks, from-to, multiple ranges are separated by a comma
example= -1-4,6-10
[check/math]
type= string
status = implemented
usedby/plugin= mathcheck
description= check if value conforms to mathematical expression
[check/email]
type= string
status = implemented
usedby/plugin= email
description= check if the given email address is valid based on regular expression
[check/ipaddr]
type= "enum
ipv4
ipv6"
status = implemented
usedby/plugin= network ipaddr
description= "check if value resolves correctly to an ipaddr
empty value uses either ipv4 or ipv6"
[check/port]
type= string
status = implemented
usedby/plugin= network
description= "check if the given port is either a service under /etc/services or
is between 0 - 65535 (both inclusive)"
[check/port/listen]
type= string
status = implemented
usedby/plugin= network
description= "check if the given port is either a service under /etc/services or
is between 0 - 65535 (both inclusive) and is unused so that potential
applications can start with that port"
[check/format]
type= string
status= idea
description= defines the format of the value
[check/path]
status= implemented
usedby/plugin= path
description= defines which file (path) the value refers to
[check/validation]
status= implemented
usedby/plugin= validation
usedby/tool = web
type= regular expression
description= a regular expression to check against
[check/validation/message]
status= implemented
usedby/plugin= validation
usedby/tool = web
description= the message added to the error if validation fails
[check/validation/match]
status= implemented
usedby/plugin= validation
description= if it should be matched against LINE or WORD
[check/validation/ignorecase]
status= implemented
usedby/plugin= validation
description= to ignore case when matching
[check/validation/invert]
status= implemented
usedby/plugin= validation
description= to invert match
[check/validation/type]
type="enum
ERE
BRE"
status= deprecated
usedby/plugin= validation
description= type of match, to toggle REG_EXTENDED
[check/enum]
status=deprecated
usedby/plugin= enum type
description= List of apostrophe enclosed values separated by
commas to check against.
Please use check/enum/# instead.
[check/enum/#]
status= implemented
usedby/plugin= enum type
usedby/tool = web
description= "An array with different enum values to be used
instead of check/enum"
[check/enum/multi]
status= implemented
usedby/plugin= enum
type= char
description= "Specifies if multiple, but different, strings are allowed
within a value. The character given within this metavalue
is the separator."
example= _
[check/enum/delimiter]
status= implemented
usedby/plugin= type
type= char
description= "Specifies if multiple, but different, strings are allowed
within a value. The character given within this metavalue
is the separator."
example= _
[check/path/mode]
status= implemented
usedby/plugin= path
type= "enum
r
w
x
rw
rx
wx
rwx"
description= "A check to see if a certain user has correct permissions on a file. Permissions are
either r (read) w (write) x (execute) and any combination of them. Whereas check/path only
checks for the existence of a given path, check/path/mode also tests for the right permissions.
If check/path is not given, check/path/mode will be ignored.
The respective user which must have these permissions is declared in check/path/user.
If no user is given in check/path/user (simply an empty string), the current user is taken to check for
permissions. The plugin only checks if `r`, `w` or `x` is present and ignores all other characters."
example = rwx
[check/path/user]
status= implemented
usedby/plugin= path
type= "string
empty"
description= "Used by check/path to see if the given user has the correct permissions. If empty
it takes the current user."
[check/calculate]
status= implemented
usedby/plugin= calculate
type= string
description= "A string starting with a logical comparator symbol
followed by a Polish prefix notation to calculate a value
to check against."
[check/condition]
status= implemented
usedby/plugin= conditionals
type= string
description= "A ternary conditional style operator to define
relations between keys"
[check/condition/any/#]
status= implemented
usedby/plugin= conditionals
type= string
description= An array of multiple condition statements
[check/condition/all/#]
status= implemented
usedby/plugin= conditionals
type= string
description= An array of multiple condition statements
[check/condition/none/#]
status= implemented
usedby/plugin= conditionals
type= string
description= An array of multiple condition statements
[condition/validsuffix]
status= implemented
usedby/plugin= conditionals
type= string
description= A unit of measure style prefix
[assign/condition]
status= implemented
usedby/plugin= conditionals
type= string
description= "A ternary conditional style operator to assign
a value depending on a condition"
[assign/condition/#]
status= implemented
usedby/plugin = conditionals
type= string
descriptions= Array of assign/condition metadata
[check/date]