Project

General

Profile

« Previous | Next » 

Revision f9daef79

Added by Benoît PECCATTE over 6 years ago

Fixes #11120: Review parameters text in technique parameters

View differences:

techniques/applications/packageManagement/1.0/metadata.xml
<TECHNIQUE name="Packages">
<DESCRIPTION>This technique operates on individual packages.
It will ensure that the defined packages are in the desired state using the appropriate package manager.</DESCRIPTION>
It will ensure that the defined packages are in the desired state (installed or removed) using the appropriate package manager.</DESCRIPTION>
<MULTIINSTANCE>true</MULTIINSTANCE>
<COMPATIBLE>
techniques/applications/packageManagement/1.1/metadata.xml
<TECHNIQUE name="Packages">
<DESCRIPTION>This technique operates on individual packages.
It will ensure that the defined packages are in the desired state using the appropriate package manager.</DESCRIPTION>
It will ensure that the defined packages are in the desired state (installed or removed) using the appropriate package manager.</DESCRIPTION>
<MULTIINSTANCE>true</MULTIINSTANCE>
<COMPATIBLE>
techniques/fileConfiguration/fileManagement/4.0/metadata.xml
-->
<TECHNIQUE name="File and directory basics">
<DESCRIPTION>Make sure that files and folders exist, and set their permissions</DESCRIPTION>
<DESCRIPTION>Make sure that files and directories exist, and set their permissions</DESCRIPTION>
<MULTIINSTANCE>true</MULTIINSTANCE>
<COMPATIBLE>
......
<SECTIONS>
<SECTION name="File to manage" multivalued="true">
<SECTION name="File" multivalued="false" component="true" componentKey="FILE_AND_FOLDER_MANAGEMENT_PATH">
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_PATH</NAME>
<DESCRIPTION>Path</DESCRIPTION>
</INPUT>
</SECTION>
<SELECT1>
<NAME>FILE_AND_FOLDER_MANAGEMENT_ACTION</NAME>
<DESCRIPTION>Set action on file or folder</DESCRIPTION>
<ITEM>
<VALUE>none</VALUE>
<LABEL>Do nothing</LABEL>
</ITEM>
<ITEM>
<VALUE>file</VALUE>
<LABEL>Create an empty file</LABEL>
</ITEM>
<ITEM>
<VALUE>dir</VALUE>
<LABEL>Create an empty directory</LABEL>
</ITEM>
<ITEM>
<VALUE>symlink</VALUE>
<LABEL>Create a symbolic link</LABEL>
</ITEM>
<ITEM>
<VALUE>copy</VALUE>
<LABEL>Copy from local file</LABEL>
</ITEM>
<ITEM>
<VALUE>clean</VALUE>
<LABEL>Clean (see below)</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>none</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<!-- We had to keep the name FILE_AND_FOLDER_MANAGEMENT_SYMLINK_SOURCE so that people could migrate from previous version automatically-->
<NAME>FILE_AND_FOLDER_MANAGEMENT_SYMLINK_SOURCE</NAME>
<DESCRIPTION>Source for symbolic link or local copy</DESCRIPTION>
<LONGDESCRIPTION>If a symbolic link is to be created or a local file copied, please specify its source here</LONGDESCRIPTION>
<CONSTRAINT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<SELECT1>
<NAME>FILE_AND_FOLDER_MANAGEMENT_SYMLINK_ENFORCE</NAME>
<DESCRIPTION>Force symlink to be created</DESCRIPTION>
<LONGDESCRIPTION>By default, the symlink won't be created if it replaces a file or folder with the same name. With this option, you can force Rudder to create the symlink to replace existing files or folders</LONGDESCRIPTION>
<ITEM>
<VALUE>false</VALUE>
<LABEL>No, don't create the symlink if a file or folder with the same name already exists</LABEL>
</ITEM>
<ITEM>
<VALUE>true</VALUE>
<LABEL>Yes, force the creation of the symlink. </LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</SELECT1>
<SECTION name="Permissions" multivalued="false" component="true" componentKey="FILE_AND_FOLDER_MANAGEMENT_PATH" displayPriority="low">
<SELECT1>
<NAME>FILE_AND_FOLDER_MANAGEMENT_CHECK_PERMISSIONS</NAME>
<DESCRIPTION>Set permissions</DESCRIPTION>
<ITEM>
<VALUE>false</VALUE>
<LABEL>No, don't change any permissions</LABEL>
</ITEM>
<ITEM>
<VALUE>true</VALUE>
<LABEL>Yes, enforce permissions described below</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_PERM</NAME>
<DESCRIPTION>File mode</DESCRIPTION>
<CONSTRAINT>
<TYPE>perm</TYPE>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_OWNER</NAME>
<DESCRIPTION>File Owner</DESCRIPTION>
<CONSTRAINT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_GROUP</NAME>
<DESCRIPTION>File Group</DESCRIPTION>
<CONSTRAINT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<SELECT1>
<NAME>FILE_AND_FOLDER_MANAGEMENT_RECURSIVE</NAME>
<DESCRIPTION>Set these permissions</DESCRIPTION>
<ITEM>
<VALUE>1</VALUE>
<LABEL>On this path only</LABEL>
</ITEM>
<ITEM>
<VALUE>inf</VALUE>
<LABEL>Recursively from this path</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>1</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_SUID</NAME>
<DESCRIPTION>Set SetUID bit?</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_SGID</NAME>
<DESCRIPTION>Set SetGID bit?</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Post-modification hook" multivalued="false" component="true" componentKey="FILE_AND_FOLDER_MANAGEMENT_PATH" displayPriority="low">
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_POST_HOOK_RUN</NAME>
<DESCRIPTION>Should the command(s) below be run if any modifications are made on the path above?</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_POST_HOOK_COMMAND</NAME>
<DESCRIPTION>Command(s) to run</DESCRIPTION>
<LONGDESCRIPTION>List of shell-compatible statements to be executed. Multiple commands may be specified on separate lines.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="File cleaning options" multivalued="false" component="true" componentKey="FILE_AND_FOLDER_MANAGEMENT_PATH">
<SELECT1>
<DESCRIPTION>Deletion operation</DESCRIPTION>
<NAME>FILE_AND_FOLDER_DELETION_OPTION</NAME>
<ITEM>
<VALUE>none</VALUE>
<LABEL>This file or directory only</LABEL>
</ITEM>
<ITEM>
<VALUE>single</VALUE>
<LABEL>This file or directory content only</LABEL>
</ITEM>
<ITEM>
<VALUE>full</VALUE>
<LABEL>Everything in this directory (full recursion)</LABEL>
</ITEM>
<ITEM>
<VALUE>exterminate</VALUE>
<LABEL>Everything in this directory and the directory itself</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>none</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<DESCRIPTION>File selection pattern</DESCRIPTION>
<LONGDESCRIPTION>A regular expression to use as a pattern</LONGDESCRIPTION>
<NAME>FILE_AND_FOLDER_DELETION_PATTERN</NAME>
<CONSTRAINT>
<DEFAULT>.*</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<DESCRIPTION>Suppress if older than (days)</DESCRIPTION>
<LONGDESCRIPTION>A time to live for the object(s). 0 means everything without any time constraint</LONGDESCRIPTION>
<NAME>FILE_AND_FOLDER_DELETION_DAYS</NAME>
<CONSTRAINT>
<DEFAULT>0</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="File" multivalued="false" component="true" componentKey="FILE_AND_FOLDER_MANAGEMENT_PATH">
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_PATH</NAME>
<DESCRIPTION>Full path of the file or directory to manage</DESCRIPTION>
</INPUT>
<SELECT1>
<NAME>FILE_AND_FOLDER_MANAGEMENT_ACTION</NAME>
<DESCRIPTION>Action on missing file or directory</DESCRIPTION>
<ITEM>
<VALUE>none</VALUE>
<LABEL>Do nothing</LABEL>
</ITEM>
<ITEM>
<VALUE>file</VALUE>
<LABEL>Create an empty file if it doesn't exist</LABEL>
</ITEM>
<ITEM>
<VALUE>dir</VALUE>
<LABEL>Create an empty directory</LABEL>
</ITEM>
<ITEM>
<VALUE>symlink</VALUE>
<LABEL>Create a symbolic link</LABEL>
</ITEM>
<ITEM>
<VALUE>copy</VALUE>
<LABEL>Copy from local file</LABEL>
</ITEM>
<ITEM>
<VALUE>clean</VALUE>
<LABEL>Clean (see File cleaning options)</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>none</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<!-- We had to keep the name FILE_AND_FOLDER_MANAGEMENT_SYMLINK_SOURCE so that people could migrate from previous version automatically-->
<NAME>FILE_AND_FOLDER_MANAGEMENT_SYMLINK_SOURCE</NAME>
<DESCRIPTION>Source for symbolic link or local copy</DESCRIPTION>
<LONGDESCRIPTION>If a symbolic link is to be created or a local file copied, please specify its source here</LONGDESCRIPTION>
<CONSTRAINT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<SELECT1>
<NAME>FILE_AND_FOLDER_MANAGEMENT_SYMLINK_ENFORCE</NAME>
<DESCRIPTION>Force symlink to be created</DESCRIPTION>
<LONGDESCRIPTION>By default, the symlink won't be created if it replaces a file or directory with the same name. With this option, you can force Rudder to create the symlink to replace existing files or directories</LONGDESCRIPTION>
<ITEM>
<VALUE>false</VALUE>
<LABEL>No, don't create the symlink if a file or directory with the same name already exists</LABEL>
</ITEM>
<ITEM>
<VALUE>true</VALUE>
<LABEL>Yes, force the creation of the symlink. </LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</SELECT1>
</SECTION>
<SECTION name="Permissions" multivalued="false" component="true" componentKey="FILE_AND_FOLDER_MANAGEMENT_PATH" displayPriority="low">
<SELECT1>
<NAME>FILE_AND_FOLDER_MANAGEMENT_CHECK_PERMISSIONS</NAME>
<DESCRIPTION>Force permissions</DESCRIPTION>
<ITEM>
<VALUE>false</VALUE>
<LABEL>No, don't change any permissions</LABEL>
</ITEM>
<ITEM>
<VALUE>true</VALUE>
<LABEL>Yes, enforce permissions described below</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_OWNER</NAME>
<DESCRIPTION>File owner</DESCRIPTION>
<CONSTRAINT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_GROUP</NAME>
<DESCRIPTION>File group</DESCRIPTION>
<CONSTRAINT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_PERM</NAME>
<DESCRIPTION>File mode</DESCRIPTION>
<CONSTRAINT>
<TYPE>perm</TYPE>
</CONSTRAINT>
</INPUT>
<SELECT1>
<NAME>FILE_AND_FOLDER_MANAGEMENT_RECURSIVE</NAME>
<DESCRIPTION>Set these permissions</DESCRIPTION>
<ITEM>
<VALUE>1</VALUE>
<LABEL>On this path only</LABEL>
</ITEM>
<ITEM>
<VALUE>inf</VALUE>
<LABEL>Recursively from this path</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>1</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_SUID</NAME>
<DESCRIPTION>SetUID bit</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_SGID</NAME>
<DESCRIPTION>SetGID bit</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="File cleaning options" multivalued="false" component="true" componentKey="FILE_AND_FOLDER_MANAGEMENT_PATH">
<SELECT1>
<DESCRIPTION>Clean method</DESCRIPTION>
<NAME>FILE_AND_FOLDER_DELETION_OPTION</NAME>
<ITEM>
<VALUE>none</VALUE>
<LABEL>Delete this file or this directory if empty</LABEL>
</ITEM>
<ITEM>
<VALUE>single</VALUE>
<LABEL>Delete this directory's direct content only</LABEL>
</ITEM>
<ITEM>
<VALUE>full</VALUE>
<LABEL>Delete everything in this directory recursively</LABEL>
</ITEM>
<ITEM>
<VALUE>exterminate</VALUE>
<LABEL>Delete everything in this directory recursively and the directory itself</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>none</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<DESCRIPTION>File deletion pattern</DESCRIPTION>
<LONGDESCRIPTION>A regular expression to use as a pattern</LONGDESCRIPTION>
<NAME>FILE_AND_FOLDER_DELETION_PATTERN</NAME>
<CONSTRAINT>
<DEFAULT>.*</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<DESCRIPTION>Delete if older than (days)</DESCRIPTION>
<LONGDESCRIPTION>A time to live for the object(s). 0 means everything without any time constraint</LONGDESCRIPTION>
<NAME>FILE_AND_FOLDER_DELETION_DAYS</NAME>
<CONSTRAINT>
<DEFAULT>0</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Post-modification hook" multivalued="false" component="true" componentKey="FILE_AND_FOLDER_MANAGEMENT_PATH" displayPriority="low">
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_POST_HOOK_RUN</NAME>
<DESCRIPTION>Enable post-modification hook</DESCRIPTION>
<LONGDESCRIPTION>Should the command(s) below be run if any modifications are made on the path above?</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>FILE_AND_FOLDER_MANAGEMENT_POST_HOOK_COMMAND</NAME>
<DESCRIPTION>Command(s) to run</DESCRIPTION>
<LONGDESCRIPTION>List of shell-compatible statements to be executed. Multiple commands may be specified on separate lines.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
</SECTION>
</SECTIONS>
techniques/fileConfiguration/fileSecurity/filesPermissions/2.1/metadata.xml
-->
<TECHNIQUE name="File permissions">
<DESCRIPTION>Set the permissions on files</DESCRIPTION>
<DESCRIPTION>Set permissions on files</DESCRIPTION>
<MULTIINSTANCE>true</MULTIINSTANCE>
<BUNDLES>
......
<SECTION name="File permissions" multivalued="true" component="true" componentKey="FILEPERMISSION_FILENAME">
<INPUT>
<NAME>FILEPERMISSION_FILENAME</NAME>
<DESCRIPTION>File to set permissions on</DESCRIPTION>
<DESCRIPTION>Full path of the file to manage</DESCRIPTION>
<LONGDESCRIPTION>This is the full path of the file on the node</LONGDESCRIPTION>
</INPUT>
<INPUT>
<NAME>FILEPERMISSION_IGNORE_ABSENTFILE</NAME>
<DESCRIPTION>Ignore file or directory if it does not exist</DESCRIPTION>
<DESCRIPTION>Ignore absent</DESCRIPTION>
<LONGDESCRIPTION>Don't report errors if file or directory does not exist</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
......
</INPUT>
<INPUT>
<NAME>FILEPERMISSION_RECURSION</NAME>
<DESCRIPTION>In case the path is a directory, the permissions should be adjusted recursively</DESCRIPTION>
<DESCRIPTION>Apply recursively</DESCRIPTION>
<DESCRIPTION>If the path is a directory, the permissions will be adjusted recursively</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
......
</INPUT>
<INPUT>
<NAME>FILEPERMISSION_EDITUSER</NAME>
<DESCRIPTION>Set file owner?</DESCRIPTION>
<DESCRIPTION>Set file owner</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
......
</INPUT>
<INPUT>
<NAME>FILEPERMISSION_EDITGROUP</NAME>
<DESCRIPTION>Set file group?</DESCRIPTION>
<DESCRIPTION>Set file group</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
......
</INPUT>
<INPUT>
<NAME>FILEPERMISSION_EDITMODE</NAME>
<DESCRIPTION>Set file permissions?</DESCRIPTION>
<DESCRIPTION>Set file mode</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
......
</INPUT>
<INPUT>
<NAME>FILEPERMISSION_MODE</NAME>
<DESCRIPTION>File permissions</DESCRIPTION>
<DESCRIPTION>File mode</DESCRIPTION>
<CONSTRAINT>
<TYPE>perm</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
......
</INPUT>
<INPUT>
<NAME>FILEPERMISSION_SUID</NAME>
<DESCRIPTION>Set SetUID bit?</DESCRIPTION>
<DESCRIPTION>SetUID bit</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
......
</INPUT>
<INPUT>
<NAME>FILEPERMISSION_SGID</NAME>
<DESCRIPTION>Set SetGID bit?</DESCRIPTION>
<DESCRIPTION>SetGID bit</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
techniques/fileDistribution/category.xml
<xml>
<name>Distributing files</name>
<description>
Send files to servers.
Manage node files.
</description>
</xml>
techniques/fileDistribution/checkGenericFileContent/7.0/metadata.xml
-->
<TECHNIQUE name="File content">
<DESCRIPTION>Checks if a file matches a given content and if not, updates it</DESCRIPTION>
<DESCRIPTION>Checks if a file matches a given content and if not, updates it.
This technique can edit file lines, file sections, remove or add content, and change file permissions.</DESCRIPTION>
<MULTIINSTANCE>true</MULTIINSTANCE>
<COMPATIBLE>
......
<TRACKINGVARIABLE>
<SAMESIZEAS>GENERIC_FILE_CONTENT_PATH</SAMESIZEAS>
</TRACKINGVARIABLE>
</TRACKINGVARIABLE>
<SECTIONS>
<SECTION name="File to manage" multivalued="true">
<SECTION name="File" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_PATH</NAME>
<DESCRIPTION>Path or file name</DESCRIPTION>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ENFORCE</NAME>
<DESCRIPTION>Enforce the content of the file</DESCRIPTION>
<LONGDESCRIPTION>If yes, the file will exactly contains what is in the "Content of the file" field, otherwise the content will be added, leaving the rest of the file untouched</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_DELETION_BOOLEAN</NAME>
<DESCRIPTION>Enable the deletion of lines using a regexp</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_CREATE_BOOLEAN</NAME>
<DESCRIPTION>Enable the creation of the file if it doesn't exist</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>true</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ENFORCE_CREATE_ONLY_BOOLEAN</NAME>
<DESCRIPTION>Enforce the content of the file only at creation</DESCRIPTION>
<LONGDESCRIPTION>If true, the file will be created if it doesn't exist, and only then. If the file already exists, it will be left untouched.
</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_MODIFICATION_BOOLEAN</NAME>
<DESCRIPTION>Enable the replacement of lines using a regexp</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ONLY_ZONE_BOOLEAN</NAME>
<DESCRIPTION>Limit file modification to a zone of the file</DESCRIPTION>
<LONGDESCRIPTION>If yes, all modification in the file will be only in the zone described in section "Enforce content only in zone", except for "Enforce the content of a section in the file". If you select also "Migrate lines to zone", every line added in this zone will be removed from the rest of the file (and section moved to this zone), otherwise the rest of the file remains untouched</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="File content" component="false">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_PAYLOAD</NAME>
<DESCRIPTION>Content of the file</DESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Line deletion regular expressions" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_DELETION_REGEXP</NAME>
<DESCRIPTION>Regular expression</DESCRIPTION>
<LONGDESCRIPTION>Regular expression used to match a line to be deleted</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<DEFAULT>deleteme.*</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Line replacement regular expressions" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_MODIFICATION_REGEXP</NAME>
<DESCRIPTION>Regular expression</DESCRIPTION>
<LONGDESCRIPTION>Regular expression used to match a line to be replaced. This regular expression must not match the string used as a replacement. For example, to set kernel.shmmax = 5678, the Regular expression would be kernel.shmmax = (?!5678$).* and the string used as remplacement remplacement kernel.shmmax = 5678</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<DEFAULT>replaceme.*</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_MODIFICATION_DESTINATION</NAME>
<DESCRIPTION>String used as a replacement</DESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<DEFAULT></DEFAULT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Enforce content by section" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_SECTION_MANAGEMENT</NAME>
<DESCRIPTION>Enforce the content of a section in the file</DESCRIPTION>
<LONGDESCRIPTION>Match a portion of the file between two lines (header/footer) and enforce the content between those lines. If they don't exist, the whole section will be added at the end of the file.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_SECTION_HEADER</NAME>
<DESCRIPTION>Header of the section to enforce</DESCRIPTION>
<LONGDESCRIPTION>First line of the section to enforce content in. If not found, this line and the section content will be added at the end of the file. If left empty, no sections will be edited.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_SECTION_CONTENT</NAME>
<DESCRIPTION>Content of the section</DESCRIPTION>
<LONGDESCRIPTION>The exact content of the section (without the header and footer).</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_SECTION_FOOTER</NAME>
<DESCRIPTION>Footer of the section to enforce</DESCRIPTION>
<LONGDESCRIPTION>Last line of the section to enforce content in. If not found, this line and the section content will be added at the end of the file. If left empty, no sections will be edited.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="File to manage" multivalued="true">
<SECTION name="File" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_PATH</NAME>
<DESCRIPTION>Full path of the file to manage</DESCRIPTION>
<LONGDESCRIPTION>This is the full path of the file on the agent</LONGDESCRIPTION>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_CREATE_BOOLEAN</NAME>
<DESCRIPTION>Create the file if it doesn't exist</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>true</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ENFORCE_CREATE_ONLY_BOOLEAN</NAME>
<DESCRIPTION>Create only</DESCRIPTION>
<LONGDESCRIPTION>If true, the file will be created if it doesn't exist, and only then. If the file already exists, it will be left untouched.
</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="File content" component="false">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ENFORCE</NAME>
<DESCRIPTION>Replace content</DESCRIPTION>
<LONGDESCRIPTION>If true, the file will exactly contain what is in the "Content of the file" field, otherwise the content will be added, leaving the rest of the file untouched</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_PAYLOAD</NAME>
<DESCRIPTION>Content of the file</DESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Enforce content by section" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_SECTION_MANAGEMENT</NAME>
<DESCRIPTION>Enable file content in a section</DESCRIPTION>
<LONGDESCRIPTION>Match a portion of the file between two lines (header/footer) and enforce the content between those lines. If they don't exist, the whole section will be added at the end of the file.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_SECTION_HEADER</NAME>
<DESCRIPTION>Section header</DESCRIPTION>
<LONGDESCRIPTION>First line of the section to enforce content in. If not found, this line and the section content will be added at the end of the file. If left empty, no sections will be edited.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_SECTION_CONTENT</NAME>
<DESCRIPTION>Section content</DESCRIPTION>
<LONGDESCRIPTION>The exact content of the section (without the header and footer).</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_SECTION_FOOTER</NAME>
<DESCRIPTION>Section footer</DESCRIPTION>
<LONGDESCRIPTION>Last line of the section to enforce content in. If not found, this line and the section content will be added at the end of the file. If left empty, no sections will be edited.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Line deletion regular expressions" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_DELETION_BOOLEAN</NAME>
<DESCRIPTION>Enable line deletion</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_DELETION_REGEXP</NAME>
<DESCRIPTION>Deletion regular expression</DESCRIPTION>
<LONGDESCRIPTION>Regular expression used to match a line to be deleted</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<DEFAULT>deleteme.*</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Line replacement regular expressions" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_MODIFICATION_BOOLEAN</NAME>
<DESCRIPTION>Enable line replacement</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_MODIFICATION_REGEXP</NAME>
<DESCRIPTION>Replacement regular expression</DESCRIPTION>
<LONGDESCRIPTION>Regular expression used to match a line to be replaced. This regular expression must not match the string used as a replacement. For example, to set kernel.shmmax = 5678, the Regular expression would be kernel.shmmax = (?!5678$).* and the string used as remplacement remplacement kernel.shmmax = 5678</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<DEFAULT>replaceme.*</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_MODIFICATION_DESTINATION</NAME>
<DESCRIPTION>Replacement string</DESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<DEFAULT></DEFAULT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Zone limitation">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ONLY_ZONE_BOOLEAN</NAME>
<DESCRIPTION>Limit all file modifications to a zone</DESCRIPTION>
<LONGDESCRIPTION>If yes, all modifications above file will be only in the zone described in section "Modify content only in zone", except for "Enforce content by section". If you select also "Migrate lines to the zone", every line added in this zone will be removed from the rest of the file (and section moved to this zone), otherwise the rest of the file remains untouched</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ZONE_HEADER</NAME>
<DESCRIPTION>Zone header</DESCRIPTION>
<LONGDESCRIPTION>If not found, this line and the section content will be added at the end of the file.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<DEFAULT>### Beginning of section managed by Rudder</DEFAULT>
</CONSTRAINT>
</INPUT>
<SECTION name="Enforce content only in zone">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ZONE_HEADER</NAME>
<DESCRIPTION>Begin marker of the zone to manage</DESCRIPTION>
<LONGDESCRIPTION>If not found, this line and the section content will be added at the end of the file.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<DEFAULT>### Beginning of section managed by Rudder</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ZONE_FOOTER</NAME>
<DESCRIPTION>Zone footer</DESCRIPTION>
<LONGDESCRIPTION>If not found, this line and the section content will be added at the end of the file. If left empty, end of file will be assumed</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
<DEFAULT>### End of section managed by Rudder</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_ZONE_FOOTER</NAME>
<DESCRIPTION>End marker of the zone to manage</DESCRIPTION>
<LONGDESCRIPTION>If not found, this line and the section content will be added at the end of the file. If left empty, end of file will be assumed</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
<DEFAULT>### End of section managed by Rudder</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_MIGRATE_TO_ZONE_BOOLEAN</NAME>
<DESCRIPTION>Migrate lines to the zone</DESCRIPTION>
<LONGDESCRIPTION>If yes, all lines defined in "Content of the file" field and "Enforce content by section" section will be added in the zone, and removed from the rest of the file, otherwise only the zone will be edited, leaving the rest of the file untouched (and allowing the possibility of duplicated lines). The lines modifications and lines deletion will still apply only in the zone if zone modification is defined.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_MIGRATE_TO_ZONE_BOOLEAN</NAME>
<DESCRIPTION>Migrate all the lines added to the zone from the rest of the file</DESCRIPTION>
<LONGDESCRIPTION>If yes, all lines defined in "Content of the file" field and "Enforce content by section" section will be added in the zone, and removed from the rest of the file, otherwise only the zone will be edited, leaving the rest of the file untouched (and allowing the possibility of duplicated lines). The lines modifications and lines deletion will still apply only in the zone if zone modification is defined.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Permission adjustment" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_PERMISSION_ADJUSTMENT</NAME>
<DESCRIPTION>Set explicit permissions to apply on the file</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_OWNER</NAME>
<DESCRIPTION>Owner of the file</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_GROUP</NAME>
<DESCRIPTION>Group of the file</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_PERM</NAME>
<DESCRIPTION>Permissions to apply on the file</DESCRIPTION>
<CONSTRAINT>
<TYPE>perm</TYPE>
<DEFAULT>644</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Post-modification hook" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_POST_HOOK_RUN</NAME>
<DESCRIPTION>Should the command(s) below be run if any modifications are made on the path above?</DESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_POST_HOOK_COMMAND</NAME>
<DESCRIPTION>Command to run after any modifications</DESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
</SECTION>
<SECTION name="Permission adjustment" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_PERMISSION_ADJUSTMENT</NAME>
<DESCRIPTION>Force permissions</DESCRIPTION>
<LONGDESCRIPTION>If false, file permissions won't be touched</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_OWNER</NAME>
<DESCRIPTION>File owner</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_GROUP</NAME>
<DESCRIPTION>File group</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_PERM</NAME>
<DESCRIPTION>File mode</DESCRIPTION>
<CONSTRAINT>
<TYPE>perm</TYPE>
<DEFAULT>640</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Post-modification hook" component="true" componentKey="GENERIC_FILE_CONTENT_PATH">
<INPUT>
<NAME>GENERIC_FILE_CONTENT_POST_HOOK_RUN</NAME>
<DESCRIPTION>Enable post-modification hook</DESCRIPTION>
<LONGDESCRIPTION>Should the command(s) below be run if any modifications are made on the path above?</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>GENERIC_FILE_CONTENT_POST_HOOK_COMMAND</NAME>
<DESCRIPTION>Command(s) to run</DESCRIPTION>
<LONGDESCRIPTION>List of shell-compatible statements to be executed. Multiple commands may be specified on separate lines.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
</SECTION>
</SECTIONS>
</TECHNIQUE>
techniques/fileDistribution/copyGitFile/2.1/metadata.xml
-->
<TECHNIQUE name="File download (Rudder server)">
<DESCRIPTION>This technique ensure that some files are the copy of files on the shared folder of the Rudder Root Server, and let you optionally execute a command if the content of the file was modified</DESCRIPTION>
<DESCRIPTION>This technique downloads a file from Rudder server.
It ensures that some files are the copy of files on the shared folder of the Rudder Root Server, and optionally allows running a command in case a change was made.</DESCRIPTION>
<MULTIINSTANCE>true</MULTIINSTANCE>
<COMPATIBLE>
......
</TRACKINGVARIABLE>
<SYSTEMVARS>
<NAME>SHARED_FILES_FOLDER</NAME>
<NAME>SHARED_FILES_FOLDER</NAME>
</SYSTEMVARS>
<SECTIONS>
<SECTION name="Copy file and PostHook" multivalued="true">
<SECTION name="Copy file" multivalued="false" component="true" componentKey="COPYFILE_NAME">
<INPUT>
<NAME>COPYFILE_NAME</NAME>
<DESCRIPTION>Path of the file to be copied</DESCRIPTION>
<LONGDESCRIPTION>This is the relative path of the file/folder to be copied, on the Rudder policy server</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>sharedfile</TYPE>
</CONSTRAINT>
</INPUT>
<SECTION name="Exclusion/Inclusion" multivalued="false" component="false" displayPriority="low">
<SELECT1>
<NAME>COPYFILE_EXCLUDE_INCLUDE_OPTION</NAME>
<DESCRIPTION>Exclude or include files from the copy</DESCRIPTION>
<LONGDESCRIPTION>Limit list of files to copy (include) or don't copy some files matching a pattern (exclude). Only applies if the path to copy from is a directory.</LONGDESCRIPTION>
<ITEM>
<VALUE>none</VALUE>
<LABEL>No include/exclude rules</LABEL>
</ITEM>
<ITEM>
<VALUE>exclude</VALUE>
<LABEL>Exclude file(s) matching</LABEL>
</ITEM>
<ITEM>
<VALUE>include</VALUE>
<LABEL>Include file(s) matching</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>none</DEFAULT>
</CONSTRAINT>
</SELECT1>
<SECTION name="Copy a file" multivalued="true">
<SECTION name="Copy file" multivalued="false" component="true" componentKey="COPYFILE_NAME">
<INPUT>
<NAME>COPYFILE_EXCLUDE_INCLUDE</NAME>
<DESCRIPTION>File name patterns to exclude or include</DESCRIPTION>
<LONGDESCRIPTION>If one or several files should be excluded or included in this copy, please insert their name or a regular expression matching the appropriate file name(s))</LONGDESCRIPTION>
<CONSTRAINT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
<NAME>COPYFILE_NAME</NAME>
<DESCRIPTION>Relative path of the source file</DESCRIPTION>
<LONGDESCRIPTION>This is path of the file/folder to be copied on the Rudder policy server relative to /var/rudder/configuration-repository/shared-files</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>sharedfile</TYPE>
</CONSTRAINT>
</INPUT>
</SECTION>
<INPUT>
<NAME>COPYFILE_DESTINATION</NAME>
<DESCRIPTION>Full path of destination file or directory</DESCRIPTION>
<LONGDESCRIPTION>This is the absolute path of the file/folder on the managed node</LONGDESCRIPTION>
</INPUT>
<SELECT1>
<NAME>COPYFILE_RECURSION</NAME>
<DESCRIPTION>What should be the recursion level of the copy</DESCRIPTION>
<ITEM>
<VALUE>0</VALUE>
<LABEL>Only this file</LABEL>
</ITEM>
<ITEM>
<VALUE>1</VALUE>
<LABEL>The whole content of the folder</LABEL>
</ITEM>
<ITEM>
<VALUE>inf</VALUE>
<LABEL>The folder, its content, and all the subfolders</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>0</DEFAULT>
</CONSTRAINT>
</SELECT1>
<SELECT1>
<NAME>COPYFILE_PURGE</NAME>
<DESCRIPTION>Purge the destination directory</DESCRIPTION>
<LONGDESCRIPTION>If this is enabled, all other content than the source in the destination directory will be purged.</LONGDESCRIPTION>
<ITEM>
<VALUE>false</VALUE>
<LABEL>False</LABEL>
</ITEM>
<ITEM>
<VALUE>true</VALUE>
<LABEL>True</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</SELECT1>
<SELECT1>
<NAME>COPYFILE_COMPARE_METHOD</NAME>
<DESCRIPTION>File comparison method</DESCRIPTION>
<LONGDESCRIPTION>This is the method to use for comparison between source and destination files.
<INPUT>
<NAME>COPYFILE_DESTINATION</NAME>
<DESCRIPTION>Full path of the destination file or directory</DESCRIPTION>
<LONGDESCRIPTION>This is the absolute path of the file/folder on the managed node</LONGDESCRIPTION>
</INPUT>
<SECTION name="Exclusion/Inclusion" multivalued="false" component="false" displayPriority="low">
<SELECT1>
<NAME>COPYFILE_EXCLUDE_INCLUDE_OPTION</NAME>
<DESCRIPTION>Exclude or include files from the copy</DESCRIPTION>
<LONGDESCRIPTION>Limit list of files to copy (include) or don't copy some files matching a pattern (exclude). Only applies if the path to copy from is a directory.</LONGDESCRIPTION>
<ITEM>
<VALUE>none</VALUE>
<LABEL>No include/exclude rules</LABEL>
</ITEM>
<ITEM>
<VALUE>exclude</VALUE>
<LABEL>Exclude file(s) matching</LABEL>
</ITEM>
<ITEM>
<VALUE>include</VALUE>
<LABEL>Include file(s) matching</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>none</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<NAME>COPYFILE_EXCLUDE_INCLUDE</NAME>
<DESCRIPTION>Pattern to exclude or include</DESCRIPTION>
<LONGDESCRIPTION>If one or several files should be excluded or included in this copy, please insert their name or a regular expression matching the appropriate file name(s))</LONGDESCRIPTION>
<CONSTRAINT>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
<SELECT1>
<NAME>COPYFILE_RECURSION</NAME>
<DESCRIPTION>Recursion level</DESCRIPTION>
<ITEM>
<VALUE>0</VALUE>
<LABEL>Only this file</LABEL>
</ITEM>
<ITEM>
<VALUE>1</VALUE>
<LABEL>Folder content</LABEL>
</ITEM>
<ITEM>
<VALUE>inf</VALUE>
<LABEL>Folder content and all the subcontent</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>0</DEFAULT>
</CONSTRAINT>
</SELECT1>
<SELECT1>
<NAME>COPYFILE_PURGE</NAME>
<DESCRIPTION>Purge destination directory</DESCRIPTION>
<LONGDESCRIPTION>If this is enabled, all other content than the source in the destination directory will be purged.</LONGDESCRIPTION>
<ITEM>
<VALUE>false</VALUE>
<LABEL>False</LABEL>
</ITEM>
<ITEM>
<VALUE>true</VALUE>
<LABEL>True</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</SELECT1>
<SELECT1>
<NAME>COPYFILE_COMPARE_METHOD</NAME>
<DESCRIPTION>File comparison method</DESCRIPTION>
<LONGDESCRIPTION>This is the method to use for comparison between source and destination files.
- "mtime" copies the file if the modification time of the source file is more recent than that of the promised file.
- "ctime" copies the file if the creation time of the source file is more recent than that of the promised file.
- "atime" copies the file if the modification time or creation time of the source file is more recent than that of the promised file. If the times are equal, a byte-for-byte comparison is done on the files to determine if it needs to be copied.
- "ctime" copies the file if the change time of the source file is more recent than that of the promised file.
- "atime" copies the file if the access time of the source file is more recent than that of the promised file.
- "exists" copies the file if the promised file does not already exist.
- "binary" copies the file if they are both plain files and a byte-for-byte comparison determines that they are different. If both are not plain files, the agent reverts to comparing the mtime and ctime of the files. If the source file is on a different machine (i.e., network copy), then hash is used instead to reduce network bandwidth.
- "binary" copies the file if they are both plain files and a byte-for-byte comparison determines that they are different. If both are not plain files, the agent reverts to "digest".
- "digest" copies the file if they are both plain files and a MD5 message digest comparison indicates that the files are different.
The "digest" option is set by default but may offer poor performance on large numbers (over 100) of file copies - in that case use "mtime" instead.</LONGDESCRIPTION>
<ITEM>
<VALUE>mtime</VALUE>
<LABEL>mtime</LABEL>
</ITEM>
<ITEM>
<VALUE>atime</VALUE>
<LABEL>atime</LABEL>
</ITEM>
<ITEM>
<VALUE>ctime</VALUE>
<LABEL>ctime</LABEL>
</ITEM>
<ITEM>
<VALUE>digest</VALUE>
<LABEL>digest</LABEL>
</ITEM>
<ITEM>
<VALUE>binary</VALUE>
<LABEL>binary</LABEL>
</ITEM>
<ITEM>
<VALUE>exists</VALUE>
<LABEL>exists</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>digest</DEFAULT>
</CONSTRAINT>
</SELECT1>
<INPUT>
<NAME>COPYFILE_OWNER</NAME>
<DESCRIPTION>Owner of the file</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_GROUP</NAME>
<DESCRIPTION>Group of the file</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_PERM</NAME>
<DESCRIPTION>Permissions to apply on the file</DESCRIPTION>
<CONSTRAINT>
<TYPE>perm</TYPE>
<DEFAULT>644</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_SUID</NAME>
<DESCRIPTION>Set SetUID bit?</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_SGID</NAME>
<DESCRIPTION>Set SetGID bit?</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_STICKY_FOLDER</NAME>
<DESCRIPTION>Apply the sticky bit to the whole folder? (caution, use with care)</DESCRIPTION>
<LONGDESCRIPTION>If set, and the path is a folder, and recursion is set to "The whole content of the folder", apply on the whole folder (won't apply to subfolders, for obvious security reasons).</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<ITEM>
<VALUE>mtime</VALUE>
<LABEL>mtime</LABEL>
</ITEM>
<ITEM>
<VALUE>atime</VALUE>
<LABEL>atime</LABEL>
</ITEM>
<ITEM>
<VALUE>ctime</VALUE>
<LABEL>ctime</LABEL>
</ITEM>
<ITEM>
<VALUE>digest</VALUE>
<LABEL>digest</LABEL>
</ITEM>
<ITEM>
<VALUE>binary</VALUE>
<LABEL>binary</LABEL>
</ITEM>
<ITEM>
<VALUE>exists</VALUE>
<LABEL>exists</LABEL>
</ITEM>
<CONSTRAINT>
<DEFAULT>digest</DEFAULT>
</CONSTRAINT>
</SELECT1>
</SECTION>
<INPUT>
<NAME>COPYFILE_OWNER</NAME>
<DESCRIPTION>File owner</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_GROUP</NAME>
<DESCRIPTION>File group</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_PERM</NAME>
<DESCRIPTION>File mode</DESCRIPTION>
<CONSTRAINT>
<TYPE>perm</TYPE>
<DEFAULT>640</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_SUID</NAME>
<DESCRIPTION>SetUID bit</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_SGID</NAME>
<DESCRIPTION>SetGID bit</DESCRIPTION>
<LONGDESCRIPTION>Note: The SetUID and SetGID bits will not be applied recursively, for obvious security reasons.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>COPYFILE_STICKY_FOLDER</NAME>
<DESCRIPTION>Sticky bit for folder (caution, use with care)</DESCRIPTION>
<LONGDESCRIPTION>If set, and the path is a folder, and recursion is set to "Folder content", apply on folder (won't apply to subfolders, for obvious security reasons).</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
<SECTION name="Post-modification hook" component="true" multivalued="false" componentKey="COPYFILE_NAME" displayPriority="low">
<INPUT>
<SECTION name="Post-modification hook" component="true" multivalued="false" componentKey="COPYFILE_NAME" displayPriority="low">
<INPUT>
<NAME>COPYFILE_POST_HOOK_RUN</NAME>
<DESCRIPTION>Should the command(s) below be run if any modifications (permission or overwriting) are made on the files above?</DESCRIPTION>
<DESCRIPTION>Enable post-modification hook</DESCRIPTION>
<LONGDESCRIPTION>Should the command(s) below be run if any modifications (permission or overwriting) are made on the files above?</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>boolean</TYPE>
<DEFAULT>false</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
</INPUT>
<INPUT>
<NAME>COPYFILE_POST_HOOK_COMMAND</NAME>
<DESCRIPTION>Command to run after any modifications</DESCRIPTION>
<DESCRIPTION>Command(s) to run</DESCRIPTION>
<LONGDESCRIPTION>List of shell-compatible statements to be executed. Multiple commands may be specified on separate lines.</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>textarea</TYPE>
<MAYBEEMPTY>true</MAYBEEMPTY>
</CONSTRAINT>
</INPUT>
</SECTION>
</SECTION>
</INPUT>
</SECTION>
</SECTION>
</SECTIONS>
</TECHNIQUE>
techniques/fileDistribution/downloadFile/3.0/metadata.xml
-->
<TECHNIQUE name="File download (HTTP)">
<DESCRIPTION>This technique downloads a file from a server.
<DESCRIPTION>This technique downloads a file from a HTTP server.
It takes a cURL compatible source (HTTP/FTP/...) and a destination on the target host.
If cURL is not available, it will try to use minicurl.pl, a LWP-based Perl script.
......
<SECTION name="Download a file" component="true" componentKey="DOWNLOADFILE_SOURCE">
<INPUT>
<NAME>DOWNLOADFILE_SOURCE</NAME>
<DESCRIPTION>URL to download file from</DESCRIPTION>
<DESCRIPTION>File URL</DESCRIPTION>
<LONGDESCRIPTION>For example http://server/file or ftp://server/file. cURL/miniperl will do its best to use what you pass to it as a URL. It is not trying to validate it as a syntactically correct URL by any means but is instead very liberal with what it accepts.</LONGDESCRIPTION>
</INPUT>
<INPUT>
<NAME>DOWNLOADFILE_DESTINATION</NAME>
<DESCRIPTION>Absolute path to download file to on a node</DESCRIPTION>
<DESCRIPTION>Full path of the downloaded file</DESCRIPTION>
<LONGDESCRIPTION>This path must be absolute, for example /home/foo/file or C:\foo\file</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
......
<!-- Second Section, Linux specific , index 10 -->
<SECTION name="Permissions (on UNIX systems)" component="true" componentKey="DOWNLOADFILE_SOURCE">
<INPUT>
<NAME>DOWNLOADFILE_MODE</NAME>
<DESCRIPTION>File permissions after download</DESCRIPTION>
<NAME>DOWNLOADFILE_USER</NAME>
<DESCRIPTION>File owner</DESCRIPTION>
<CONSTRAINT>
<TYPE>perm</TYPE>
<DEFAULT>740</DEFAULT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>DOWNLOADFILE_USER</NAME>
<DESCRIPTION>File owner (user)</DESCRIPTION>
<NAME>DOWNLOADFILE_GROUP</NAME>
<DESCRIPTION>File group</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
</CONSTRAINT>
</INPUT>
<INPUT>
<NAME>DOWNLOADFILE_GROUP</NAME>
<DESCRIPTION>File owner (group)</DESCRIPTION>
<NAME>DOWNLOADFILE_MODE</NAME>
<DESCRIPTION>File mode</DESCRIPTION>
<CONSTRAINT>
<DEFAULT>root</DEFAULT>
<TYPE>perm</TYPE>
<DEFAULT>640</DEFAULT>
</CONSTRAINT>
</INPUT>
</SECTION>
techniques/fileDistribution/manageKeyValueFile/1.0/metadata.xml
-->
<TECHNIQUE name="File content (key/value format)">
<DESCRIPTION>Manage keys-values in file</DESCRIPTION>
<DESCRIPTION>Manage key-value pairs in a file</DESCRIPTION>
<MULTIINSTANCE>true</MULTIINSTANCE>
<COMPATIBLE>
<OS>Every OS</OS>
......
<SECTION name="File" component="true" componentKey="MANAGE_KEY_VALUE_FILEPATH">
<INPUT>
<NAME>MANAGE_KEY_VALUE_FILEPATH</NAME>
<DESCRIPTION>Path of the file to manage</DESCRIPTION>
<DESCRIPTION>Full path of the file to manage</DESCRIPTION>
</INPUT>
<INPUT>
<NAME>MANAGE_KEY_VALUE_KEY</NAME>
<DESCRIPTION>Key to define</DESCRIPTION>
<DESCRIPTION>Key</DESCRIPTION>
<LONGDESCRIPTION>Key to define</LONGDESCRIPTION>
<CONSTRAINT>
<TYPE>string</TYPE>
</CONSTRAINT>
</INPUT>
<INPUT>
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff