Table of Contents
<TECHNIQUE id="technique_unique_id" name="human_name_of_the_technique"> <DESCRIPTION>Description of the Technique</DESCRIPTION> <LONG_DESCRIPTION>Long description of the technique</LONG_DESCRIPTION> <DEPRECATED>Deprecation message</DEPRECATED> <!-- Mark the Technique as deprecated, deprecation message is mandatory, Only available since Rudder 3.0 --> <DISPLAY>true/false</DISPLAY> <!-- Define if the Technique is displayed in the interface or not. Default value : true --> <COMPATIBLE> <!-- Optional, describe the version of the OS and CFEngine Agent the Technique has been tested on. Only for information purpose --> <OS version=">=2.5">OS Name</OS> <!-- Optional; OS Name and version on which the Technique has been tested --> <AGENT version=">=3.6">cfengine-community</AGENT> <!-- Optional; Agent name and version on which the Technique has been tested --> </COMPATIBLE> <MULTIINSTANCE>true/false</MULTIINSTANCE> <!-- Optional; defines if several instances of this template with differents variables can be deployed on a node; default value : false --> <SYSTEM>true/false</SYSTEM> <!-- Optional, defines if this Technique is a system Technique (internal Rudder usage); default value : false --> <BUNDLES> <!-- List of the bundles that must be included in the bundlesequence --> <NAME>BundleName</NAME> </BUNDLES> <TMLS> <!-- List of all the templates defined by this Technique --> <TML name="tmlName"> <!-- Container for a TML (without the trailing .st --> <OUTPATH>relativ/path/of/file</OUTPATH> <!-- Optional; defines the relative path for the generated file for this template; default : techniqueName/version/tmlName.cf --> <INCLUDED>true/false</INCLUDED> <!-- Optional; defines if the template must be in the inputs list of the generated promises; default : true --> </TML> </TMLS> <TRACKINGVARIABLE> <!-- Defines a special system variable TRACKINGKEY that contains all the necessary information to track which Directive generated the promises --> <SAMESIZEAS>VariableName</SAMESIZEAS> <!-- Optional; defines the cardinality of this variable based on the cardinality of the VariableName --> </TRACKINGVARIABLE> <SECTIONS> <!-- Lists all the sections of the promises --> <SECTION name="sectionName"> <!-- Container of a section (see below) --> </SECTION> </SECTIONS> </TECHNIQUE>
In a metadata.xml, there can be only one SECTIONS tag, that encloses one or several SECTION tags. A SECTION tag contains variables declaration and subsections. A SECTION can contains Variables definitions and SECTION.
<SECTION name="sectionName" multivalued="true/false" component="true/false" componentKey="variableName/None">
A SECTION has the following attributes:
- name : mandatory, the name of the section
- multivalued : optional, default false, defines if the section is repetable or not. If so, the Web Interface will display a "Add another" and "Delete" button for this section
- component : optional, default false; defines if the section is a component, and if true, the section will appear in the reporting, with its section name
- componentKey: optional, default None; defines the variable that is the key of the component. Note that the componentKey can only be defined if component is true
- displayPriority: optional, default high; defines if the section is displayed by default (high) or hidden by default (low)
Note | |
---|---|
A multivalued section can only contain variable, and cannot contain section |
Note | |
---|---|
If there are no SECTION defined with component="true", a default SECTION for reporting will be generated, named after the id of the Technique (the folder name of the Technique) |
There are three tags to create a variable:
- SELECT1: Can select only one value out of several. If there are less than 3 possible values, displays radio buttons, otherwise a select field.
- SELECT: Can select several values out of al the possibles. Displays checkboxes.
- INPUT: Displays an input field (that can be tuned)
<SELECT1/SELECT/INPUT> <!-- Depend on the display and behaviour needed --> <NAME>variableName</NAME> <DESCRIPTION>variableDescription</DESCRIPTION> <LONGDESCRIPTION>longDescription</LONGDESCRIPTION> <!-- Optional, set the text in the tooltips --> <UNIQUEVARIABLE>true/false</UNIQUEVARIABLE> <!-- Optional, default false; if true, this variable will have the same value over all the instance of this template for a given node --> <ITEM> <!-- Only for SELECT and SELECT1, list of selectable values --> <VALUE>value</VALUE> <!-- value that will be put in the template--> <LABEL>humanReadableText</LABEL> <!-- value displayed in the web interface --> </ITEM> <CONSTRAINT> <!-- Optional, defines some constraints on values --> <DEFAULT>defaultValue</DEFAULT> <!-- Optional; Defines a default value --> <TYPE>variableType</TYPE> <!-- Optional; default string; variable type --> <MAYBEEMPTY>true/false</MAYBEEMPTY> <!-- Optional; default false; defines if the variable is optional or not; only for the INPUT variable --> <REGEX error="errorMsg">regex</REGEX> <!-- Optional; only for the INPUT variable; efine a regular expression the variable should match, and an optional error message --> <PASSWORDHASH>hashtype</PASSWORDHASH> <!-- Optional; only for the password TYPE variable; define the way a password will be handled (hashed or not, hash types allowed ...) --> </CONSTRAINT> </SELECT1/SELECT/INPUT>
Note: It is possible to inline LABEL and VALUE in the ITEM tag
<ITEM label="Red" value="red"/>
is equivalent to
<ITEM> <LABEL>Red</LABEL> <VALUE>red</VALUE> </ITEM>
Note | |
---|---|
INPUT fields are automatically escaped, meaning any quote will be written in the policies as \" ; and any backslash will be written as \\ |
- string : any string is accepted (no specific displayer)
- textarea : accept any strings, but use a textarea in place of the input text.
- perm : display a matrix of read/write/execute by user/group/all
- integer : only accept integers
- datetime : display a JQuery calendar and check date format
- boolean : display a checkbox
- mail : only accept emails
- ip : only accept ips. Before Rudder 3.1.14, 3.2.7 and 4.0.0, "ip" was accepting only IPv4 ip. Since these releases, it accepts both IPv4 and IPv6 format. <br />
- ipv4 [since Rudder 3.1.14, 3.2.7, 4.0.0]: only accept IPv4 formatedt IPs
- ipv6 [since Rudder 3.1.14, 3.2.7, 4.0.0]: only accept IPv6 formatted IPs
- size-<unit> : (size-b, size-kb, size-mb, size-gb ou size-tb)
- raw : the content of this field will not be escaped when written in the promises (Rudder >= 2.6)
- password : the content of this field will be handled as a password, and thus be hidden and transformed if necessary (see "Password handling" below) (Rudder >= 2.6)